mirror of
https://github.com/grafana/grafana.git
synced 2025-02-12 16:45:43 -06:00
* Add integration with Jeager Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split. Modifies build so that this branch docker images are pushed to docker hub Add a traceui dir with docker-compose and provision files for demoing.:wq * Enable docker logger plugin to send logs to loki * Add placeholder zipkin datasource * Fixed rebase issues, added enhanceDataFrame to non-legacy code path * Trace selector for jaeger query field * Fix logs default mode for Loki * Fix loading jaeger query field services on split * Updated grafana image in traceui/compose file * Fix prettier error * Hide behind feature flag, clean up unused code. * Fix tests * Fix tests * Cleanup code and review feedback * Remove traceui directory * Remove circle build changes * Fix feature toggles object * Fix merge issues * Add trace ui in Explore * WIP * WIP * WIP * Make jaeger datasource return trace data instead of link * Allow js in jest tests * Return data from Jaeger datasource * Take yarn.lock from master * Fix missing component * Update yarn lock * Fix some ts and lint errors * Fix merge * Fix type errors * Make tests pass again * Add tests * Fix es5 compatibility * Add header with minimap * Fix sizing issue due to column resizer handle * Fix issues with sizing, search functionality, duplicate react, tests * Refactor TraceView component, fix tests * Fix type errors * Add tests for hooks Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
120 lines
3.9 KiB
TypeScript
120 lines
3.9 KiB
TypeScript
import React, { useState } from 'react';
|
|
import {
|
|
KeyValuePair,
|
|
Link,
|
|
Span,
|
|
Trace,
|
|
TraceTimelineViewer,
|
|
TTraceTimeline,
|
|
UIElementsContext,
|
|
transformTraceData,
|
|
SpanData,
|
|
TraceData,
|
|
TracePageHeader,
|
|
} 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';
|
|
|
|
type Props = {
|
|
trace: TraceData & { spans: SpanData[] };
|
|
};
|
|
|
|
export function TraceView(props: Props) {
|
|
const { expandOne, collapseOne, childrenToggle, collapseAll, childrenHiddenIDs, expandAll } = useChildrenState();
|
|
const {
|
|
detailStates,
|
|
toggleDetail,
|
|
detailLogItemToggle,
|
|
detailLogsToggle,
|
|
detailProcessToggle,
|
|
detailReferencesToggle,
|
|
detailTagsToggle,
|
|
detailWarningsToggle,
|
|
} = 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);
|
|
|
|
const traceProp = transformTraceData(props.trace);
|
|
const { search, setSearch, spanFindMatches } = useSearch(traceProp?.spans);
|
|
|
|
return (
|
|
<UIElementsContext.Provider value={UIElements}>
|
|
<TracePageHeader
|
|
canCollapse={true}
|
|
clearSearch={() => {}}
|
|
focusUiFindMatches={() => {}}
|
|
hideMap={false}
|
|
hideSummary={false}
|
|
nextResult={() => {}}
|
|
onSlimViewClicked={() => setSlim(!slim)}
|
|
onTraceGraphViewClicked={() => {}}
|
|
prevResult={() => {}}
|
|
resultCount={0}
|
|
slimView={slim}
|
|
textFilter={null}
|
|
trace={traceProp}
|
|
traceGraphView={false}
|
|
updateNextViewRangeTime={updateNextViewRangeTime}
|
|
updateViewRangeTime={updateViewRangeTime}
|
|
viewRange={viewRange}
|
|
searchValue={search}
|
|
onSearchValueChange={setSearch}
|
|
hideSearchButtons={true}
|
|
/>
|
|
<TraceTimelineViewer
|
|
registerAccessors={() => {}}
|
|
scrollToFirstVisibleSpan={() => {}}
|
|
findMatchesIDs={spanFindMatches}
|
|
trace={traceProp}
|
|
traceTimeline={
|
|
{
|
|
childrenHiddenIDs,
|
|
detailStates,
|
|
hoverIndentGuideIds,
|
|
shouldScrollToFirstUiFindMatch: false,
|
|
spanNameColumnWidth,
|
|
traceID: '50b96206cf81dd64',
|
|
} as TTraceTimeline
|
|
}
|
|
updateNextViewRangeTime={updateNextViewRangeTime}
|
|
updateViewRangeTime={updateViewRangeTime}
|
|
viewRange={viewRange}
|
|
focusSpan={() => {}}
|
|
createLinkToExternalSpan={() => ''}
|
|
setSpanNameColumnWidth={setSpanNameColumnWidth}
|
|
collapseAll={collapseAll}
|
|
collapseOne={collapseOne}
|
|
expandAll={expandAll}
|
|
expandOne={expandOne}
|
|
childrenToggle={childrenToggle}
|
|
clearShouldScrollToFirstUiFindMatch={() => {}}
|
|
detailLogItemToggle={detailLogItemToggle}
|
|
detailLogsToggle={detailLogsToggle}
|
|
detailWarningsToggle={detailWarningsToggle}
|
|
detailReferencesToggle={detailReferencesToggle}
|
|
detailProcessToggle={detailProcessToggle}
|
|
detailTagsToggle={detailTagsToggle}
|
|
detailToggle={toggleDetail}
|
|
setTrace={(trace: Trace | null, uiFind: string | null) => {}}
|
|
addHoverIndentGuideId={addHoverIndentGuideId}
|
|
removeHoverIndentGuideId={removeHoverIndentGuideId}
|
|
linksGetter={(span: Span, items: KeyValuePair[], itemIndex: number) => [] as Link[]}
|
|
uiFind={search}
|
|
/>
|
|
</UIElementsContext.Provider>
|
|
);
|
|
}
|