2020-04-15 09:04:01 -05:00
|
|
|
import React, { useCallback, useMemo, useState } from 'react';
|
2020-04-08 10:16:22 -05:00
|
|
|
import {
|
2020-04-21 15:04:51 -05:00
|
|
|
ThemeOptions,
|
2020-04-14 06:26:33 -05:00
|
|
|
ThemeProvider,
|
|
|
|
ThemeType,
|
|
|
|
TracePageHeader,
|
2020-04-08 10:16:22 -05:00
|
|
|
TraceTimelineViewer,
|
2020-04-14 06:26:33 -05:00
|
|
|
transformTraceData,
|
2020-04-08 10:16:22 -05:00
|
|
|
TTraceTimeline,
|
|
|
|
UIElementsContext,
|
|
|
|
} from '@jaegertracing/jaeger-ui-components';
|
|
|
|
import { UIElements } from './uiElements';
|
|
|
|
import { useViewRange } from './useViewRange';
|
|
|
|
import { useSearch } from './useSearch';
|
|
|
|
import { useChildrenState } from './useChildrenState';
|
|
|
|
import { useDetailState } from './useDetailState';
|
|
|
|
import { useHoverIndentGuide } from './useHoverIndentGuide';
|
2020-04-21 15:04:51 -05:00
|
|
|
import { colors, useTheme } from '@grafana/ui';
|
2020-11-11 05:10:12 -06:00
|
|
|
import { TraceViewData, Trace, TraceSpan, TraceKeyValuePair, TraceLink } from '@grafana/data';
|
2020-10-14 17:03:14 -05:00
|
|
|
import { createSpanLinkFactory } from './createSpanLink';
|
2020-12-10 12:42:43 -06:00
|
|
|
import { useSelector } from 'react-redux';
|
|
|
|
import { StoreState } from 'app/types';
|
|
|
|
import { getDatasourceSrv } from 'app/features/plugins/datasource_srv';
|
|
|
|
import { TraceToLogsData } from 'app/core/components/TraceToLogsSettings';
|
2020-04-08 10:16:22 -05:00
|
|
|
|
|
|
|
type Props = {
|
2020-11-11 05:10:12 -06:00
|
|
|
trace?: TraceViewData;
|
2020-10-14 17:03:14 -05:00
|
|
|
splitOpenFn: (options: { datasourceUid: string; query: any }) => void;
|
2020-04-08 10:16:22 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
export function TraceView(props: Props) {
|
2020-11-11 05:10:12 -06:00
|
|
|
if (!props.trace?.traceID) {
|
|
|
|
return null;
|
|
|
|
}
|
2020-04-08 10:16:22 -05:00
|
|
|
const { expandOne, collapseOne, childrenToggle, collapseAll, childrenHiddenIDs, expandAll } = useChildrenState();
|
|
|
|
const {
|
|
|
|
detailStates,
|
|
|
|
toggleDetail,
|
|
|
|
detailLogItemToggle,
|
|
|
|
detailLogsToggle,
|
|
|
|
detailProcessToggle,
|
|
|
|
detailReferencesToggle,
|
|
|
|
detailTagsToggle,
|
|
|
|
detailWarningsToggle,
|
2020-07-22 09:14:34 -05:00
|
|
|
detailStackTracesToggle,
|
2020-04-08 10:16:22 -05:00
|
|
|
} = useDetailState();
|
|
|
|
const { removeHoverIndentGuideId, addHoverIndentGuideId, hoverIndentGuideIds } = useHoverIndentGuide();
|
|
|
|
const { viewRange, updateViewRangeTime, updateNextViewRangeTime } = useViewRange();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Keeps state of resizable name column width
|
|
|
|
*/
|
|
|
|
const [spanNameColumnWidth, setSpanNameColumnWidth] = useState(0.25);
|
|
|
|
/**
|
|
|
|
* State of the top minimap, slim means it is collapsed.
|
|
|
|
*/
|
|
|
|
const [slim, setSlim] = useState(false);
|
|
|
|
|
2020-04-15 09:04:01 -05:00
|
|
|
const traceProp = useMemo(() => transformTraceData(props.trace), [props.trace]);
|
2020-04-08 10:16:22 -05:00
|
|
|
const { search, setSearch, spanFindMatches } = useSearch(traceProp?.spans);
|
2020-12-10 12:42:43 -06:00
|
|
|
const dataSourceName = useSelector((state: StoreState) => state.explore.left.datasourceInstance?.name);
|
|
|
|
const traceToLogsOptions = (getDatasourceSrv().getInstanceSettings(dataSourceName)?.jsonData as TraceToLogsData)
|
|
|
|
?.tracesToLogs;
|
2020-04-15 09:04:01 -05:00
|
|
|
|
2020-04-14 06:26:33 -05:00
|
|
|
const theme = useTheme();
|
2020-04-21 15:04:51 -05:00
|
|
|
const traceTheme = useMemo(
|
2020-05-05 05:30:16 -05:00
|
|
|
() =>
|
|
|
|
({
|
|
|
|
type: theme.isDark ? ThemeType.Dark : ThemeType.Light,
|
|
|
|
servicesColorPalette: colors,
|
|
|
|
components: {
|
|
|
|
TraceName: {
|
|
|
|
fontSize: theme.typography.size.lg,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
} as ThemeOptions),
|
2020-04-21 15:04:51 -05:00
|
|
|
[theme]
|
|
|
|
);
|
2020-07-09 08:16:35 -05:00
|
|
|
|
2020-04-15 09:04:01 -05:00
|
|
|
const traceTimeline: TTraceTimeline = useMemo(
|
|
|
|
() => ({
|
|
|
|
childrenHiddenIDs,
|
|
|
|
detailStates,
|
|
|
|
hoverIndentGuideIds,
|
|
|
|
shouldScrollToFirstUiFindMatch: false,
|
|
|
|
spanNameColumnWidth,
|
2020-07-09 08:16:35 -05:00
|
|
|
traceID: traceProp?.traceID,
|
2020-04-15 09:04:01 -05:00
|
|
|
}),
|
2020-07-09 08:16:35 -05:00
|
|
|
[childrenHiddenIDs, detailStates, hoverIndentGuideIds, spanNameColumnWidth, traceProp?.traceID]
|
2020-04-15 09:04:01 -05:00
|
|
|
);
|
2020-04-08 10:16:22 -05:00
|
|
|
|
2020-12-10 12:42:43 -06:00
|
|
|
const createSpanLink = useMemo(() => createSpanLinkFactory(props.splitOpenFn, traceToLogsOptions), [
|
|
|
|
props.splitOpenFn,
|
|
|
|
traceToLogsOptions,
|
|
|
|
]);
|
2020-12-01 10:43:56 -06:00
|
|
|
const scrollElement = document.getElementsByClassName('scroll-canvas')[0];
|
2020-10-14 17:03:14 -05:00
|
|
|
|
2020-07-09 08:16:35 -05:00
|
|
|
if (!traceProp) {
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2020-04-08 10:16:22 -05:00
|
|
|
return (
|
2020-04-15 09:04:01 -05:00
|
|
|
<ThemeProvider value={traceTheme}>
|
2020-04-14 06:26:33 -05:00
|
|
|
<UIElementsContext.Provider value={UIElements}>
|
|
|
|
<TracePageHeader
|
2020-05-05 05:30:16 -05:00
|
|
|
canCollapse={false}
|
2020-04-15 09:04:01 -05:00
|
|
|
clearSearch={useCallback(() => {}, [])}
|
|
|
|
focusUiFindMatches={useCallback(() => {}, [])}
|
2020-04-14 06:26:33 -05:00
|
|
|
hideMap={false}
|
|
|
|
hideSummary={false}
|
2020-04-15 09:04:01 -05:00
|
|
|
nextResult={useCallback(() => {}, [])}
|
|
|
|
onSlimViewClicked={useCallback(() => setSlim(!slim), [])}
|
|
|
|
onTraceGraphViewClicked={useCallback(() => {}, [])}
|
|
|
|
prevResult={useCallback(() => {}, [])}
|
2020-04-14 06:26:33 -05:00
|
|
|
resultCount={0}
|
|
|
|
slimView={slim}
|
|
|
|
textFilter={null}
|
|
|
|
trace={traceProp}
|
|
|
|
traceGraphView={false}
|
|
|
|
updateNextViewRangeTime={updateNextViewRangeTime}
|
|
|
|
updateViewRangeTime={updateViewRangeTime}
|
|
|
|
viewRange={viewRange}
|
|
|
|
searchValue={search}
|
|
|
|
onSearchValueChange={setSearch}
|
|
|
|
hideSearchButtons={true}
|
|
|
|
/>
|
|
|
|
<TraceTimelineViewer
|
2020-04-15 09:04:01 -05:00
|
|
|
registerAccessors={useCallback(() => {}, [])}
|
|
|
|
scrollToFirstVisibleSpan={useCallback(() => {}, [])}
|
2020-04-14 06:26:33 -05:00
|
|
|
findMatchesIDs={spanFindMatches}
|
|
|
|
trace={traceProp}
|
2020-04-15 09:04:01 -05:00
|
|
|
traceTimeline={traceTimeline}
|
2020-04-14 06:26:33 -05:00
|
|
|
updateNextViewRangeTime={updateNextViewRangeTime}
|
|
|
|
updateViewRangeTime={updateViewRangeTime}
|
|
|
|
viewRange={viewRange}
|
2020-04-15 09:04:01 -05:00
|
|
|
focusSpan={useCallback(() => {}, [])}
|
|
|
|
createLinkToExternalSpan={useCallback(() => '', [])}
|
2020-04-14 06:26:33 -05:00
|
|
|
setSpanNameColumnWidth={setSpanNameColumnWidth}
|
|
|
|
collapseAll={collapseAll}
|
|
|
|
collapseOne={collapseOne}
|
|
|
|
expandAll={expandAll}
|
|
|
|
expandOne={expandOne}
|
|
|
|
childrenToggle={childrenToggle}
|
2020-04-15 09:04:01 -05:00
|
|
|
clearShouldScrollToFirstUiFindMatch={useCallback(() => {}, [])}
|
2020-04-14 06:26:33 -05:00
|
|
|
detailLogItemToggle={detailLogItemToggle}
|
|
|
|
detailLogsToggle={detailLogsToggle}
|
|
|
|
detailWarningsToggle={detailWarningsToggle}
|
2020-07-22 09:14:34 -05:00
|
|
|
detailStackTracesToggle={detailStackTracesToggle}
|
2020-04-14 06:26:33 -05:00
|
|
|
detailReferencesToggle={detailReferencesToggle}
|
|
|
|
detailProcessToggle={detailProcessToggle}
|
|
|
|
detailTagsToggle={detailTagsToggle}
|
|
|
|
detailToggle={toggleDetail}
|
2020-04-15 09:04:01 -05:00
|
|
|
setTrace={useCallback((trace: Trace | null, uiFind: string | null) => {}, [])}
|
2020-04-14 06:26:33 -05:00
|
|
|
addHoverIndentGuideId={addHoverIndentGuideId}
|
|
|
|
removeHoverIndentGuideId={removeHoverIndentGuideId}
|
2020-06-24 13:58:42 -05:00
|
|
|
linksGetter={useCallback(
|
|
|
|
(span: TraceSpan, items: TraceKeyValuePair[], itemIndex: number) => [] as TraceLink[],
|
|
|
|
[]
|
|
|
|
)}
|
2020-04-14 06:26:33 -05:00
|
|
|
uiFind={search}
|
2020-10-14 17:03:14 -05:00
|
|
|
createSpanLink={createSpanLink}
|
2020-12-01 10:43:56 -06:00
|
|
|
scrollElement={scrollElement}
|
2020-04-14 06:26:33 -05:00
|
|
|
/>
|
|
|
|
</UIElementsContext.Provider>
|
|
|
|
</ThemeProvider>
|
2020-04-08 10:16:22 -05:00
|
|
|
);
|
|
|
|
}
|