Skip to content

Commit 547663d

Browse files
committed
Introduce an emoji computed from trace ID in trace page titles
> 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 <[email protected]>
1 parent b7a6a9e commit 547663d

File tree

4 files changed

+31
-2
lines changed

4 files changed

+31
-2
lines changed

packages/jaeger-ui/src/components/TracePage/TracePageHeader/TracePageHeader.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ export function TracePageHeaderFn(props: TracePageHeaderEmbedProps & { forwarded
159159

160160
return (
161161
<header className="TracePageHeader">
162-
<Helmet title={`${traceShortID}: ${trace.tracePageTitle} — Jaeger UI`} />
162+
<Helmet title={`${trace.traceEmoji} ${traceShortID}: ${trace.tracePageTitle} — Jaeger UI`} />
163163
<div className="TracePageHeader--titleRow">
164164
{toSearch && (
165165
<Link className="TracePageHeader--back" to={toSearch}>

packages/jaeger-ui/src/model/trace-viewer.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,29 @@ export function getTracePageTitle(spans: Span[]): string {
8080
? `${tracePageHeaderParts.operationName} (${tracePageHeaderParts.serviceName})`
8181
: '';
8282
}
83+
84+
export function getTraceEmoji(spans: Span[]): string {
85+
if (!spans.length) return '';
86+
87+
// prettier-ignore
88+
const emojiSet = [
89+
'🐶', '🐱', '🐭', '🦊', '🐨', '🐮', '🐷', '🐸', '🐵', '🐔', '🐤', '🦆',
90+
'🦉', '🐝', '🦋', '🐢', '🦀', '🐳', '🐊', '🦒', '🪶', '🦩', '🐉', '🍄',
91+
'🌸', '🌜', '🔥', '🌪️', '💧', '🍏', '🍊', '🍉', '🍒', '🥦', '🌽', '🍠',
92+
'🥐', '🥖', '🥚', '🧀', '🍗', '🍟', '🍕', '🍣', '🍤', '🍙', '🍪', '⚽️',
93+
'🏀', '🥎', '🎹', '🎲', '🎮', '🧩', '🚗', '🚲', '🚂', '⛺️', '📞', '⏰',
94+
'🔌', '💎', '🪚', '🧲', '🧬', '🎀', '📬', '📘', '🩷', '🎵', '🏴', '🚩',
95+
];
96+
97+
const traceID = spans[0].traceID;
98+
let index = 0;
99+
100+
if (traceID) {
101+
for (let i = 0; i < traceID.length; i++) {
102+
const hexChar = traceID.slice(i, i + 1);
103+
index = (index * 16 + parseInt(hexChar, 16)) % emojiSet.length;
104+
}
105+
}
106+
107+
return emojiSet[index];
108+
}

packages/jaeger-ui/src/model/transform-trace-data.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import _isEqual from 'lodash/isEqual';
1616

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

@@ -171,13 +171,15 @@ export default function transformTraceData(data: TraceData & { spans: SpanData[]
171171
});
172172
const traceName = getTraceName(spans);
173173
const tracePageTitle = getTracePageTitle(spans);
174+
const traceEmoji = getTraceEmoji(spans);
174175
const services = Object.keys(svcCounts).map(name => ({ name, numberOfSpans: svcCounts[name] }));
175176
return {
176177
services,
177178
spans,
178179
traceID,
179180
traceName,
180181
tracePageTitle,
182+
traceEmoji,
181183
// TODO why not store `tree` here for easier access to tree structure?
182184
// ...
183185
// Can't use spread operator for intersection types

packages/jaeger-ui/src/types/trace.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ export type Trace = TraceData & {
8282
startTime: number;
8383
traceName: string;
8484
tracePageTitle: string;
85+
traceEmoji: string;
8586
services: { name: string; numberOfSpans: number }[];
8687
};
8788

0 commit comments

Comments
 (0)