diff --git a/.betterer.results b/.betterer.results index 224812edb55..f7274be5286 100644 --- a/.betterer.results +++ b/.betterer.results @@ -381,7 +381,7 @@ exports[`better eslint`] = { "packages/grafana-e2e-selectors/src/resolver.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], - "packages/grafana-o11y-ds-frontend/src/utils.ts:5381": [ + "packages/grafana-o11y-ds-frontend/src/createNodeGraphFrames.ts:5381": [ [0, 0, 0, "Do not use any type assertions.", "0"] ], "packages/grafana-prometheus/src/components/PromQueryField.test.tsx:5381": [ diff --git a/packages/grafana-o11y-ds-frontend/src/createNodeGraphFrames.test.ts b/packages/grafana-o11y-ds-frontend/src/createNodeGraphFrames.test.ts new file mode 100644 index 00000000000..e506c62bc49 --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/createNodeGraphFrames.test.ts @@ -0,0 +1,84 @@ +import { createDataFrame, DataFrameView } from '@grafana/data'; + +import { createNodeGraphFrames } from './createNodeGraphFrames'; +import { bigTraceResponse } from './mocks/traceResponse'; + +describe('createGraphFrames', () => { + it('transforms basic response into nodes and edges frame', async () => { + const frames = createNodeGraphFrames(bigTraceResponse); + expect(frames.length).toBe(2); + expect(frames[0].length).toBe(30); + expect(frames[1].length).toBe(29); + + let view = new DataFrameView(frames[0]); + expect(view.get(0)).toMatchObject({ + id: '4322526419282105830', + title: 'loki-all', + subtitle: 'store.validateQueryTimeRange', + mainstat: '0ms (0.02%)', + secondarystat: '0ms (100%)', + color: 0.00021968356127648162, + }); + + expect(view.get(29)).toMatchObject({ + id: '4450900759028499335', + title: 'loki-all', + subtitle: 'HTTP GET - loki_api_v1_query_range', + mainstat: '18.21ms (100%)', + secondarystat: '3.22ms (17.71%)', + color: 0.17707117189595056, + }); + + view = new DataFrameView(frames[1]); + expect(view.get(28)).toMatchObject({ + id: '4450900759028499335--4790760741274015949', + }); + }); + + it('handles single span response', async () => { + const frames = createNodeGraphFrames(singleSpanResponse); + expect(frames.length).toBe(2); + expect(frames[0].length).toBe(1); + + const view = new DataFrameView(frames[0]); + expect(view.get(0)).toMatchObject({ + id: '4322526419282105830', + title: 'loki-all', + subtitle: 'store.validateQueryTimeRange', + mainstat: '14.98ms (100%)', + secondarystat: '14.98ms (100%)', + color: 1.000007560204647, + }); + }); + + it('handles missing spans', async () => { + const frames = createNodeGraphFrames(missingSpanResponse); + expect(frames.length).toBe(2); + expect(frames[0].length).toBe(2); + expect(frames[1].length).toBe(0); + }); +}); + +const missingSpanResponse = createDataFrame({ + fields: [ + { name: 'traceID', values: ['04450900759028499335', '04450900759028499335'] }, + { name: 'spanID', values: ['1', '2'] }, + { name: 'parentSpanID', values: ['', '3'] }, + { name: 'operationName', values: ['store.validateQueryTimeRange', 'store.validateQueryTimeRange'] }, + { name: 'serviceName', values: ['loki-all', 'loki-all'] }, + { name: 'startTime', values: [1619712655875.4539, 1619712655880.4539] }, + { name: 'duration', values: [14.984, 4.984] }, + ], +}); + +const singleSpanResponse = createDataFrame({ + fields: [ + { name: 'traceID', values: ['04450900759028499335'] }, + { name: 'spanID', values: ['4322526419282105830'] }, + { name: 'parentSpanID', values: [''] }, + { name: 'operationName', values: ['store.validateQueryTimeRange'] }, + { name: 'serviceName', values: ['loki-all'] }, + { name: 'startTime', values: [1619712655875.4539] }, + { name: 'duration', values: [14.984] }, + ], +}); diff --git a/packages/grafana-o11y-ds-frontend/src/utils.ts b/packages/grafana-o11y-ds-frontend/src/createNodeGraphFrames.ts similarity index 54% rename from packages/grafana-o11y-ds-frontend/src/utils.ts rename to packages/grafana-o11y-ds-frontend/src/createNodeGraphFrames.ts index 3687db979e8..d12a07610ac 100644 --- a/packages/grafana-o11y-ds-frontend/src/utils.ts +++ b/packages/grafana-o11y-ds-frontend/src/createNodeGraphFrames.ts @@ -1,8 +1,80 @@ +import { + FieldType, + NodeGraphDataFrameFieldNames as Fields, + DataFrameView, + DataFrame, + MutableDataFrame, +} from '@grafana/data'; + +export function createNodeGraphFrames(data: DataFrame): DataFrame[] { + const { nodes, edges } = convertTraceToGraph(data); + const [nodesFrame, edgesFrame] = makeFrames(); + + for (const node of nodes) { + nodesFrame.add(node); + } + for (const edge of edges) { + edgesFrame.add(edge); + } + + return [nodesFrame, edgesFrame]; +} + +function convertTraceToGraph(data: DataFrame): { nodes: Node[]; edges: Edge[] } { + const nodes: Node[] = []; + const edges: Edge[] = []; + + const view = new DataFrameView(data); + + const traceDuration = findTraceDuration(view); + const spanMap = makeSpanMap((index) => { + if (index >= data.length) { + return undefined; + } + const span = view.get(index); + return { + span: { ...span }, + id: span.spanID, + parentIds: span.parentSpanID ? [span.parentSpanID] : [], + }; + }); + + for (let i = 0; i < view.length; i++) { + const row = view.get(i); + + const ranges: Array<[number, number]> = spanMap[row.spanID].children.map((c) => { + const span = spanMap[c].span; + return [span.startTime, span.startTime + span.duration]; + }); + const childrenDuration = getNonOverlappingDuration(ranges); + const selfDuration = row.duration - childrenDuration; + const stats = getStats(row.duration, traceDuration, selfDuration); + + nodes.push({ + [Fields.id]: row.spanID, + [Fields.title]: row.serviceName ?? '', + [Fields.subTitle]: row.operationName, + [Fields.mainStat]: stats.main, + [Fields.secondaryStat]: stats.secondary, + [Fields.color]: selfDuration / traceDuration, + }); + + // Sometimes some span can be missing. Don't add edges for those. + if (row.parentSpanID && spanMap[row.parentSpanID].span) { + edges.push({ + [Fields.id]: row.parentSpanID + '--' + row.spanID, + [Fields.target]: row.spanID, + [Fields.source]: row.parentSpanID, + }); + } + } + + return { nodes, edges }; +} + /** * Get non overlapping duration of the ranges as they can overlap or have gaps. */ -import { FieldType, MutableDataFrame, NodeGraphDataFrameFieldNames as Fields } from '@grafana/data'; - export function getNonOverlappingDuration(ranges: Array<[number, number]>): number { ranges.sort((a, b) => a[0] - b[0]); const mergedRanges = ranges.reduce>((acc, range) => { @@ -117,3 +189,54 @@ export function makeFrames() { return [nodesFrame, edgesFrame]; } + +/** + * Get the duration of the whole trace as it isn't a part of the response data. + * Note: Seems like this should be the same as just longest span, but this is probably safer. + */ +function findTraceDuration(view: DataFrameView): number { + let traceEndTime = 0; + let traceStartTime = Infinity; + + for (let i = 0; i < view.length; i++) { + const row = view.get(i); + + if (row.startTime < traceStartTime) { + traceStartTime = row.startTime; + } + + if (row.startTime + row.duration > traceEndTime) { + traceEndTime = row.startTime + row.duration; + } + } + + return traceEndTime - traceStartTime; +} + +interface Node { + [Fields.id]: string; + [Fields.title]: string; + [Fields.subTitle]: string; + [Fields.mainStat]: string; + [Fields.secondaryStat]: string; + [Fields.color]: number; +} + +interface Edge { + [Fields.id]: string; + [Fields.target]: string; + [Fields.source]: string; +} + +interface TraceRow { + traceID: string; + spanID: string; + parentSpanID: string; + operationName: string; + serviceName: string; + serviceTags: string; + startTime: number; + duration: number; + logs: string; + tags: string; +} diff --git a/packages/grafana-o11y-ds-frontend/src/index.ts b/packages/grafana-o11y-ds-frontend/src/index.ts index 6cab6dbb838..1ed4d47f929 100644 --- a/packages/grafana-o11y-ds-frontend/src/index.ts +++ b/packages/grafana-o11y-ds-frontend/src/index.ts @@ -12,5 +12,5 @@ export * from './TraceToLogs/TagMappingInput'; export * from './TraceToLogs/TraceToLogsSettings'; export * from './TraceToMetrics/TraceToMetricsSettings'; export * from './TraceToProfiles/TraceToProfilesSettings'; -export * from './utils'; +export * from './createNodeGraphFrames'; export * from './combineResponses'; diff --git a/packages/grafana-o11y-ds-frontend/src/mocks/traceResponse.ts b/packages/grafana-o11y-ds-frontend/src/mocks/traceResponse.ts new file mode 100644 index 00000000000..37a3ba1cb7f --- /dev/null +++ b/packages/grafana-o11y-ds-frontend/src/mocks/traceResponse.ts @@ -0,0 +1,1799 @@ +import { createDataFrame } from '@grafana/data'; + +// trace response with following fields: traceID, spanID, parentSpanID, operationName, serviceName, serviceTags, startTime, duration, logs, tags +export const bigTraceResponse = createDataFrame({ + fields: [ + { + name: 'traceID', + values: [ + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + '04450900759028499335', + ], + }, + { + name: 'spanID', + values: [ + '4322526419282105830', + '3095626263385822295', + '6397320272727147889', + '1853508259384889601', + '835290848278351608', + '5850531882244692375', + '663601651643245598', + '7501257416198979329', + '197793019475688138', + '1615811285828848458', + '4574624098918415850', + '7514953483465123028', + '8952478937948910109', + '4807320274580307678', + '3568196851335088191', + '8875894577931816561', + '797350946023907600', + '3198122728676260175', + '2528859115168229623', + '2108752984455624810', + '4343095775387093037', + '8751049139444653283', + '7753188085660872705', + '879502345235818407', + '3139747016493009985', + '7783241608507301178', + '1799838932837912875', + '4045260340056550643', + '4790760741274015949', + '4450900759028499335', + ], + }, + { + name: 'parentSpanID', + values: [ + '3095626263385822295', + '3198122728676260175', + '7501257416198979329', + '663601651643245598', + '5850531882244692375', + '663601651643245598', + '7501257416198979329', + '197793019475688138', + '1615811285828848458', + '3198122728676260175', + '8875894577931816561', + '3568196851335088191', + '4807320274580307678', + '3568196851335088191', + '8875894577931816561', + '797350946023907600', + '3198122728676260175', + '1799838932837912875', + '4343095775387093037', + '4343095775387093037', + '8751049139444653283', + '1799838932837912875', + '3139747016493009985', + '3139747016493009985', + '7783241608507301178', + '1799838932837912875', + '4045260340056550643', + '4790760741274015949', + '4450900759028499335', + '', + ], + }, + { + name: 'operationName', + values: [ + 'store.validateQueryTimeRange', + 'store.validateQuery', + 'cachingIndexClient.cacheFetch', + 'Shipper.Uploads.Query', + 'Shipper.Downloads.Table.MultiQueries', + 'Shipper.Downloads.Query', + 'QUERY', + 'store.lookupEntriesByQueries', + 'Store.lookupIdsByMetricNameMatcher', + 'SeriesStore.lookupSeriesByMetricNameMatchers', + 'cachingIndexClient.cacheFetch', + 'Shipper.Uploads.Query', + 'Shipper.Downloads.Table.MultiQueries', + 'Shipper.Downloads.Query', + 'QUERY', + 'store.lookupEntriesByQueries', + 'SeriesStore.lookupChunksBySeries', + 'SeriesStore.GetChunkRefs', + 'Fetcher.processCacheResponse', + 'GetParallelChunks', + 'ChunkStore.FetchChunks', + 'LokiStore.fetchLazyChunks', + 'Fetcher.processCacheResponse', + 'GetParallelChunks', + 'ChunkStore.FetchChunks', + 'LokiStore.fetchLazyChunks', + '/logproto.Querier/Query', + '/logproto.Querier/Query', + 'query.Exec', + 'HTTP GET - loki_api_v1_query_range', + ], + }, + { + name: 'serviceName', + values: [ + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + 'loki-all', + ], + }, + { + name: 'serviceTags', + values: [ + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + [ + { + value: 'loki-all', + key: 'service.name', + }, + { + value: 'Jaeger-Go-2.25.0', + key: 'opencensus.exporterversion', + }, + { + value: '708c78ea08c1', + key: 'host.hostname', + }, + { + value: '172.18.0.3', + key: 'ip', + }, + { + value: '632583de9a4a497b', + key: 'client-uuid', + }, + ], + ], + }, + { + name: 'startTime', + values: [ + 1619712655875.4539, 1619712655875.4502, 1619712655875.592, 1619712655875.653, 1619712655875.731, + 1619712655875.712, 1619712655875.6428, 1619712655875.5771, 1619712655875.5168, 1619712655875.488, + 1619712655875.939, 1619712655875.959, 1619712655876.0051, 1619712655875.991, 1619712655875.9539, + 1619712655875.9338, 1619712655875.917, 1619712655875.442, 1619712655876.365, 1619712655876.3809, + 1619712655876.359, 1619712655876.331, 1619712655876.62, 1619712655876.629, 1619712655876.616, 1619712655876.592, + 1619712655875.052, 1619712655874.819, 1619712655874.7021, 1619712655874.591, + ], + }, + { + name: 'duration', + values: [ + 0.004, 0.016, 0.039, 0.047, 0.063, 0.087, 0.163, 0.303, 0.384, 0.421, 0.012, 0.021, 0.033, 0.048, 0.092, 0.169, + 0.197, 0.689, 0.012, 0.196, 0.225, 0.255, 0.007, 0.167, 0.189, 0.217, 13.918, 14.723, 14.984, 18.208, + ], + }, + { + name: 'logs', + values: [ + null, + null, + [ + { + timestamp: 1619712655875.631, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 0, + key: 'hits', + }, + { + value: 16, + key: 'misses', + }, + ], + }, + ], + null, + [ + { + timestamp: 1619712655875.738, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'index_18746', + key: 'table-name', + }, + { + value: 16, + key: 'query-count', + }, + ], + }, + { + timestamp: 1619712655875.773, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'compactor-1619711145.gz', + key: 'queried-db', + }, + ], + }, + { + timestamp: 1619712655875.794, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: '708c78ea08c1-1619516350042748959-1619711100.gz', + key: 'queried-db', + }, + ], + }, + ], + [ + { + timestamp: 1619712655875.719, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'index_18746', + key: 'table-name', + }, + ], + }, + ], + [ + { + timestamp: 1619712655875.7068, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'uploads-manager', + key: 'queried', + }, + ], + }, + { + timestamp: 1619712655875.803, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'downloads-manager', + key: 'queried', + }, + ], + }, + ], + null, + [ + { + timestamp: 1619712655875.536, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'logs', + key: 'metricName', + }, + { + value: 'compose_project="devenv"', + key: 'matcher', + }, + ], + }, + { + timestamp: 1619712655875.568, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'compose_project="devenv"', + key: 'matcher', + }, + { + value: 16, + key: 'queries', + }, + ], + }, + { + timestamp: 1619712655875.5762, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'compose_project="devenv"', + key: 'matcher', + }, + { + value: 16, + key: 'filteredQueries', + }, + ], + }, + { + timestamp: 1619712655875.892, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'compose_project="devenv"', + key: 'matcher', + }, + { + value: 2, + key: 'entries', + }, + ], + }, + { + timestamp: 1619712655875.9019, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'compose_project="devenv"', + key: 'matcher', + }, + { + value: 1, + key: 'ids', + }, + ], + }, + ], + [ + { + timestamp: 1619712655875.4958, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'logs', + key: 'metricName', + }, + { + value: 1, + key: 'matchers', + }, + ], + }, + { + timestamp: 1619712655875.9092, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'post intersection', + key: 'msg', + }, + { + value: 1, + key: 'ids', + }, + ], + }, + ], + [ + { + timestamp: 1619712655875.9512, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 0, + key: 'hits', + }, + { + value: 1, + key: 'misses', + }, + ], + }, + ], + null, + [ + { + timestamp: 1619712655876.012, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'index_18746', + key: 'table-name', + }, + { + value: 1, + key: 'query-count', + }, + ], + }, + { + timestamp: 1619712655876.031, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'compactor-1619711145.gz', + key: 'queried-db', + }, + ], + }, + { + timestamp: 1619712655876.0378, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: '708c78ea08c1-1619516350042748959-1619711100.gz', + key: 'queried-db', + }, + ], + }, + ], + [ + { + timestamp: 1619712655875.999, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'index_18746', + key: 'table-name', + }, + ], + }, + ], + [ + { + timestamp: 1619712655875.988, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'uploads-manager', + key: 'queried', + }, + ], + }, + { + timestamp: 1619712655876.0452, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'downloads-manager', + key: 'queried', + }, + ], + }, + ], + null, + [ + { + timestamp: 1619712655875.925, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 1, + key: 'seriesIDs', + }, + ], + }, + { + timestamp: 1619712655875.9329, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 1, + key: 'queries', + }, + ], + }, + { + timestamp: 1619712655876.1118, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 2, + key: 'entries', + }, + ], + }, + ], + [ + { + timestamp: 1619712655875.4849, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'logs', + key: 'metric', + }, + ], + }, + { + timestamp: 1619712655875.915, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 1, + key: 'series-ids', + }, + ], + }, + { + timestamp: 1619712655876.12, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 2, + key: 'chunk-ids', + }, + ], + }, + { + timestamp: 1619712655876.131, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 2, + key: 'chunks-post-filtering', + }, + ], + }, + ], + [ + { + timestamp: 1619712655876.375, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 1, + key: 'chunks', + }, + { + value: 0, + key: 'decodeRequests', + }, + { + value: 1, + key: 'missing', + }, + ], + }, + ], + [ + { + timestamp: 1619712655876.384, + fields: [ + { + value: 1, + key: 'chunks requested', + }, + ], + }, + { + timestamp: 1619712655876.577, + fields: [ + { + value: 1, + key: 'chunks fetched', + }, + ], + }, + ], + null, + [ + { + timestamp: 1619712655876.342, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'loading lazy chunks', + key: 'msg', + }, + { + value: 1, + key: 'chunks', + }, + ], + }, + ], + [ + { + timestamp: 1619712655876.627, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 1, + key: 'chunks', + }, + { + value: 0, + key: 'decodeRequests', + }, + { + value: 1, + key: 'missing', + }, + ], + }, + ], + [ + { + timestamp: 1619712655876.631, + fields: [ + { + value: 1, + key: 'chunks requested', + }, + ], + }, + { + timestamp: 1619712655876.795, + fields: [ + { + value: 1, + key: 'chunks fetched', + }, + ], + }, + ], + null, + [ + { + timestamp: 1619712655876.604, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 'loading lazy chunks', + key: 'msg', + }, + { + value: 1, + key: 'chunks', + }, + ], + }, + ], + null, + null, + [ + { + timestamp: 1619712655889.606, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: 1, + key: 'Ingester.TotalReached', + }, + { + value: 1, + key: 'Ingester.TotalChunksMatched', + }, + { + value: 0, + key: 'Ingester.TotalBatches', + }, + { + value: 0, + key: 'Ingester.TotalLinesSent', + }, + { + value: '47 kB', + key: 'Ingester.HeadChunkBytes', + }, + { + value: 424, + key: 'Ingester.HeadChunkLines', + }, + { + value: '219 kB', + key: 'Ingester.DecompressedBytes', + }, + { + value: 1679, + key: 'Ingester.DecompressedLines', + }, + { + value: '124 kB', + key: 'Ingester.CompressedBytes', + }, + { + value: 0, + key: 'Ingester.TotalDuplicates', + }, + { + value: 0, + key: 'Store.TotalChunksRef', + }, + { + value: 0, + key: 'Store.TotalChunksDownloaded', + }, + { + value: '0s', + key: 'Store.ChunksDownloadTime', + }, + { + value: '0 B', + key: 'Store.HeadChunkBytes', + }, + { + value: 0, + key: 'Store.HeadChunkLines', + }, + { + value: '0 B', + key: 'Store.DecompressedBytes', + }, + { + value: 0, + key: 'Store.DecompressedLines', + }, + { + value: '0 B', + key: 'Store.CompressedBytes', + }, + { + value: 0, + key: 'Store.TotalDuplicates', + }, + ], + }, + { + timestamp: 1619712655889.617, + fields: [ + { + value: 'debug', + key: 'level', + }, + { + value: '18 MB', + key: 'Summary.BytesProcessedPerSecond', + }, + { + value: 141753, + key: 'Summary.LinesProcessedPerSecond', + }, + { + value: '266 kB', + key: 'Summary.TotalBytesProcessed', + }, + { + value: 2103, + key: 'Summary.TotalLinesProcessed', + }, + { + value: '14.835651ms', + key: 'Summary.ExecTime', + }, + ], + }, + ], + null, + ], + }, + { + name: 'tags', + values: [ + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 'fake', + key: 'organization', + }, + { + value: 'client', + key: 'span.kind', + }, + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 'fake', + key: 'organization', + }, + { + value: 'client', + key: 'span.kind', + }, + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 'gRPC', + key: 'component', + }, + { + value: 'server', + key: 'span.kind', + }, + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 'gRPC', + key: 'component', + }, + { + value: 'client', + key: 'span.kind', + }, + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 0, + key: 'status.code', + }, + ], + [ + { + value: 'const', + key: 'sampler.type', + }, + { + value: true, + key: 'sampler.param', + }, + { + value: 200, + key: 'http.status_code', + }, + { + value: 'GET', + key: 'http.method', + }, + { + value: + '/loki/api/v1/query_range?direction=BACKWARD&limit=1000&query=%7Bcompose_project%3D%22devenv%22%7D&start=1619709055000000000&end=1619712656000000000&step=2', + key: 'http.url', + }, + { + value: 'net/http', + key: 'component', + }, + { + value: 'server', + key: 'span.kind', + }, + { + value: 0, + key: 'status.code', + }, + ], + ], + }, + ], +}); diff --git a/public/app/plugins/datasource/tempo/graphTransform.test.ts b/public/app/plugins/datasource/tempo/graphTransform.test.ts index 7a5ab7ccac8..2726a1b4141 100644 --- a/public/app/plugins/datasource/tempo/graphTransform.test.ts +++ b/public/app/plugins/datasource/tempo/graphTransform.test.ts @@ -1,63 +1,6 @@ -import { DataFrameView, dateTime, createDataFrame, FieldType } from '@grafana/data'; +import { dateTime, createDataFrame, FieldType } from '@grafana/data'; -import { createGraphFrames, mapPromMetricsToServiceMap } from './graphTransform'; -import { bigResponse } from './test/testResponse'; - -describe('createGraphFrames', () => { - it('transforms basic response into nodes and edges frame', async () => { - const frames = createGraphFrames(bigResponse); - expect(frames.length).toBe(2); - expect(frames[0].length).toBe(30); - expect(frames[1].length).toBe(29); - - let view = new DataFrameView(frames[0]); - expect(view.get(0)).toMatchObject({ - id: '4322526419282105830', - title: 'loki-all', - subtitle: 'store.validateQueryTimeRange', - mainstat: '0ms (0.02%)', - secondarystat: '0ms (100%)', - color: 0.00021968356127648162, - }); - - expect(view.get(29)).toMatchObject({ - id: '4450900759028499335', - title: 'loki-all', - subtitle: 'HTTP GET - loki_api_v1_query_range', - mainstat: '18.21ms (100%)', - secondarystat: '3.22ms (17.71%)', - color: 0.17707117189595056, - }); - - view = new DataFrameView(frames[1]); - expect(view.get(28)).toMatchObject({ - id: '4450900759028499335--4790760741274015949', - }); - }); - - it('handles single span response', async () => { - const frames = createGraphFrames(singleSpanResponse); - expect(frames.length).toBe(2); - expect(frames[0].length).toBe(1); - - const view = new DataFrameView(frames[0]); - expect(view.get(0)).toMatchObject({ - id: '4322526419282105830', - title: 'loki-all', - subtitle: 'store.validateQueryTimeRange', - mainstat: '14.98ms (100%)', - secondarystat: '14.98ms (100%)', - color: 1.000007560204647, - }); - }); - - it('handles missing spans', async () => { - const frames = createGraphFrames(missingSpanResponse); - expect(frames.length).toBe(2); - expect(frames[0].length).toBe(2); - expect(frames[1].length).toBe(0); - }); -}); +import { mapPromMetricsToServiceMap } from './graphTransform'; it('assigns correct field type even if values are numbers', async () => { const range = { @@ -199,30 +142,6 @@ describe('mapPromMetricsToServiceMap', () => { }); }); -const singleSpanResponse = createDataFrame({ - fields: [ - { name: 'traceID', values: ['04450900759028499335'] }, - { name: 'spanID', values: ['4322526419282105830'] }, - { name: 'parentSpanID', values: [''] }, - { name: 'operationName', values: ['store.validateQueryTimeRange'] }, - { name: 'serviceName', values: ['loki-all'] }, - { name: 'startTime', values: [1619712655875.4539] }, - { name: 'duration', values: [14.984] }, - ], -}); - -const missingSpanResponse = createDataFrame({ - fields: [ - { name: 'traceID', values: ['04450900759028499335', '04450900759028499335'] }, - { name: 'spanID', values: ['1', '2'] }, - { name: 'parentSpanID', values: ['', '3'] }, - { name: 'operationName', values: ['store.validateQueryTimeRange', 'store.validateQueryTimeRange'] }, - { name: 'serviceName', values: ['loki-all', 'loki-all'] }, - { name: 'startTime', values: [1619712655875.4539, 1619712655880.4539] }, - { name: 'duration', values: [14.984, 4.984] }, - ], -}); - const totalsPromMetric = (namespace?: boolean) => createDataFrame({ refId: 'traces_service_graph_request_total', diff --git a/public/app/plugins/datasource/tempo/graphTransform.ts b/public/app/plugins/datasource/tempo/graphTransform.ts index 5c5b9cedfe0..9efc7eea29c 100644 --- a/public/app/plugins/datasource/tempo/graphTransform.ts +++ b/public/app/plugins/datasource/tempo/graphTransform.ts @@ -10,127 +10,6 @@ import { FieldType, toDataFrame, } from '@grafana/data'; -import { getNonOverlappingDuration, getStats, makeFrames, makeSpanMap } from '@grafana/o11y-ds-frontend'; - -/** - * Row in a trace dataFrame - */ -interface Row { - traceID: string; - spanID: string; - parentSpanID: string; - operationName: string; - serviceName: string; - serviceTags: string; - startTime: number; - duration: number; - logs: string; - tags: string; -} - -interface Node { - [Fields.id]: string; - [Fields.title]: string; - [Fields.subTitle]: string; - [Fields.mainStat]: string; - [Fields.secondaryStat]: string; - [Fields.color]: number; -} - -interface Edge { - [Fields.id]: string; - [Fields.target]: string; - [Fields.source]: string; -} - -export function createGraphFrames(data: DataFrame): DataFrame[] { - const { nodes, edges } = convertTraceToGraph(data); - const [nodesFrame, edgesFrame] = makeFrames(); - - for (const node of nodes) { - nodesFrame.add(node); - } - for (const edge of edges) { - edgesFrame.add(edge); - } - - return [nodesFrame, edgesFrame]; -} - -function convertTraceToGraph(data: DataFrame): { nodes: Node[]; edges: Edge[] } { - const nodes: Node[] = []; - const edges: Edge[] = []; - - const view = new DataFrameView(data); - - const traceDuration = findTraceDuration(view); - const spanMap = makeSpanMap((index) => { - if (index >= data.length) { - return undefined; - } - const span = view.get(index); - return { - span: { ...span }, - id: span.spanID, - parentIds: span.parentSpanID ? [span.parentSpanID] : [], - }; - }); - - for (let i = 0; i < view.length; i++) { - const row = view.get(i); - - const ranges: Array<[number, number]> = spanMap[row.spanID].children.map((c) => { - const span = spanMap[c].span; - return [span.startTime, span.startTime + span.duration]; - }); - const childrenDuration = getNonOverlappingDuration(ranges); - const selfDuration = row.duration - childrenDuration; - const stats = getStats(row.duration, traceDuration, selfDuration); - - nodes.push({ - [Fields.id]: row.spanID, - [Fields.title]: row.serviceName ?? '', - [Fields.subTitle]: row.operationName, - [Fields.mainStat]: stats.main, - [Fields.secondaryStat]: stats.secondary, - [Fields.color]: selfDuration / traceDuration, - }); - - // Sometimes some span can be missing. Don't add edges for those. - if (row.parentSpanID && spanMap[row.parentSpanID].span) { - edges.push({ - [Fields.id]: row.parentSpanID + '--' + row.spanID, - [Fields.target]: row.spanID, - [Fields.source]: row.parentSpanID, - }); - } - } - - return { nodes, edges }; -} - -/** - * Get the duration of the whole trace as it isn't a part of the response data. - * Note: Seems like this should be the same as just longest span, but this is probably safer. - */ -function findTraceDuration(view: DataFrameView): number { - let traceEndTime = 0; - let traceStartTime = Infinity; - - for (let i = 0; i < view.length; i++) { - const row = view.get(i); - - if (row.startTime < traceStartTime) { - traceStartTime = row.startTime; - } - - if (row.startTime + row.duration > traceEndTime) { - traceEndTime = row.startTime + row.duration; - } - } - - return traceEndTime - traceStartTime; -} export const secondsMetric = 'traces_service_graph_request_server_seconds_sum'; export const totalsMetric = 'traces_service_graph_request_total'; diff --git a/public/app/plugins/datasource/tempo/resultTransformer.ts b/public/app/plugins/datasource/tempo/resultTransformer.ts index 52e9424c514..94587357c5f 100644 --- a/public/app/plugins/datasource/tempo/resultTransformer.ts +++ b/public/app/plugins/datasource/tempo/resultTransformer.ts @@ -22,11 +22,10 @@ import { TraceSpanReference, TraceSpanRow, } from '@grafana/data'; -import { TraceToProfilesData } from '@grafana/o11y-ds-frontend'; +import { createNodeGraphFrames, TraceToProfilesData } from '@grafana/o11y-ds-frontend'; import { getDataSourceSrv } from '@grafana/runtime'; import { SearchTableType } from './dataquery.gen'; -import { createGraphFrames } from './graphTransform'; import { Span, SpanAttributes, Spanset, TempoJsonData, TraceSearchMetadata } from './types'; function getAttributeValue(value: collectorTypes.opentelemetryProto.common.v1.AnyValue): any { @@ -195,7 +194,7 @@ export function transformFromOTLP( let data = [frame]; if (nodeGraph) { - data.push(...(createGraphFrames(frame) as MutableDataFrame[])); + data.push(...(createNodeGraphFrames(frame) as MutableDataFrame[])); } return { data }; @@ -446,7 +445,7 @@ export function transformTrace( let data = [...response.data]; if (nodeGraph) { - data.push(...createGraphFrames(toDataFrame(frame))); + data.push(...createNodeGraphFrames(toDataFrame(frame))); } return { diff --git a/public/app/plugins/datasource/tempo/test/testResponse.ts b/public/app/plugins/datasource/tempo/test/testResponse.ts index 765e55cf08c..be3a14631fb 100644 --- a/public/app/plugins/datasource/tempo/test/testResponse.ts +++ b/public/app/plugins/datasource/tempo/test/testResponse.ts @@ -1,1802 +1,5 @@ import { FieldType, MutableDataFrame } from '@grafana/data'; -export const bigResponse = new MutableDataFrame({ - fields: [ - { - name: 'traceID', - values: [ - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - '04450900759028499335', - ], - }, - { - name: 'spanID', - values: [ - '4322526419282105830', - '3095626263385822295', - '6397320272727147889', - '1853508259384889601', - '835290848278351608', - '5850531882244692375', - '663601651643245598', - '7501257416198979329', - '197793019475688138', - '1615811285828848458', - '4574624098918415850', - '7514953483465123028', - '8952478937948910109', - '4807320274580307678', - '3568196851335088191', - '8875894577931816561', - '797350946023907600', - '3198122728676260175', - '2528859115168229623', - '2108752984455624810', - '4343095775387093037', - '8751049139444653283', - '7753188085660872705', - '879502345235818407', - '3139747016493009985', - '7783241608507301178', - '1799838932837912875', - '4045260340056550643', - '4790760741274015949', - '4450900759028499335', - ], - }, - { - name: 'parentSpanID', - values: [ - '3095626263385822295', - '3198122728676260175', - '7501257416198979329', - '663601651643245598', - '5850531882244692375', - '663601651643245598', - '7501257416198979329', - '197793019475688138', - '1615811285828848458', - '3198122728676260175', - '8875894577931816561', - '3568196851335088191', - '4807320274580307678', - '3568196851335088191', - '8875894577931816561', - '797350946023907600', - '3198122728676260175', - '1799838932837912875', - '4343095775387093037', - '4343095775387093037', - '8751049139444653283', - '1799838932837912875', - '3139747016493009985', - '3139747016493009985', - '7783241608507301178', - '1799838932837912875', - '4045260340056550643', - '4790760741274015949', - '4450900759028499335', - '', - ], - }, - { - name: 'operationName', - values: [ - 'store.validateQueryTimeRange', - 'store.validateQuery', - 'cachingIndexClient.cacheFetch', - 'Shipper.Uploads.Query', - 'Shipper.Downloads.Table.MultiQueries', - 'Shipper.Downloads.Query', - 'QUERY', - 'store.lookupEntriesByQueries', - 'Store.lookupIdsByMetricNameMatcher', - 'SeriesStore.lookupSeriesByMetricNameMatchers', - 'cachingIndexClient.cacheFetch', - 'Shipper.Uploads.Query', - 'Shipper.Downloads.Table.MultiQueries', - 'Shipper.Downloads.Query', - 'QUERY', - 'store.lookupEntriesByQueries', - 'SeriesStore.lookupChunksBySeries', - 'SeriesStore.GetChunkRefs', - 'Fetcher.processCacheResponse', - 'GetParallelChunks', - 'ChunkStore.FetchChunks', - 'LokiStore.fetchLazyChunks', - 'Fetcher.processCacheResponse', - 'GetParallelChunks', - 'ChunkStore.FetchChunks', - 'LokiStore.fetchLazyChunks', - '/logproto.Querier/Query', - '/logproto.Querier/Query', - 'query.Exec', - 'HTTP GET - loki_api_v1_query_range', - ], - }, - { - name: 'serviceName', - values: [ - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - 'loki-all', - ], - }, - { - name: 'serviceTags', - values: [ - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - [ - { - value: 'loki-all', - key: 'service.name', - }, - { - value: 'Jaeger-Go-2.25.0', - key: 'opencensus.exporterversion', - }, - { - value: '708c78ea08c1', - key: 'host.hostname', - }, - { - value: '172.18.0.3', - key: 'ip', - }, - { - value: '632583de9a4a497b', - key: 'client-uuid', - }, - ], - ], - }, - { - name: 'startTime', - values: [ - 1619712655875.4539, 1619712655875.4502, 1619712655875.592, 1619712655875.653, 1619712655875.731, - 1619712655875.712, 1619712655875.6428, 1619712655875.5771, 1619712655875.5168, 1619712655875.488, - 1619712655875.939, 1619712655875.959, 1619712655876.0051, 1619712655875.991, 1619712655875.9539, - 1619712655875.9338, 1619712655875.917, 1619712655875.442, 1619712655876.365, 1619712655876.3809, - 1619712655876.359, 1619712655876.331, 1619712655876.62, 1619712655876.629, 1619712655876.616, 1619712655876.592, - 1619712655875.052, 1619712655874.819, 1619712655874.7021, 1619712655874.591, - ], - }, - { - name: 'duration', - values: [ - 0.004, 0.016, 0.039, 0.047, 0.063, 0.087, 0.163, 0.303, 0.384, 0.421, 0.012, 0.021, 0.033, 0.048, 0.092, 0.169, - 0.197, 0.689, 0.012, 0.196, 0.225, 0.255, 0.007, 0.167, 0.189, 0.217, 13.918, 14.723, 14.984, 18.208, - ], - }, - { - name: 'logs', - values: [ - null, - null, - [ - { - timestamp: 1619712655875.631, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 0, - key: 'hits', - }, - { - value: 16, - key: 'misses', - }, - ], - }, - ], - null, - [ - { - timestamp: 1619712655875.738, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'index_18746', - key: 'table-name', - }, - { - value: 16, - key: 'query-count', - }, - ], - }, - { - timestamp: 1619712655875.773, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'compactor-1619711145.gz', - key: 'queried-db', - }, - ], - }, - { - timestamp: 1619712655875.794, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: '708c78ea08c1-1619516350042748959-1619711100.gz', - key: 'queried-db', - }, - ], - }, - ], - [ - { - timestamp: 1619712655875.719, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'index_18746', - key: 'table-name', - }, - ], - }, - ], - [ - { - timestamp: 1619712655875.7068, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'uploads-manager', - key: 'queried', - }, - ], - }, - { - timestamp: 1619712655875.803, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'downloads-manager', - key: 'queried', - }, - ], - }, - ], - null, - [ - { - timestamp: 1619712655875.536, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'logs', - key: 'metricName', - }, - { - value: 'compose_project="devenv"', - key: 'matcher', - }, - ], - }, - { - timestamp: 1619712655875.568, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'compose_project="devenv"', - key: 'matcher', - }, - { - value: 16, - key: 'queries', - }, - ], - }, - { - timestamp: 1619712655875.5762, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'compose_project="devenv"', - key: 'matcher', - }, - { - value: 16, - key: 'filteredQueries', - }, - ], - }, - { - timestamp: 1619712655875.892, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'compose_project="devenv"', - key: 'matcher', - }, - { - value: 2, - key: 'entries', - }, - ], - }, - { - timestamp: 1619712655875.9019, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'compose_project="devenv"', - key: 'matcher', - }, - { - value: 1, - key: 'ids', - }, - ], - }, - ], - [ - { - timestamp: 1619712655875.4958, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'logs', - key: 'metricName', - }, - { - value: 1, - key: 'matchers', - }, - ], - }, - { - timestamp: 1619712655875.9092, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'post intersection', - key: 'msg', - }, - { - value: 1, - key: 'ids', - }, - ], - }, - ], - [ - { - timestamp: 1619712655875.9512, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 0, - key: 'hits', - }, - { - value: 1, - key: 'misses', - }, - ], - }, - ], - null, - [ - { - timestamp: 1619712655876.012, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'index_18746', - key: 'table-name', - }, - { - value: 1, - key: 'query-count', - }, - ], - }, - { - timestamp: 1619712655876.031, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'compactor-1619711145.gz', - key: 'queried-db', - }, - ], - }, - { - timestamp: 1619712655876.0378, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: '708c78ea08c1-1619516350042748959-1619711100.gz', - key: 'queried-db', - }, - ], - }, - ], - [ - { - timestamp: 1619712655875.999, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'index_18746', - key: 'table-name', - }, - ], - }, - ], - [ - { - timestamp: 1619712655875.988, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'uploads-manager', - key: 'queried', - }, - ], - }, - { - timestamp: 1619712655876.0452, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'downloads-manager', - key: 'queried', - }, - ], - }, - ], - null, - [ - { - timestamp: 1619712655875.925, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 1, - key: 'seriesIDs', - }, - ], - }, - { - timestamp: 1619712655875.9329, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 1, - key: 'queries', - }, - ], - }, - { - timestamp: 1619712655876.1118, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 2, - key: 'entries', - }, - ], - }, - ], - [ - { - timestamp: 1619712655875.4849, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'logs', - key: 'metric', - }, - ], - }, - { - timestamp: 1619712655875.915, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 1, - key: 'series-ids', - }, - ], - }, - { - timestamp: 1619712655876.12, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 2, - key: 'chunk-ids', - }, - ], - }, - { - timestamp: 1619712655876.131, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 2, - key: 'chunks-post-filtering', - }, - ], - }, - ], - [ - { - timestamp: 1619712655876.375, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 1, - key: 'chunks', - }, - { - value: 0, - key: 'decodeRequests', - }, - { - value: 1, - key: 'missing', - }, - ], - }, - ], - [ - { - timestamp: 1619712655876.384, - fields: [ - { - value: 1, - key: 'chunks requested', - }, - ], - }, - { - timestamp: 1619712655876.577, - fields: [ - { - value: 1, - key: 'chunks fetched', - }, - ], - }, - ], - null, - [ - { - timestamp: 1619712655876.342, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'loading lazy chunks', - key: 'msg', - }, - { - value: 1, - key: 'chunks', - }, - ], - }, - ], - [ - { - timestamp: 1619712655876.627, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 1, - key: 'chunks', - }, - { - value: 0, - key: 'decodeRequests', - }, - { - value: 1, - key: 'missing', - }, - ], - }, - ], - [ - { - timestamp: 1619712655876.631, - fields: [ - { - value: 1, - key: 'chunks requested', - }, - ], - }, - { - timestamp: 1619712655876.795, - fields: [ - { - value: 1, - key: 'chunks fetched', - }, - ], - }, - ], - null, - [ - { - timestamp: 1619712655876.604, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 'loading lazy chunks', - key: 'msg', - }, - { - value: 1, - key: 'chunks', - }, - ], - }, - ], - null, - null, - [ - { - timestamp: 1619712655889.606, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: 1, - key: 'Ingester.TotalReached', - }, - { - value: 1, - key: 'Ingester.TotalChunksMatched', - }, - { - value: 0, - key: 'Ingester.TotalBatches', - }, - { - value: 0, - key: 'Ingester.TotalLinesSent', - }, - { - value: '47 kB', - key: 'Ingester.HeadChunkBytes', - }, - { - value: 424, - key: 'Ingester.HeadChunkLines', - }, - { - value: '219 kB', - key: 'Ingester.DecompressedBytes', - }, - { - value: 1679, - key: 'Ingester.DecompressedLines', - }, - { - value: '124 kB', - key: 'Ingester.CompressedBytes', - }, - { - value: 0, - key: 'Ingester.TotalDuplicates', - }, - { - value: 0, - key: 'Store.TotalChunksRef', - }, - { - value: 0, - key: 'Store.TotalChunksDownloaded', - }, - { - value: '0s', - key: 'Store.ChunksDownloadTime', - }, - { - value: '0 B', - key: 'Store.HeadChunkBytes', - }, - { - value: 0, - key: 'Store.HeadChunkLines', - }, - { - value: '0 B', - key: 'Store.DecompressedBytes', - }, - { - value: 0, - key: 'Store.DecompressedLines', - }, - { - value: '0 B', - key: 'Store.CompressedBytes', - }, - { - value: 0, - key: 'Store.TotalDuplicates', - }, - ], - }, - { - timestamp: 1619712655889.617, - fields: [ - { - value: 'debug', - key: 'level', - }, - { - value: '18 MB', - key: 'Summary.BytesProcessedPerSecond', - }, - { - value: 141753, - key: 'Summary.LinesProcessedPerSecond', - }, - { - value: '266 kB', - key: 'Summary.TotalBytesProcessed', - }, - { - value: 2103, - key: 'Summary.TotalLinesProcessed', - }, - { - value: '14.835651ms', - key: 'Summary.ExecTime', - }, - ], - }, - ], - null, - ], - }, - { - name: 'tags', - values: [ - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 'fake', - key: 'organization', - }, - { - value: 'client', - key: 'span.kind', - }, - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 'fake', - key: 'organization', - }, - { - value: 'client', - key: 'span.kind', - }, - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 'gRPC', - key: 'component', - }, - { - value: 'server', - key: 'span.kind', - }, - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 'gRPC', - key: 'component', - }, - { - value: 'client', - key: 'span.kind', - }, - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 0, - key: 'status.code', - }, - ], - [ - { - value: 'const', - key: 'sampler.type', - }, - { - value: true, - key: 'sampler.param', - }, - { - value: 200, - key: 'http.status_code', - }, - { - value: 'GET', - key: 'http.method', - }, - { - value: - '/loki/api/v1/query_range?direction=BACKWARD&limit=1000&query=%7Bcompose_project%3D%22devenv%22%7D&start=1619709055000000000&end=1619712656000000000&step=2', - key: 'http.url', - }, - { - value: 'net/http', - key: 'component', - }, - { - value: 'server', - key: 'span.kind', - }, - { - value: 0, - key: 'status.code', - }, - ], - ], - }, - ], -}); - export const otlpDataFrameFromResponse = new MutableDataFrame({ meta: { preferredVisualisationType: 'trace',