diff --git a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.tsx b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.tsx
index f423349d98b..729b645e095 100644
--- a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.tsx
+++ b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.tsx
@@ -29,20 +29,21 @@ import { SpanLinkFunc, TNil } from '../../types';
import { TraceKeyValuePair, TraceLink, TraceLog, TraceSpan, TraceSpanReference } from '../../types/trace';
import AccordianReferences from './AccordianReferences';
import { autoColor } from '../../Theme';
+import { uAlignIcon, ubM0, ubMb1, ubMy1, ubTxRightAlign } from '../../uberUtilityStyles';
import { Divider } from '../../common/Divider';
-import {
- uAlignIcon,
- ubFlex,
- ubFlexAuto,
- ubItemsCenter,
- ubM0,
- ubMb1,
- ubMy1,
- ubTxRightAlign,
-} from '../../uberUtilityStyles';
const getStyles = (theme: GrafanaTheme2) => {
return {
+ header: css`
+ display: flex;
+ align-items: flex-start;
+ justify-content: space-between;
+ gap: 0 1rem;
+ margin-bottom: 0.25rem;
+ `,
+ listWrapper: css`
+ overflow: hidden;
+ `,
debugInfo: css`
label: debugInfo;
display: block;
@@ -173,6 +174,15 @@ export default function SpanDetail(props: SpanDetailProps) {
label: 'Start Time:',
value: formatDuration(relativeStartTime),
},
+ ...(span.childSpanCount > 0
+ ? [
+ {
+ key: 'child_count',
+ label: 'Child Count:',
+ value: span.childSpanCount,
+ },
+ ]
+ : []),
];
const styles = useStyles2(getStyles);
const link = createSpanLink?.(span);
@@ -180,9 +190,11 @@ export default function SpanDetail(props: SpanDetailProps) {
return (
-
-
{operationName}
-
+
{link ? (
diff --git a/packages/jaeger-ui-components/src/TraceTimelineViewer/utils.test.js b/packages/jaeger-ui-components/src/TraceTimelineViewer/utils.test.js
index c74238fcb16..a8ad75f111f 100644
--- a/packages/jaeger-ui-components/src/TraceTimelineViewer/utils.test.js
+++ b/packages/jaeger-ui-components/src/TraceTimelineViewer/utils.test.js
@@ -20,6 +20,7 @@ import {
isServerSpan,
spanContainsErredSpan,
spanHasTag,
+ formatNumber,
} from './utils';
import traceGenerator from '../demo/trace-generators';
diff --git a/packages/jaeger-ui-components/src/common/LabeledList.tsx b/packages/jaeger-ui-components/src/common/LabeledList.tsx
index 2adb283d0f7..c03cb9482d3 100644
--- a/packages/jaeger-ui-components/src/common/LabeledList.tsx
+++ b/packages/jaeger-ui-components/src/common/LabeledList.tsx
@@ -17,20 +17,31 @@ import { css } from '@emotion/css';
import cx from 'classnames';
import { useStyles2 } from '@grafana/ui';
import { GrafanaTheme2 } from '@grafana/data';
+import { autoColor } from '../Theme';
-import { Divider } from './Divider';
-
-const getStyles = (theme: GrafanaTheme2) => {
+const getStyles = (divider: boolean) => (theme: GrafanaTheme2) => {
return {
LabeledList: css`
label: LabeledList;
list-style: none;
margin: 0;
padding: 0;
+ ${divider === true &&
+ `
+ margin-right: -8px;
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: flex-end;
+ `}
`,
LabeledListItem: css`
label: LabeledListItem;
display: inline-block;
+ ${divider === true &&
+ `
+ border-right: 1px solid ${autoColor(theme, '#ddd')};
+ padding: 0 8px;
+ `}
`,
LabeledListLabel: css`
label: LabeledListLabel;
@@ -42,27 +53,23 @@ const getStyles = (theme: GrafanaTheme2) => {
type LabeledListProps = {
className?: string;
+ divider?: boolean;
items: Array<{ key: string; label: React.ReactNode; value: React.ReactNode }>;
};
export default function LabeledList(props: LabeledListProps) {
- const { className, items } = props;
- const styles = useStyles2(getStyles);
+ const { className, divider = false, items } = props;
+ const styles = useStyles2(getStyles(divider));
+
return (
- {items.map(({ key, label, value }, i) => {
- const divider = i < items.length - 1 && (
- -
-
-
- );
- return [
- -
+ {items.map(({ key, label, value }) => {
+ return (
+
-
{label}
{value}
-
,
- divider,
- ];
+
+ );
})}
);
diff --git a/packages/jaeger-ui-components/src/model/transform-trace-data.tsx b/packages/jaeger-ui-components/src/model/transform-trace-data.tsx
index 6652239bba1..1174a2e260b 100644
--- a/packages/jaeger-ui-components/src/model/transform-trace-data.tsx
+++ b/packages/jaeger-ui-components/src/model/transform-trace-data.tsx
@@ -138,6 +138,7 @@ export default function transformTraceData(data: TraceResponse | undefined): Tra
span.relativeStartTime = span.startTime - traceStartTime;
span.depth = depth - 1;
span.hasChildren = node.children.length > 0;
+ span.childSpanCount = node.children.length;
span.warnings = span.warnings || [];
span.tags = span.tags || [];
span.references = span.references || [];
diff --git a/packages/jaeger-ui-components/src/types/trace.ts b/packages/jaeger-ui-components/src/types/trace.ts
index 62e0a899827..4e180189a4d 100644
--- a/packages/jaeger-ui-components/src/types/trace.ts
+++ b/packages/jaeger-ui-components/src/types/trace.ts
@@ -68,6 +68,7 @@ export type TraceSpanData = {
export type TraceSpan = TraceSpanData & {
depth: number;
hasChildren: boolean;
+ childSpanCount: number;
process: TraceProcess;
relativeStartTime: number;
tags: NonNullable
;
diff --git a/packages/jaeger-ui-components/src/uberUtilityStyles.ts b/packages/jaeger-ui-components/src/uberUtilityStyles.ts
index f2c7457f2d5..d95db6e9c8c 100644
--- a/packages/jaeger-ui-components/src/uberUtilityStyles.ts
+++ b/packages/jaeger-ui-components/src/uberUtilityStyles.ts
@@ -34,6 +34,10 @@ export const ubItemsCenter = css`
align-items: center;
`;
+export const ubItemsStart = css`
+ align-items: start;
+`;
+
export const ubFlexAuto = css`
flex: 1 1 auto;
min-width: 0; /* 1 */