mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
TraceView/TracesPanel: Allow providing custom span link creator function (#76332)
allow overriding span link creator for TraceView and TracesPanel
This commit is contained in:
@@ -27,7 +27,14 @@ import { useDispatch, useSelector } from 'app/types';
|
|||||||
|
|
||||||
import { changePanelState } from '../state/explorePane';
|
import { changePanelState } from '../state/explorePane';
|
||||||
|
|
||||||
import { SpanBarOptionsData, Trace, TracePageHeader, TraceTimelineViewer, TTraceTimeline } from './components';
|
import {
|
||||||
|
SpanBarOptionsData,
|
||||||
|
SpanLinkFunc,
|
||||||
|
Trace,
|
||||||
|
TracePageHeader,
|
||||||
|
TraceTimelineViewer,
|
||||||
|
TTraceTimeline,
|
||||||
|
} from './components';
|
||||||
import SpanGraph from './components/TracePageHeader/SpanGraph';
|
import SpanGraph from './components/TracePageHeader/SpanGraph';
|
||||||
import { TopOfViewRefType } from './components/TraceTimelineViewer/VirtualizedTraceView';
|
import { TopOfViewRefType } from './components/TraceTimelineViewer/VirtualizedTraceView';
|
||||||
import { createSpanLinkFactory } from './createSpanLink';
|
import { createSpanLinkFactory } from './createSpanLink';
|
||||||
@@ -59,10 +66,18 @@ type Props = {
|
|||||||
datasource: DataSourceApi<DataQuery, DataSourceJsonData, {}> | undefined;
|
datasource: DataSourceApi<DataQuery, DataSourceJsonData, {}> | undefined;
|
||||||
topOfViewRef: RefObject<HTMLDivElement>;
|
topOfViewRef: RefObject<HTMLDivElement>;
|
||||||
topOfViewRefType: TopOfViewRefType;
|
topOfViewRefType: TopOfViewRefType;
|
||||||
|
createSpanLink?: SpanLinkFunc;
|
||||||
};
|
};
|
||||||
|
|
||||||
export function TraceView(props: Props) {
|
export function TraceView(props: Props) {
|
||||||
const { traceProp, datasource, topOfViewRef, topOfViewRefType, exploreId } = props;
|
const {
|
||||||
|
traceProp,
|
||||||
|
datasource,
|
||||||
|
topOfViewRef,
|
||||||
|
topOfViewRefType,
|
||||||
|
exploreId,
|
||||||
|
createSpanLink: createSpanLinkFromProps,
|
||||||
|
} = props;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
detailStates,
|
detailStates,
|
||||||
@@ -119,6 +134,7 @@ export function TraceView(props: Props) {
|
|||||||
|
|
||||||
const createSpanLink = useMemo(
|
const createSpanLink = useMemo(
|
||||||
() =>
|
() =>
|
||||||
|
createSpanLinkFromProps ??
|
||||||
createSpanLinkFactory({
|
createSpanLinkFactory({
|
||||||
splitOpenFn: props.splitOpenFn!,
|
splitOpenFn: props.splitOpenFn!,
|
||||||
traceToLogsOptions,
|
traceToLogsOptions,
|
||||||
@@ -127,7 +143,15 @@ export function TraceView(props: Props) {
|
|||||||
createFocusSpanLink,
|
createFocusSpanLink,
|
||||||
trace: traceProp,
|
trace: traceProp,
|
||||||
}),
|
}),
|
||||||
[props.splitOpenFn, traceToLogsOptions, traceToMetricsOptions, props.dataFrames, createFocusSpanLink, traceProp]
|
[
|
||||||
|
props.splitOpenFn,
|
||||||
|
traceToLogsOptions,
|
||||||
|
traceToMetricsOptions,
|
||||||
|
props.dataFrames,
|
||||||
|
createFocusSpanLink,
|
||||||
|
traceProp,
|
||||||
|
createSpanLinkFromProps,
|
||||||
|
]
|
||||||
);
|
);
|
||||||
const timeZone = useSelector((state) => getTimeZone(state.user));
|
const timeZone = useSelector((state) => getTimeZone(state.user));
|
||||||
const datasourceType = datasource ? datasource?.type : 'unknown';
|
const datasourceType = datasource ? datasource?.type : 'unknown';
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { useAsync } from 'react-use';
|
|||||||
import { PanelProps } from '@grafana/data';
|
import { PanelProps } from '@grafana/data';
|
||||||
import { getDataSourceSrv } from '@grafana/runtime';
|
import { getDataSourceSrv } from '@grafana/runtime';
|
||||||
import { TraceView } from 'app/features/explore/TraceView/TraceView';
|
import { TraceView } from 'app/features/explore/TraceView/TraceView';
|
||||||
|
import { SpanLinkFunc } from 'app/features/explore/TraceView/components';
|
||||||
import { TopOfViewRefType } from 'app/features/explore/TraceView/components/TraceTimelineViewer/VirtualizedTraceView';
|
import { TopOfViewRefType } from 'app/features/explore/TraceView/components/TraceTimelineViewer/VirtualizedTraceView';
|
||||||
import { transformDataFrames } from 'app/features/explore/TraceView/utils/transform';
|
import { transformDataFrames } from 'app/features/explore/TraceView/utils/transform';
|
||||||
|
|
||||||
@@ -15,7 +16,11 @@ const styles = {
|
|||||||
`,
|
`,
|
||||||
};
|
};
|
||||||
|
|
||||||
export const TracesPanel = ({ data }: PanelProps) => {
|
export interface TracesPanelOptions {
|
||||||
|
createSpanLink?: SpanLinkFunc;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const TracesPanel = ({ data, options }: PanelProps<TracesPanelOptions>) => {
|
||||||
const topOfViewRef = createRef<HTMLDivElement>();
|
const topOfViewRef = createRef<HTMLDivElement>();
|
||||||
const traceProp = useMemo(() => transformDataFrames(data.series[0]), [data.series]);
|
const traceProp = useMemo(() => transformDataFrames(data.series[0]), [data.series]);
|
||||||
const dataSource = useAsync(async () => {
|
const dataSource = useAsync(async () => {
|
||||||
@@ -41,6 +46,7 @@ export const TracesPanel = ({ data }: PanelProps) => {
|
|||||||
datasource={dataSource.value}
|
datasource={dataSource.value}
|
||||||
topOfViewRef={topOfViewRef}
|
topOfViewRef={topOfViewRef}
|
||||||
topOfViewRefType={TopOfViewRefType.Panel}
|
topOfViewRefType={TopOfViewRefType.Panel}
|
||||||
|
createSpanLink={options.createSpanLink}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user