{"version":3,"file":"jaegerPlugin.d254fd4a19ef0cb5b4f5.js","mappings":"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","sources":["webpack://grafana/./packages/grafana-o11y-ds-frontend/src/NodeGraph/NodeGraphSettings.tsx","webpack://grafana/./packages/grafana-o11y-ds-frontend/src/TraceToMetrics/TraceToMetricsSettings.tsx","webpack://grafana/./public/app/plugins/datasource/jaeger/CheatSheet.tsx","webpack://grafana/./public/app/plugins/datasource/jaeger/util.ts","webpack://grafana/./public/app/plugins/datasource/jaeger/components/SearchForm.tsx","webpack://grafana/./public/app/plugins/datasource/jaeger/components/QueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/jaeger/configuration/TraceIdTimeParams.tsx","webpack://grafana/./public/app/plugins/datasource/jaeger/configuration/ConfigEditor.tsx","webpack://grafana/./public/app/plugins/datasource/jaeger/dependencyGraphTransform.ts","webpack://grafana/./public/app/plugins/datasource/jaeger/graphTransform.ts","webpack://grafana/./public/app/plugins/datasource/jaeger/datasource.ts","webpack://grafana/./public/app/plugins/datasource/jaeger/module.ts"],"sourcesContent":["import { css } from '@emotion/css';\nimport React from 'react';\n\nimport {\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n GrafanaTheme2,\n updateDatasourcePluginJsonDataOption,\n} from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSubSection } from '@grafana/experimental';\nimport { InlineField, InlineFieldRow, InlineSwitch, useStyles2 } from '@grafana/ui';\n\nexport interface NodeGraphOptions {\n enabled?: boolean;\n}\n\nexport interface NodeGraphData extends DataSourceJsonData {\n nodeGraph?: NodeGraphOptions;\n}\n\ninterface Props extends DataSourcePluginOptionsEditorProps {}\n\nexport function NodeGraphSettings({ options, onOptionsChange }: Props) {\n const styles = useStyles2(getStyles);\n\n return (\n
\n \n \n ) =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'nodeGraph', {\n ...options.jsonData.nodeGraph,\n enabled: event.currentTarget.checked,\n })\n }\n />\n \n \n
\n );\n}\n\nexport const NodeGraphSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => {\n let suffix = options.type;\n suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#node-graph' : '/#node-graph';\n\n return (\n \n }\n >\n \n \n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n infoText: css({\n label: 'infoText',\n paddingBottom: theme.spacing(2),\n color: theme.colors.text.secondary,\n }),\n container: css({\n label: 'container',\n width: '100%',\n }),\n row: css({\n label: 'row',\n alignItems: 'baseline',\n }),\n});\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport {\n DataSourceInstanceSettings,\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n GrafanaTheme2,\n updateDatasourcePluginJsonDataOption,\n} from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSection } from '@grafana/experimental';\nimport { DataSourcePicker } from '@grafana/runtime';\nimport { Button, InlineField, InlineFieldRow, Input, useStyles2 } from '@grafana/ui';\n\nimport { IntervalInput } from '../IntervalInput/IntervalInput';\nimport { TagMappingInput } from '../TraceToLogs/TagMappingInput';\nimport { getTimeShiftLabel, getTimeShiftTooltip, invalidTimeShiftError } from '../TraceToLogs/TraceToLogsSettings';\n\nexport interface TraceToMetricsOptions {\n datasourceUid?: string;\n tags?: Array<{ key: string; value: string }>;\n queries: TraceToMetricQuery[];\n spanStartTimeShift?: string;\n spanEndTimeShift?: string;\n}\n\nexport interface TraceToMetricQuery {\n name?: string;\n query?: string;\n}\n\nexport interface TraceToMetricsData extends DataSourceJsonData {\n tracesToMetrics?: TraceToMetricsOptions;\n}\n\ninterface Props extends DataSourcePluginOptionsEditorProps {}\n\nexport function TraceToMetricsSettings({ options, onOptionsChange }: Props) {\n const styles = useStyles2(getStyles);\n\n return (\n
\n \n \n \n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n datasourceUid: ds.uid,\n })\n }\n />\n \n {options.jsonData.tracesToMetrics?.datasourceUid ? (\n {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n datasourceUid: undefined,\n });\n }}\n >\n Clear\n \n ) : null}\n \n\n \n {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n spanStartTimeShift: val,\n });\n }}\n placeholder={'-2m'}\n isInvalidError={invalidTimeShiftError}\n />\n \n\n \n {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n spanEndTimeShift: val,\n });\n }}\n placeholder={'2m'}\n isInvalidError={invalidTimeShiftError}\n />\n \n\n \n \n \n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n tags: v,\n })\n }\n />\n \n \n\n {options.jsonData.tracesToMetrics?.queries?.map((query, i) => (\n
\n \n {\n const newQueries = (options.jsonData.tracesToMetrics?.queries ?? []).map(\n (traceToMetricQuery, index) => {\n return index === i ? { ...traceToMetricQuery, name: e.currentTarget.value } : traceToMetricQuery;\n }\n );\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: newQueries,\n });\n }}\n />\n \n \n {\n const updatedQueries = (options.jsonData.tracesToMetrics?.queries ?? []).map(\n (traceToMetricQuery, index) => {\n return index === i ? { ...traceToMetricQuery, query: e.currentTarget.value } : traceToMetricQuery;\n }\n );\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: updatedQueries,\n });\n }}\n />\n \n\n {\n const newQueries = options.jsonData.tracesToMetrics?.queries.filter((_, index) => index !== i);\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: newQueries,\n });\n }}\n />\n
\n ))}\n\n {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'tracesToMetrics', {\n ...options.jsonData.tracesToMetrics,\n queries: [...(options.jsonData.tracesToMetrics?.queries ?? []), { query: '' }],\n });\n }}\n >\n Add query\n \n
\n );\n}\n\nexport const TraceToMetricsSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => {\n let suffix = options.type;\n suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#trace-to-metrics' : '/#trace-to-metrics';\n\n return (\n \n }\n isCollapsible={true}\n isInitiallyOpen={true}\n >\n \n \n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n infoText: {\n paddingBottom: theme.spacing(2),\n color: theme.colors.text.secondary,\n },\n row: css({\n label: 'row',\n alignItems: 'baseline',\n }),\n queryRow: css({\n label: 'queryRow',\n display: 'flex',\n flexFlow: 'wrap',\n }),\n});\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nexport default function CheatSheet() {\n const styles = useStyles2(getStyles);\n return (\n <>\n

Jaeger Cheat Sheet

\n

\n This cheat sheet provides a quick overview of the query types that are available. For more details about the\n Jaeger data source, check out{' '}\n \n the documentation\n \n .\n

\n\n
\n
    \n
  • \n Search - filter traces by service name. Addtionally, you can filter by tags or min/max duration, as well as\n limit the number of traces that are returned.\n
  • \n
  • TraceID - if you have a trace ID, simply enter the trace ID to see the trace.
  • \n
  • \n JSON File - you can upload a JSON file that contains a single trace to visualize it. If the file has multiple\n traces then the first trace is used for visualization. An example of a valid JSON file can be found in{' '}\n \n this section\n {' '}\n of the documentation.\n
  • \n
\n \n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n anchorTag: css`\n color: ${theme.colors.text.link};\n `,\n unorderedList: css`\n list-style-type: none;\n `,\n});\n","import logfmt from 'logfmt';\n\nexport function convertTagsLogfmt(tags: string | undefined) {\n if (!tags) {\n return '';\n }\n const data = logfmt.parse(tags);\n Object.keys(data).forEach((key) => {\n const value = data[key];\n if (typeof value !== 'string') {\n data[key] = String(value);\n }\n });\n return JSON.stringify(data);\n}\n\nexport function transformToLogfmt(tags: string | undefined) {\n if (!tags) {\n return '';\n }\n try {\n return logfmt.stringify(JSON.parse(tags));\n } catch {\n return tags;\n }\n}\n","import { css } from '@emotion/css';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { fuzzyMatch, InlineField, InlineFieldRow, Input, Select } from '@grafana/ui';\nimport { notifyApp } from 'app/core/actions';\nimport { createErrorNotification } from 'app/core/copy/appNotification';\nimport { dispatch } from 'app/store/store';\n\nimport { JaegerDatasource } from '../datasource';\nimport { JaegerQuery } from '../types';\nimport { transformToLogfmt } from '../util';\n\nconst durationPlaceholder = 'e.g. 1.2s, 100ms, 500us';\n\ntype Props = {\n datasource: JaegerDatasource;\n query: JaegerQuery;\n onChange: (value: JaegerQuery) => void;\n};\n\nexport const ALL_OPERATIONS_KEY = 'All';\nconst allOperationsOption: SelectableValue = {\n label: ALL_OPERATIONS_KEY,\n value: undefined,\n};\n\nexport function SearchForm({ datasource, query, onChange }: Props) {\n const [serviceOptions, setServiceOptions] = useState>>();\n const [operationOptions, setOperationOptions] = useState>>();\n const [isLoading, setIsLoading] = useState<{\n services: boolean;\n operations: boolean;\n }>({\n services: false,\n operations: false,\n });\n\n const loadOptions = useCallback(\n async (url: string, loaderOfType: string, query = ''): Promise>> => {\n setIsLoading((prevValue) => ({ ...prevValue, [loaderOfType]: true }));\n\n try {\n const values: string[] | null = await datasource.metadataRequest(url);\n if (!values) {\n return [{ label: `No ${loaderOfType} found`, value: `No ${loaderOfType} found` }];\n }\n\n const options: SelectableValue[] = values.sort().map((option) => ({\n label: option,\n value: option,\n }));\n\n const filteredOptions = options.filter((item) => (item.value ? fuzzyMatch(item.value, query).found : false));\n return filteredOptions;\n } catch (error) {\n if (error instanceof Error) {\n dispatch(notifyApp(createErrorNotification('Error', error)));\n }\n return [];\n } finally {\n setIsLoading((prevValue) => ({ ...prevValue, [loaderOfType]: false }));\n }\n },\n [datasource]\n );\n\n useEffect(() => {\n const getServices = async () => {\n const services = await loadOptions('/api/services', 'services');\n if (query.service && getTemplateSrv().containsTemplate(query.service)) {\n services.push(toOption(query.service));\n }\n setServiceOptions(services);\n };\n getServices();\n }, [datasource, loadOptions, query.service]);\n\n useEffect(() => {\n const getOperations = async () => {\n const operations = await loadOptions(\n `/api/services/${encodeURIComponent(getTemplateSrv().replace(query.service!))}/operations`,\n 'operations'\n );\n if (query.operation && getTemplateSrv().containsTemplate(query.operation)) {\n operations.push(toOption(query.operation));\n }\n setOperationOptions([allOperationsOption, ...operations]);\n };\n if (query.service) {\n getOperations();\n }\n }, [datasource, query.service, loadOptions, query.operation]);\n\n return (\n
\n \n \n loadOptions('/api/services', 'services')}\n isLoading={isLoading.services}\n value={serviceOptions?.find((v) => v?.value === query.service) || undefined}\n placeholder=\"Select a service\"\n onChange={(v) =>\n onChange({\n ...query,\n service: v?.value!,\n operation: query.service !== v?.value ? undefined : query.operation,\n })\n }\n menuPlacement=\"bottom\"\n isClearable\n aria-label={'select-service-name'}\n allowCustomValue={true}\n />\n \n \n \n \n \n loadOptions(\n `/api/services/${encodeURIComponent(getTemplateSrv().replace(query.service!))}/operations`,\n 'operations'\n )\n }\n isLoading={isLoading.operations}\n value={operationOptions?.find((v) => v.value === query.operation) || null}\n placeholder=\"Select an operation\"\n onChange={(v) =>\n onChange({\n ...query,\n operation: v?.value! || undefined,\n })\n }\n menuPlacement=\"bottom\"\n isClearable\n aria-label={'select-operation-name'}\n allowCustomValue={true}\n />\n \n \n \n \n \n onChange({\n ...query,\n tags: v.currentTarget.value,\n })\n }\n />\n \n \n \n \n \n onChange({\n ...query,\n minDuration: v.currentTarget.value,\n })\n }\n />\n \n \n \n \n \n onChange({\n ...query,\n maxDuration: v.currentTarget.value,\n })\n }\n />\n \n \n \n \n \n onChange({\n ...query,\n limit: v.currentTarget.value ? parseInt(v.currentTarget.value, 10) : undefined,\n })\n }\n />\n \n \n
\n );\n}\n\nexport default SearchForm;\n","import { css } from '@emotion/css';\nimport React, { useState } from 'react';\n\nimport { QueryEditorProps } from '@grafana/data';\nimport {\n Button,\n FileDropzone,\n HorizontalGroup,\n InlineField,\n InlineFieldRow,\n Modal,\n QueryField,\n RadioButtonGroup,\n useStyles2,\n useTheme2,\n} from '@grafana/ui';\n\nimport { JaegerDatasource } from '../datasource';\nimport { JaegerQuery, JaegerQueryType } from '../types';\n\nimport { SearchForm } from './SearchForm';\n\ntype Props = QueryEditorProps;\n\nexport function QueryEditor({ datasource, query, onChange, onRunQuery }: Props) {\n const [uploadModalOpen, setUploadModalOpen] = useState(false);\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n\n const onChangeQuery = (value: string) => {\n const nextQuery: JaegerQuery = { ...query, query: value };\n onChange(nextQuery);\n };\n\n const renderEditorBody = () => {\n switch (query.queryType) {\n case 'search':\n return ;\n case 'dependencyGraph':\n return null;\n default:\n return (\n \n \n \n \n \n );\n }\n };\n\n return (\n <>\n setUploadModalOpen(false)}>\n
\n {\n datasource.uploadedJson = result;\n onChange({\n ...query,\n queryType: 'upload',\n });\n setUploadModalOpen(false);\n onRunQuery();\n }}\n />\n
\n
\n
\n \n \n \n \n options={[\n { value: 'search', label: 'Search' },\n { value: undefined, label: 'TraceID' },\n { value: 'dependencyGraph', label: 'Dependency graph' },\n ]}\n value={query.queryType}\n onChange={(v) =>\n onChange({\n ...query,\n queryType: v,\n })\n }\n size=\"md\"\n />\n {\n setUploadModalOpen(true);\n }}\n >\n Import trace\n \n \n \n \n {renderEditorBody()}\n
\n \n );\n}\n\nconst getStyles = () => ({\n container: css({\n width: '100%',\n }),\n});\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport {\n DataSourceJsonData,\n DataSourcePluginOptionsEditorProps,\n updateDatasourcePluginJsonDataOption,\n} from '@grafana/data';\nimport { InlineField, InlineFieldRow, InlineSwitch } from '@grafana/ui';\n\nexport interface TraceIdTimeParamsOptions {\n enabled?: boolean;\n}\n\nexport interface TraceIdTimeParamsData extends DataSourceJsonData {\n traceIdTimeParams?: TraceIdTimeParamsOptions;\n}\n\ninterface Props extends DataSourcePluginOptionsEditorProps {}\n\nexport function TraceIdTimeParams({ options, onOptionsChange }: Props) {\n return (\n
\n

Query Trace by ID with Time Params

\n \n \n ) =>\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'traceIdTimeParams', {\n ...options.jsonData.traceIdTimeParams,\n enabled: event.currentTarget.checked,\n })\n }\n />\n \n \n
\n );\n}\n\nconst styles = {\n container: css`\n label: container;\n width: 100%;\n `,\n row: css`\n label: row;\n align-items: baseline;\n `,\n};\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport { DataSourcePluginOptionsEditorProps, GrafanaTheme2 } from '@grafana/data';\nimport { ConfigSection, DataSourceDescription } from '@grafana/experimental';\nimport { NodeGraphSection, SpanBarSection, TraceToLogsSection, TraceToMetricsSection } from '@grafana/o11y-ds-frontend';\nimport { config } from '@grafana/runtime';\nimport { DataSourceHttpSettings, useStyles2, Divider, Stack } from '@grafana/ui';\n\nimport { TraceIdTimeParams } from './TraceIdTimeParams';\n\nexport type Props = DataSourcePluginOptionsEditorProps;\n\nexport const ConfigEditor = ({ options, onOptionsChange }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n
\n \n\n \n\n \n\n \n\n \n\n {config.featureToggles.traceToMetrics ? (\n <>\n \n \n \n ) : null}\n\n \n \n \n \n \n \n \n
\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css`\n label: container;\n margin-bottom: ${theme.spacing(2)};\n max-width: 900px;\n `,\n});\n","import {\n DataFrame,\n DataQueryResponse,\n FieldType,\n MutableDataFrame,\n NodeGraphDataFrameFieldNames as Fields,\n} from '@grafana/data';\n\nimport { JaegerServiceDependency } from './types';\n\ninterface Node {\n [Fields.id]: string;\n [Fields.title]: string;\n}\n\ninterface Edge {\n [Fields.id]: string;\n [Fields.target]: string;\n [Fields.source]: string;\n [Fields.mainStat]: number;\n}\n\n/**\n * Error schema used by the Jaeger dependencies API.\n */\ninterface JaegerDependenciesResponseError {\n code: number;\n msg: string;\n}\n\ninterface JaegerDependenciesResponse {\n data?: {\n errors?: JaegerDependenciesResponseError[];\n data?: JaegerServiceDependency[];\n };\n}\n\n/**\n * Transforms a Jaeger dependencies API response to a Grafana {@link DataQueryResponse}.\n * @param response Raw response data from the API proxy.\n */\nexport function mapJaegerDependenciesResponse(response: JaegerDependenciesResponse): DataQueryResponse {\n const errors = response?.data?.errors;\n if (errors) {\n return {\n data: [],\n errors: errors.map((e: JaegerDependenciesResponseError) => ({ message: e.msg, status: e.code })),\n };\n }\n const dependencies = response?.data?.data;\n if (dependencies) {\n return {\n data: convertDependenciesToGraph(dependencies),\n };\n }\n\n return { data: [] };\n}\n\n/**\n * Converts a list of Jaeger service dependencies to a Grafana {@link DataFrame} array suitable for the node graph panel.\n * @param dependencies List of Jaeger service dependencies as returned by the Jaeger dependencies API.\n */\nfunction convertDependenciesToGraph(dependencies: JaegerServiceDependency[]): DataFrame[] {\n const servicesByName = new Map();\n const edges: Edge[] = [];\n\n for (const dependency of dependencies) {\n addServiceNode(dependency.parent, servicesByName);\n addServiceNode(dependency.child, servicesByName);\n\n edges.push({\n [Fields.id]: dependency.parent + '--' + dependency.child,\n [Fields.target]: dependency.child,\n [Fields.source]: dependency.parent,\n [Fields.mainStat]: dependency.callCount,\n });\n }\n\n const nodesFrame = new MutableDataFrame({\n fields: [\n { name: Fields.id, type: FieldType.string },\n { name: Fields.title, type: FieldType.string },\n ],\n meta: {\n preferredVisualisationType: 'nodeGraph',\n },\n });\n\n const edgesFrame = new MutableDataFrame({\n fields: [\n { name: Fields.id, type: FieldType.string },\n { name: Fields.target, type: FieldType.string },\n { name: Fields.source, type: FieldType.string },\n { name: Fields.mainStat, type: FieldType.string, config: { displayName: 'Call count' } },\n ],\n meta: {\n preferredVisualisationType: 'nodeGraph',\n },\n });\n\n for (const node of servicesByName.values()) {\n nodesFrame.add(node);\n }\n\n for (const edge of edges) {\n edgesFrame.add(edge);\n }\n\n return [nodesFrame, edgesFrame];\n}\n\n/**\n * Convenience function to register a service node in the dependency graph.\n * @param service Name of the service to register.\n * @param servicesByName Map of service nodes keyed name.\n */\nfunction addServiceNode(service: string, servicesByName: Map) {\n if (!servicesByName.has(service)) {\n servicesByName.set(service, {\n [Fields.id]: service,\n [Fields.title]: service,\n });\n }\n}\n","import { DataFrame, NodeGraphDataFrameFieldNames as Fields } from '@grafana/data';\nimport { getNonOverlappingDuration, getStats, makeFrames, makeSpanMap } from '@grafana/o11y-ds-frontend';\n\nimport { Span, TraceResponse } from './types';\n\ninterface Node {\n [Fields.id]: string;\n [Fields.title]: string;\n [Fields.subTitle]: string;\n [Fields.mainStat]: string;\n [Fields.secondaryStat]: string;\n [Fields.color]: number;\n}\n\ninterface Edge {\n [Fields.id]: string;\n [Fields.target]: string;\n [Fields.source]: string;\n}\n\nexport function createGraphFrames(data: TraceResponse): DataFrame[] {\n const { nodes, edges } = convertTraceToGraph(data);\n const [nodesFrame, edgesFrame] = makeFrames();\n\n for (const node of nodes) {\n nodesFrame.add(node);\n }\n\n for (const edge of edges) {\n edgesFrame.add(edge);\n }\n\n return [nodesFrame, edgesFrame];\n}\n\nfunction convertTraceToGraph(data: TraceResponse): { nodes: Node[]; edges: Edge[] } {\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n\n const traceDuration = findTraceDuration(data.spans);\n\n const spanMap = makeSpanMap((index) => {\n if (index >= data.spans.length) {\n return undefined;\n }\n const span = data.spans[index];\n return {\n span,\n id: span.spanID,\n parentIds: span.references?.filter((r) => r.refType === 'CHILD_OF').map((r) => r.spanID) || [],\n };\n });\n\n for (const span of data.spans) {\n const process = data.processes[span.processID];\n\n const ranges: Array<[number, number]> = spanMap[span.spanID].children.map((c) => {\n const span = spanMap[c].span;\n return [span.startTime, span.startTime + span.duration];\n });\n const childrenDuration = getNonOverlappingDuration(ranges);\n const selfDuration = span.duration - childrenDuration;\n const stats = getStats(span.duration / 1000, traceDuration / 1000, selfDuration / 1000);\n\n nodes.push({\n [Fields.id]: span.spanID,\n [Fields.title]: process?.serviceName ?? '',\n [Fields.subTitle]: span.operationName,\n [Fields.mainStat]: stats.main,\n [Fields.secondaryStat]: stats.secondary,\n [Fields.color]: selfDuration / traceDuration,\n });\n\n const parentSpanID = span.references?.find((r) => r.refType === 'CHILD_OF')?.spanID;\n // Sometimes some span can be missing. Don't add edges for those.\n if (parentSpanID && spanMap[parentSpanID].span) {\n edges.push({\n [Fields.id]: parentSpanID + '--' + span.spanID,\n [Fields.target]: span.spanID,\n [Fields.source]: parentSpanID,\n });\n }\n }\n\n return { nodes, edges };\n}\n\n/**\n * Get the duration of the whole trace as it isn't a part of the response data.\n * Note: Seems like this should be the same as just longest span, but this is probably safer.\n */\nfunction findTraceDuration(spans: Span[]): number {\n let traceEndTime = 0;\n let traceStartTime = Infinity;\n\n for (const span of spans) {\n if (span.startTime < traceStartTime) {\n traceStartTime = span.startTime;\n }\n\n if (span.startTime + span.duration > traceEndTime) {\n traceEndTime = span.startTime + span.duration;\n }\n }\n\n return traceEndTime - traceStartTime;\n}\n","import { identity, omit, pick, pickBy } from 'lodash';\nimport { lastValueFrom, Observable, of } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport {\n DataQueryRequest,\n DataQueryResponse,\n DataSourceApi,\n DataSourceInstanceSettings,\n DataSourceJsonData,\n dateMath,\n DateTime,\n FieldType,\n MutableDataFrame,\n ScopedVars,\n urlUtil,\n} from '@grafana/data';\nimport { NodeGraphOptions, SpanBarOptions } from '@grafana/o11y-ds-frontend';\nimport { BackendSrvRequest, getBackendSrv, getTemplateSrv, TemplateSrv } from '@grafana/runtime';\nimport { getTimeSrv, TimeSrv } from 'app/features/dashboard/services/TimeSrv';\n\nimport { ALL_OPERATIONS_KEY } from './components/SearchForm';\nimport { TraceIdTimeParamsOptions } from './configuration/TraceIdTimeParams';\nimport { mapJaegerDependenciesResponse } from './dependencyGraphTransform';\nimport { createGraphFrames } from './graphTransform';\nimport { createTableFrame, createTraceFrame } from './responseTransform';\nimport { JaegerQuery } from './types';\nimport { convertTagsLogfmt } from './util';\n\nexport interface JaegerJsonData extends DataSourceJsonData {\n nodeGraph?: NodeGraphOptions;\n traceIdTimeParams?: TraceIdTimeParamsOptions;\n}\n\nexport class JaegerDatasource extends DataSourceApi {\n uploadedJson: string | ArrayBuffer | null = null;\n nodeGraph?: NodeGraphOptions;\n traceIdTimeParams?: TraceIdTimeParamsOptions;\n spanBar?: SpanBarOptions;\n constructor(\n private instanceSettings: DataSourceInstanceSettings,\n private readonly timeSrv: TimeSrv = getTimeSrv(),\n private readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n this.nodeGraph = instanceSettings.jsonData.nodeGraph;\n this.traceIdTimeParams = instanceSettings.jsonData.traceIdTimeParams;\n }\n\n async metadataRequest(url: string, params?: Record) {\n const res = await lastValueFrom(this._request(url, params, { hideFromInspector: true }));\n return res.data.data;\n }\n\n isSearchFormValid(query: JaegerQuery): boolean {\n return !!query.service;\n }\n\n query(options: DataQueryRequest): Observable {\n // At this moment we expect only one target. In case we somehow change the UI to be able to show multiple\n // traces at one we need to change this.\n const target: JaegerQuery = options.targets[0];\n\n if (!target) {\n return of({ data: [emptyTraceDataFrame] });\n }\n\n // Use the internal Jaeger /dependencies API for rendering the dependency graph.\n if (target.queryType === 'dependencyGraph') {\n const timeRange = this.timeSrv.timeRange();\n const endTs = getTime(timeRange.to, true) / 1000;\n const lookback = endTs - getTime(timeRange.from, false) / 1000;\n return this._request('/api/dependencies', { endTs, lookback }).pipe(map(mapJaegerDependenciesResponse));\n }\n\n if (target.queryType === 'search' && !this.isSearchFormValid(target)) {\n return of({ error: { message: 'You must select a service.' }, data: [] });\n }\n\n let { start, end } = this.getTimeRange();\n\n if (target.queryType !== 'search' && target.query) {\n let url = `/api/traces/${encodeURIComponent(this.templateSrv.replace(target.query, options.scopedVars))}`;\n if (this.traceIdTimeParams) {\n url += `?start=${start}&end=${end}`;\n }\n\n return this._request(url).pipe(\n map((response) => {\n const traceData = response?.data?.data?.[0];\n if (!traceData) {\n return { data: [emptyTraceDataFrame] };\n }\n let data = [createTraceFrame(traceData)];\n if (this.nodeGraph?.enabled) {\n data.push(...createGraphFrames(traceData));\n }\n return {\n data,\n };\n })\n );\n }\n\n if (target.queryType === 'upload') {\n if (!this.uploadedJson) {\n return of({ data: [] });\n }\n\n try {\n const traceData = JSON.parse(this.uploadedJson as string).data[0];\n let data = [createTraceFrame(traceData)];\n if (this.nodeGraph?.enabled) {\n data.push(...createGraphFrames(traceData));\n }\n return of({ data });\n } catch (error) {\n return of({ error: { message: 'The JSON file uploaded is not in a valid Jaeger format' }, data: [] });\n }\n }\n\n let jaegerInterpolated = pick(this.applyVariables(target, options.scopedVars), [\n 'service',\n 'operation',\n 'tags',\n 'minDuration',\n 'maxDuration',\n 'limit',\n ]);\n // remove empty properties\n let jaegerQuery = pickBy(jaegerInterpolated, identity);\n\n if (jaegerQuery.operation === ALL_OPERATIONS_KEY) {\n jaegerQuery = omit(jaegerQuery, 'operation');\n }\n\n if (jaegerQuery.tags) {\n jaegerQuery = {\n ...jaegerQuery,\n tags: convertTagsLogfmt(jaegerQuery.tags.toString()),\n };\n }\n\n // TODO: this api is internal, used in jaeger ui. Officially they have gRPC api that should be used.\n return this._request(`/api/traces`, {\n ...jaegerQuery,\n ...this.getTimeRange(),\n lookback: 'custom',\n }).pipe(\n map((response) => {\n return {\n data: [createTableFrame(response.data.data, this.instanceSettings)],\n };\n })\n );\n }\n\n interpolateVariablesInQueries(queries: JaegerQuery[], scopedVars: ScopedVars): JaegerQuery[] {\n if (!queries || queries.length === 0) {\n return [];\n }\n\n return queries.map((query) => {\n return {\n ...query,\n datasource: this.getRef(),\n ...this.applyVariables(query, scopedVars),\n };\n });\n }\n\n applyVariables(query: JaegerQuery, scopedVars: ScopedVars) {\n let expandedQuery = { ...query };\n\n if (query.tags && this.templateSrv.containsTemplate(query.tags)) {\n expandedQuery = {\n ...query,\n tags: this.templateSrv.replace(query.tags, scopedVars),\n };\n }\n\n return {\n ...expandedQuery,\n service: this.templateSrv.replace(query.service ?? '', scopedVars),\n operation: this.templateSrv.replace(query.operation ?? '', scopedVars),\n minDuration: this.templateSrv.replace(query.minDuration ?? '', scopedVars),\n maxDuration: this.templateSrv.replace(query.maxDuration ?? '', scopedVars),\n };\n }\n\n async testDatasource() {\n return lastValueFrom(\n this._request('/api/services').pipe(\n map((res) => {\n const values = res?.data?.data || [];\n const testResult =\n values.length > 0\n ? { status: 'success', message: 'Data source connected and services found.' }\n : {\n status: 'error',\n message:\n 'Data source connected, but no services received. Verify that Jaeger is configured properly.',\n };\n return testResult;\n }),\n catchError((err) => {\n let message = 'Jaeger: ';\n if (err.statusText) {\n message += err.statusText;\n } else {\n message += 'Cannot connect to Jaeger';\n }\n\n if (err.status) {\n message += `. ${err.status}`;\n }\n\n if (err.data && err.data.message) {\n message += `. ${err.data.message}`;\n } else if (err.data) {\n message += `. ${JSON.stringify(err.data)}`;\n }\n return of({ status: 'error', message: message });\n })\n )\n );\n }\n\n getTimeRange(): { start: number; end: number } {\n const range = this.timeSrv.timeRange();\n return {\n start: getTime(range.from, false),\n end: getTime(range.to, true),\n };\n }\n\n getQueryDisplayText(query: JaegerQuery) {\n return query.query || '';\n }\n\n private _request(\n apiUrl: string,\n data?: Record,\n options?: Partial\n ): Observable> {\n const params = data ? urlUtil.serializeParams(data) : '';\n const url = `${this.instanceSettings.url}${apiUrl}${params.length ? `?${params}` : ''}`;\n const req = {\n ...options,\n url,\n };\n\n return getBackendSrv().fetch(req);\n }\n}\n\nfunction getTime(date: string | DateTime, roundUp: boolean) {\n if (typeof date === 'string') {\n date = dateMath.parse(date, roundUp)!;\n }\n return date.valueOf() * 1000;\n}\n\nconst emptyTraceDataFrame = new MutableDataFrame({\n fields: [\n {\n name: 'trace',\n type: FieldType.trace,\n values: [],\n },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'jaeger',\n },\n },\n});\n","import { DataSourcePlugin } from '@grafana/data';\n\nimport CheatSheet from './CheatSheet';\nimport { QueryEditor } from './components/QueryEditor';\nimport { ConfigEditor } from './configuration/ConfigEditor';\nimport { JaegerDatasource } from './datasource';\n\nexport const plugin = new DataSourcePlugin(JaegerDatasource)\n .setConfigEditor(ConfigEditor)\n .setQueryEditor(QueryEditor)\n .setQueryEditorHelp(CheatSheet);\n"],"names":["NodeGraphSettings","options","onOptionsChange","styles","getStyles","event","NodeGraphSection","suffix","theme","TraceToMetricsSettings","ds","val","v","query","i","e","newQueries","traceToMetricQuery","index","updatedQueries","_","TraceToMetricsSection","CheatSheet","convertTagsLogfmt","tags","data","key","value","transformToLogfmt","durationPlaceholder","ALL_OPERATIONS_KEY","allOperationsOption","SearchForm","datasource","onChange","serviceOptions","setServiceOptions","operationOptions","setOperationOptions","isLoading","setIsLoading","loadOptions","url","loaderOfType","prevValue","values","option","item","fuzzy","error","services","getOperations","operations","InlineFieldRow","InlineField","Select","Input","QueryEditor","onRunQuery","uploadModalOpen","setUploadModalOpen","onChangeQuery","nextQuery","renderEditorBody","QueryField","Modal","FileDropzone","result","RadioButtonGroup","Button","TraceIdTimeParams","ConfigEditor","DataSourceDescription","Divider","DataSourceHttpSettings","config","ConfigSection","Stack","mapJaegerDependenciesResponse","response","errors","dependencies","convertDependenciesToGraph","servicesByName","edges","dependency","addServiceNode","nodesFrame","MutableDataFrame","edgesFrame","node","edge","service","createGraphFrames","nodes","convertTraceToGraph","traceDuration","findTraceDuration","spanMap","span","r","process","ranges","c","childrenDuration","selfDuration","stats","parentSpanID","spans","traceEndTime","traceStartTime","JaegerDatasource","instanceSettings","timeSrv","templateSrv","params","lastValueFrom","target","of","emptyTraceDataFrame","timeRange","endTs","getTime","lookback","map","start","end","traceData","jaegerInterpolated","jaegerQuery","queries","scopedVars","expandedQuery","res","catchError","err","message","range","apiUrl","req","date","roundUp"],"sourceRoot":""}