Skip to content

Commit

Permalink
Introduce an emoji computed from trace ID in trace page titles
Browse files Browse the repository at this point in the history
> Dear colleague, are you talking about the shrimp trace or the baguette trace?

To help discussing about traces with coworkers when debugging issues,
referring to a unique and distinguishable emoji is good.

Signed-off-by: Anthony Ramine <nox@nox.paris>
  • Loading branch information
nox committed Apr 25, 2024
1 parent a2644f8 commit 2d46e31
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ export function TracePageHeaderFn(props: TracePageHeaderEmbedProps & { forwarded

return (
<header className="TracePageHeader">
<Helmet title={`${traceShortID}: ${trace.tracePageTitle} — Jaeger UI`} />
<Helmet title={`${trace.traceEmoji} ${traceShortID}: ${trace.tracePageTitle} — Jaeger UI`} />
<div className="TracePageHeader--titleRow">
{toSearch && (
<Link className="TracePageHeader--back" to={toSearch}>
Expand Down
26 changes: 26 additions & 0 deletions packages/jaeger-ui/src/model/trace-viewer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -80,3 +80,29 @@ export function getTracePageTitle(spans: Span[]): string {
? `${tracePageHeaderParts.operationName} (${tracePageHeaderParts.serviceName})`
: '';
}

export function getTraceEmoji(spans: Span[]): string {
if (!spans.length) return '';

// prettier-ignore
const emojiSet = [
'🐶', '🐱', '🐭', '🦊', '🐨', '🐮', '🐷', '🐸', '🐵', '🐔', '🐤', '🦆',
'🦉', '🐝', '🦋', '🐢', '🦀', '🐳', '🐊', '🦒', '🪶', '🦩', '🐉', '🍄',
'🌸', '🌜', '🔥', '🌪️', '💧', '🍏', '🍊', '🍉', '🍒', '🥦', '🌽', '🍠',
'🥐', '🥖', '🥚', '🧀', '🍗', '🍟', '🍕', '🍣', '🍤', '🍙', '🍪', '⚽️',
'🏀', '🥎', '🎹', '🎲', '🎮', '🧩', '🚗', '🚲', '🚂', '⛺️', '📞', '⏰',
'🔌', '💎', '🪚', '🧲', '🧬', '🎀', '📬', '📘', '🩷', '🎵', '🏴', '🚩',
];

const traceID = spans[0].traceID;
let index = 0;

if (traceID) {
for (let i = 0; i < traceID.length; i++) {
const hexChar = traceID.slice(i, i + 1);
index = (index * 16 + parseInt(hexChar, 16)) % emojiSet.length;
}
}

return emojiSet[index];
}
4 changes: 3 additions & 1 deletion packages/jaeger-ui/src/model/transform-trace-data.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import _isEqual from 'lodash/isEqual';

import { getTraceSpanIdsAsTree, TREE_ROOT_ID } from '../selectors/trace';
import { getConfigValue } from '../utils/config/get-config';
import { getTraceName, getTracePageTitle } from './trace-viewer';
import { getTraceEmoji, getTraceName, getTracePageTitle } from './trace-viewer';
import { KeyValuePair, Span, SpanData, Trace, TraceData } from '../types/trace';
import TreeNode from '../utils/TreeNode';

Expand Down Expand Up @@ -171,13 +171,15 @@ export default function transformTraceData(data: TraceData & { spans: SpanData[]
});
const traceName = getTraceName(spans);
const tracePageTitle = getTracePageTitle(spans);
const traceEmoji = getTraceEmoji(spans);
const services = Object.keys(svcCounts).map(name => ({ name, numberOfSpans: svcCounts[name] }));
return {
services,
spans,
traceID,
traceName,
tracePageTitle,
traceEmoji,
// TODO why not store `tree` here for easier access to tree structure?
// ...
// Can't use spread operator for intersection types
Expand Down
1 change: 1 addition & 0 deletions packages/jaeger-ui/src/types/trace.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@ export type Trace = TraceData & {
startTime: number;
traceName: string;
tracePageTitle: string;
traceEmoji: string;
services: { name: string; numberOfSpans: number }[];
};

Expand Down

0 comments on commit 2d46e31

Please sign in to comment.