/usr/share/grafana/public/app/plugins/datasource/tempo/dist
{"version":3,"file":"module.js","mappings":"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","sources":["webpack://tempo/webpack/runtime/load script","webpack://tempo/./traceql/traceql.ts","webpack://tempo/./configuration/QuerySettings.tsx","webpack://tempo/./SearchTraceQLEditor/SearchField.tsx","webpack://tempo/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigSection.js","webpack://tempo/external amd \"rxjs\"","webpack://tempo/external amd \"module\"","webpack://tempo/../../../../../node_modules/react-use/lib/useAsync.js","webpack://tempo/external amd \"@grafana/ui\"","webpack://tempo/external amd \"rxjs/operators\"","webpack://tempo/external amd \"lodash\"","webpack://tempo/./dataquery.gen.ts","webpack://tempo/../../../../../node_modules/tslib/tslib.es6.mjs","webpack://tempo/../../../../../packages/grafana-o11y-ds-frontend/src/TraceToLogs/TraceToLogsSettings.tsx","webpack://tempo/../../../../../node_modules/react-use/lib/useAsyncFn.js","webpack://tempo/./utils.ts","webpack://tempo/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/QueryEditor/AccessoryButton.js","webpack://tempo/./SearchTraceQLEditor/TagsInput.tsx","webpack://tempo/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/ConfigDescriptionLink.js","webpack://tempo/external amd \"react\"","webpack://tempo/external amd \"@emotion/css\"","webpack://tempo/../../../../../node_modules/uuid/dist/esm-browser/native.js","webpack://tempo/../../../../../node_modules/uuid/dist/esm-browser/rng.js","webpack://tempo/../../../../../node_modules/uuid/dist/esm-browser/stringify.js","webpack://tempo/../../../../../node_modules/uuid/dist/esm-browser/v4.js","webpack://tempo/../../../../../node_modules/@grafana/plugin-ui/dist/esm/components/ConfigEditor/ConfigSection/GenericConfigSection.js","webpack://tempo/external amd \"@grafana/data\"","webpack://tempo/../../../../../packages/grafana-schema/src/common/common.gen.ts","webpack://tempo/../../../../../node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack://tempo/external amd \"prismjs\"","webpack://tempo/external amd \"@grafana/runtime\"","webpack://tempo/./SearchTraceQLEditor/utils.ts","webpack://tempo/../../../../../node_modules/react-use/esm/useDebounce.js","webpack://tempo/../../../../../node_modules/react-use/esm/useTimeoutFn.js","webpack://tempo/../../../../../packages/grafana-o11y-ds-frontend/src/IntervalInput/validation.ts","webpack://tempo/../../../../../packages/grafana-o11y-ds-frontend/src/IntervalInput/IntervalInput.tsx","webpack://tempo/../../../../../packages/grafana-o11y-ds-frontend/src/TemporaryAlert.tsx","webpack://tempo/./configuration/TagsTimeRangeSettings.tsx","webpack://tempo/./VariableQueryEditor.tsx","webpack://tempo/./graphTransform.ts","webpack://tempo/../../../../../node_modules/@opentelemetry/semantic-conventions/build/esm/internal/utils.js","webpack://tempo/../../../../../node_modules/@opentelemetry/semantic-conventions/build/esm/resource/SemanticResourceAttributes.js","webpack://tempo/../../../../../packages/grafana-o11y-ds-frontend/src/createNodeGraphFrames.ts","webpack://tempo/./resultTransformer.ts","webpack://tempo/../../../../../packages/grafana-o11y-ds-frontend/src/combineResponses.ts","webpack://tempo/./streaming.ts","webpack://tempo/./variables.ts","webpack://tempo/./datasource.ts","webpack://tempo/../../../../../node_modules/react/jsx-runtime.js","webpack://tempo/../../../../../packages/grafana-o11y-ds-frontend/src/TraceToLogs/TagMappingInput.tsx","webpack://tempo/../../../../../node_modules/react-use/lib/useMountedState.js","webpack://tempo/./language_provider.ts","webpack://tempo/webpack/bootstrap","webpack://tempo/webpack/runtime/amd options","webpack://tempo/webpack/runtime/compat get default export","webpack://tempo/webpack/runtime/define property getters","webpack://tempo/webpack/runtime/ensure chunk","webpack://tempo/webpack/runtime/get javascript chunk filename","webpack://tempo/webpack/runtime/global","webpack://tempo/webpack/runtime/hasOwnProperty shorthand","webpack://tempo/webpack/runtime/make namespace object","webpack://tempo/webpack/runtime/publicPath","webpack://tempo/webpack/runtime/jsonp chunk loading","webpack://tempo/webpack/runtime/nonce","webpack://tempo/./node_modules/grafana-public-path.js","webpack://tempo/./tracking.ts","webpack://tempo/./module.tsx"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"tempo:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import type { languages } from 'monaco-editor';\nimport { Grammar } from 'prismjs';\n\nexport const languageConfiguration: languages.LanguageConfiguration = {\n // the default separators except `@$`\n wordPattern: /(-?\\d*\\.\\d\\w*)|([^`~!#%^&*()\\-=+\\[{\\]}\\\\|;:'\",.<>\\/?\\s]+)/g,\n brackets: [\n ['{', '}'],\n ['(', ')'],\n ],\n autoClosingPairs: [\n { open: '{', close: '}' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n surroundingPairs: [\n { open: '{', close: '}' },\n { open: '(', close: ')' },\n { open: '\"', close: '\"' },\n { open: \"'\", close: \"'\" },\n ],\n folding: {},\n};\n\nexport const operators = ['=', '!=', '>', '<', '>=', '<=', '=~', '!~'];\nexport const keywordOperators = ['=', '!='];\nexport const stringOperators = ['=', '!=', '=~', '!~'];\nexport const numberOperators = ['=', '!=', '>', '<', '>=', '<='];\n\nexport const intrinsicsV1 = [\n 'duration',\n 'kind',\n 'name',\n 'rootName',\n 'rootServiceName',\n 'status',\n 'statusMessage',\n 'traceDuration',\n];\nexport const intrinsics = intrinsicsV1.concat([\n 'event:name',\n 'event:timeSinceStart',\n 'instrumentation:name',\n 'instrumentation:version',\n 'link:spanID',\n 'link:traceID',\n 'span:duration',\n 'span:id',\n 'span:kind',\n 'span:name',\n 'span:parentID',\n 'span:status',\n 'span:statusMessage',\n 'trace:duration',\n 'trace:id',\n 'trace:rootName',\n 'trace:rootService',\n]);\nexport const scopes: string[] = ['event', 'instrumentation', 'link', 'resource', 'span'];\n\nexport const enumIntrinsics = ['kind', 'span:kind', 'status', 'span:status'];\n\nconst aggregatorFunctions = ['avg', 'count', 'max', 'min', 'sum'];\nconst functions = aggregatorFunctions.concat([\n 'by',\n 'compare',\n 'count_over_time',\n 'min_over_time',\n 'max_over_time',\n 'avg_over_time',\n 'sum_over_time',\n 'histogram_over_time',\n 'quantile_over_time',\n 'rate',\n 'select',\n]);\n\n// Add with clause keywords and parameters\nconst withClauseKeywords = ['with'];\nconst withParameters = ['most_recent'];\n\nconst keywords = intrinsics.concat(scopes).concat(withClauseKeywords);\n\nconst statusValues = ['ok', 'unset', 'error', 'false', 'true'];\n\nconst language: languages.IMonarchLanguage = {\n ignoreCase: false,\n defaultToken: '',\n tokenPostfix: '.traceql',\n\n keywords,\n operators,\n statusValues,\n functions,\n withClauseKeywords,\n withParameters,\n\n symbols: /[=><!~?:&|+\\-*\\/^%]+/,\n escapes: /\\\\(?:[abfnrtv\\\\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,\n digits: /\\d+(_+\\d+)*/,\n octaldigits: /[0-7]+(_+[0-7]+)*/,\n binarydigits: /[0-1]+(_+[0-1]+)*/,\n\n tokenizer: {\n root: [\n // comments\n [/\\/\\/.*/, 'comment'], // line comment\n [/\\/\\*.*\\*\\//, 'comment'], // block comment\n\n // durations\n [/[0-9]+(.[0-9]+)?(us|µs|ns|ms|s|m|h)/, 'number'],\n\n // trace ID\n [/^\\s*[0-9A-Fa-f]+\\s*$/, 'tag'],\n\n // with clause - match 'with' keyword\n [/\\bwith\\b/, { token: 'keyword', next: '@withStart' }],\n\n // keywords\n [\n // match only predefined keywords\n `(?:${keywords.join('|')})`,\n {\n cases: {\n '@keywords': 'keyword',\n '@default': 'tag', // fallback, but should never happen\n },\n },\n ],\n\n // functions and predefined values\n [\n // Inside (double) quotes, all characters are allowed, with the exception of `\\` and `\"` that must be escaped (`\\\\` and `\\\"`).\n // Outside quotes, some more characters are prohibited, such as `!` and `=`.\n /(?:\\w|^[^{}()=~!<>&|,\" ]|\"(?:\\\\\"|\\\\\\\\|[^\\\\\"])*\")+/,\n {\n cases: {\n '@functions': 'predefined',\n '@statusValues': 'type',\n '@withParameters': 'variable',\n '@default': 'tag', // fallback, used for tag names\n },\n },\n ],\n\n // strings\n [/\"([^\"\\\\]|\\\\.)*$/, 'string.invalid'], // non-teminated string\n [/'([^'\\\\]|\\\\.)*$/, 'string.invalid'], // non-teminated string\n [/([^\\w])(\")/, [{ token: '' }, { token: 'string', next: '@string_double' }]],\n [/([^\\w])(')/, [{ token: '' }, { token: 'string', next: '@string_single' }]],\n [/([^\\w])(`)/, [{ token: '' }, { token: 'string', next: '@string_back' }]],\n\n // delimiters and operators\n [/[{}()\\[\\]]/, 'delimiter.bracket'],\n [\n /@symbols/,\n {\n cases: {\n '@operators': 'delimiter',\n '@default': '',\n },\n },\n ],\n\n // numbers\n [/(@digits)[eE]([\\-+]?(@digits))?[fFdD]?/, 'number.float'],\n [/(@digits)\\.(@digits)([eE][\\-+]?(@digits))?[fFdD]?/, 'number.float'],\n [/0(@octaldigits)[Ll]?/, 'number.octal'],\n [/0[bB](@binarydigits)[Ll]?/, 'number.binary'],\n [/(@digits)[fFdD]/, 'number.float'],\n [/(@digits)[lL]?/, 'number'],\n ],\n\n withStart: [\n [/\\s+/, ''], // whitespace\n [/\\(/, { token: 'delimiter.bracket', next: '@withClause' }], // opening parenthesis - enter with clause\n [/(?=.)/, { token: '', next: '@pop' }], // anything else - go back to root (use lookahead to not consume the character)\n ],\n\n withClause: [\n [/\\s+/, ''], // whitespace\n [\n /\\w+/,\n {\n // parameter names\n cases: {\n '@withParameters': 'variable',\n },\n },\n ],\n [/=/, 'delimiter'], // operator\n [/\\b(true|false)\\b/, 'type'], // values\n [/\\)/, { token: 'delimiter.bracket', next: '@pop' }], // closing parenthesis - return to previous state\n ],\n\n string_double: [\n [/[^\\\\\"]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/\"/, 'string', '@pop'],\n ],\n\n string_single: [\n [/[^\\\\']+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/'/, 'string', '@pop'],\n ],\n\n string_back: [\n [/[^\\\\`]+/, 'string'],\n [/@escapes/, 'string.escape'],\n [/\\\\./, 'string.escape.invalid'],\n [/`/, 'string', '@pop'],\n ],\n },\n};\n\n// For \"TraceQL\" tab (Monarch editor for TraceQL)\nexport const languageDefinition = {\n id: 'traceql',\n extensions: ['.traceql'],\n aliases: ['tempo', 'traceql'],\n mimetypes: [],\n def: {\n language,\n languageConfiguration,\n },\n};\n\n// For \"Search\" tab (query builder)\nexport const traceqlGrammar = {\n comment: {\n pattern: /\\/\\/.*/,\n },\n 'span-set': {\n pattern: /\\{[^}]*}/,\n inside: {\n filter: {\n pattern:\n /([\\w:.\\/-]+)\\s*(=|!=|<=|>=|=~|!~|>|<)\\s*(\"[^\"]*\"|[\\w.\\/-]+)(\\s*(\\&\\&|\\|\\|)\\s*([\\w:.\\/-]+)\\s*(=|!=|<=|>=|=~|!~|>|<)\\s*(\"[^\"]*\"|[\\w.\\/-]+))*/g,\n inside: {\n comment: {\n pattern: /#.*/,\n },\n 'label-key': {\n pattern: /[a-z_.][\\w./_-]*(:[\\w./_-]+)?(?=\\s*(=|!=|>|<|>=|<=|=~|!~))/,\n alias: 'attr-name',\n },\n 'label-value': {\n pattern: /(\"(?:\\\\.|[^\\\\\"])*\")|(\\w+)/,\n alias: 'attr-value',\n },\n },\n },\n punctuation: /[}{&|]/,\n },\n },\n 'with-clause': {\n pattern: /\\bwith\\s*\\([^)]*\\)/,\n inside: {\n 'with-keyword': {\n pattern: /\\bwith\\b/,\n alias: 'keyword',\n },\n 'parameter-name': {\n pattern: /\\b[a-zA-Z_][a-zA-Z0-9_]*(?=\\s*=)/,\n alias: 'attr-name',\n },\n 'parameter-value': {\n pattern: /\\b(true|false)\\b|\"(?:\\\\.|[^\\\\\"])*\"|'(?:\\\\.|[^\\\\'])*'|\\d+(?:\\.\\d+)?/,\n alias: 'attr-value',\n },\n punctuation: /[()=,]/,\n },\n },\n number: /\\b-?\\d+((\\.\\d*)?([eE][+-]?\\d+)?)?\\b/,\n operator: new RegExp(`/[-+*/=%^~]|&&?|\\\\|?\\\\||!=?|<(?:=>?|<|>)?|>[>=]?|`, 'i'),\n punctuation: /[{};()`,.]/,\n} satisfies Grammar;\n","import { css } from '@emotion/css';\n\nimport { DataSourcePluginOptionsEditorProps, GrafanaTheme2, updateDatasourcePluginJsonDataOption } from '@grafana/data';\nimport { IntervalInput, invalidTimeShiftError } from '@grafana/o11y-ds-frontend';\nimport { InlineField, InlineSwitch, useStyles2 } from '@grafana/ui';\n\nimport { TempoJsonData } from '../types';\n\ninterface Props extends DataSourcePluginOptionsEditorProps<TempoJsonData> {}\n\nexport function QuerySettings({ options, onOptionsChange }: Props) {\n const styles = useStyles2(getStyles);\n\n const getLabel = (type: 'start' | 'end') => {\n return `Time shift for ${type} of search`;\n };\n\n const getTooltip = (type: 'start' | 'end') => {\n return `Shifts the ${type} of the time range when searching by TraceID. Searching can return traces that do not fully fall into the search time range, so we recommend using higher time shifts for longer traces. Default: 30m (Time units can be used here, for example: 5s, 1m, 3h`;\n };\n\n return (\n <div className={styles.container}>\n <InlineField\n label=\"Use time range in query\"\n tooltip=\"The time range can be used when there are performance issues or timeouts since it will narrow down the search to the defined range. Default: disabled\"\n labelWidth={26}\n >\n <InlineSwitch\n id=\"enable-time-shift\"\n value={options.jsonData.traceQuery?.timeShiftEnabled || false}\n onChange={(event) => {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'traceQuery', {\n ...options.jsonData.traceQuery,\n timeShiftEnabled: event.currentTarget.checked,\n });\n }}\n />\n </InlineField>\n\n <IntervalInput\n label={getLabel('start')}\n tooltip={getTooltip('start')}\n value={options.jsonData.traceQuery?.spanStartTimeShift || ''}\n disabled={!options.jsonData.traceQuery?.timeShiftEnabled}\n onChange={(val) => {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'traceQuery', {\n ...options.jsonData.traceQuery,\n spanStartTimeShift: val,\n });\n }}\n isInvalidError={invalidTimeShiftError}\n />\n\n <IntervalInput\n label={getLabel('end')}\n tooltip={getTooltip('end')}\n value={options.jsonData.traceQuery?.spanEndTimeShift || ''}\n disabled={!options.jsonData.traceQuery?.timeShiftEnabled}\n onChange={(val) => {\n updateDatasourcePluginJsonDataOption({ onOptionsChange, options }, 'traceQuery', {\n ...options.jsonData.traceQuery,\n spanEndTimeShift: val,\n });\n }}\n isInvalidError={invalidTimeShiftError}\n />\n </div>\n );\n}\n\nexport const getStyles = (theme: GrafanaTheme2) => ({\n infoText: css({\n paddingBottom: theme.spacing(2),\n color: theme.colors.text.secondary,\n }),\n container: css({\n width: '100%',\n }),\n row: css({\n alignItems: 'baseline',\n }),\n});\n","import { css } from '@emotion/css';\nimport { uniq } from 'lodash';\nimport { useMemo, useState } from 'react';\nimport useAsync from 'react-use/lib/useAsync';\n\nimport { SelectableValue, TimeRange } from '@grafana/data';\nimport { TemporaryAlert } from '@grafana/o11y-ds-frontend';\nimport { FetchError, getTemplateSrv, isFetchError } from '@grafana/runtime';\nimport { Select, Stack, useStyles2, InputActionMeta } from '@grafana/ui';\n\nimport { TraceqlFilter, TraceqlSearchScope } from '../dataquery.gen';\nimport { TempoDatasource } from '../datasource';\nimport { OPTIONS_LIMIT } from '../language_provider';\nimport { operators as allOperators, stringOperators, numberOperators, keywordOperators } from '../traceql/traceql';\n\nimport { filterScopedTag, operatorSelectableValue } from './utils';\n\ninterface Props {\n filter: TraceqlFilter;\n datasource: TempoDatasource;\n updateFilter: (f: TraceqlFilter) => void;\n deleteFilter?: (f: TraceqlFilter) => void;\n setError: (error: FetchError | null) => void;\n isTagsLoading?: boolean;\n tags: string[];\n hideScope?: boolean;\n hideTag?: boolean;\n hideValue?: boolean;\n query: string;\n isMulti?: boolean;\n allowCustomValue?: boolean;\n addVariablesToOptions?: boolean;\n range?: TimeRange;\n timeRangeForTags?: number;\n}\nconst SearchField = ({\n filter,\n datasource,\n updateFilter,\n isTagsLoading,\n tags,\n setError,\n hideScope,\n hideTag,\n hideValue,\n query,\n addVariablesToOptions,\n isMulti = true,\n allowCustomValue = true,\n range,\n timeRangeForTags,\n}: Props) => {\n const styles = useStyles2(getStyles);\n const [alertText, setAlertText] = useState<string>();\n const scopedTag = useMemo(\n () => filterScopedTag(filter, datasource.languageProvider),\n [datasource.languageProvider, filter]\n );\n const [tagQuery, setTagQuery] = useState<string>('');\n const [tagValuesQuery, setTagValuesQuery] = useState<string>('');\n\n const updateOptions = async () => {\n try {\n const result = filter.tag\n ? await datasource.languageProvider.getOptionsV2({\n tag: scopedTag,\n query,\n timeRangeForTags,\n range,\n })\n : [];\n setAlertText(undefined);\n setError(null);\n return result;\n } catch (error) {\n // Display message if Tempo is connected but search 404's\n if (isFetchError(error) && error?.status === 404) {\n setError(error);\n } else if (error instanceof Error) {\n setAlertText(`Error: ${error.message}`);\n }\n }\n return [];\n };\n\n const { loading: isLoadingValues, value: options } = useAsync(updateOptions, [\n scopedTag,\n datasource.languageProvider,\n setError,\n query,\n range,\n timeRangeForTags,\n ]);\n\n // Add selected option if it doesn't exist in the current list of options\n if (filter.value && !Array.isArray(filter.value) && options && !options.find((o) => o.value === filter.value)) {\n options.push({ label: filter.value.toString(), value: filter.value.toString(), type: filter.valueType });\n }\n\n const scopeOptions = Object.values(TraceqlSearchScope)\n .filter((s) => {\n // only add scope if it has tags\n return datasource.languageProvider.getTags(s).length > 0;\n })\n .map((t) => ({ label: t, value: t }));\n\n // If all values have type string or int/float use a focused list of operators instead of all operators\n const optionsOfFirstType = options?.filter((o) => o.type === options[0]?.type);\n const uniqueOptionType = options?.length === optionsOfFirstType?.length ? options?.[0]?.type : undefined;\n let operatorList = allOperators;\n switch (uniqueOptionType) {\n case 'keyword':\n operatorList = keywordOperators;\n break;\n case 'string':\n operatorList = stringOperators;\n break;\n case 'int':\n case 'float':\n operatorList = numberOperators;\n }\n const operatorOptions = operatorList.map(operatorSelectableValue);\n\n const formatTagOptions = (tags: string[], filterTag: string | undefined) => {\n return (filterTag !== undefined ? uniq([filterTag, ...tags]) : tags).map((t) => ({ label: t, value: t }));\n };\n\n const tagOptions = useMemo(() => {\n if (tagQuery.length === 0) {\n return formatTagOptions(tags.slice(0, OPTIONS_LIMIT), filter.tag);\n }\n\n const queryLowerCase = tagQuery.toLowerCase();\n const filterdOptions = tags.filter((tag) => tag.toLowerCase().includes(queryLowerCase)).slice(0, OPTIONS_LIMIT);\n return formatTagOptions(filterdOptions, filter.tag);\n }, [filter.tag, tagQuery, tags]);\n\n const tagValueOptions = useMemo(() => {\n if (!options) {\n return;\n }\n\n let currentOptions = options;\n\n // Add custom value if it exists and isn't already in options\n if (filter.isCustomValue && filter.value) {\n const customValue = Array.isArray(filter.value) ? filter.value : [filter.value];\n\n const newCustomOptions = customValue\n .filter((val) => !options.some((opt) => opt.value === val))\n .map((val) => ({ label: val, value: val, type: filter.valueType }));\n\n if (newCustomOptions.length > 0) {\n currentOptions = [...options, ...newCustomOptions];\n }\n }\n\n if (tagValuesQuery.length === 0) {\n return currentOptions.slice(0, OPTIONS_LIMIT);\n }\n\n const queryLowerCase = tagValuesQuery.toLowerCase();\n return currentOptions\n .filter((tag) => {\n if (tag.value && tag.value.length > 0) {\n return tag.value.toLowerCase().includes(queryLowerCase);\n }\n return false;\n })\n .slice(0, OPTIONS_LIMIT);\n }, [tagValuesQuery, options, filter.isCustomValue, filter.value, filter.valueType]);\n\n return (\n <>\n <Stack gap={0} width=\"auto\">\n {!hideScope && (\n <Select\n width=\"auto\"\n className={styles.dropdown}\n inputId={`${filter.id}-scope`}\n options={addVariablesToOptions ? withTemplateVariableOptions(scopeOptions) : scopeOptions}\n value={filter.scope}\n onChange={(v) => updateFilter({ ...filter, scope: v?.value, tag: undefined, value: [] })}\n placeholder=\"Select scope\"\n aria-label={`select ${filter.id} scope`}\n />\n )}\n {!hideTag && (\n <Select\n width=\"auto\"\n className={styles.dropdown}\n inputId={`${filter.id}-tag`}\n isLoading={isTagsLoading}\n // Add the current tag to the list if it doesn't exist in the tags prop, otherwise the field will be empty even though the state has a value\n options={addVariablesToOptions ? withTemplateVariableOptions(tagOptions) : tagOptions}\n onInputChange={(value: string, { action }: InputActionMeta) => {\n if (action === 'input-change') {\n setTagQuery(value);\n }\n }}\n onCloseMenu={() => setTagQuery('')}\n onChange={(v) => updateFilter({ ...filter, tag: v?.value, value: [] })}\n value={filter.tag}\n key={filter.tag}\n placeholder=\"Select tag\"\n isClearable\n aria-label={`select ${filter.id} tag`}\n allowCustomValue\n virtualized\n />\n )}\n <Select\n className={styles.dropdown}\n inputId={`${filter.id}-operator`}\n options={addVariablesToOptions ? withTemplateVariableOptions(operatorOptions) : operatorOptions}\n value={filter.operator}\n onChange={(v) => updateFilter({ ...filter, operator: v?.value })}\n isClearable={false}\n aria-label={`select ${filter.id} operator`}\n allowCustomValue={true}\n width={8}\n />\n {!hideValue && (\n <Select\n /**\n * Trace cardinality means we need to use the virtualized variant of the Select component.\n * For example the number of span names being returned can easily reach 10s of thousands,\n * which is enough to cause a user's web browser to seize up\n */\n width=\"auto\"\n virtualized\n className={styles.dropdown}\n inputId={`${filter.id}-value`}\n isLoading={isLoadingValues}\n options={addVariablesToOptions ? withTemplateVariableOptions(tagValueOptions) : tagValueOptions}\n value={filter.value}\n onInputChange={(value: string, { action }: InputActionMeta) => {\n if (action === 'input-change') {\n setTagValuesQuery(value);\n }\n }}\n onCloseMenu={() => setTagValuesQuery('')}\n onChange={(val) => {\n if (Array.isArray(val)) {\n updateFilter({\n ...filter,\n value: val.map((v) => v.value),\n valueType: val[0]?.type || uniqueOptionType,\n isCustomValue: false,\n });\n } else {\n updateFilter({\n ...filter,\n value: val?.value,\n valueType: val?.type || uniqueOptionType,\n isCustomValue: false,\n });\n }\n }}\n onCreateOption={(val) => {\n updateFilter({\n ...filter,\n value: Array.isArray(filter.value) ? filter.value?.concat(val) : val,\n valueType: uniqueOptionType,\n isCustomValue: true,\n });\n }}\n placeholder=\"Select value\"\n isClearable={true}\n aria-label={`select ${filter.id} value`}\n allowCustomValue={allowCustomValue}\n isMulti={isMulti}\n allowCreateWhileLoading\n />\n )}\n </Stack>\n {alertText && <TemporaryAlert severity=\"error\" text={alertText} />}\n </>\n );\n};\n\nexport default SearchField;\n\n/**\n * Add to a list of options the current template variables.\n *\n * @param options a list of options\n * @returns the list of given options plus the template variables\n */\nexport const withTemplateVariableOptions = (options: SelectableValue[] | undefined) => {\n const templateVariables = getTemplateSrv().getVariables();\n return [...(options || []), ...templateVariables.map((v) => ({ label: `$${v.name}`, value: `$${v.name}` }))];\n};\n\nconst getStyles = () => ({\n dropdown: css({\n boxShadow: 'none',\n }),\n});\n","import React__default from 'react';\nimport { GenericConfigSection } from './GenericConfigSection.js';\n\nconst ConfigSection = ({ children, ...props }) => {\n return /* @__PURE__ */ React__default.createElement(GenericConfigSection, { ...props, kind: \"section\" }, children);\n};\n\nexport { ConfigSection };\n//# sourceMappingURL=ConfigSection.js.map\n","module.exports = __WEBPACK_EXTERNAL_MODULE__1269__;","module.exports = __WEBPACK_EXTERNAL_MODULE__1308__;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar react_1 = require(\"react\");\nvar useAsyncFn_1 = tslib_1.__importDefault(require(\"./useAsyncFn\"));\nfunction useAsync(fn, deps) {\n if (deps === void 0) { deps = []; }\n var _a = useAsyncFn_1.default(fn, deps, {\n loading: true,\n }), state = _a[0], callback = _a[1];\n react_1.useEffect(function () {\n callback();\n }, [callback]);\n return state;\n}\nexports.default = useAsync;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__2007__;","module.exports = __WEBPACK_EXTERNAL_MODULE__3059__;","module.exports = __WEBPACK_EXTERNAL_MODULE__3241__;","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// public/app/plugins/gen.go\n// Using jennies:\n// TSTypesJenny\n// PluginTsTypesJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\nimport * as common from '@grafana/schema';\n\nexport interface TempoQuery extends common.DataQuery {\n /**\n * For metric queries, how many exemplars to request, 0 means no exemplars\n */\n exemplars?: number;\n filters: Array<TraceqlFilter>;\n /**\n * deprecated Filters that are used to query the metrics summary\n */\n groupBy?: Array<TraceqlFilter>;\n /**\n * Defines the maximum number of traces that are returned from Tempo\n */\n limit?: number;\n /**\n * @deprecated Define the maximum duration to select traces. Use duration format, for example: 1.2s, 100ms\n */\n maxDuration?: string;\n /**\n * For metric queries, whether to run instant or range queries\n */\n metricsQueryType?: MetricsQueryType;\n /**\n * @deprecated Define the minimum duration to select traces. Use duration format, for example: 1.2s, 100ms\n */\n minDuration?: string;\n /**\n * TraceQL query or trace ID\n */\n query?: string;\n /**\n * @deprecated Logfmt query to filter traces by their tags. Example: http.status_code=200 error=true\n */\n search?: string;\n /**\n * Use service.namespace in addition to service.name to uniquely identify a service.\n */\n serviceMapIncludeNamespace?: boolean;\n /**\n * Filters to be included in a PromQL query to select data for the service graph. Example: {client=\"app\",service=\"app\"}. Providing multiple values will produce union of results for each filter, using PromQL OR operator internally.\n */\n serviceMapQuery?: (string | Array<string>);\n /**\n * Whether to use native histograms for service map queries\n */\n serviceMapUseNativeHistograms?: boolean;\n /**\n * @deprecated Query traces by service name\n */\n serviceName?: string;\n /**\n * @deprecated Query traces by span name\n */\n spanName?: string;\n /**\n * Defines the maximum number of spans per spanset that are returned from Tempo\n */\n spss?: number;\n /**\n * For metric queries, the step size to use\n */\n step?: string;\n /**\n * The type of the table that is used to display the search results\n */\n tableType?: SearchTableType;\n}\n\nexport const defaultTempoQuery: Partial<TempoQuery> = {\n filters: [],\n groupBy: [],\n};\n\nexport type TempoQueryType = ('traceql' | 'traceqlSearch' | 'serviceMap' | 'upload' | 'nativeSearch' | 'traceId' | 'clear');\n\nexport enum MetricsQueryType {\n Instant = 'instant',\n Range = 'range',\n}\n\n/**\n * The state of the TraceQL streaming search query\n */\nexport enum SearchStreamingState {\n Done = 'done',\n Error = 'error',\n Pending = 'pending',\n Streaming = 'streaming',\n}\n\n/**\n * The type of the table that is used to display the search results\n */\nexport enum SearchTableType {\n Raw = 'raw',\n Spans = 'spans',\n Traces = 'traces',\n}\n\n/**\n * static fields are pre-set in the UI, dynamic fields are added by the user\n */\nexport enum TraceqlSearchScope {\n Event = 'event',\n Instrumentation = 'instrumentation',\n Intrinsic = 'intrinsic',\n Link = 'link',\n Resource = 'resource',\n Span = 'span',\n Unscoped = 'unscoped',\n}\n\nexport interface TraceqlFilter {\n /**\n * Uniquely identify the filter, will not be used in the query generation\n */\n id: string;\n /**\n * Whether the value is a custom value typed by the user\n */\n isCustomValue?: boolean;\n /**\n * The operator that connects the tag to the value, for example: =, >, !=, =~\n */\n operator?: string;\n /**\n * The scope of the filter, can either be unscoped/all scopes, resource or span\n */\n scope?: TraceqlSearchScope;\n /**\n * The tag for the search filter, for example: .http.status_code, .service.name, status\n */\n tag?: string;\n /**\n * The value for the search filter\n */\n value?: (string | Array<string>);\n /**\n * The type of the value, used for example to check whether we need to wrap the value in quotes when generating the query\n */\n valueType?: string;\n}\n\nexport interface TempoDataQuery {}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { css } from '@emotion/css';\nimport { useCallback, useMemo } from 'react';\nimport * as React from 'react';\n\nimport { DataSourceJsonData, DataSourceInstanceSettings, DataSourcePluginOptionsEditorProps } from '@grafana/data';\nimport { ConfigDescriptionLink, ConfigSection } from '@grafana/plugin-ui';\nimport { DataSourcePicker } from '@grafana/runtime';\nimport { InlineField, InlineFieldRow, Input, InlineSwitch } from '@grafana/ui';\n\nimport { IntervalInput } from '../IntervalInput/IntervalInput';\n\nimport { TagMappingInput } from './TagMappingInput';\n\nexport interface TraceToLogsTag {\n key: string;\n value?: string;\n}\n\n// @deprecated use getTraceToLogsOptions to get the v2 version of this config from jsonData\nexport interface TraceToLogsOptions {\n datasourceUid?: string;\n tags?: string[];\n mappedTags?: TraceToLogsTag[];\n mapTagNamesEnabled?: boolean;\n spanStartTimeShift?: string;\n spanEndTimeShift?: string;\n filterByTraceID?: boolean;\n filterBySpanID?: boolean;\n lokiSearch?: boolean; // legacy\n}\n\nexport interface TraceToLogsOptionsV2 {\n datasourceUid?: string;\n tags?: TraceToLogsTag[];\n spanStartTimeShift?: string;\n spanEndTimeShift?: string;\n filterByTraceID?: boolean;\n filterBySpanID?: boolean;\n query?: string;\n customQuery: boolean;\n}\n\nexport interface TraceToLogsData extends DataSourceJsonData {\n tracesToLogs?: TraceToLogsOptions;\n tracesToLogsV2?: TraceToLogsOptionsV2;\n}\n\n/**\n * Gets new version of the traceToLogs config from the json data either returning directly or transforming the old\n * version to new and returning that.\n */\nexport function getTraceToLogsOptions(data?: TraceToLogsData): TraceToLogsOptionsV2 | undefined {\n if (data?.tracesToLogsV2) {\n return data.tracesToLogsV2;\n }\n if (!data?.tracesToLogs) {\n return undefined;\n }\n const traceToLogs: TraceToLogsOptionsV2 = {\n customQuery: false,\n };\n traceToLogs.datasourceUid = data.tracesToLogs.datasourceUid;\n traceToLogs.tags = data.tracesToLogs.mapTagNamesEnabled\n ? data.tracesToLogs.mappedTags\n : data.tracesToLogs.tags?.map((tag) => ({ key: tag }));\n traceToLogs.filterByTraceID = data.tracesToLogs.filterByTraceID;\n traceToLogs.filterBySpanID = data.tracesToLogs.filterBySpanID;\n traceToLogs.spanStartTimeShift = data.tracesToLogs.spanStartTimeShift;\n traceToLogs.spanEndTimeShift = data.tracesToLogs.spanEndTimeShift;\n return traceToLogs;\n}\n\ninterface Props extends DataSourcePluginOptionsEditorProps<TraceToLogsData> {}\n\nexport function TraceToLogsSettings({ options, onOptionsChange }: Props) {\n const supportedDataSourceTypes = [\n 'loki',\n 'elasticsearch',\n 'grafana-splunk-datasource', // external\n 'grafana-opensearch-datasource', // external\n 'grafana-falconlogscale-datasource', // external\n 'googlecloud-logging-datasource', // external\n 'victoriametrics-logs-datasource', // external\n ];\n\n const traceToLogs = useMemo(\n (): TraceToLogsOptionsV2 => getTraceToLogsOptions(options.jsonData) || { customQuery: false },\n [options.jsonData]\n );\n const { query = '', tags, customQuery } = traceToLogs;\n\n const updateTracesToLogs = useCallback(\n (value: Partial<TraceToLogsOptionsV2>) => {\n // Cannot use updateDatasourcePluginJsonDataOption here as we need to update 2 keys, and they would overwrite each\n // other as updateDatasourcePluginJsonDataOption isn't synchronized\n onOptionsChange({\n ...options,\n jsonData: {\n ...options.jsonData,\n tracesToLogsV2: {\n ...traceToLogs,\n ...value,\n },\n tracesToLogs: undefined,\n },\n });\n },\n [onOptionsChange, options, traceToLogs]\n );\n\n return (\n <div className={css({ width: '100%' })}>\n <InlineFieldRow>\n <InlineField\n tooltip=\"The logs data source the trace is going to navigate to\"\n label=\"Data source\"\n labelWidth={26}\n >\n <DataSourcePicker\n inputId=\"trace-to-logs-data-source-picker\"\n filter={(ds) => supportedDataSourceTypes.includes(ds.type)}\n current={traceToLogs.datasourceUid}\n noDefault={true}\n width={40}\n onChange={(ds: DataSourceInstanceSettings) =>\n updateTracesToLogs({\n datasourceUid: ds.uid,\n })\n }\n onClear={() => updateTracesToLogs({ datasourceUid: undefined })}\n />\n </InlineField>\n </InlineFieldRow>\n\n <InlineFieldRow>\n <IntervalInput\n label={getTimeShiftLabel('start')}\n tooltip={getTimeShiftTooltip('start', '0')}\n value={traceToLogs.spanStartTimeShift || ''}\n onChange={(val) => {\n updateTracesToLogs({ spanStartTimeShift: val });\n }}\n isInvalidError={invalidTimeShiftError}\n />\n </InlineFieldRow>\n\n <InlineFieldRow>\n <IntervalInput\n label={getTimeShiftLabel('end')}\n tooltip={getTimeShiftTooltip('end', '0')}\n value={traceToLogs.spanEndTimeShift || ''}\n onChange={(val) => {\n updateTracesToLogs({ spanEndTimeShift: val });\n }}\n isInvalidError={invalidTimeShiftError}\n />\n </InlineFieldRow>\n\n <InlineFieldRow>\n <InlineField\n tooltip=\"Tags that will be used in the query. Default tags: 'cluster', 'hostname', 'namespace', 'pod', 'service.name', 'service.namespace'\"\n label=\"Tags\"\n labelWidth={26}\n >\n <TagMappingInput values={tags ?? []} onChange={(v) => updateTracesToLogs({ tags: v })} />\n </InlineField>\n </InlineFieldRow>\n\n <IdFilter\n disabled={customQuery}\n type={'trace'}\n id={'filterByTraceID'}\n value={Boolean(traceToLogs.filterByTraceID)}\n onChange={(val) => updateTracesToLogs({ filterByTraceID: val })}\n />\n <IdFilter\n disabled={customQuery}\n type={'span'}\n id={'filterBySpanID'}\n value={Boolean(traceToLogs.filterBySpanID)}\n onChange={(val) => updateTracesToLogs({ filterBySpanID: val })}\n />\n\n <InlineFieldRow>\n <InlineField\n tooltip=\"Use a custom query with the possibility to interpolate variables from the trace or span\"\n label=\"Use custom query\"\n labelWidth={26}\n >\n <InlineSwitch\n id={'customQuerySwitch'}\n value={customQuery}\n onChange={(event: React.SyntheticEvent<HTMLInputElement>) =>\n updateTracesToLogs({ customQuery: event.currentTarget.checked })\n }\n />\n </InlineField>\n </InlineFieldRow>\n\n {customQuery && (\n <InlineField\n label=\"Query\"\n labelWidth={26}\n tooltip=\"The query that will run when navigating from a trace to logs data source. Interpolate tags using the `$__tags` keyword\"\n grow\n >\n <Input\n label=\"Query\"\n type=\"text\"\n allowFullScreen\n value={query}\n onChange={(e) => updateTracesToLogs({ query: e.currentTarget.value })}\n />\n </InlineField>\n )}\n </div>\n );\n}\n\ninterface IdFilterProps {\n type: 'trace' | 'span';\n id: string;\n value: boolean;\n onChange: (val: boolean) => void;\n disabled: boolean;\n}\nfunction IdFilter(props: IdFilterProps) {\n return (\n <InlineFieldRow>\n <InlineField\n disabled={props.disabled}\n label={`Filter by ${props.type} ID`}\n labelWidth={26}\n grow\n tooltip={`Filters logs by ${props.type} ID, where the ${props.type} ID should be part of the log line`}\n >\n <InlineSwitch\n id={props.id}\n value={props.value}\n onChange={(event: React.SyntheticEvent<HTMLInputElement>) => props.onChange(event.currentTarget.checked)}\n />\n </InlineField>\n </InlineFieldRow>\n );\n}\n\nexport const getTimeShiftLabel = (type: 'start' | 'end') => {\n return `Span ${type} time shift`;\n};\n\nexport const getTimeShiftTooltip = (type: 'start' | 'end', defaultVal: string) => {\n return `Shifts the ${type} time of the span. Default: ${defaultVal} (Time units can be used here, for example: 5s, -1m, 3h)`;\n};\n\nexport const invalidTimeShiftError = 'Invalid time shift. See tooltip for examples.';\n\nexport const TraceToLogsSection = ({ options, onOptionsChange }: DataSourcePluginOptionsEditorProps) => {\n let suffix = options.type;\n suffix += options.type === 'tempo' ? '/configure-tempo-data-source/#trace-to-logs' : '/#trace-to-logs';\n\n return (\n <ConfigSection\n title=\"Trace to logs\"\n description={\n <ConfigDescriptionLink\n description=\"Navigate from a trace span to the selected data source's logs.\"\n suffix={suffix}\n feature=\"trace to logs\"\n />\n }\n isCollapsible={true}\n isInitiallyOpen={true}\n >\n <TraceToLogsSettings options={options} onOptionsChange={onOptionsChange} />\n </ConfigSection>\n );\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar tslib_1 = require(\"tslib\");\nvar react_1 = require(\"react\");\nvar useMountedState_1 = tslib_1.__importDefault(require(\"./useMountedState\"));\nfunction useAsyncFn(fn, deps, initialState) {\n if (deps === void 0) { deps = []; }\n if (initialState === void 0) { initialState = { loading: false }; }\n var lastCallId = react_1.useRef(0);\n var isMounted = useMountedState_1.default();\n var _a = react_1.useState(initialState), state = _a[0], set = _a[1];\n var callback = react_1.useCallback(function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var callId = ++lastCallId.current;\n if (!state.loading) {\n set(function (prevState) { return (tslib_1.__assign(tslib_1.__assign({}, prevState), { loading: true })); });\n }\n return fn.apply(void 0, args).then(function (value) {\n isMounted() && callId === lastCallId.current && set({ value: value, loading: false });\n return value;\n }, function (error) {\n isMounted() && callId === lastCallId.current && set({ error: error, loading: false });\n return error;\n });\n }, deps);\n return [state, callback];\n}\nexports.default = useAsyncFn;\n","import { DataSourceApi, parseDuration } from '@grafana/data';\nimport { getDataSourceSrv } from '@grafana/runtime';\n\nimport { generateId } from './SearchTraceQLEditor/TagsInput';\nimport { TraceqlFilter, TraceqlSearchScope } from './dataquery.gen';\nimport { TempoQuery } from './types';\n\nconst LIMIT_MESSAGE = /.*range specified by start and end.*exceeds.*/;\nconst LIMIT_MESSAGE_METRICS = /.*metrics query time range exceeds the maximum allowed duration of.*/;\n\nexport function mapErrorMessage(errorMessage: string) {\n if (errorMessage && (LIMIT_MESSAGE.test(errorMessage) || LIMIT_MESSAGE_METRICS.test(errorMessage))) {\n return 'The selected time range exceeds the maximum allowed duration. Please select a shorter time range.';\n } else {\n return errorMessage;\n }\n}\n\nexport const getErrorMessage = (message: string | undefined, prefix?: string) => {\n const err = message ? ` (${message})` : '';\n let errPrefix = prefix ? prefix : 'Error';\n const msg = `${errPrefix}${err}. Please check the server logs for more details.`;\n return mapErrorMessage(msg);\n};\n\nexport async function getDS(uid?: string): Promise<DataSourceApi | undefined> {\n if (!uid) {\n return undefined;\n }\n\n const dsSrv = getDataSourceSrv();\n try {\n return await dsSrv.get(uid);\n } catch (error) {\n console.error('Failed to load data source', error);\n return undefined;\n }\n}\n\nexport const migrateFromSearchToTraceQLSearch = (query: TempoQuery) => {\n let filters: TraceqlFilter[] = [];\n if (query.spanName) {\n filters.push({\n id: 'span-name',\n scope: TraceqlSearchScope.Span,\n tag: 'name',\n operator: '=',\n value: [query.spanName],\n valueType: 'string',\n });\n }\n if (query.serviceName) {\n filters.push({\n id: 'service-name',\n scope: TraceqlSearchScope.Resource,\n tag: 'service.name',\n operator: '=',\n value: [query.serviceName],\n valueType: 'string',\n });\n }\n if (query.minDuration || query.maxDuration) {\n filters.push({\n id: 'duration-type',\n value: 'trace',\n });\n }\n if (query.minDuration) {\n filters.push({\n id: 'min-duration',\n tag: 'duration',\n operator: '>',\n value: [query.minDuration],\n valueType: 'duration',\n });\n }\n if (query.maxDuration) {\n filters.push({\n id: 'max-duration',\n tag: 'duration',\n operator: '<',\n value: [query.maxDuration],\n valueType: 'duration',\n });\n }\n if (query.search) {\n const tags = query.search.split(' ');\n for (const tag of tags) {\n const [key, value] = tag.split('=');\n if (key && value) {\n filters.push({\n id: generateId(),\n scope: TraceqlSearchScope.Unscoped,\n tag: key,\n operator: '=',\n value: [value.replace(/(^\"|\"$)/g, '')], // remove quotes at start and end of string\n valueType: value.startsWith('\"') && value.endsWith('\"') ? 'string' : undefined,\n });\n }\n }\n }\n\n const migratedQuery: TempoQuery = {\n datasource: query.datasource,\n filters,\n limit: query.limit,\n query: query.query,\n queryType: 'traceqlSearch',\n refId: query.refId,\n };\n return migratedQuery;\n};\n\nexport const stepToNanos = (step?: string) => {\n if (!step) {\n return 0;\n }\n\n const match = step.match(/(\\d+)(.+)/);\n\n const rawLength = match?.[1];\n const unit = match?.[2];\n\n if (rawLength) {\n if (unit === 'ns') {\n return parseInt(rawLength, 10);\n }\n if (unit === 'µs') {\n return parseInt(rawLength, 10) * 1000;\n }\n if (unit === 'ms') {\n return parseInt(rawLength, 10) * 1000000;\n }\n const duration = parseDuration(step);\n return (\n (duration.seconds || 0) * 1000000000 +\n (duration.minutes || 0) * 60000000000 +\n (duration.hours || 0) * 3600000000000\n );\n }\n\n return 0;\n};\n","import { cx, css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2, Button } from '@grafana/ui';\n\nconst AccessoryButton = ({ className, ...props }) => {\n const styles = useStyles2(getButtonStyles);\n return /* @__PURE__ */ React__default.createElement(Button, { ...props, className: cx(className, styles.button) });\n};\nconst getButtonStyles = (theme) => ({\n button: css({\n paddingLeft: theme.spacing(3 / 2),\n paddingRight: theme.spacing(3 / 2)\n })\n});\n\nexport { AccessoryButton };\n//# sourceMappingURL=AccessoryButton.js.map\n","import { css } from '@emotion/css';\nimport { useCallback, useEffect } from 'react';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport { GrafanaTheme2, TimeRange } from '@grafana/data';\nimport { AccessoryButton } from '@grafana/plugin-ui';\nimport { FetchError } from '@grafana/runtime';\nimport { useStyles2 } from '@grafana/ui';\n\nimport { TraceqlFilter, TraceqlSearchScope } from '../dataquery.gen';\nimport { TempoDatasource } from '../datasource';\n\nimport SearchField from './SearchField';\nimport { getFilteredTags } from './utils';\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n vertical: css({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(0.25),\n }),\n horizontal: css({\n display: 'flex',\n flexDirection: 'row',\n gap: theme.spacing(1),\n }),\n addTag: css({\n marginLeft: theme.spacing(1),\n }),\n});\n\ninterface Props {\n updateFilter: (f: TraceqlFilter) => void;\n deleteFilter: (f: TraceqlFilter) => void;\n generateQueryWithoutFilter: (f?: TraceqlFilter) => string;\n filters: TraceqlFilter[];\n datasource: TempoDatasource;\n setError: (error: FetchError | null) => void;\n staticTags: Array<string | undefined>;\n isTagsLoading: boolean;\n hideValues?: boolean;\n requireTagAndValue?: boolean;\n addVariablesToOptions?: boolean;\n range?: TimeRange;\n timeRangeForTags?: number;\n}\nconst TagsInput = ({\n updateFilter,\n deleteFilter,\n filters,\n datasource,\n setError,\n staticTags,\n isTagsLoading,\n hideValues,\n requireTagAndValue,\n generateQueryWithoutFilter,\n addVariablesToOptions,\n range,\n timeRangeForTags,\n}: Props) => {\n const styles = useStyles2(getStyles);\n const handleOnAdd = useCallback(\n () => updateFilter({ id: generateId(), operator: '=', scope: TraceqlSearchScope.Span }),\n [updateFilter]\n );\n\n useEffect(() => {\n if (!filters?.length) {\n handleOnAdd();\n }\n }, [filters, handleOnAdd]);\n\n const getTags = (f: TraceqlFilter) => {\n const tags = datasource.languageProvider.getTags(f.scope);\n return getFilteredTags(tags, staticTags);\n };\n\n const validInput = (f: TraceqlFilter) => {\n // If value is removed from the filter, it can be set as an empty array\n return requireTagAndValue ? f.tag && f.value && f.value.length > 0 : f.tag;\n };\n\n return (\n <div className={styles.vertical}>\n {filters?.map((f, i) => (\n <div className={styles.horizontal} key={f.id}>\n <SearchField\n filter={f}\n datasource={datasource}\n setError={setError}\n updateFilter={updateFilter}\n tags={getTags(f)}\n isTagsLoading={isTagsLoading}\n hideValue={hideValues}\n query={generateQueryWithoutFilter(f)}\n addVariablesToOptions={addVariablesToOptions}\n range={range}\n timeRangeForTags={timeRangeForTags}\n />\n {(validInput(f) || filters.length > 1) && (\n <AccessoryButton\n aria-label={`Remove tag with ID ${f.id}`}\n variant={'secondary'}\n icon={'times'}\n onClick={() => deleteFilter?.(f)}\n tooltip={'Remove tag'}\n />\n )}\n {validInput(f) && i === filters.length - 1 && (\n <span className={styles.addTag}>\n <AccessoryButton\n aria-label=\"Add tag\"\n variant={'secondary'}\n icon={'plus'}\n onClick={handleOnAdd}\n tooltip={'Add tag'}\n />\n </span>\n )}\n </div>\n ))}\n </div>\n );\n};\n\nexport default TagsInput;\n\nexport const generateId = () => uuidv4().slice(0, 8);\n","import { css } from '@emotion/css';\nimport React__default from 'react';\nimport '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nfunction ConfigDescriptionLink(props) {\n const { description, suffix, feature } = props;\n const text = `Learn more about ${feature}`;\n const styles = useStyles2(getStyles);\n return /* @__PURE__ */ React__default.createElement(\"span\", { className: styles.container }, description, /* @__PURE__ */ React__default.createElement(\n \"a\",\n {\n \"aria-label\": text,\n href: `https://grafana.com/docs/grafana/next/datasources/${suffix}`,\n rel: \"noreferrer\",\n target: \"_blank\"\n },\n text\n ));\n}\nconst getStyles = (theme) => {\n return {\n container: css({\n color: theme.colors.text.secondary,\n a: css({\n color: theme.colors.text.link,\n textDecoration: \"underline\",\n marginLeft: \"5px\",\n \"&:hover\": {\n textDecoration: \"none\"\n }\n })\n })\n };\n};\n\nexport { ConfigDescriptionLink };\n//# sourceMappingURL=ConfigDescriptionLink.js.map\n","module.exports = __WEBPACK_EXTERNAL_MODULE__5959__;","module.exports = __WEBPACK_EXTERNAL_MODULE__6089__;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import React__default, { useState } from 'react';\nimport { css } from '@emotion/css';\nimport { useTheme2, IconButton } from '@grafana/ui';\n\nconst GenericConfigSection = ({\n children,\n title,\n description,\n isCollapsible = false,\n isInitiallyOpen = true,\n kind = \"section\",\n className\n}) => {\n const { colors, typography, spacing } = useTheme2();\n const [isOpen, setIsOpen] = useState(isCollapsible ? isInitiallyOpen : true);\n const iconName = isOpen ? \"angle-up\" : \"angle-down\";\n const isSubSection = kind === \"sub-section\";\n const collapsibleButtonAriaLabel = `${isOpen ? \"Collapse\" : \"Expand\"} section ${title}`;\n const styles = {\n header: css({\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n }),\n title: css({\n margin: 0\n }),\n subtitle: css({\n margin: 0,\n fontWeight: typography.fontWeightRegular\n }),\n descriptionText: css({\n marginTop: spacing(isSubSection ? 0.25 : 0.5),\n marginBottom: 0,\n ...typography.bodySmall,\n color: colors.text.secondary\n }),\n content: css({\n marginTop: spacing(2)\n })\n };\n return /* @__PURE__ */ React__default.createElement(\"div\", { className }, /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.header }, kind === \"section\" ? /* @__PURE__ */ React__default.createElement(\"h3\", { className: styles.title }, title) : /* @__PURE__ */ React__default.createElement(\"h6\", { className: styles.subtitle }, title), isCollapsible && /* @__PURE__ */ React__default.createElement(\n IconButton,\n {\n name: iconName,\n onClick: () => setIsOpen(!isOpen),\n type: \"button\",\n size: \"xl\",\n \"aria-label\": collapsibleButtonAriaLabel\n }\n )), description && /* @__PURE__ */ React__default.createElement(\"p\", { className: styles.descriptionText }, description), isOpen && /* @__PURE__ */ React__default.createElement(\"div\", { className: styles.content }, children));\n};\n\nexport { GenericConfigSection };\n//# sourceMappingURL=GenericConfigSection.js.map\n","module.exports = __WEBPACK_EXTERNAL_MODULE__7781__;","// Code generated - EDITING IS FUTILE. DO NOT EDIT.\n//\n// Generated by:\n// kinds/gen.go\n// Using jennies:\n// CommonSchemaJenny\n//\n// Run 'make gen-cue' from repository root to regenerate.\n\n\n/**\n * A topic is attached to DataFrame metadata in query results.\n * This specifies where the data should be used.\n */\nexport enum DataTopic {\n AlertStates = 'alertStates',\n Annotations = 'annotations',\n Series = 'series',\n}\n\n/**\n * TODO docs\n */\nexport interface DataSourceJsonData {\n alertmanagerUid?: string;\n authType?: string;\n defaultRegion?: string;\n manageAlerts?: boolean;\n profile?: string;\n}\n\n/**\n * These are the common properties available to all queries in all datasources.\n * Specific implementations will *extend* this interface, adding the required\n * properties for the given context.\n */\nexport interface DataQuery {\n /**\n * For mixed data sources the selected datasource is on the query level.\n * For non mixed scenarios this is undefined.\n * TODO find a better way to do this ^ that's friendly to schema\n * TODO this shouldn't be unknown but DataSourceRef | null\n */\n datasource?: unknown;\n /**\n * If hide is set to true, Grafana will filter out the response(s) associated with this query before returning it to the panel.\n */\n hide?: boolean;\n /**\n * Specify the query flavor\n * TODO make this required and give it a default\n */\n queryType?: string;\n /**\n * A unique identifier for the query within the list of targets.\n * In server side expressions, the refId is used as a variable name to identify results.\n * By default, the UI will assign A->Z; however setting meaningful names may be useful.\n */\n refId: string;\n}\n\nexport interface BaseDimensionConfig {\n /**\n * fixed: T -- will be added by each element\n */\n field?: string;\n}\n\nexport enum ScaleDimensionMode {\n Linear = 'linear',\n Quad = 'quad',\n}\n\nexport interface ScaleDimensionConfig extends BaseDimensionConfig {\n fixed?: number;\n max: number;\n min: number;\n mode?: ScaleDimensionMode; // | *\"linear\"\n}\n\nexport interface ColorDimensionConfig extends BaseDimensionConfig {\n fixed?: string; // color value\n}\n\nexport enum ScalarDimensionMode {\n Clamped = 'clamped',\n Mod = 'mod',\n}\n\nexport interface ScalarDimensionConfig extends BaseDimensionConfig {\n fixed?: number;\n max: number;\n min: number;\n mode?: ScalarDimensionMode;\n}\n\nexport enum TextDimensionMode {\n Field = 'field',\n Fixed = 'fixed',\n Template = 'template',\n}\n\nexport interface TextDimensionConfig extends BaseDimensionConfig {\n fixed?: string;\n mode: TextDimensionMode;\n}\n\nexport enum ResourceDimensionMode {\n Field = 'field',\n Fixed = 'fixed',\n Mapping = 'mapping',\n}\n\n/**\n * Links to a resource (image/svg path)\n */\nexport interface ResourceDimensionConfig extends BaseDimensionConfig {\n fixed?: string;\n mode: ResourceDimensionMode;\n}\n\nexport enum ConnectionDirection {\n Both = 'both',\n Forward = 'forward',\n None = 'none',\n Reverse = 'reverse',\n}\n\nexport enum DirectionDimensionMode {\n Field = 'field',\n Fixed = 'fixed',\n}\n\nexport interface MapLayerOptions {\n /**\n * Custom options depending on the type\n */\n config?: unknown;\n /**\n * Defines a frame MatcherConfig that may filter data for the given layer\n */\n filterData?: unknown;\n /**\n * Common method to define geometry fields\n */\n location?: FrameGeometrySource;\n /**\n * configured unique display name\n */\n name: string;\n /**\n * Common properties:\n * https://openlayers.org/en/latest/apidoc/module-ol_layer_Base-BaseLayer.html\n * Layer opacity (0-1)\n */\n opacity?: number;\n /**\n * Check tooltip (defaults to true)\n */\n tooltip?: boolean;\n type: string;\n}\n\nexport enum FrameGeometrySourceMode {\n Auto = 'auto',\n Coords = 'coords',\n Geohash = 'geohash',\n Lookup = 'lookup',\n}\n\nexport enum HeatmapCalculationMode {\n Count = 'count',\n Size = 'size',\n}\n\nexport enum HeatmapCellLayout {\n auto = 'auto',\n ge = 'ge',\n le = 'le',\n unknown = 'unknown',\n}\n\nexport interface HeatmapCalculationBucketConfig {\n /**\n * Sets the bucket calculation mode\n */\n mode?: HeatmapCalculationMode;\n /**\n * Controls the scale of the buckets\n */\n scale?: ScaleDistributionConfig;\n /**\n * The number of buckets to use for the axis in the heatmap\n */\n value?: string;\n}\n\nexport enum LogsSortOrder {\n Ascending = 'Ascending',\n Descending = 'Descending',\n}\n\n/**\n * TODO docs\n */\nexport enum AxisPlacement {\n Auto = 'auto',\n Bottom = 'bottom',\n Hidden = 'hidden',\n Left = 'left',\n Right = 'right',\n Top = 'top',\n}\n\n/**\n * TODO docs\n */\nexport enum AxisColorMode {\n Series = 'series',\n Text = 'text',\n}\n\n/**\n * TODO docs\n */\nexport enum VisibilityMode {\n Always = 'always',\n Auto = 'auto',\n Never = 'never',\n}\n\n/**\n * TODO docs\n */\nexport enum GraphDrawStyle {\n Bars = 'bars',\n Line = 'line',\n Points = 'points',\n}\n\n/**\n * TODO docs\n */\nexport enum GraphTransform {\n Constant = 'constant',\n NegativeY = 'negative-Y',\n}\n\n/**\n * TODO docs\n */\nexport enum LineInterpolation {\n Linear = 'linear',\n Smooth = 'smooth',\n StepAfter = 'stepAfter',\n StepBefore = 'stepBefore',\n}\n\n/**\n * TODO docs\n */\nexport enum ScaleDistribution {\n Linear = 'linear',\n Log = 'log',\n Ordinal = 'ordinal',\n Symlog = 'symlog',\n}\n\n/**\n * TODO docs\n */\nexport enum GraphGradientMode {\n Hue = 'hue',\n None = 'none',\n Opacity = 'opacity',\n Scheme = 'scheme',\n}\n\n/**\n * TODO docs\n */\nexport enum StackingMode {\n None = 'none',\n Normal = 'normal',\n Percent = 'percent',\n}\n\n/**\n * TODO docs\n */\nexport enum BarAlignment {\n After = 1,\n Before = -1,\n Center = 0,\n}\n\n/**\n * TODO docs\n */\nexport enum ScaleOrientation {\n Horizontal = 0,\n Vertical = 1,\n}\n\n/**\n * TODO docs\n */\nexport enum ScaleDirection {\n Down = -1,\n Left = -1,\n Right = 1,\n Up = 1,\n}\n\n/**\n * TODO docs\n */\nexport interface LineStyle {\n dash?: Array<number>;\n fill?: ('solid' | 'dash' | 'dot' | 'square');\n}\n\nexport const defaultLineStyle: Partial<LineStyle> = {\n dash: [],\n};\n\n/**\n * TODO docs\n */\nexport interface LineConfig {\n lineColor?: string;\n lineInterpolation?: LineInterpolation;\n lineStyle?: LineStyle;\n lineWidth?: number;\n /**\n * Indicate if null values should be treated as gaps or connected.\n * When the value is a number, it represents the maximum delta in the\n * X axis that should be considered connected. For timeseries, this is milliseconds\n */\n spanNulls?: (boolean | number);\n}\n\n/**\n * TODO docs\n */\nexport interface BarConfig {\n barAlignment?: BarAlignment;\n barMaxWidth?: number;\n barWidthFactor?: number;\n}\n\n/**\n * TODO docs\n */\nexport interface FillConfig {\n fillBelowTo?: string;\n fillColor?: string;\n fillOpacity?: number;\n}\n\n/**\n * TODO docs\n */\nexport interface PointsConfig {\n pointColor?: string;\n pointSize?: number;\n pointSymbol?: string;\n showPoints?: VisibilityMode;\n}\n\n/**\n * TODO docs\n */\nexport interface ScaleDistributionConfig {\n linearThreshold?: number;\n log?: number;\n type: ScaleDistribution;\n}\n\n/**\n * TODO docs\n */\nexport interface AxisConfig {\n axisBorderShow?: boolean;\n axisCenteredZero?: boolean;\n axisColorMode?: AxisColorMode;\n axisGridShow?: boolean;\n axisLabel?: string;\n axisPlacement?: AxisPlacement;\n axisSoftMax?: number;\n axisSoftMin?: number;\n axisWidth?: number;\n scaleDistribution?: ScaleDistributionConfig;\n}\n\n/**\n * TODO docs\n */\nexport interface HideSeriesConfig {\n legend: boolean;\n tooltip: boolean;\n viz: boolean;\n}\n\n/**\n * TODO docs\n */\nexport interface StackingConfig {\n group?: string;\n mode?: StackingMode;\n}\n\n/**\n * TODO docs\n */\nexport interface StackableFieldConfig {\n stacking?: StackingConfig;\n}\n\n/**\n * TODO docs\n */\nexport interface HideableFieldConfig {\n hideFrom?: HideSeriesConfig;\n}\n\n/**\n * TODO docs\n */\nexport enum GraphThresholdsStyleMode {\n Area = 'area',\n Dashed = 'dashed',\n DashedAndArea = 'dashed+area',\n Line = 'line',\n LineAndArea = 'line+area',\n Off = 'off',\n Series = 'series',\n}\n\n/**\n * TODO docs\n */\nexport interface GraphThresholdsStyleConfig {\n mode: GraphThresholdsStyleMode;\n}\n\n/**\n * TODO docs\n */\nexport type LegendPlacement = ('bottom' | 'right');\n\n/**\n * TODO docs\n * Note: \"hidden\" needs to remain as an option for plugins compatibility\n */\nexport enum LegendDisplayMode {\n Hidden = 'hidden',\n List = 'list',\n Table = 'table',\n}\n\n/**\n * TODO docs\n */\nexport interface SingleStatBaseOptions extends OptionsWithTextFormatting {\n orientation: VizOrientation;\n reduceOptions: ReduceDataOptions;\n}\n\n/**\n * TODO docs\n */\nexport interface ReduceDataOptions {\n /**\n * When !values, pick one value for the whole field\n */\n calcs: Array<string>;\n /**\n * Which fields to show. By default this is only numeric fields\n */\n fields?: string;\n /**\n * if showing all values limit\n */\n limit?: number;\n /**\n * If true show each row value\n */\n values?: boolean;\n}\n\nexport const defaultReduceDataOptions: Partial<ReduceDataOptions> = {\n calcs: [],\n};\n\n/**\n * TODO docs\n */\nexport enum VizOrientation {\n Auto = 'auto',\n Horizontal = 'horizontal',\n Vertical = 'vertical',\n}\n\n/**\n * TODO docs\n */\nexport interface OptionsWithTooltip {\n tooltip: VizTooltipOptions;\n}\n\n/**\n * TODO docs\n */\nexport interface OptionsWithLegend {\n legend: VizLegendOptions;\n}\n\n/**\n * TODO docs\n */\nexport interface OptionsWithTimezones {\n timezone?: Array<TimeZone>;\n}\n\nexport const defaultOptionsWithTimezones: Partial<OptionsWithTimezones> = {\n timezone: [],\n};\n\n/**\n * TODO docs\n */\nexport interface OptionsWithTextFormatting {\n text?: VizTextDisplayOptions;\n}\n\n/**\n * TODO docs\n */\nexport enum BigValueColorMode {\n Background = 'background',\n BackgroundSolid = 'background_solid',\n None = 'none',\n Value = 'value',\n}\n\n/**\n * TODO docs\n */\nexport enum BigValueGraphMode {\n Area = 'area',\n Line = 'line',\n None = 'none',\n}\n\n/**\n * TODO docs\n */\nexport enum BigValueJustifyMode {\n Auto = 'auto',\n Center = 'center',\n}\n\n/**\n * TODO docs\n */\nexport enum BigValueTextMode {\n Auto = 'auto',\n Name = 'name',\n None = 'none',\n Value = 'value',\n ValueAndName = 'value_and_name',\n}\n\n/**\n * TODO docs\n */\nexport enum PercentChangeColorMode {\n Inverted = 'inverted',\n SameAsValue = 'same_as_value',\n Standard = 'standard',\n}\n\n/**\n * TODO -- should not be table specific!\n * TODO docs\n */\nexport type FieldTextAlignment = ('auto' | 'left' | 'right' | 'center');\n\n/**\n * Controls the value alignment in the TimelineChart component\n */\nexport type TimelineValueAlignment = ('center' | 'left' | 'right');\n\n/**\n * TODO docs\n */\nexport interface VizTextDisplayOptions {\n /**\n * Explicit percent text size\n */\n percentSize?: number;\n /**\n * Explicit title text size\n */\n titleSize?: number;\n /**\n * Explicit value text size\n */\n valueSize?: number;\n}\n\n/**\n * TODO docs\n */\nexport enum TooltipDisplayMode {\n Multi = 'multi',\n None = 'none',\n Single = 'single',\n}\n\n/**\n * TODO docs\n */\nexport enum SortOrder {\n Ascending = 'asc',\n Descending = 'desc',\n None = 'none',\n}\n\n/**\n * TODO docs\n */\nexport interface GraphFieldConfig extends LineConfig, FillConfig, PointsConfig, AxisConfig, BarConfig, StackableFieldConfig, HideableFieldConfig {\n drawStyle?: GraphDrawStyle;\n gradientMode?: GraphGradientMode;\n insertNulls?: (boolean | number);\n showValues?: boolean;\n thresholdsStyle?: GraphThresholdsStyleConfig;\n transform?: GraphTransform;\n}\n\n/**\n * TODO docs\n */\nexport interface VizLegendOptions {\n asTable?: boolean;\n calcs: Array<string>;\n displayMode: LegendDisplayMode;\n isVisible?: boolean;\n placement: LegendPlacement;\n showLegend: boolean;\n sortBy?: string;\n sortDesc?: boolean;\n width?: number;\n}\n\nexport const defaultVizLegendOptions: Partial<VizLegendOptions> = {\n calcs: [],\n};\n\n/**\n * Enum expressing the possible display modes\n * for the bar gauge component of Grafana UI\n */\nexport enum BarGaugeDisplayMode {\n Basic = 'basic',\n Gradient = 'gradient',\n Lcd = 'lcd',\n}\n\n/**\n * Allows for the table cell gauge display type to set the gauge mode.\n */\nexport enum BarGaugeValueMode {\n Color = 'color',\n Hidden = 'hidden',\n Text = 'text',\n}\n\n/**\n * Allows for the bar gauge name to be placed explicitly\n */\nexport enum BarGaugeNamePlacement {\n Auto = 'auto',\n Hidden = 'hidden',\n Left = 'left',\n Top = 'top',\n}\n\n/**\n * Allows for the bar gauge size to be set explicitly\n */\nexport enum BarGaugeSizing {\n Auto = 'auto',\n Manual = 'manual',\n}\n\n/**\n * TODO docs\n */\nexport interface VizTooltipOptions {\n hideZeros?: boolean;\n maxHeight?: number;\n maxWidth?: number;\n mode: TooltipDisplayMode;\n sort: SortOrder;\n}\n\nexport interface Labels {}\n\n/**\n * Internally, this is the \"type\" of cell that's being displayed\n * in the table such as colored text, JSON, gauge, etc.\n * The color-background-solid, gradient-gauge, and lcd-gauge\n * modes are deprecated in favor of new cell subOptions\n */\nexport enum TableCellDisplayMode {\n Actions = 'actions',\n Auto = 'auto',\n BasicGauge = 'basic',\n ColorBackground = 'color-background',\n ColorBackgroundSolid = 'color-background-solid',\n ColorText = 'color-text',\n Custom = 'custom',\n DataLinks = 'data-links',\n Gauge = 'gauge',\n Geo = 'geo',\n GradientGauge = 'gradient-gauge',\n Image = 'image',\n JSONView = 'json-view',\n LcdGauge = 'lcd-gauge',\n Markdown = 'markdown',\n Pill = 'pill',\n Sparkline = 'sparkline',\n}\n\n/**\n * Display mode to the \"Colored Background\" display\n * mode for table cells. Either displays a solid color (basic mode)\n * or a gradient.\n */\nexport enum TableCellBackgroundDisplayMode {\n Basic = 'basic',\n Gradient = 'gradient',\n}\n\n/**\n * Sort by field state\n */\nexport interface TableSortByFieldState {\n /**\n * Flag used to indicate descending sort order\n */\n desc?: boolean;\n /**\n * Sets the display name of the field to sort by\n */\n displayName: string;\n}\n\n/**\n * Auto mode table cell options\n */\nexport interface TableAutoCellOptions {\n type: TableCellDisplayMode.Auto;\n}\n\n/**\n * Colored text cell options\n */\nexport interface TableColorTextCellOptions {\n type: TableCellDisplayMode.ColorText;\n}\n\n/**\n * Json view cell options\n */\nexport interface TableJsonViewCellOptions {\n type: TableCellDisplayMode.JSONView;\n}\n\n/**\n * Json view cell options\n */\nexport interface TableImageCellOptions {\n alt?: string;\n title?: string;\n type: TableCellDisplayMode.Image;\n}\n\n/**\n * Show data links in the cell\n */\nexport interface TableDataLinksCellOptions {\n type: TableCellDisplayMode.DataLinks;\n}\n\n/**\n * Show actions in the cell\n */\nexport interface TableActionsCellOptions {\n type: TableCellDisplayMode.Actions;\n}\n\n/**\n * Gauge cell options\n */\nexport interface TableBarGaugeCellOptions {\n mode?: BarGaugeDisplayMode;\n type: TableCellDisplayMode.Gauge;\n valueDisplayMode?: BarGaugeValueMode;\n}\n\n/**\n * Sparkline cell options\n */\nexport interface TableSparklineCellOptions extends GraphFieldConfig {\n hideValue?: boolean;\n type: TableCellDisplayMode.Sparkline;\n}\n\n/**\n * Colored background cell options\n */\nexport interface TableColoredBackgroundCellOptions {\n applyToRow?: boolean;\n mode?: TableCellBackgroundDisplayMode;\n type: TableCellDisplayMode.ColorBackground;\n}\n\nexport interface TablePillCellOptions {\n type: TableCellDisplayMode.Pill;\n}\n\n/**\n * Use UTC/GMT timezone\n */\nexport type TimeZoneUtc = 'utc';\n\n/**\n * Use the timezone defined by end user web browser\n */\nexport type TimeZoneBrowser = 'browser';\n\n/**\n * Options for time comparison\n */\nexport interface TimeCompareOptions {\n /**\n * Enable time comparison control\n */\n timeCompare?: boolean;\n}\n\n/**\n * Optional formats for the template variable replace functions\n * See also https://grafana.com/docs/grafana/latest/dashboards/variables/variable-syntax/#advanced-variable-format-options\n */\nexport enum VariableFormatID {\n CSV = 'csv',\n CustomQueryParam = 'customqueryparam',\n Date = 'date',\n Distributed = 'distributed',\n DoubleQuote = 'doublequote',\n Glob = 'glob',\n HTML = 'html',\n JSON = 'json',\n Join = 'join',\n Lucene = 'lucene',\n PercentEncode = 'percentencode',\n Pipe = 'pipe',\n QueryParam = 'queryparam',\n Raw = 'raw',\n Regex = 'regex',\n SQLString = 'sqlstring',\n SingleQuote = 'singlequote',\n Text = 'text',\n UriEncode = 'uriencode',\n}\n\nexport interface DataSourceRef {\n /**\n * Datasource API version\n */\n apiVersion?: string;\n /**\n * The plugin type-id\n */\n type?: string;\n /**\n * Specific datasource instance\n */\n uid?: string;\n}\n\nexport interface DirectionDimensionConfig extends BaseDimensionConfig {\n fixed?: ConnectionDirection;\n mode: DirectionDimensionMode;\n}\n\nexport interface FrameGeometrySource {\n /**\n * Path to Gazetteer\n */\n gazetteer?: string;\n /**\n * Field mappings\n */\n geohash?: string;\n latitude?: string;\n longitude?: string;\n lookup?: string;\n mode: FrameGeometrySourceMode;\n wkt?: string;\n}\n\nexport interface HeatmapCalculationOptions {\n /**\n * The number of buckets to use for the xAxis in the heatmap\n */\n xBuckets?: HeatmapCalculationBucketConfig;\n /**\n * The number of buckets to use for the yAxis in the heatmap\n */\n yBuckets?: HeatmapCalculationBucketConfig;\n}\n\nexport enum LogsDedupStrategy {\n exact = 'exact',\n none = 'none',\n numbers = 'numbers',\n signature = 'signature',\n}\n\n/**\n * Compare two values\n */\nexport enum ComparisonOperation {\n EQ = 'eq',\n GT = 'gt',\n GTE = 'gte',\n LT = 'lt',\n LTE = 'lte',\n NEQ = 'neq',\n}\n\nexport interface TableMarkdownCellOptions {\n dynamicHeight?: boolean;\n type: TableCellDisplayMode.Markdown;\n}\n\n/**\n * Height of a table cell\n */\nexport enum TableCellHeight {\n Auto = 'auto',\n Lg = 'lg',\n Md = 'md',\n Sm = 'sm',\n}\n\n/**\n * Table cell options. Each cell has a display mode\n * and other potential options for that display.\n */\nexport type TableCellOptions = (TableAutoCellOptions | TableSparklineCellOptions | TableBarGaugeCellOptions | TableColoredBackgroundCellOptions | TableColorTextCellOptions | TableImageCellOptions | TablePillCellOptions | TableDataLinksCellOptions | TableActionsCellOptions | TableJsonViewCellOptions | TableMarkdownCellOptions | {\n type: TableCellDisplayMode.Geo\n });\n\nexport enum TableCellTooltipPlacement {\n Auto = 'auto',\n Bottom = 'bottom',\n Left = 'left',\n Right = 'right',\n Top = 'top',\n}\n\nexport interface TableFooterOptions {\n /**\n * footer reducers to apply to this field\n */\n reducers?: Array<string>;\n}\n\nexport const defaultTableFooterOptions: Partial<TableFooterOptions> = {\n reducers: [],\n};\n\n/**\n * Field options for each field within a table (e.g 10, \"The String\", 64.20, etc.)\n * Generally defines alignment, filtering capabilties, display options, etc.\n */\nexport interface TableFieldOptions extends HideableFieldConfig {\n align: FieldTextAlignment;\n cellOptions: TableCellOptions;\n /**\n * This field is deprecated in favor of using cellOptions\n */\n displayMode?: TableCellDisplayMode;\n filterable?: boolean;\n /**\n * options for the footer for this field\n */\n footer?: TableFooterOptions;\n /**\n * Hides any header for a column, useful for columns that show some static content or buttons.\n */\n hideHeader?: boolean;\n inspect: boolean;\n minWidth?: number;\n /**\n * The name of the field which contains styling overrides for this cell\n */\n styleField?: string;\n /**\n * Selecting or hovering this field will show a tooltip containing the content within the target field\n */\n tooltip?: {\n /**\n * The name of the field to get the tooltip content from\n */\n field: string;\n /**\n * placement of the tooltip\n */\n placement?: TableCellTooltipPlacement;\n };\n width?: number;\n /**\n * Enables text wrapping for column headers\n */\n wrapHeaderText?: boolean;\n /**\n * if true, wrap the text content of the cell\n */\n wrapText?: boolean;\n}\n\nexport const defaultTableFieldOptions: Partial<TableFieldOptions> = {\n align: 'auto',\n inspect: false,\n};\n\n/**\n * A specific timezone from https://en.wikipedia.org/wiki/Tz_database\n */\nexport type TimeZone = (TimeZoneUtc | TimeZoneBrowser | string);\n\nexport const defaultTimeZone: TimeZone = 'browser';\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8146__;","module.exports = __WEBPACK_EXTERNAL_MODULE__8531__;","import { startCase, uniq } from 'lodash';\n\nimport { ScopedVars, SelectableValue } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { VariableFormatID } from '@grafana/schema';\n\nimport { TraceqlFilter, TraceqlSearchScope } from '../dataquery.gen';\nimport { getEscapedRegexValues, getEscapedValues } from '../datasource';\nimport TempoLanguageProvider from '../language_provider';\nimport { intrinsics } from '../traceql/traceql';\nimport { Scope } from '../types';\n\nexport const interpolateFilters = (filters: TraceqlFilter[], scopedVars?: ScopedVars) => {\n const interpolatedFilters = filters.map((filter) => {\n const updatedFilter = {\n ...filter,\n tag: getTemplateSrv().replace(filter.tag ?? '', scopedVars ?? {}),\n };\n\n if (filter.value) {\n updatedFilter.value =\n typeof filter.value === 'string'\n ? getTemplateSrv().replace(filter.value ?? '', scopedVars ?? {}, VariableFormatID.Pipe)\n : filter.value.map((v) => getTemplateSrv().replace(v ?? '', scopedVars ?? {}, VariableFormatID.Pipe));\n }\n\n return updatedFilter;\n });\n\n return interpolatedFilters;\n};\n\nconst isRegExpOperator = (operator: string) => operator === '=~' || operator === '!~';\n\nexport const valueHelper = (f: TraceqlFilter) => {\n let value = f.value;\n\n if (Array.isArray(value) && !f.isCustomValue) {\n value = getEscapedValues(value);\n\n if (isRegExpOperator(f.operator!)) {\n value = getEscapedRegexValues(value);\n }\n }\n\n if (Array.isArray(value) && value.length > 1) {\n return `\"${value.join('|')}\"`;\n }\n if (f.valueType === 'string') {\n return `\"${value}\"`;\n }\n return value;\n};\n\nexport const scopeHelper = (f: TraceqlFilter, lp: TempoLanguageProvider) => {\n // Intrinsic fields don't have a scope\n if (lp.getIntrinsics().find((t) => t === f.tag)) {\n return '';\n }\n return (\n (f.scope === TraceqlSearchScope.Event ||\n f.scope === TraceqlSearchScope.Instrumentation ||\n f.scope === TraceqlSearchScope.Link ||\n f.scope === TraceqlSearchScope.Resource ||\n f.scope === TraceqlSearchScope.Span\n ? f.scope?.toLowerCase()\n : '') + '.'\n );\n};\n\nexport const tagHelper = (f: TraceqlFilter, filters: TraceqlFilter[]) => {\n if (f.tag === 'duration') {\n const durationType = filters.find((f) => f.id === 'duration-type');\n if (durationType) {\n return durationType.value === 'trace' ? 'traceDuration' : 'duration';\n }\n return f.tag;\n }\n return f.tag;\n};\n\nexport const filterToQuerySection = (f: TraceqlFilter, filters: TraceqlFilter[], lp: TempoLanguageProvider) => {\n if (Array.isArray(f.value) && f.value.length > 1 && !isRegExpOperator(f.operator!)) {\n // For negative operators (!=), use && instead of ||\n const joinOperator = f.operator === '!=' ? ' && ' : ' || ';\n return `(${f.value.map((v) => `${scopeHelper(f, lp)}${tagHelper(f, filters)}${f.operator}${valueHelper({ ...f, value: v })}`).join(joinOperator)})`;\n }\n\n return `${scopeHelper(f, lp)}${tagHelper(f, filters)}${f.operator}${valueHelper(f)}`;\n};\n\nexport const getTagWithoutScope = (tag: string) => {\n return tag.replace(/^(event|instrumentation|link|resource|span)\\./, '');\n};\n\nexport const filterScopedTag = (f: TraceqlFilter, lp: TempoLanguageProvider) => {\n return scopeHelper(f, lp) + f.tag;\n};\n\nexport const filterTitle = (f: TraceqlFilter, lp: TempoLanguageProvider) => {\n // Special case for the intrinsic \"name\" since a label called \"Name\" isn't explicit\n if (f.tag === 'name') {\n return 'Span Name';\n }\n // Special case for the resource service name\n if (f.tag === 'service.name' && f.scope === TraceqlSearchScope.Resource) {\n return 'Service Name';\n }\n return startCase(filterScopedTag(f, lp));\n};\n\nexport const getFilteredTags = (tags: string[], staticTags: Array<string | undefined>) => {\n return [...tags].filter((t) => !staticTags.includes(t));\n};\n\nexport const getUnscopedTags = (scopes: Scope[]) => {\n return uniq(\n scopes\n .map((scope: Scope) =>\n scope.name && scope.name !== TraceqlSearchScope.Intrinsic && scope.tags ? scope.tags : []\n )\n .flat()\n );\n};\n\nexport const getIntrinsicTags = (scopes: Scope[]) => {\n let tags = scopes\n .map((scope: Scope) => (scope.name && scope.name === TraceqlSearchScope.Intrinsic && scope.tags ? scope.tags : []))\n .flat();\n\n // Add the default intrinsic tags to the list of tags.\n // This is needed because the /api/v2/search/tags API\n // may not always return all the default intrinsic tags\n // but generally has the most up to date list.\n tags = uniq(tags.concat(intrinsics));\n return tags;\n};\n\nexport const getAllTags = (scopes: Scope[]) => {\n return uniq(scopes.map((scope: Scope) => (scope.tags ? scope.tags : [])).flat());\n};\n\nexport const getTagsByScope = (scopes: Scope[], scope: TraceqlSearchScope | string) => {\n return uniq(scopes.map((s: Scope) => (s.name && s.name === scope && s.tags ? s.tags : [])).flat());\n};\n\nexport function replaceAt<T>(array: T[], index: number, value: T) {\n const ret = array.slice(0);\n ret[index] = value;\n return ret;\n}\n\nexport const operatorSelectableValue = (op: string) => {\n const result: SelectableValue = { label: op, value: op };\n switch (op) {\n case '=':\n result.description = 'Equals';\n break;\n case '!=':\n result.description = 'Not equals';\n break;\n case '>':\n result.description = 'Greater';\n break;\n case '>=':\n result.description = 'Greater or Equal';\n break;\n case '<':\n result.description = 'Less';\n break;\n case '<=':\n result.description = 'Less or Equal';\n break;\n case '=~':\n result.description = 'Matches regex';\n break;\n case '!~':\n result.description = 'Does not match regex';\n break;\n }\n return result;\n};\n","import { useEffect } from 'react';\nimport useTimeoutFn from './useTimeoutFn';\nexport default function useDebounce(fn, ms, deps) {\n if (ms === void 0) { ms = 0; }\n if (deps === void 0) { deps = []; }\n var _a = useTimeoutFn(fn, ms), isReady = _a[0], cancel = _a[1], reset = _a[2];\n useEffect(reset, deps);\n return [isReady, cancel];\n}\n","import { useCallback, useEffect, useRef } from 'react';\nexport default function useTimeoutFn(fn, ms) {\n if (ms === void 0) { ms = 0; }\n var ready = useRef(false);\n var timeout = useRef();\n var callback = useRef(fn);\n var isReady = useCallback(function () { return ready.current; }, []);\n var set = useCallback(function () {\n ready.current = false;\n timeout.current && clearTimeout(timeout.current);\n timeout.current = setTimeout(function () {\n ready.current = true;\n callback.current();\n }, ms);\n }, [ms]);\n var clear = useCallback(function () {\n ready.current = null;\n timeout.current && clearTimeout(timeout.current);\n }, []);\n // update ref when function changes\n useEffect(function () {\n callback.current = fn;\n }, [fn]);\n // set on mount, clear on unmount\n useEffect(function () {\n set();\n return clear;\n }, [ms]);\n return [isReady, clear, set];\n}\n","export const validateIntervalRegex = /^(-?\\d+(?:\\.\\d+)?)(ms|[Mwdhmsy])$/;\n\nexport const validateInterval = (val: string, regex = validateIntervalRegex) => {\n const matches = val.match(regex);\n return matches || !val ? false : true;\n};\n","import { useState } from 'react';\nimport { useDebounce } from 'react-use';\n\nimport { InlineField, Input } from '@grafana/ui';\n\nimport { validateInterval } from './validation';\n\ninterface Props {\n value: string;\n onChange: (val: string) => void;\n isInvalidError: string;\n placeholder?: string;\n width?: number;\n ariaLabel?: string;\n label?: string;\n tooltip?: string;\n disabled?: boolean;\n validationRegex?: RegExp;\n}\n\ninterface FieldProps {\n labelWidth: number;\n disabled: boolean;\n invalid: boolean;\n error: string;\n label?: string;\n tooltip?: string;\n}\n\nexport const IntervalInput = (props: Props) => {\n const [intervalIsInvalid, setIntervalIsInvalid] = useState(() => {\n return props.value ? validateInterval(props.value, props.validationRegex) : false;\n });\n\n useDebounce(\n () => {\n setIntervalIsInvalid(validateInterval(props.value, props.validationRegex));\n },\n 500,\n [props.value]\n );\n\n const fieldProps: FieldProps = {\n labelWidth: 26,\n disabled: props.disabled ?? false,\n invalid: intervalIsInvalid,\n error: props.isInvalidError,\n };\n if (props.label) {\n fieldProps.label = props.label;\n fieldProps.tooltip = props.tooltip || '';\n }\n\n return (\n <InlineField {...fieldProps}>\n <Input\n type=\"text\"\n placeholder={props.placeholder || '0'}\n width={props.width || 40}\n onChange={(e) => {\n props.onChange(e.currentTarget.value);\n }}\n value={props.value}\n aria-label={props.ariaLabel || 'interval input'}\n />\n </InlineField>\n );\n};\n","import { css } from '@emotion/css';\nimport { useEffect, useState } from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { Alert, AlertVariant, useTheme2 } from '@grafana/ui';\n\nenum AlertTimeout {\n Error = 7000,\n Info = 3000,\n Success = 3000,\n Warning = 5000,\n}\n\nconst getStyle = (theme: GrafanaTheme2) => {\n return css({\n position: 'absolute',\n zIndex: theme.zIndex.portal,\n top: 0,\n right: 10,\n });\n};\n\nconst timeoutMap = {\n ['error']: AlertTimeout.Error,\n ['info']: AlertTimeout.Info,\n ['success']: AlertTimeout.Success,\n ['warning']: AlertTimeout.Warning,\n};\n\ntype AlertProps = {\n // Severity of the alert. Controls the style of the alert (e.g., background color)\n severity: AlertVariant;\n // Displayed message. If set to empty string, the alert is not displayed\n text: string;\n};\n\nexport const TemporaryAlert = (props: AlertProps) => {\n const style = getStyle(useTheme2());\n const [visible, setVisible] = useState(false);\n const [timer, setTimer] = useState<NodeJS.Timeout>();\n\n useEffect(() => {\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [timer]);\n\n useEffect(() => {\n if (props.text !== '') {\n setVisible(true);\n\n const timer = setTimeout(() => {\n setVisible(false);\n }, timeoutMap[props.severity]);\n setTimer(timer);\n }\n }, [props.severity, props.text]);\n\n return (\n <>\n {visible && (\n <Alert\n className={style}\n elevated={true}\n onRemove={() => setVisible(false)}\n severity={props.severity}\n title={props.text}\n />\n )}\n </>\n );\n};\n","import { DataSourcePluginOptionsEditorProps, updateDatasourcePluginJsonDataOption } from '@grafana/data';\nimport { Combobox, InlineField, InlineFieldRow, useStyles2 } from '@grafana/ui';\n\nimport { TempoJsonData } from '../types';\n\nimport { getStyles } from './QuerySettings';\n\ninterface Props extends DataSourcePluginOptionsEditorProps<TempoJsonData> {}\n\nexport const DEFAULT_TIME_RANGE_FOR_TAGS = 1800; // 60 * 30\n\nexport function TagsTimeRangeSettings({ options, onOptionsChange }: Props) {\n const styles = useStyles2(getStyles);\n\n const selectOptions = [\n { label: 'Last 30 minutes of selected range', value: DEFAULT_TIME_RANGE_FOR_TAGS },\n { label: 'Last 3 hours of selected range', value: 10800 }, // 60 * 60 * 3\n { label: 'Last 24 hours of selected range', value: 86400 }, // 60 * 60 * 24\n { label: 'Last 3 days of selected range', value: 259200 }, // 60 * 60 * 24 * 3\n { label: 'Last 7 days of selected range', value: 604800 }, // 60 * 60 * 24 * 7\n ];\n\n return (\n <div className={styles.container}>\n <InlineFieldRow className={styles.row}>\n <InlineField tooltip=\"Time range in tags and tag value queries\" label=\"Time range in query\" labelWidth={26}>\n <Combobox\n id=\"time-range-for-tags-select\"\n options={selectOptions}\n value={options.jsonData?.timeRangeForTags || DEFAULT_TIME_RANGE_FOR_TAGS}\n onChange={(v) => {\n updateDatasourcePluginJsonDataOption(\n { onOptionsChange, options },\n 'timeRangeForTags',\n v?.value ?? DEFAULT_TIME_RANGE_FOR_TAGS\n );\n }}\n placeholder=\"Time range for tags\"\n width={40}\n />\n </InlineField>\n </InlineFieldRow>\n </div>\n );\n}\n","import { useEffect, useMemo, useState } from 'react';\n\nimport { DataQuery, SelectableValue, TimeRange } from '@grafana/data';\nimport { InlineField, InlineFieldRow, InputActionMeta, Select } from '@grafana/ui';\n\nimport { TempoDatasource } from './datasource';\nimport { OPTIONS_LIMIT } from './language_provider';\n\nexport enum TempoVariableQueryType {\n LabelNames,\n LabelValues,\n}\n\nexport interface TempoVariableQuery extends DataQuery {\n type: TempoVariableQueryType;\n label?: string;\n stream?: string;\n}\n\nconst variableOptions = [\n { label: 'Label names', value: TempoVariableQueryType.LabelNames },\n { label: 'Label values', value: TempoVariableQueryType.LabelValues },\n];\n\nconst refId = 'TempoDatasourceVariableQueryEditor-VariableQuery';\n\nexport type TempoVariableQueryEditorProps = {\n onChange: (value: TempoVariableQuery) => void;\n query: TempoVariableQuery;\n datasource: TempoDatasource;\n range?: TimeRange;\n};\n\nexport const TempoVariableQueryEditor = ({ onChange, query, datasource, range }: TempoVariableQueryEditorProps) => {\n const [label, setLabel] = useState(query.label || '');\n const [type, setType] = useState<number | undefined>(query.type);\n const [labelOptions, setLabelOptions] = useState<Array<SelectableValue<string>>>([]);\n const [labelQuery, setLabelQuery] = useState<string>('');\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (type === TempoVariableQueryType.LabelValues) {\n setIsLoading(true);\n datasource\n .labelNamesQuery(range)\n .then((labelNames: Array<{ text: string }>) => {\n setLabelOptions(labelNames.map(({ text }) => ({ label: text, value: text })));\n setIsLoading(false);\n })\n .catch(() => {\n setIsLoading(false);\n });\n }\n }, [datasource, query, type, range]);\n\n const options = useMemo(() => {\n if (labelQuery.length === 0) {\n return labelOptions.slice(0, OPTIONS_LIMIT);\n }\n\n const queryLowerCase = labelQuery.toLowerCase();\n return labelOptions\n .filter((tag) => {\n if (tag.value && tag.value.length > 0) {\n return tag.value.toLowerCase().includes(queryLowerCase);\n }\n return false;\n })\n .slice(0, OPTIONS_LIMIT);\n }, [labelQuery, labelOptions]);\n\n const onQueryTypeChange = (newType: SelectableValue<TempoVariableQueryType>) => {\n setType(newType.value);\n if (newType.value !== undefined) {\n onChange({\n type: newType.value,\n label,\n refId,\n });\n }\n };\n\n const onLabelChange = (newLabel: SelectableValue<string>) => {\n const newLabelValue = newLabel.value || '';\n setLabel(newLabelValue);\n if (type !== undefined) {\n onChange({\n type,\n label: newLabelValue,\n refId,\n });\n }\n };\n\n const handleBlur = () => {\n if (type !== undefined) {\n onChange({ type, label, refId });\n }\n };\n\n return (\n <>\n <InlineFieldRow>\n <InlineField label=\"Query type\" labelWidth={20}>\n <Select\n aria-label=\"Query type\"\n onChange={onQueryTypeChange}\n onBlur={handleBlur}\n value={type}\n options={variableOptions}\n width={32}\n />\n </InlineField>\n </InlineFieldRow>\n\n {type === TempoVariableQueryType.LabelValues && (\n <InlineFieldRow>\n <InlineField label=\"Label\" labelWidth={20}>\n <Select\n aria-label=\"Label\"\n onChange={onLabelChange}\n onBlur={handleBlur}\n onInputChange={(value: string, { action }: InputActionMeta) => {\n if (action === 'input-change') {\n setLabelQuery(value);\n }\n }}\n onCloseMenu={() => setLabelQuery('')}\n value={{ label, value: label }}\n options={options}\n width={32}\n allowCustomValue\n virtualized\n isLoading={isLoading}\n />\n </InlineField>\n </InlineFieldRow>\n )}\n </>\n );\n};\n","import {\n DataFrame,\n DataFrameView,\n DataQueryResponse,\n FieldColorModeId,\n FieldDTO,\n MutableDataFrame,\n NodeGraphDataFrameFieldNames as Fields,\n TimeRange,\n FieldType,\n toDataFrame,\n} from '@grafana/data';\n\nexport const secondsMetric = 'traces_service_graph_request_server_seconds_sum';\nexport const totalsMetric = 'traces_service_graph_request_total';\nexport const failedMetric = 'traces_service_graph_request_failed_total';\nexport const histogramMetric = 'traces_service_graph_request_server_seconds_bucket';\nexport const nativeHistogramMetric = 'traces_service_graph_request_server_seconds';\n\nexport const rateMetric = {\n expr: 'sum(rate(traces_spanmetrics_calls_total{}[$__range])) by (span_name)',\n topk: 5,\n params: [],\n};\nexport const errorRateMetric = {\n expr: 'sum(rate(traces_spanmetrics_calls_total{}[$__range])) by (span_name)',\n topk: 5,\n params: ['status_code=\"STATUS_CODE_ERROR\"'],\n};\nexport const durationMetric = {\n expr: 'histogram_quantile(.9, sum(rate(traces_spanmetrics_latency_bucket{}[$__range])) by (le))',\n params: [],\n};\nexport const nativeHistogramDurationMetric = {\n expr: 'histogram_quantile(.9, sum(rate(traces_spanmetrics_latency{}[$__range])) by (le))',\n params: [],\n};\nexport const defaultTableFilter = 'span_kind=\"SPAN_KIND_SERVER\"';\n\nexport const serviceMapMetrics = [\n secondsMetric,\n totalsMetric,\n failedMetric,\n histogramMetric,\n // These are used for debugging the tempo collection so probably not useful for service map right now.\n // 'traces_service_graph_unpaired_spans_total',\n // 'traces_service_graph_untagged_spans_total',\n];\n\n/**\n * Map response from multiple prometheus metrics into a node graph data frames with nodes and edges.\n * @param responses\n * @param range\n */\nexport function mapPromMetricsToServiceMap(\n responses: DataQueryResponse[],\n range: TimeRange\n): { nodes: DataFrame; edges: DataFrame } {\n const frames = getMetricFrames(responses);\n\n // First just collect data from the metrics into a map with nodes and edges as keys\n const nodesMap: Record<string, NodeObject> = {};\n const edgesMap: Record<string, EdgeObject> = {};\n // At this moment we don't have any error/success or other counts so we just use these 2\n collectMetricData(frames[totalsMetric], 'total', totalsMetric, nodesMap, edgesMap);\n collectMetricData(frames[secondsMetric], 'seconds', secondsMetric, nodesMap, edgesMap);\n collectMetricData(frames[failedMetric], 'failed', failedMetric, nodesMap, edgesMap);\n\n collectIsInstrumented(frames[`${totalsMetric}_labels`], nodesMap);\n collectIsInstrumented(frames[`${secondsMetric}_labels`], nodesMap);\n collectIsInstrumented(frames[`${failedMetric}_labels`], nodesMap);\n\n return convertToDataFrames(nodesMap, edgesMap, range);\n}\n\nfunction createServiceMapDataFrames() {\n function createDF(name: string, fields: FieldDTO[]) {\n return new MutableDataFrame({ name, fields, meta: { preferredVisualisationType: 'nodeGraph' } });\n }\n\n const nodes = createDF('Nodes', [\n { name: Fields.id, type: FieldType.string, values: [] },\n { name: Fields.title, type: FieldType.string, config: { displayName: 'Service name' }, values: [] },\n { name: Fields.subTitle, type: FieldType.string, config: { displayName: 'Service namespace' }, values: [] },\n {\n name: Fields.mainStat,\n type: FieldType.number,\n config: { unit: 'ms/r', displayName: 'Average response time' },\n values: [],\n },\n {\n name: Fields.secondaryStat,\n type: FieldType.number,\n config: { unit: 'r/sec', displayName: 'Requests per second' },\n values: [],\n },\n {\n name: Fields.arc + 'success',\n type: FieldType.number,\n config: { displayName: 'Success', color: { fixedColor: 'green', mode: FieldColorModeId.Fixed } },\n values: [],\n },\n {\n name: Fields.arc + 'failed',\n type: FieldType.number,\n config: { displayName: 'Failed', color: { fixedColor: 'red', mode: FieldColorModeId.Fixed } },\n values: [],\n },\n {\n name: Fields.isInstrumented,\n type: FieldType.boolean,\n values: [],\n },\n ]);\n const edges = createDF('Edges', [\n { name: Fields.id, type: FieldType.string, values: [] },\n { name: Fields.source, type: FieldType.string, values: [] },\n { name: AdditionalEdgeFields.sourceName, type: FieldType.string, values: [] },\n { name: AdditionalEdgeFields.sourceNamespace, type: FieldType.string, values: [] },\n { name: Fields.target, type: FieldType.string, values: [] },\n { name: AdditionalEdgeFields.targetName, type: FieldType.string, values: [] },\n { name: AdditionalEdgeFields.targetNamespace, type: FieldType.string, values: [] },\n {\n name: Fields.mainStat,\n type: FieldType.number,\n config: { unit: 'ms/r', displayName: 'Average response time' },\n values: [],\n },\n {\n name: Fields.secondaryStat,\n type: FieldType.number,\n config: { unit: 'r/sec', displayName: 'Requests per second' },\n values: [],\n },\n ]);\n\n return [nodes, edges];\n}\n\n/**\n * Group frames from response based on ref id which is set the same as the metric name so we know which metric is where\n * and also put it into DataFrameView so it's easier to work with.\n * @param responses\n */\nfunction getMetricFrames(responses: DataQueryResponse[]): Record<string, DataFrameView> {\n return (responses[0]?.data || []).reduce<Record<string, DataFrameView>>((acc, frameDTO) => {\n const frame = toDataFrame(frameDTO);\n acc[frame.refId ?? 'A'] = new DataFrameView(frame);\n return acc;\n }, {});\n}\n\ntype ServiceMapStatistics = {\n total?: number;\n seconds?: number;\n failed?: number;\n};\n\ntype NodeObject = ServiceMapStatistics & {\n name: string;\n namespace?: string;\n isInstrumented?: boolean;\n};\n\ntype EdgeObject = ServiceMapStatistics & {\n source: string;\n sourceName: string;\n sourceNamespace: string;\n target: string;\n targetName: string;\n targetNamespace: string;\n};\n\n// These fields are not necessary for rendering, so not available from the Fields enum\n// Will be used for linking when namespace is present\nenum AdditionalEdgeFields {\n sourceName = 'sourceName',\n sourceNamespace = 'sourceNamespace',\n targetName = 'targetName',\n targetNamespace = 'targetNamespace',\n}\n\n/**\n * Collect data from a metric into a map of nodes and edges. The metric data is modeled as counts of metric per edge\n * which is a pair of client-server nodes. This means we convert each row of the metric 1-1 to edges and than we assign\n * the metric also to server. We count the stats for server only as we show requests/transactions that particular node\n * processed not those which it generated and other stats like average transaction time then stem from that.\n * @param frame\n * @param stat\n * @param metric\n * @param nodesMap\n * @param edgesMap\n */\nfunction collectMetricData(\n frame: DataFrameView | undefined,\n stat: keyof ServiceMapStatistics,\n metric: string,\n nodesMap: Record<string, NodeObject>,\n edgesMap: Record<string, EdgeObject>\n) {\n if (!frame) {\n return;\n }\n\n // The name of the value column is in this format\n // Improvement: figure out if it can be changed\n const valueName = `Value #${metric}`;\n\n for (let i = 0; i < frame.length; i++) {\n const row = frame.get(i);\n const serverId = row.server_service_namespace ? `${row.server_service_namespace}/${row.server}` : row.server;\n const clientId = row.client_service_namespace ? `${row.client_service_namespace}/${row.client}` : row.client;\n\n const edgeId = `${clientId}_${serverId}`;\n\n if (!edgesMap[edgeId]) {\n // Create edge as it does not exist yet\n edgesMap[edgeId] = {\n target: serverId,\n targetName: row.server,\n targetNamespace: row.server_service_namespace,\n source: clientId,\n sourceName: row.client,\n sourceNamespace: row.client_service_namespace,\n [stat]: row[valueName],\n };\n } else {\n // Add stat to edge\n // We are adding the values if exists but that should not happen in general as there should be single row for\n // an edge.\n edgesMap[edgeId][stat] = (edgesMap[edgeId][stat] || 0) + row[valueName];\n }\n\n if (!nodesMap[serverId]) {\n // Create node for server\n nodesMap[serverId] = {\n name: row.server,\n namespace: row.server_service_namespace,\n [stat]: row[valueName],\n };\n } else {\n // Add stat to server node. Sum up values if there are multiple edges targeting this server node.\n nodesMap[serverId][stat] = (nodesMap[serverId][stat] || 0) + row[valueName];\n }\n\n if (!nodesMap[clientId]) {\n // Create the client node but don't add the stat as edge stats are attributed to the server node. This means for\n // example that the number of requests in a node show how many requests it handled not how many it generated.\n nodesMap[clientId] = {\n name: row.client,\n namespace: row.client_service_namespace,\n [stat]: 0,\n };\n }\n }\n}\n\nfunction collectIsInstrumented(frame: DataFrameView | undefined, nodesMap: Record<string, NodeObject>) {\n if (!frame) {\n return;\n }\n\n for (let i = 0; i < frame.length; i++) {\n const row = frame.get(i);\n const serverId = row.server_service_namespace ? `${row.server_service_namespace}/${row.server}` : row.server;\n\n if (nodesMap[serverId] && nodesMap[serverId].isInstrumented !== true) {\n nodesMap[serverId].isInstrumented = row.connection_type === '' || row.connection_type === 'messaging_system';\n }\n }\n}\n\nfunction convertToDataFrames(\n nodesMap: Record<string, NodeObject>,\n edgesMap: Record<string, EdgeObject>,\n range: TimeRange\n): { nodes: DataFrame; edges: DataFrame } {\n const [nodes, edges] = createServiceMapDataFrames();\n for (const nodeId of Object.keys(nodesMap)) {\n const node = nodesMap[nodeId];\n nodes.add({\n [Fields.id]: nodeId,\n [Fields.title]: node.name,\n [Fields.subTitle]: node.namespace,\n // NaN will not be shown in the node graph. This happens for a root client node which did not process\n // any requests itself.\n [Fields.mainStat]: node.total ? (node.seconds! / node.total) * 1000 : Number.NaN, // Average response time\n [Fields.secondaryStat]: node.total ? Math.round(node.total * 100) / 100 : Number.NaN, // Request per second (to 2 decimals)\n [Fields.arc + 'success']: node.total ? (node.total - Math.min(node.failed || 0, node.total)) / node.total : 1,\n [Fields.arc + 'failed']: node.total ? Math.min(node.failed || 0, node.total) / node.total : 0,\n [Fields.isInstrumented]: node.isInstrumented ?? true,\n });\n }\n for (const edgeId of Object.keys(edgesMap)) {\n const edge = edgesMap[edgeId];\n edges.add({\n [Fields.id]: edgeId,\n [Fields.source]: edge.source,\n [AdditionalEdgeFields.sourceName]: edge.sourceName,\n [AdditionalEdgeFields.sourceNamespace]: edge.sourceNamespace,\n [Fields.target]: edge.target,\n [AdditionalEdgeFields.targetName]: edge.targetName,\n [AdditionalEdgeFields.targetNamespace]: edge.targetNamespace,\n [Fields.mainStat]: edge.total ? (edge.seconds! / edge.total) * 1000 : Number.NaN, // Average response time\n [Fields.secondaryStat]: edge.total ? Math.round(edge.total * 100) / 100 : Number.NaN, // Request per second (to 2 decimals)\n });\n }\n\n return { nodes, edges };\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Creates a const map from the given values\n * @param values - An array of values to be used as keys and values in the map.\n * @returns A populated version of the map with the values and keys derived from the values.\n */\n/*#__NO_SIDE_EFFECTS__*/\nexport function createConstMap(values) {\n // eslint-disable-next-line prefer-const, @typescript-eslint/no-explicit-any\n let res = {};\n const len = values.length;\n for (let lp = 0; lp < len; lp++) {\n const val = values[lp];\n if (val) {\n res[String(val).toUpperCase().replace(/[-.]/g, '_')] = val;\n }\n }\n return res;\n}\n//# sourceMappingURL=utils.js.map","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { createConstMap } from '../internal/utils';\n//----------------------------------------------------------------------------------------------------------\n// DO NOT EDIT, this is an Auto-generated file from scripts/semconv/templates//templates/SemanticAttributes.ts.j2\n//----------------------------------------------------------------------------------------------------------\n//----------------------------------------------------------------------------------------------------------\n// Constant values for SemanticResourceAttributes\n//----------------------------------------------------------------------------------------------------------\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_CLOUD_PROVIDER = 'cloud.provider';\nconst TMP_CLOUD_ACCOUNT_ID = 'cloud.account.id';\nconst TMP_CLOUD_REGION = 'cloud.region';\nconst TMP_CLOUD_AVAILABILITY_ZONE = 'cloud.availability_zone';\nconst TMP_CLOUD_PLATFORM = 'cloud.platform';\nconst TMP_AWS_ECS_CONTAINER_ARN = 'aws.ecs.container.arn';\nconst TMP_AWS_ECS_CLUSTER_ARN = 'aws.ecs.cluster.arn';\nconst TMP_AWS_ECS_LAUNCHTYPE = 'aws.ecs.launchtype';\nconst TMP_AWS_ECS_TASK_ARN = 'aws.ecs.task.arn';\nconst TMP_AWS_ECS_TASK_FAMILY = 'aws.ecs.task.family';\nconst TMP_AWS_ECS_TASK_REVISION = 'aws.ecs.task.revision';\nconst TMP_AWS_EKS_CLUSTER_ARN = 'aws.eks.cluster.arn';\nconst TMP_AWS_LOG_GROUP_NAMES = 'aws.log.group.names';\nconst TMP_AWS_LOG_GROUP_ARNS = 'aws.log.group.arns';\nconst TMP_AWS_LOG_STREAM_NAMES = 'aws.log.stream.names';\nconst TMP_AWS_LOG_STREAM_ARNS = 'aws.log.stream.arns';\nconst TMP_CONTAINER_NAME = 'container.name';\nconst TMP_CONTAINER_ID = 'container.id';\nconst TMP_CONTAINER_RUNTIME = 'container.runtime';\nconst TMP_CONTAINER_IMAGE_NAME = 'container.image.name';\nconst TMP_CONTAINER_IMAGE_TAG = 'container.image.tag';\nconst TMP_DEPLOYMENT_ENVIRONMENT = 'deployment.environment';\nconst TMP_DEVICE_ID = 'device.id';\nconst TMP_DEVICE_MODEL_IDENTIFIER = 'device.model.identifier';\nconst TMP_DEVICE_MODEL_NAME = 'device.model.name';\nconst TMP_FAAS_NAME = 'faas.name';\nconst TMP_FAAS_ID = 'faas.id';\nconst TMP_FAAS_VERSION = 'faas.version';\nconst TMP_FAAS_INSTANCE = 'faas.instance';\nconst TMP_FAAS_MAX_MEMORY = 'faas.max_memory';\nconst TMP_HOST_ID = 'host.id';\nconst TMP_HOST_NAME = 'host.name';\nconst TMP_HOST_TYPE = 'host.type';\nconst TMP_HOST_ARCH = 'host.arch';\nconst TMP_HOST_IMAGE_NAME = 'host.image.name';\nconst TMP_HOST_IMAGE_ID = 'host.image.id';\nconst TMP_HOST_IMAGE_VERSION = 'host.image.version';\nconst TMP_K8S_CLUSTER_NAME = 'k8s.cluster.name';\nconst TMP_K8S_NODE_NAME = 'k8s.node.name';\nconst TMP_K8S_NODE_UID = 'k8s.node.uid';\nconst TMP_K8S_NAMESPACE_NAME = 'k8s.namespace.name';\nconst TMP_K8S_POD_UID = 'k8s.pod.uid';\nconst TMP_K8S_POD_NAME = 'k8s.pod.name';\nconst TMP_K8S_CONTAINER_NAME = 'k8s.container.name';\nconst TMP_K8S_REPLICASET_UID = 'k8s.replicaset.uid';\nconst TMP_K8S_REPLICASET_NAME = 'k8s.replicaset.name';\nconst TMP_K8S_DEPLOYMENT_UID = 'k8s.deployment.uid';\nconst TMP_K8S_DEPLOYMENT_NAME = 'k8s.deployment.name';\nconst TMP_K8S_STATEFULSET_UID = 'k8s.statefulset.uid';\nconst TMP_K8S_STATEFULSET_NAME = 'k8s.statefulset.name';\nconst TMP_K8S_DAEMONSET_UID = 'k8s.daemonset.uid';\nconst TMP_K8S_DAEMONSET_NAME = 'k8s.daemonset.name';\nconst TMP_K8S_JOB_UID = 'k8s.job.uid';\nconst TMP_K8S_JOB_NAME = 'k8s.job.name';\nconst TMP_K8S_CRONJOB_UID = 'k8s.cronjob.uid';\nconst TMP_K8S_CRONJOB_NAME = 'k8s.cronjob.name';\nconst TMP_OS_TYPE = 'os.type';\nconst TMP_OS_DESCRIPTION = 'os.description';\nconst TMP_OS_NAME = 'os.name';\nconst TMP_OS_VERSION = 'os.version';\nconst TMP_PROCESS_PID = 'process.pid';\nconst TMP_PROCESS_EXECUTABLE_NAME = 'process.executable.name';\nconst TMP_PROCESS_EXECUTABLE_PATH = 'process.executable.path';\nconst TMP_PROCESS_COMMAND = 'process.command';\nconst TMP_PROCESS_COMMAND_LINE = 'process.command_line';\nconst TMP_PROCESS_COMMAND_ARGS = 'process.command_args';\nconst TMP_PROCESS_OWNER = 'process.owner';\nconst TMP_PROCESS_RUNTIME_NAME = 'process.runtime.name';\nconst TMP_PROCESS_RUNTIME_VERSION = 'process.runtime.version';\nconst TMP_PROCESS_RUNTIME_DESCRIPTION = 'process.runtime.description';\nconst TMP_SERVICE_NAME = 'service.name';\nconst TMP_SERVICE_NAMESPACE = 'service.namespace';\nconst TMP_SERVICE_INSTANCE_ID = 'service.instance.id';\nconst TMP_SERVICE_VERSION = 'service.version';\nconst TMP_TELEMETRY_SDK_NAME = 'telemetry.sdk.name';\nconst TMP_TELEMETRY_SDK_LANGUAGE = 'telemetry.sdk.language';\nconst TMP_TELEMETRY_SDK_VERSION = 'telemetry.sdk.version';\nconst TMP_TELEMETRY_AUTO_VERSION = 'telemetry.auto.version';\nconst TMP_WEBENGINE_NAME = 'webengine.name';\nconst TMP_WEBENGINE_VERSION = 'webengine.version';\nconst TMP_WEBENGINE_DESCRIPTION = 'webengine.description';\n/**\n * Name of the cloud provider.\n *\n * @deprecated Use ATTR_CLOUD_PROVIDER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CLOUD_PROVIDER = TMP_CLOUD_PROVIDER;\n/**\n * The cloud account ID the resource is assigned to.\n *\n * @deprecated Use ATTR_CLOUD_ACCOUNT_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CLOUD_ACCOUNT_ID = TMP_CLOUD_ACCOUNT_ID;\n/**\n * The geographical region the resource is running. Refer to your provider's docs to see the available regions, for example [Alibaba Cloud regions](https://www.alibabacloud.com/help/doc-detail/40654.htm), [AWS regions](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/), [Azure regions](https://azure.microsoft.com/en-us/global-infrastructure/geographies/), or [Google Cloud regions](https://cloud.google.com/about/locations).\n *\n * @deprecated Use ATTR_CLOUD_REGION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CLOUD_REGION = TMP_CLOUD_REGION;\n/**\n * Cloud regions often have multiple, isolated locations known as zones to increase availability. Availability zone represents the zone where the resource is running.\n *\n * Note: Availability zones are called "zones" on Alibaba Cloud and Google Cloud.\n *\n * @deprecated Use ATTR_CLOUD_AVAILABILITY_ZONE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CLOUD_AVAILABILITY_ZONE = TMP_CLOUD_AVAILABILITY_ZONE;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use ATTR_CLOUD_PLATFORM in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CLOUD_PLATFORM = TMP_CLOUD_PLATFORM;\n/**\n * The Amazon Resource Name (ARN) of an [ECS container instance](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ECS_instances.html).\n *\n * @deprecated Use ATTR_AWS_ECS_CONTAINER_ARN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_CONTAINER_ARN = TMP_AWS_ECS_CONTAINER_ARN;\n/**\n * The ARN of an [ECS cluster](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/clusters.html).\n *\n * @deprecated Use ATTR_AWS_ECS_CLUSTER_ARN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_CLUSTER_ARN = TMP_AWS_ECS_CLUSTER_ARN;\n/**\n * The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n *\n * @deprecated Use ATTR_AWS_ECS_LAUNCHTYPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_LAUNCHTYPE = TMP_AWS_ECS_LAUNCHTYPE;\n/**\n * The ARN of an [ECS task definition](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definitions.html).\n *\n * @deprecated Use ATTR_AWS_ECS_TASK_ARN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_TASK_ARN = TMP_AWS_ECS_TASK_ARN;\n/**\n * The task definition family this task definition is a member of.\n *\n * @deprecated Use ATTR_AWS_ECS_TASK_FAMILY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_TASK_FAMILY = TMP_AWS_ECS_TASK_FAMILY;\n/**\n * The revision for this task definition.\n *\n * @deprecated Use ATTR_AWS_ECS_TASK_REVISION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_ECS_TASK_REVISION = TMP_AWS_ECS_TASK_REVISION;\n/**\n * The ARN of an EKS cluster.\n *\n * @deprecated Use ATTR_AWS_EKS_CLUSTER_ARN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_EKS_CLUSTER_ARN = TMP_AWS_EKS_CLUSTER_ARN;\n/**\n * The name(s) of the AWS log group(s) an application is writing to.\n *\n * Note: Multiple log groups must be supported for cases like multi-container applications, where a single application has sidecar containers, and each write to their own log group.\n *\n * @deprecated Use ATTR_AWS_LOG_GROUP_NAMES in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_LOG_GROUP_NAMES = TMP_AWS_LOG_GROUP_NAMES;\n/**\n * The Amazon Resource Name(s) (ARN) of the AWS log group(s).\n *\n * Note: See the [log group ARN format documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format).\n *\n * @deprecated Use ATTR_AWS_LOG_GROUP_ARNS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_LOG_GROUP_ARNS = TMP_AWS_LOG_GROUP_ARNS;\n/**\n * The name(s) of the AWS log stream(s) an application is writing to.\n *\n * @deprecated Use ATTR_AWS_LOG_STREAM_NAMES in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_LOG_STREAM_NAMES = TMP_AWS_LOG_STREAM_NAMES;\n/**\n * The ARN(s) of the AWS log stream(s).\n *\n * Note: See the [log stream ARN format documentation](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/iam-access-control-overview-cwl.html#CWL_ARN_Format). One log group can contain several log streams, so these ARNs necessarily identify both a log group and a log stream.\n *\n * @deprecated Use ATTR_AWS_LOG_STREAM_ARNS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_AWS_LOG_STREAM_ARNS = TMP_AWS_LOG_STREAM_ARNS;\n/**\n * Container name.\n *\n * @deprecated Use ATTR_CONTAINER_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CONTAINER_NAME = TMP_CONTAINER_NAME;\n/**\n * Container ID. Usually a UUID, as for example used to [identify Docker containers](https://docs.docker.com/engine/reference/run/#container-identification). The UUID might be abbreviated.\n *\n * @deprecated Use ATTR_CONTAINER_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CONTAINER_ID = TMP_CONTAINER_ID;\n/**\n * The container runtime managing this container.\n *\n * @deprecated Use ATTR_CONTAINER_RUNTIME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CONTAINER_RUNTIME = TMP_CONTAINER_RUNTIME;\n/**\n * Name of the image the container was built on.\n *\n * @deprecated Use ATTR_CONTAINER_IMAGE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CONTAINER_IMAGE_NAME = TMP_CONTAINER_IMAGE_NAME;\n/**\n * Container image tag.\n *\n * @deprecated Use ATTR_CONTAINER_IMAGE_TAGS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_CONTAINER_IMAGE_TAG = TMP_CONTAINER_IMAGE_TAG;\n/**\n * Name of the [deployment environment](https://en.wikipedia.org/wiki/Deployment_environment) (aka deployment tier).\n *\n * @deprecated Use ATTR_DEPLOYMENT_ENVIRONMENT in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_DEPLOYMENT_ENVIRONMENT = TMP_DEPLOYMENT_ENVIRONMENT;\n/**\n * A unique identifier representing the device.\n *\n * Note: The device identifier MUST only be defined using the values outlined below. This value is not an advertising identifier and MUST NOT be used as such. On iOS (Swift or Objective-C), this value MUST be equal to the [vendor identifier](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor). On Android (Java or Kotlin), this value MUST be equal to the Firebase Installation ID or a globally unique UUID which is persisted across sessions in your application. More information can be found [here](https://developer.android.com/training/articles/user-data-ids) on best practices and exact implementation details. Caution should be taken when storing personal data or anything which can identify a user. GDPR and data protection laws may apply, ensure you do your own due diligence.\n *\n * @deprecated Use ATTR_DEVICE_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_DEVICE_ID = TMP_DEVICE_ID;\n/**\n * The model identifier for the device.\n *\n * Note: It's recommended this value represents a machine readable version of the model identifier rather than the market or consumer-friendly name of the device.\n *\n * @deprecated Use ATTR_DEVICE_MODEL_IDENTIFIER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_DEVICE_MODEL_IDENTIFIER = TMP_DEVICE_MODEL_IDENTIFIER;\n/**\n * The marketing name for the device model.\n *\n * Note: It's recommended this value represents a human readable version of the device model rather than a machine readable alternative.\n *\n * @deprecated Use ATTR_DEVICE_MODEL_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_DEVICE_MODEL_NAME = TMP_DEVICE_MODEL_NAME;\n/**\n * The name of the single function that this runtime instance executes.\n *\n * Note: This is the name of the function as configured/deployed on the FaaS platform and is usually different from the name of the callback function (which may be stored in the [`code.namespace`/`code.function`](../../trace/semantic_conventions/span-general.md#source-code-attributes) span attributes).\n *\n * @deprecated Use ATTR_FAAS_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_FAAS_NAME = TMP_FAAS_NAME;\n/**\n* The unique ID of the single function that this runtime instance executes.\n*\n* Note: Depending on the cloud provider, use:\n\n* **AWS Lambda:** The function [ARN](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html).\nTake care not to use the "invoked ARN" directly but replace any\n[alias suffix](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) with the resolved function version, as the same runtime instance may be invokable with multiple\ndifferent aliases.\n* **GCP:** The [URI of the resource](https://cloud.google.com/iam/docs/full-resource-names)\n* **Azure:** The [Fully Qualified Resource ID](https://docs.microsoft.com/en-us/rest/api/resources/resources/get-by-id).\n\nOn some providers, it may not be possible to determine the full ID at startup,\nwhich is why this field cannot be made required. For example, on AWS the account ID\npart of the ARN is not available without calling another AWS API\nwhich may be deemed too slow for a short-running lambda function.\nAs an alternative, consider setting `faas.id` as a span attribute instead.\n*\n* @deprecated Use ATTR_CLOUD_RESOURCE_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n*/\nexport const SEMRESATTRS_FAAS_ID = TMP_FAAS_ID;\n/**\n* The immutable version of the function being executed.\n*\n* Note: Depending on the cloud provider and platform, use:\n\n* **AWS Lambda:** The [function version](https://docs.aws.amazon.com/lambda/latest/dg/configuration-versions.html)\n (an integer represented as a decimal string).\n* **Google Cloud Run:** The [revision](https://cloud.google.com/run/docs/managing/revisions)\n (i.e., the function name plus the revision suffix).\n* **Google Cloud Functions:** The value of the\n [`K_REVISION` environment variable](https://cloud.google.com/functions/docs/env-var#runtime_environment_variables_set_automatically).\n* **Azure Functions:** Not applicable. Do not set this attribute.\n*\n* @deprecated Use ATTR_FAAS_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n*/\nexport const SEMRESATTRS_FAAS_VERSION = TMP_FAAS_VERSION;\n/**\n * The execution environment ID as a string, that will be potentially reused for other invocations to the same function/function version.\n *\n * Note: * **AWS Lambda:** Use the (full) log stream name.\n *\n * @deprecated Use ATTR_FAAS_INSTANCE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_FAAS_INSTANCE = TMP_FAAS_INSTANCE;\n/**\n * The amount of memory available to the serverless function in MiB.\n *\n * Note: It's recommended to set this attribute since e.g. too little memory can easily stop a Java AWS Lambda function from working correctly. On AWS Lambda, the environment variable `AWS_LAMBDA_FUNCTION_MEMORY_SIZE` provides this information.\n *\n * @deprecated Use ATTR_FAAS_MAX_MEMORY in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_FAAS_MAX_MEMORY = TMP_FAAS_MAX_MEMORY;\n/**\n * Unique host ID. For Cloud, this must be the instance_id assigned by the cloud provider.\n *\n * @deprecated Use ATTR_HOST_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_ID = TMP_HOST_ID;\n/**\n * Name of the host. On Unix systems, it may contain what the hostname command returns, or the fully qualified hostname, or another name specified by the user.\n *\n * @deprecated Use ATTR_HOST_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_NAME = TMP_HOST_NAME;\n/**\n * Type of host. For Cloud, this must be the machine type.\n *\n * @deprecated Use ATTR_HOST_TYPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_TYPE = TMP_HOST_TYPE;\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use ATTR_HOST_ARCH in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_ARCH = TMP_HOST_ARCH;\n/**\n * Name of the VM image or OS install the host was instantiated from.\n *\n * @deprecated Use ATTR_HOST_IMAGE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_IMAGE_NAME = TMP_HOST_IMAGE_NAME;\n/**\n * VM image ID. For Cloud, this value is from the provider.\n *\n * @deprecated Use ATTR_HOST_IMAGE_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_IMAGE_ID = TMP_HOST_IMAGE_ID;\n/**\n * The version string of the VM image as defined in [Version Attributes](README.md#version-attributes).\n *\n * @deprecated Use ATTR_HOST_IMAGE_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_HOST_IMAGE_VERSION = TMP_HOST_IMAGE_VERSION;\n/**\n * The name of the cluster.\n *\n * @deprecated Use ATTR_K8S_CLUSTER_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_CLUSTER_NAME = TMP_K8S_CLUSTER_NAME;\n/**\n * The name of the Node.\n *\n * @deprecated Use ATTR_K8S_NODE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_NODE_NAME = TMP_K8S_NODE_NAME;\n/**\n * The UID of the Node.\n *\n * @deprecated Use ATTR_K8S_NODE_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_NODE_UID = TMP_K8S_NODE_UID;\n/**\n * The name of the namespace that the pod is running in.\n *\n * @deprecated Use ATTR_K8S_NAMESPACE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_NAMESPACE_NAME = TMP_K8S_NAMESPACE_NAME;\n/**\n * The UID of the Pod.\n *\n * @deprecated Use ATTR_K8S_POD_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_POD_UID = TMP_K8S_POD_UID;\n/**\n * The name of the Pod.\n *\n * @deprecated Use ATTR_K8S_POD_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_POD_NAME = TMP_K8S_POD_NAME;\n/**\n * The name of the Container in a Pod template.\n *\n * @deprecated Use ATTR_K8S_CONTAINER_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_CONTAINER_NAME = TMP_K8S_CONTAINER_NAME;\n/**\n * The UID of the ReplicaSet.\n *\n * @deprecated Use ATTR_K8S_REPLICASET_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_REPLICASET_UID = TMP_K8S_REPLICASET_UID;\n/**\n * The name of the ReplicaSet.\n *\n * @deprecated Use ATTR_K8S_REPLICASET_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_REPLICASET_NAME = TMP_K8S_REPLICASET_NAME;\n/**\n * The UID of the Deployment.\n *\n * @deprecated Use ATTR_K8S_DEPLOYMENT_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_DEPLOYMENT_UID = TMP_K8S_DEPLOYMENT_UID;\n/**\n * The name of the Deployment.\n *\n * @deprecated Use ATTR_K8S_DEPLOYMENT_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_DEPLOYMENT_NAME = TMP_K8S_DEPLOYMENT_NAME;\n/**\n * The UID of the StatefulSet.\n *\n * @deprecated Use ATTR_K8S_STATEFULSET_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_STATEFULSET_UID = TMP_K8S_STATEFULSET_UID;\n/**\n * The name of the StatefulSet.\n *\n * @deprecated Use ATTR_K8S_STATEFULSET_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_STATEFULSET_NAME = TMP_K8S_STATEFULSET_NAME;\n/**\n * The UID of the DaemonSet.\n *\n * @deprecated Use ATTR_K8S_DAEMONSET_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_DAEMONSET_UID = TMP_K8S_DAEMONSET_UID;\n/**\n * The name of the DaemonSet.\n *\n * @deprecated Use ATTR_K8S_DAEMONSET_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_DAEMONSET_NAME = TMP_K8S_DAEMONSET_NAME;\n/**\n * The UID of the Job.\n *\n * @deprecated Use ATTR_K8S_JOB_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_JOB_UID = TMP_K8S_JOB_UID;\n/**\n * The name of the Job.\n *\n * @deprecated Use ATTR_K8S_JOB_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_JOB_NAME = TMP_K8S_JOB_NAME;\n/**\n * The UID of the CronJob.\n *\n * @deprecated Use ATTR_K8S_CRONJOB_UID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_CRONJOB_UID = TMP_K8S_CRONJOB_UID;\n/**\n * The name of the CronJob.\n *\n * @deprecated Use ATTR_K8S_CRONJOB_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_K8S_CRONJOB_NAME = TMP_K8S_CRONJOB_NAME;\n/**\n * The operating system type.\n *\n * @deprecated Use ATTR_OS_TYPE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_OS_TYPE = TMP_OS_TYPE;\n/**\n * Human readable (not intended to be parsed) OS version information, like e.g. reported by `ver` or `lsb_release -a` commands.\n *\n * @deprecated Use ATTR_OS_DESCRIPTION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_OS_DESCRIPTION = TMP_OS_DESCRIPTION;\n/**\n * Human readable operating system name.\n *\n * @deprecated Use ATTR_OS_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_OS_NAME = TMP_OS_NAME;\n/**\n * The version string of the operating system as defined in [Version Attributes](../../resource/semantic_conventions/README.md#version-attributes).\n *\n * @deprecated Use ATTR_OS_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_OS_VERSION = TMP_OS_VERSION;\n/**\n * Process identifier (PID).\n *\n * @deprecated Use ATTR_PROCESS_PID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_PID = TMP_PROCESS_PID;\n/**\n * The name of the process executable. On Linux based systems, can be set to the `Name` in `proc/[pid]/status`. On Windows, can be set to the base name of `GetProcessImageFileNameW`.\n *\n * @deprecated Use ATTR_PROCESS_EXECUTABLE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_EXECUTABLE_NAME = TMP_PROCESS_EXECUTABLE_NAME;\n/**\n * The full path to the process executable. On Linux based systems, can be set to the target of `proc/[pid]/exe`. On Windows, can be set to the result of `GetProcessImageFileNameW`.\n *\n * @deprecated Use ATTR_PROCESS_EXECUTABLE_PATH in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_EXECUTABLE_PATH = TMP_PROCESS_EXECUTABLE_PATH;\n/**\n * The command used to launch the process (i.e. the command name). On Linux based systems, can be set to the zeroth string in `proc/[pid]/cmdline`. On Windows, can be set to the first parameter extracted from `GetCommandLineW`.\n *\n * @deprecated Use ATTR_PROCESS_COMMAND in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_COMMAND = TMP_PROCESS_COMMAND;\n/**\n * The full command used to launch the process as a single string representing the full command. On Windows, can be set to the result of `GetCommandLineW`. Do not set this if you have to assemble it just for monitoring; use `process.command_args` instead.\n *\n * @deprecated Use ATTR_PROCESS_COMMAND_LINE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_COMMAND_LINE = TMP_PROCESS_COMMAND_LINE;\n/**\n * All the command arguments (including the command/executable itself) as received by the process. On Linux-based systems (and some other Unixoid systems supporting procfs), can be set according to the list of null-delimited strings extracted from `proc/[pid]/cmdline`. For libc-based executables, this would be the full argv vector passed to `main`.\n *\n * @deprecated Use ATTR_PROCESS_COMMAND_ARGS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_COMMAND_ARGS = TMP_PROCESS_COMMAND_ARGS;\n/**\n * The username of the user that owns the process.\n *\n * @deprecated Use ATTR_PROCESS_OWNER in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_OWNER = TMP_PROCESS_OWNER;\n/**\n * The name of the runtime of this process. For compiled native binaries, this SHOULD be the name of the compiler.\n *\n * @deprecated Use ATTR_PROCESS_RUNTIME_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_RUNTIME_NAME = TMP_PROCESS_RUNTIME_NAME;\n/**\n * The version of the runtime of this process, as returned by the runtime without modification.\n *\n * @deprecated Use ATTR_PROCESS_RUNTIME_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_RUNTIME_VERSION = TMP_PROCESS_RUNTIME_VERSION;\n/**\n * An additional description about the runtime of the process, for example a specific vendor customization of the runtime environment.\n *\n * @deprecated Use ATTR_PROCESS_RUNTIME_DESCRIPTION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_PROCESS_RUNTIME_DESCRIPTION = TMP_PROCESS_RUNTIME_DESCRIPTION;\n/**\n * Logical name of the service.\n *\n * Note: MUST be the same for all instances of horizontally scaled services. If the value was not specified, SDKs MUST fallback to `unknown_service:` concatenated with [`process.executable.name`](process.md#process), e.g. `unknown_service:bash`. If `process.executable.name` is not available, the value MUST be set to `unknown_service`.\n *\n * @deprecated Use ATTR_SERVICE_NAME.\n */\nexport const SEMRESATTRS_SERVICE_NAME = TMP_SERVICE_NAME;\n/**\n * A namespace for `service.name`.\n *\n * Note: A string value having a meaning that helps to distinguish a group of services, for example the team name that owns a group of services. `service.name` is expected to be unique within the same namespace. If `service.namespace` is not specified in the Resource then `service.name` is expected to be unique for all services that have no explicit namespace defined (so the empty/unspecified namespace is simply one more valid namespace). Zero-length namespace string is assumed equal to unspecified namespace.\n *\n * @deprecated Use ATTR_SERVICE_NAMESPACE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_SERVICE_NAMESPACE = TMP_SERVICE_NAMESPACE;\n/**\n * The string ID of the service instance.\n *\n * Note: MUST be unique for each instance of the same `service.namespace,service.name` pair (in other words `service.namespace,service.name,service.instance.id` triplet MUST be globally unique). The ID helps to distinguish instances of the same service that exist at the same time (e.g. instances of a horizontally scaled service). It is preferable for the ID to be persistent and stay the same for the lifetime of the service instance, however it is acceptable that the ID is ephemeral and changes during important lifetime events for the service (e.g. service restarts). If the service has no inherent unique ID that can be used as the value of this attribute it is recommended to generate a random Version 1 or Version 4 RFC 4122 UUID (services aiming for reproducible UUIDs may also use Version 5, see RFC 4122 for more recommendations).\n *\n * @deprecated Use ATTR_SERVICE_INSTANCE_ID in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_SERVICE_INSTANCE_ID = TMP_SERVICE_INSTANCE_ID;\n/**\n * The version string of the service API or implementation.\n *\n * @deprecated Use ATTR_SERVICE_VERSION.\n */\nexport const SEMRESATTRS_SERVICE_VERSION = TMP_SERVICE_VERSION;\n/**\n * The name of the telemetry SDK as defined above.\n *\n * @deprecated Use ATTR_TELEMETRY_SDK_NAME.\n */\nexport const SEMRESATTRS_TELEMETRY_SDK_NAME = TMP_TELEMETRY_SDK_NAME;\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use ATTR_TELEMETRY_SDK_LANGUAGE.\n */\nexport const SEMRESATTRS_TELEMETRY_SDK_LANGUAGE = TMP_TELEMETRY_SDK_LANGUAGE;\n/**\n * The version string of the telemetry SDK.\n *\n * @deprecated Use ATTR_TELEMETRY_SDK_VERSION.\n */\nexport const SEMRESATTRS_TELEMETRY_SDK_VERSION = TMP_TELEMETRY_SDK_VERSION;\n/**\n * The version string of the auto instrumentation agent, if used.\n *\n * @deprecated Use ATTR_TELEMETRY_DISTRO_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_TELEMETRY_AUTO_VERSION = TMP_TELEMETRY_AUTO_VERSION;\n/**\n * The name of the web engine.\n *\n * @deprecated Use ATTR_WEBENGINE_NAME in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_WEBENGINE_NAME = TMP_WEBENGINE_NAME;\n/**\n * The version of the web engine.\n *\n * @deprecated Use ATTR_WEBENGINE_VERSION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_WEBENGINE_VERSION = TMP_WEBENGINE_VERSION;\n/**\n * Additional description of the web engine (e.g. detailed version and edition information).\n *\n * @deprecated Use ATTR_WEBENGINE_DESCRIPTION in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const SEMRESATTRS_WEBENGINE_DESCRIPTION = TMP_WEBENGINE_DESCRIPTION;\n/**\n * Create exported Value Map for SemanticResourceAttributes values\n * @deprecated Use the SEMRESATTRS_XXXXX constants rather than the SemanticResourceAttributes.XXXXX for bundle minification\n */\nexport const SemanticResourceAttributes = \n/*#__PURE__*/ createConstMap([\n TMP_CLOUD_PROVIDER,\n TMP_CLOUD_ACCOUNT_ID,\n TMP_CLOUD_REGION,\n TMP_CLOUD_AVAILABILITY_ZONE,\n TMP_CLOUD_PLATFORM,\n TMP_AWS_ECS_CONTAINER_ARN,\n TMP_AWS_ECS_CLUSTER_ARN,\n TMP_AWS_ECS_LAUNCHTYPE,\n TMP_AWS_ECS_TASK_ARN,\n TMP_AWS_ECS_TASK_FAMILY,\n TMP_AWS_ECS_TASK_REVISION,\n TMP_AWS_EKS_CLUSTER_ARN,\n TMP_AWS_LOG_GROUP_NAMES,\n TMP_AWS_LOG_GROUP_ARNS,\n TMP_AWS_LOG_STREAM_NAMES,\n TMP_AWS_LOG_STREAM_ARNS,\n TMP_CONTAINER_NAME,\n TMP_CONTAINER_ID,\n TMP_CONTAINER_RUNTIME,\n TMP_CONTAINER_IMAGE_NAME,\n TMP_CONTAINER_IMAGE_TAG,\n TMP_DEPLOYMENT_ENVIRONMENT,\n TMP_DEVICE_ID,\n TMP_DEVICE_MODEL_IDENTIFIER,\n TMP_DEVICE_MODEL_NAME,\n TMP_FAAS_NAME,\n TMP_FAAS_ID,\n TMP_FAAS_VERSION,\n TMP_FAAS_INSTANCE,\n TMP_FAAS_MAX_MEMORY,\n TMP_HOST_ID,\n TMP_HOST_NAME,\n TMP_HOST_TYPE,\n TMP_HOST_ARCH,\n TMP_HOST_IMAGE_NAME,\n TMP_HOST_IMAGE_ID,\n TMP_HOST_IMAGE_VERSION,\n TMP_K8S_CLUSTER_NAME,\n TMP_K8S_NODE_NAME,\n TMP_K8S_NODE_UID,\n TMP_K8S_NAMESPACE_NAME,\n TMP_K8S_POD_UID,\n TMP_K8S_POD_NAME,\n TMP_K8S_CONTAINER_NAME,\n TMP_K8S_REPLICASET_UID,\n TMP_K8S_REPLICASET_NAME,\n TMP_K8S_DEPLOYMENT_UID,\n TMP_K8S_DEPLOYMENT_NAME,\n TMP_K8S_STATEFULSET_UID,\n TMP_K8S_STATEFULSET_NAME,\n TMP_K8S_DAEMONSET_UID,\n TMP_K8S_DAEMONSET_NAME,\n TMP_K8S_JOB_UID,\n TMP_K8S_JOB_NAME,\n TMP_K8S_CRONJOB_UID,\n TMP_K8S_CRONJOB_NAME,\n TMP_OS_TYPE,\n TMP_OS_DESCRIPTION,\n TMP_OS_NAME,\n TMP_OS_VERSION,\n TMP_PROCESS_PID,\n TMP_PROCESS_EXECUTABLE_NAME,\n TMP_PROCESS_EXECUTABLE_PATH,\n TMP_PROCESS_COMMAND,\n TMP_PROCESS_COMMAND_LINE,\n TMP_PROCESS_COMMAND_ARGS,\n TMP_PROCESS_OWNER,\n TMP_PROCESS_RUNTIME_NAME,\n TMP_PROCESS_RUNTIME_VERSION,\n TMP_PROCESS_RUNTIME_DESCRIPTION,\n TMP_SERVICE_NAME,\n TMP_SERVICE_NAMESPACE,\n TMP_SERVICE_INSTANCE_ID,\n TMP_SERVICE_VERSION,\n TMP_TELEMETRY_SDK_NAME,\n TMP_TELEMETRY_SDK_LANGUAGE,\n TMP_TELEMETRY_SDK_VERSION,\n TMP_TELEMETRY_AUTO_VERSION,\n TMP_WEBENGINE_NAME,\n TMP_WEBENGINE_VERSION,\n TMP_WEBENGINE_DESCRIPTION,\n]);\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for CloudProviderValues enum definition\n *\n * Name of the cloud provider.\n * ---------------------------------------------------------------------------------------------------------- */\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD = 'alibaba_cloud';\nconst TMP_CLOUDPROVIDERVALUES_AWS = 'aws';\nconst TMP_CLOUDPROVIDERVALUES_AZURE = 'azure';\nconst TMP_CLOUDPROVIDERVALUES_GCP = 'gcp';\n/**\n * Name of the cloud provider.\n *\n * @deprecated Use CLOUD_PROVIDER_VALUE_ALIBABA_CLOUD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPROVIDERVALUES_ALIBABA_CLOUD = TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD;\n/**\n * Name of the cloud provider.\n *\n * @deprecated Use CLOUD_PROVIDER_VALUE_AWS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPROVIDERVALUES_AWS = TMP_CLOUDPROVIDERVALUES_AWS;\n/**\n * Name of the cloud provider.\n *\n * @deprecated Use CLOUD_PROVIDER_VALUE_AZURE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPROVIDERVALUES_AZURE = TMP_CLOUDPROVIDERVALUES_AZURE;\n/**\n * Name of the cloud provider.\n *\n * @deprecated Use CLOUD_PROVIDER_VALUE_GCP in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPROVIDERVALUES_GCP = TMP_CLOUDPROVIDERVALUES_GCP;\n/**\n * The constant map of values for CloudProviderValues.\n * @deprecated Use the CLOUDPROVIDERVALUES_XXXXX constants rather than the CloudProviderValues.XXXXX for bundle minification.\n */\nexport const CloudProviderValues = \n/*#__PURE__*/ createConstMap([\n TMP_CLOUDPROVIDERVALUES_ALIBABA_CLOUD,\n TMP_CLOUDPROVIDERVALUES_AWS,\n TMP_CLOUDPROVIDERVALUES_AZURE,\n TMP_CLOUDPROVIDERVALUES_GCP,\n]);\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for CloudPlatformValues enum definition\n *\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n * ---------------------------------------------------------------------------------------------------------- */\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS = 'alibaba_cloud_ecs';\nconst TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC = 'alibaba_cloud_fc';\nconst TMP_CLOUDPLATFORMVALUES_AWS_EC2 = 'aws_ec2';\nconst TMP_CLOUDPLATFORMVALUES_AWS_ECS = 'aws_ecs';\nconst TMP_CLOUDPLATFORMVALUES_AWS_EKS = 'aws_eks';\nconst TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA = 'aws_lambda';\nconst TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK = 'aws_elastic_beanstalk';\nconst TMP_CLOUDPLATFORMVALUES_AZURE_VM = 'azure_vm';\nconst TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES = 'azure_container_instances';\nconst TMP_CLOUDPLATFORMVALUES_AZURE_AKS = 'azure_aks';\nconst TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS = 'azure_functions';\nconst TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE = 'azure_app_service';\nconst TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE = 'gcp_compute_engine';\nconst TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN = 'gcp_cloud_run';\nconst TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE = 'gcp_kubernetes_engine';\nconst TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS = 'gcp_cloud_functions';\nconst TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE = 'gcp_app_engine';\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_ALIBABA_CLOUD_ECS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS = TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_ALIBABA_CLOUD_FC in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC = TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AWS_EC2 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AWS_EC2 = TMP_CLOUDPLATFORMVALUES_AWS_EC2;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AWS_ECS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AWS_ECS = TMP_CLOUDPLATFORMVALUES_AWS_ECS;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AWS_EKS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AWS_EKS = TMP_CLOUDPLATFORMVALUES_AWS_EKS;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AWS_LAMBDA in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AWS_LAMBDA = TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AWS_ELASTIC_BEANSTALK in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK = TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AZURE_VM in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AZURE_VM = TMP_CLOUDPLATFORMVALUES_AZURE_VM;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AZURE_CONTAINER_INSTANCES in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES = TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AZURE_AKS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AZURE_AKS = TMP_CLOUDPLATFORMVALUES_AZURE_AKS;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AZURE_FUNCTIONS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AZURE_FUNCTIONS = TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_AZURE_APP_SERVICE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_AZURE_APP_SERVICE = TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_GCP_COMPUTE_ENGINE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE = TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_GCP_CLOUD_RUN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_GCP_CLOUD_RUN = TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_GCP_KUBERNETES_ENGINE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE = TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_GCP_CLOUD_FUNCTIONS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS = TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS;\n/**\n * The cloud platform in use.\n *\n * Note: The prefix of the service SHOULD match the one specified in `cloud.provider`.\n *\n * @deprecated Use CLOUD_PLATFORM_VALUE_GCP_APP_ENGINE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const CLOUDPLATFORMVALUES_GCP_APP_ENGINE = TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE;\n/**\n * The constant map of values for CloudPlatformValues.\n * @deprecated Use the CLOUDPLATFORMVALUES_XXXXX constants rather than the CloudPlatformValues.XXXXX for bundle minification.\n */\nexport const CloudPlatformValues = \n/*#__PURE__*/ createConstMap([\n TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_ECS,\n TMP_CLOUDPLATFORMVALUES_ALIBABA_CLOUD_FC,\n TMP_CLOUDPLATFORMVALUES_AWS_EC2,\n TMP_CLOUDPLATFORMVALUES_AWS_ECS,\n TMP_CLOUDPLATFORMVALUES_AWS_EKS,\n TMP_CLOUDPLATFORMVALUES_AWS_LAMBDA,\n TMP_CLOUDPLATFORMVALUES_AWS_ELASTIC_BEANSTALK,\n TMP_CLOUDPLATFORMVALUES_AZURE_VM,\n TMP_CLOUDPLATFORMVALUES_AZURE_CONTAINER_INSTANCES,\n TMP_CLOUDPLATFORMVALUES_AZURE_AKS,\n TMP_CLOUDPLATFORMVALUES_AZURE_FUNCTIONS,\n TMP_CLOUDPLATFORMVALUES_AZURE_APP_SERVICE,\n TMP_CLOUDPLATFORMVALUES_GCP_COMPUTE_ENGINE,\n TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_RUN,\n TMP_CLOUDPLATFORMVALUES_GCP_KUBERNETES_ENGINE,\n TMP_CLOUDPLATFORMVALUES_GCP_CLOUD_FUNCTIONS,\n TMP_CLOUDPLATFORMVALUES_GCP_APP_ENGINE,\n]);\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for AwsEcsLaunchtypeValues enum definition\n *\n * The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n * ---------------------------------------------------------------------------------------------------------- */\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_AWSECSLAUNCHTYPEVALUES_EC2 = 'ec2';\nconst TMP_AWSECSLAUNCHTYPEVALUES_FARGATE = 'fargate';\n/**\n * The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n *\n * @deprecated Use AWS_ECS_LAUNCHTYPE_VALUE_EC2 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const AWSECSLAUNCHTYPEVALUES_EC2 = TMP_AWSECSLAUNCHTYPEVALUES_EC2;\n/**\n * The [launch type](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/launch_types.html) for an ECS task.\n *\n * @deprecated Use AWS_ECS_LAUNCHTYPE_VALUE_FARGATE in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const AWSECSLAUNCHTYPEVALUES_FARGATE = TMP_AWSECSLAUNCHTYPEVALUES_FARGATE;\n/**\n * The constant map of values for AwsEcsLaunchtypeValues.\n * @deprecated Use the AWSECSLAUNCHTYPEVALUES_XXXXX constants rather than the AwsEcsLaunchtypeValues.XXXXX for bundle minification.\n */\nexport const AwsEcsLaunchtypeValues = \n/*#__PURE__*/ createConstMap([\n TMP_AWSECSLAUNCHTYPEVALUES_EC2,\n TMP_AWSECSLAUNCHTYPEVALUES_FARGATE,\n]);\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for HostArchValues enum definition\n *\n * The CPU architecture the host system is running on.\n * ---------------------------------------------------------------------------------------------------------- */\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_HOSTARCHVALUES_AMD64 = 'amd64';\nconst TMP_HOSTARCHVALUES_ARM32 = 'arm32';\nconst TMP_HOSTARCHVALUES_ARM64 = 'arm64';\nconst TMP_HOSTARCHVALUES_IA64 = 'ia64';\nconst TMP_HOSTARCHVALUES_PPC32 = 'ppc32';\nconst TMP_HOSTARCHVALUES_PPC64 = 'ppc64';\nconst TMP_HOSTARCHVALUES_X86 = 'x86';\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_AMD64 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_AMD64 = TMP_HOSTARCHVALUES_AMD64;\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_ARM32 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_ARM32 = TMP_HOSTARCHVALUES_ARM32;\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_ARM64 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_ARM64 = TMP_HOSTARCHVALUES_ARM64;\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_IA64 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_IA64 = TMP_HOSTARCHVALUES_IA64;\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_PPC32 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_PPC32 = TMP_HOSTARCHVALUES_PPC32;\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_PPC64 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_PPC64 = TMP_HOSTARCHVALUES_PPC64;\n/**\n * The CPU architecture the host system is running on.\n *\n * @deprecated Use HOST_ARCH_VALUE_X86 in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const HOSTARCHVALUES_X86 = TMP_HOSTARCHVALUES_X86;\n/**\n * The constant map of values for HostArchValues.\n * @deprecated Use the HOSTARCHVALUES_XXXXX constants rather than the HostArchValues.XXXXX for bundle minification.\n */\nexport const HostArchValues = \n/*#__PURE__*/ createConstMap([\n TMP_HOSTARCHVALUES_AMD64,\n TMP_HOSTARCHVALUES_ARM32,\n TMP_HOSTARCHVALUES_ARM64,\n TMP_HOSTARCHVALUES_IA64,\n TMP_HOSTARCHVALUES_PPC32,\n TMP_HOSTARCHVALUES_PPC64,\n TMP_HOSTARCHVALUES_X86,\n]);\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for OsTypeValues enum definition\n *\n * The operating system type.\n * ---------------------------------------------------------------------------------------------------------- */\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_OSTYPEVALUES_WINDOWS = 'windows';\nconst TMP_OSTYPEVALUES_LINUX = 'linux';\nconst TMP_OSTYPEVALUES_DARWIN = 'darwin';\nconst TMP_OSTYPEVALUES_FREEBSD = 'freebsd';\nconst TMP_OSTYPEVALUES_NETBSD = 'netbsd';\nconst TMP_OSTYPEVALUES_OPENBSD = 'openbsd';\nconst TMP_OSTYPEVALUES_DRAGONFLYBSD = 'dragonflybsd';\nconst TMP_OSTYPEVALUES_HPUX = 'hpux';\nconst TMP_OSTYPEVALUES_AIX = 'aix';\nconst TMP_OSTYPEVALUES_SOLARIS = 'solaris';\nconst TMP_OSTYPEVALUES_Z_OS = 'z_os';\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_WINDOWS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_WINDOWS = TMP_OSTYPEVALUES_WINDOWS;\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_LINUX in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_LINUX = TMP_OSTYPEVALUES_LINUX;\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_DARWIN in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_DARWIN = TMP_OSTYPEVALUES_DARWIN;\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_FREEBSD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_FREEBSD = TMP_OSTYPEVALUES_FREEBSD;\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_NETBSD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_NETBSD = TMP_OSTYPEVALUES_NETBSD;\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_OPENBSD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_OPENBSD = TMP_OSTYPEVALUES_OPENBSD;\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_DRAGONFLYBSD in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_DRAGONFLYBSD = TMP_OSTYPEVALUES_DRAGONFLYBSD;\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_HPUX in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_HPUX = TMP_OSTYPEVALUES_HPUX;\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_AIX in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_AIX = TMP_OSTYPEVALUES_AIX;\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_SOLARIS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_SOLARIS = TMP_OSTYPEVALUES_SOLARIS;\n/**\n * The operating system type.\n *\n * @deprecated Use OS_TYPE_VALUE_Z_OS in [incubating entry-point]({@link https://github.com/open-telemetry/opentelemetry-js/blob/main/semantic-conventions/README.md#unstable-semconv}).\n */\nexport const OSTYPEVALUES_Z_OS = TMP_OSTYPEVALUES_Z_OS;\n/**\n * The constant map of values for OsTypeValues.\n * @deprecated Use the OSTYPEVALUES_XXXXX constants rather than the OsTypeValues.XXXXX for bundle minification.\n */\nexport const OsTypeValues = \n/*#__PURE__*/ createConstMap([\n TMP_OSTYPEVALUES_WINDOWS,\n TMP_OSTYPEVALUES_LINUX,\n TMP_OSTYPEVALUES_DARWIN,\n TMP_OSTYPEVALUES_FREEBSD,\n TMP_OSTYPEVALUES_NETBSD,\n TMP_OSTYPEVALUES_OPENBSD,\n TMP_OSTYPEVALUES_DRAGONFLYBSD,\n TMP_OSTYPEVALUES_HPUX,\n TMP_OSTYPEVALUES_AIX,\n TMP_OSTYPEVALUES_SOLARIS,\n TMP_OSTYPEVALUES_Z_OS,\n]);\n/* ----------------------------------------------------------------------------------------------------------\n * Constant values for TelemetrySdkLanguageValues enum definition\n *\n * The language of the telemetry SDK.\n * ---------------------------------------------------------------------------------------------------------- */\n// Temporary local constants to assign to the individual exports and the namespaced version\n// Required to avoid the namespace exports using the unminifiable export names for some package types\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_CPP = 'cpp';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET = 'dotnet';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG = 'erlang';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_GO = 'go';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA = 'java';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS = 'nodejs';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_PHP = 'php';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON = 'python';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY = 'ruby';\nconst TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS = 'webjs';\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_CPP.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_CPP = TMP_TELEMETRYSDKLANGUAGEVALUES_CPP;\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_DOTNET.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_DOTNET = TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET;\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_ERLANG.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_ERLANG = TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG;\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_GO.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_GO = TMP_TELEMETRYSDKLANGUAGEVALUES_GO;\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_JAVA.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_JAVA = TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA;\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_NODEJS.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_NODEJS = TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS;\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_PHP.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_PHP = TMP_TELEMETRYSDKLANGUAGEVALUES_PHP;\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_PYTHON.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_PYTHON = TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON;\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_RUBY.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_RUBY = TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY;\n/**\n * The language of the telemetry SDK.\n *\n * @deprecated Use TELEMETRY_SDK_LANGUAGE_VALUE_WEBJS.\n */\nexport const TELEMETRYSDKLANGUAGEVALUES_WEBJS = TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS;\n/**\n * The constant map of values for TelemetrySdkLanguageValues.\n * @deprecated Use the TELEMETRYSDKLANGUAGEVALUES_XXXXX constants rather than the TelemetrySdkLanguageValues.XXXXX for bundle minification.\n */\nexport const TelemetrySdkLanguageValues = \n/*#__PURE__*/ createConstMap([\n TMP_TELEMETRYSDKLANGUAGEVALUES_CPP,\n TMP_TELEMETRYSDKLANGUAGEVALUES_DOTNET,\n TMP_TELEMETRYSDKLANGUAGEVALUES_ERLANG,\n TMP_TELEMETRYSDKLANGUAGEVALUES_GO,\n TMP_TELEMETRYSDKLANGUAGEVALUES_JAVA,\n TMP_TELEMETRYSDKLANGUAGEVALUES_NODEJS,\n TMP_TELEMETRYSDKLANGUAGEVALUES_PHP,\n TMP_TELEMETRYSDKLANGUAGEVALUES_PYTHON,\n TMP_TELEMETRYSDKLANGUAGEVALUES_RUBY,\n TMP_TELEMETRYSDKLANGUAGEVALUES_WEBJS,\n]);\n//# sourceMappingURL=SemanticResourceAttributes.js.map","import {\n FieldType,\n NodeGraphDataFrameFieldNames as Fields,\n DataFrameView,\n DataFrame,\n MutableDataFrame,\n} from '@grafana/data';\n\nexport function createNodeGraphFrames(data: DataFrame): 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 for (const edge of edges) {\n edgesFrame.add(edge);\n }\n\n return [nodesFrame, edgesFrame];\n}\n\nfunction convertTraceToGraph(data: DataFrame): { nodes: Node[]; edges: Edge[] } {\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n\n const view = new DataFrameView<TraceRow>(data);\n\n const traceDuration = findTraceDuration(view);\n const spanMap = makeSpanMap((index) => {\n if (index >= data.length) {\n return undefined;\n }\n const span = view.get(index);\n return {\n span: { ...span },\n id: span.spanID,\n parentIds: span.parentSpanID ? [span.parentSpanID] : [],\n };\n });\n\n for (let i = 0; i < view.length; i++) {\n const row = view.get(i);\n\n const ranges: Array<[number, number]> = spanMap[row.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 = row.duration - childrenDuration;\n const stats = getStats(row.duration, traceDuration, selfDuration);\n\n nodes.push({\n [Fields.id]: row.spanID,\n [Fields.title]: row.serviceName ?? '',\n [Fields.subTitle]: row.operationName,\n [Fields.mainStat]: stats.main,\n [Fields.secondaryStat]: stats.secondary,\n [Fields.color]: selfDuration / traceDuration,\n });\n\n // Sometimes some span can be missing. Don't add edges for those.\n if (row.parentSpanID && spanMap[row.parentSpanID].span) {\n edges.push({\n [Fields.id]: row.parentSpanID + '--' + row.spanID,\n [Fields.target]: row.spanID,\n [Fields.source]: row.parentSpanID,\n });\n }\n }\n\n return { nodes, edges };\n}\n\n/**\n * Get non overlapping duration of the ranges as they can overlap or have gaps.\n */\nexport function getNonOverlappingDuration(ranges: Array<[number, number]>): number {\n ranges.sort((a, b) => a[0] - b[0]);\n const mergedRanges = ranges.reduce<Array<[number, number]>>((acc, range) => {\n if (!acc.length) {\n return [range];\n }\n const tail = acc.slice(-1)[0];\n const [prevStart, prevEnd] = tail;\n const [start, end] = range;\n if (end < prevEnd) {\n // In this case the range is completely inside the prev range so we can just ignore it.\n return acc;\n }\n\n if (start > prevEnd) {\n // There is no overlap so we can just add it to stack\n return [...acc, range];\n }\n\n // We know there is overlap and current range ends later than previous so we can just extend the range\n return [...acc.slice(0, -1), [prevStart, end]];\n }, []);\n\n return mergedRanges.reduce((acc, range) => {\n return acc + (range[1] - range[0]);\n }, 0);\n}\n\n/**\n * Returns a map of the spans with children array for easier processing. It will also contain empty spans in case\n * span is missing but other spans are its children. This is more generic because it needs to allow iterating over\n * both arrays and dataframe views.\n */\nexport function makeSpanMap<T>(getSpan: (index: number) => { span: T; id: string; parentIds: string[] } | undefined): {\n [id: string]: { span: T; children: string[] };\n} {\n const spanMap: { [id: string]: { span?: T; children: string[] } } = {};\n\n let span;\n for (let index = 0; (span = getSpan(index)), !!span; index++) {\n if (!spanMap[span.id]) {\n spanMap[span.id] = {\n span: span.span,\n children: [],\n };\n } else {\n spanMap[span.id].span = span.span;\n }\n\n for (const parentId of span.parentIds) {\n if (parentId) {\n if (!spanMap[parentId]) {\n spanMap[parentId] = {\n span: undefined,\n children: [span.id],\n };\n } else {\n spanMap[parentId].children.push(span.id);\n }\n }\n }\n }\n // Discussion on this type assertion here: https://github.com/grafana/grafana/pull/80362/files#r1451019375\n return spanMap as { [id: string]: { span: T; children: string[] } };\n}\n\nexport function getStats(duration: number, traceDuration: number, selfDuration: number) {\n return {\n main: `${toFixedNoTrailingZeros(duration)}ms (${toFixedNoTrailingZeros((duration / traceDuration) * 100)}%)`,\n secondary: `${toFixedNoTrailingZeros(selfDuration)}ms (${toFixedNoTrailingZeros(\n (selfDuration / duration) * 100\n )}%)`,\n };\n}\n\nfunction toFixedNoTrailingZeros(n: number) {\n return parseFloat(n.toFixed(2));\n}\n\n/**\n * Create default frames used when returning data for node graph.\n */\nexport function makeFrames() {\n const nodesFrame = new MutableDataFrame({\n fields: [\n { name: Fields.id, type: FieldType.string },\n { name: Fields.title, type: FieldType.string },\n { name: Fields.subTitle, type: FieldType.string },\n { name: Fields.mainStat, type: FieldType.string, config: { displayName: 'Total time (% of trace)' } },\n { name: Fields.secondaryStat, type: FieldType.string, config: { displayName: 'Self time (% of total)' } },\n {\n name: Fields.color,\n type: FieldType.number,\n config: { color: { mode: 'continuous-GrYlRd' }, displayName: 'Self time / Trace duration' },\n },\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 ],\n meta: {\n preferredVisualisationType: 'nodeGraph',\n },\n });\n\n return [nodesFrame, edgesFrame];\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(view: DataFrameView<TraceRow>): number {\n let traceEndTime = 0;\n let traceStartTime = Infinity;\n\n for (let i = 0; i < view.length; i++) {\n const row = view.get(i);\n\n if (row.startTime < traceStartTime) {\n traceStartTime = row.startTime;\n }\n\n if (row.startTime + row.duration > traceEndTime) {\n traceEndTime = row.startTime + row.duration;\n }\n }\n\n return traceEndTime - traceStartTime;\n}\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\ninterface TraceRow {\n traceID: string;\n spanID: string;\n parentSpanID: string;\n operationName: string;\n serviceName: string;\n serviceTags: string;\n startTime: number;\n duration: number;\n logs: string;\n tags: string;\n}\n","import { SpanStatus } from '@opentelemetry/api';\nimport { collectorTypes } from '@opentelemetry/exporter-collector';\nimport { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';\nimport { isEqual } from 'lodash';\n\nimport {\n createDataFrame,\n createTheme,\n DataFrame,\n DataLink,\n DataLinkConfigOrigin,\n DataQueryResponse,\n DataSourceInstanceSettings,\n DataSourceJsonData,\n Field,\n FieldDTO,\n FieldType,\n getDisplayProcessor,\n MutableDataFrame,\n toDataFrame,\n TraceKeyValuePair,\n TraceLog,\n TraceSpanReference,\n TraceSpanRow,\n} from '@grafana/data';\nimport { createNodeGraphFrames, TraceToProfilesData } from '@grafana/o11y-ds-frontend';\nimport { getDataSourceSrv } from '@grafana/runtime';\n\nimport { SearchTableType } from './dataquery.gen';\nimport { Span, SpanAttributes, Spanset, TempoJsonData, TraceSearchMetadata } from './types';\n\nfunction getAttributeValue(value: collectorTypes.opentelemetryProto.common.v1.AnyValue): any {\n if (value.stringValue) {\n return value.stringValue;\n }\n\n if (value.boolValue !== undefined) {\n return Boolean(value.boolValue);\n }\n\n if (value.intValue !== undefined) {\n return Number.parseInt(String(value.intValue), 10);\n }\n\n if (value.doubleValue) {\n return Number.parseFloat(String(value.doubleValue));\n }\n\n if (value.arrayValue) {\n const arrayValue = [];\n for (const arValue of value.arrayValue.values) {\n arrayValue.push(getAttributeValue(arValue));\n }\n return arrayValue;\n }\n\n return '';\n}\n\nfunction resourceToProcess(resource: collectorTypes.opentelemetryProto.resource.v1.Resource | undefined) {\n const serviceTags: TraceKeyValuePair[] = [];\n let serviceName = 'OTLPResourceNoServiceName';\n if (!resource) {\n return { serviceName, serviceTags };\n }\n\n for (const attribute of resource.attributes) {\n if (attribute.key === SemanticResourceAttributes.SERVICE_NAME) {\n serviceName = attribute.value.stringValue || serviceName;\n }\n serviceTags.push({ key: attribute.key, value: getAttributeValue(attribute.value) });\n }\n\n return { serviceName, serviceTags };\n}\n\nfunction getSpanTags(span: collectorTypes.opentelemetryProto.trace.v1.Span): TraceKeyValuePair[] {\n const spanTags: TraceKeyValuePair[] = [];\n\n if (span.attributes) {\n for (const attribute of span.attributes) {\n spanTags.push({ key: attribute.key, value: getAttributeValue(attribute.value) });\n }\n }\n\n return spanTags;\n}\n\nfunction getSpanKind(span: collectorTypes.opentelemetryProto.trace.v1.Span) {\n let kind = undefined;\n if (span.kind) {\n const split = span.kind.toString().toLowerCase().split('_');\n kind = split.length ? split[split.length - 1] : span.kind.toString();\n }\n return kind;\n}\n\nfunction getReferences(span: collectorTypes.opentelemetryProto.trace.v1.Span) {\n const references: TraceSpanReference[] = [];\n if (span.links) {\n for (const link of span.links) {\n const { traceId, spanId } = link;\n const tags: TraceKeyValuePair[] = [];\n if (link.attributes) {\n for (const attribute of link.attributes) {\n tags.push({ key: attribute.key, value: getAttributeValue(attribute.value) });\n }\n }\n references.push({ traceID: traceId, spanID: spanId, tags });\n }\n }\n\n return references;\n}\n\nfunction getLogs(span: collectorTypes.opentelemetryProto.trace.v1.Span) {\n const logs: TraceLog[] = [];\n if (span.events) {\n for (const event of span.events) {\n const fields: TraceKeyValuePair[] = [];\n if (event.attributes) {\n for (const attribute of event.attributes) {\n fields.push({ key: attribute.key, value: getAttributeValue(attribute.value) });\n }\n }\n logs.push({ fields, timestamp: event.timeUnixNano / 1000000, name: event.name });\n }\n }\n\n return logs;\n}\n\nexport function transformFromOTLP(\n traceData: collectorTypes.opentelemetryProto.trace.v1.ResourceSpans[],\n nodeGraph = false\n): DataQueryResponse {\n const frame = new MutableDataFrame({\n fields: [\n { name: 'traceID', type: FieldType.string, values: [] },\n { name: 'spanID', type: FieldType.string, values: [] },\n { name: 'parentSpanID', type: FieldType.string, values: [] },\n { name: 'operationName', type: FieldType.string, values: [] },\n { name: 'serviceName', type: FieldType.string, values: [] },\n { name: 'kind', type: FieldType.string, values: [] },\n { name: 'statusCode', type: FieldType.number, values: [] },\n { name: 'statusMessage', type: FieldType.string, values: [] },\n { name: 'instrumentationLibraryName', type: FieldType.string, values: [] },\n { name: 'instrumentationLibraryVersion', type: FieldType.string, values: [] },\n { name: 'traceState', type: FieldType.string, values: [] },\n { name: 'serviceTags', type: FieldType.other, values: [] },\n { name: 'startTime', type: FieldType.number, values: [] },\n { name: 'duration', type: FieldType.number, values: [] },\n { name: 'logs', type: FieldType.other, values: [] },\n { name: 'references', type: FieldType.other, values: [] },\n { name: 'tags', type: FieldType.other, values: [] },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'otlp',\n },\n },\n });\n try {\n for (const data of traceData) {\n const { serviceName, serviceTags } = resourceToProcess(data.resource);\n for (const librarySpan of data.instrumentationLibrarySpans) {\n for (const span of librarySpan.spans) {\n frame.add({\n traceID: span.traceId,\n spanID: span.spanId,\n parentSpanID: span.parentSpanId || '',\n operationName: span.name || '',\n serviceName,\n kind: getSpanKind(span),\n statusCode: span.status?.code,\n statusMessage: span.status?.message,\n instrumentationLibraryName: librarySpan.instrumentationLibrary?.name,\n instrumentationLibraryVersion: librarySpan.instrumentationLibrary?.version,\n traceState: span.traceState,\n serviceTags,\n startTime: span.startTimeUnixNano! / 1000000,\n duration: (span.endTimeUnixNano! - span.startTimeUnixNano!) / 1000000,\n tags: getSpanTags(span),\n logs: getLogs(span),\n references: getReferences(span),\n });\n }\n }\n }\n } catch (error) {\n console.error(error);\n return { error: { message: 'JSON is not valid OpenTelemetry format: ' + error }, data: [] };\n }\n\n let data = [frame];\n if (nodeGraph) {\n data.push(...(createNodeGraphFrames(frame) as MutableDataFrame[]));\n }\n\n return { data };\n}\n\n/**\n * Transforms trace dataframes to the OpenTelemetry format\n */\nexport function transformToOTLP(data: MutableDataFrame): {\n batches: collectorTypes.opentelemetryProto.trace.v1.ResourceSpans[];\n} {\n let result: { batches: collectorTypes.opentelemetryProto.trace.v1.ResourceSpans[] } = {\n batches: [],\n };\n\n // Lookup object to see which batch contains spans for which services\n let services: { [key: string]: number } = {};\n\n for (let i = 0; i < data.length; i++) {\n const span = data.get(i);\n\n // Group spans based on service\n if (!services[span.serviceName]) {\n services[span.serviceName] = result.batches.length;\n result.batches.push({\n resource: {\n attributes: [],\n droppedAttributesCount: 0,\n },\n instrumentationLibrarySpans: [\n {\n spans: [],\n },\n ],\n });\n }\n\n let batchIndex = services[span.serviceName];\n\n // Populate resource attributes from service tags\n if (result.batches[batchIndex].resource!.attributes.length === 0) {\n result.batches[batchIndex].resource!.attributes = tagsToAttributes(span.serviceTags);\n }\n\n // Populate instrumentation library if it exists\n if (!result.batches[batchIndex].instrumentationLibrarySpans[0].instrumentationLibrary) {\n if (span.instrumentationLibraryName) {\n result.batches[batchIndex].instrumentationLibrarySpans[0].instrumentationLibrary = {\n name: span.instrumentationLibraryName,\n version: span.instrumentationLibraryVersion ? span.instrumentationLibraryVersion : '',\n };\n }\n }\n\n result.batches[batchIndex].instrumentationLibrarySpans[0].spans.push({\n traceId: span.traceID.padStart(32, '0'),\n spanId: span.spanID,\n parentSpanId: span.parentSpanID || '',\n traceState: span.traceState || '',\n name: span.operationName,\n kind: getOTLPSpanKind(span.kind) as any,\n startTimeUnixNano: span.startTime * 1000000,\n endTimeUnixNano: (span.startTime + span.duration) * 1000000,\n attributes: span.tags ? tagsToAttributes(span.tags) : [],\n droppedAttributesCount: 0,\n droppedEventsCount: 0,\n droppedLinksCount: 0,\n status: getOTLPStatus(span),\n events: getOTLPEvents(span.logs),\n links: getOTLPReferences(span.references),\n });\n }\n\n return result;\n}\n\nfunction getOTLPSpanKind(kind: string): string | undefined {\n let spanKind = undefined;\n if (kind) {\n switch (kind) {\n case 'server':\n spanKind = 'SPAN_KIND_SERVER';\n break;\n case 'client':\n spanKind = 'SPAN_KIND_CLIENT';\n break;\n case 'producer':\n spanKind = 'SPAN_KIND_PRODUCER';\n break;\n case 'consumer':\n spanKind = 'SPAN_KIND_CONSUMER';\n break;\n case 'internal':\n spanKind = 'SPAN_KIND_INTERNAL';\n break;\n }\n }\n return spanKind;\n}\n\n/**\n * Converts key-value tags to OTLP attributes and removes tags added by Grafana\n */\nfunction tagsToAttributes(tags: TraceKeyValuePair[]): collectorTypes.opentelemetryProto.common.v1.KeyValue[] {\n return tags.reduce<collectorTypes.opentelemetryProto.common.v1.KeyValue[]>(\n (attributes, tag) => [...attributes, { key: tag.key, value: toAttributeValue(tag) }],\n []\n );\n}\n\n/**\n * Returns the correct OTLP AnyValue based on the value of the tag value\n */\nfunction toAttributeValue(tag: TraceKeyValuePair): collectorTypes.opentelemetryProto.common.v1.AnyValue {\n if (typeof tag.value === 'string') {\n return { stringValue: tag.value };\n } else if (typeof tag.value === 'boolean') {\n return { boolValue: tag.value };\n } else if (typeof tag.value === 'number') {\n if (tag.value % 1 === 0) {\n return { intValue: tag.value };\n } else {\n return { doubleValue: tag.value };\n }\n } else if (typeof tag.value === 'object') {\n if (Array.isArray(tag.value)) {\n const values: collectorTypes.opentelemetryProto.common.v1.AnyValue[] = [];\n for (const val of tag.value) {\n values.push(toAttributeValue(val));\n }\n\n return { arrayValue: { values } };\n }\n }\n return { stringValue: tag.value };\n}\n\nfunction getOTLPStatus(span: TraceSpanRow): SpanStatus | undefined {\n let status = undefined;\n if (span.statusCode !== undefined) {\n status = {\n code: span.statusCode,\n message: span.statusMessage ? span.statusMessage : '',\n };\n }\n return status;\n}\n\nfunction getOTLPEvents(logs: TraceLog[]): collectorTypes.opentelemetryProto.trace.v1.Span.Event[] | undefined {\n if (!logs || !logs.length) {\n return undefined;\n }\n\n let events: collectorTypes.opentelemetryProto.trace.v1.Span.Event[] = [];\n for (const log of logs) {\n let event: collectorTypes.opentelemetryProto.trace.v1.Span.Event = {\n timeUnixNano: log.timestamp * 1000000,\n attributes: [],\n droppedAttributesCount: 0,\n name: log.name || '',\n };\n for (const field of log.fields) {\n event.attributes!.push({\n key: field.key,\n value: toAttributeValue(field),\n });\n }\n events.push(event);\n }\n return events;\n}\n\nfunction getOTLPReferences(\n references: TraceSpanReference[]\n): collectorTypes.opentelemetryProto.trace.v1.Span.Link[] | undefined {\n if (!references || !references.length) {\n return undefined;\n }\n\n let links: collectorTypes.opentelemetryProto.trace.v1.Span.Link[] = [];\n for (const ref of references) {\n let link: collectorTypes.opentelemetryProto.trace.v1.Span.Link = {\n traceId: ref.traceID,\n spanId: ref.spanID,\n attributes: [],\n droppedAttributesCount: 0,\n };\n if (ref.tags?.length) {\n for (const tag of ref.tags) {\n link.attributes?.push({\n key: tag.key,\n value: toAttributeValue(tag),\n });\n }\n }\n links.push(link);\n }\n return links;\n}\n\nexport const RelatedProfilesTitle = 'Related profiles';\n\nexport function transformTrace(\n response: DataQueryResponse,\n instanceSettings: DataSourceInstanceSettings<TempoJsonData>,\n nodeGraph = false\n): DataQueryResponse {\n const frame = response.data[0];\n\n if (!frame) {\n return emptyDataQueryResponse;\n }\n\n // Get profiles links\n const traceToProfilesData: TraceToProfilesData | undefined = instanceSettings?.jsonData;\n const traceToProfilesOptions = traceToProfilesData?.tracesToProfiles;\n let profilesDataSourceSettings: DataSourceInstanceSettings<DataSourceJsonData> | undefined;\n if (traceToProfilesOptions?.datasourceUid) {\n profilesDataSourceSettings = getDataSourceSrv().getInstanceSettings(traceToProfilesOptions.datasourceUid);\n }\n\n if (traceToProfilesOptions && profilesDataSourceSettings) {\n const customQuery = traceToProfilesOptions.customQuery ? traceToProfilesOptions.query : undefined;\n const dataLink: DataLink = {\n title: RelatedProfilesTitle,\n url: '',\n internal: {\n datasourceUid: profilesDataSourceSettings.uid,\n datasourceName: profilesDataSourceSettings.name,\n query: {\n labelSelector: customQuery ? customQuery : '{${__tags}}',\n groupBy: [],\n profileTypeId: traceToProfilesOptions.profileTypeId ?? '',\n queryType: 'profile',\n spanSelector: ['${__span.tags[\"pyroscope.profile.id\"]}'],\n refId: 'profile',\n },\n },\n origin: DataLinkConfigOrigin.Datasource,\n };\n\n frame.fields.forEach((field: Field) => {\n if (field.name === 'tags') {\n field.config.links = [dataLink];\n }\n });\n }\n\n let data = [...response.data];\n if (nodeGraph) {\n data.push(...createNodeGraphFrames(toDataFrame(frame)));\n }\n\n return {\n ...response,\n data,\n };\n}\n\nfunction transformToTraceData(data: TraceSearchMetadata) {\n return {\n traceID: data.traceID,\n startTime: parseInt(data.startTimeUnixNano!, 10) / 1000000,\n traceDuration: data.durationMs,\n traceService: data.rootServiceName || '',\n traceName: data.rootTraceName || '',\n };\n}\n\nexport function enhanceTraceQlMetricsResponse(\n data: DataQueryResponse,\n instanceSettings: DataSourceInstanceSettings\n): DataQueryResponse {\n data.data\n ?.filter((f) => f.name === 'exemplar' && f.meta?.dataTopic === 'annotations')\n .map((frame) => {\n const traceIDField = frame.fields.find((field: Field) => field.name === 'traceId');\n if (traceIDField) {\n const links = getDataLinks(instanceSettings);\n const existingLinks = traceIDField.config.links || [];\n\n // Filter out links that already exist\n const newLinks = links.filter(\n (link) =>\n !existingLinks.some(\n (existing: DataLink) =>\n existing.title === link.title &&\n existing.internal?.datasourceUid === link.internal?.datasourceUid &&\n isEqual(existing.internal?.query, link.internal?.query)\n )\n );\n\n traceIDField.config.links = existingLinks.length ? [...existingLinks, ...newLinks] : newLinks;\n }\n return frame;\n });\n return data;\n}\n\nfunction getDataLinks(instanceSettings: DataSourceInstanceSettings): DataLink[] {\n const dataLinks: DataLink[] = [];\n\n if (instanceSettings.uid) {\n dataLinks.push({\n title: 'View trace',\n url: '',\n internal: {\n query: { query: '${__value.raw}', queryType: 'traceql' },\n datasourceUid: instanceSettings.uid,\n datasourceName: instanceSettings?.name ?? 'Data source not found',\n },\n });\n }\n return dataLinks;\n}\n\nexport function formatTraceQLResponse(\n data: TraceSearchMetadata[],\n instanceSettings: DataSourceInstanceSettings,\n tableType?: SearchTableType\n) {\n switch (tableType) {\n case SearchTableType.Spans:\n return createTableFrameFromTraceQlQueryAsSpans(data, instanceSettings);\n case SearchTableType.Raw:\n return createDataFrameFromTraceQlQuery(data);\n default:\n return createTableFrameFromTraceQlQuery(data, instanceSettings);\n }\n}\n\nfunction createDataFrameFromTraceQlQuery(data: TraceSearchMetadata[]) {\n return [\n createDataFrame({\n name: 'Raw response',\n refId: 'raw',\n fields: [{ name: 'response', type: FieldType.string, values: [JSON.stringify(data, null, 2)] }],\n }),\n ];\n}\n\n/**\n * Create data frame while adding spans for each trace into a subtable.\n * @param data\n * @param instanceSettings\n */\nexport function createTableFrameFromTraceQlQuery(\n data: TraceSearchMetadata[],\n instanceSettings: DataSourceInstanceSettings\n): DataFrame[] {\n const frame = createDataFrame({\n name: 'Traces',\n refId: 'traces',\n fields: [\n {\n name: 'traceID',\n type: FieldType.string,\n config: {\n unit: 'string',\n displayNameFromDS: 'Trace ID',\n custom: {\n width: 200,\n },\n links: [\n {\n title: 'Trace: ${__value.raw}',\n url: '',\n internal: {\n datasourceUid: instanceSettings.uid,\n datasourceName: instanceSettings.name,\n query: {\n query: '${__value.raw}',\n queryType: 'traceql',\n },\n },\n },\n ],\n },\n },\n {\n name: 'startTime',\n type: FieldType.time,\n config: {\n displayNameFromDS: 'Start time',\n custom: {\n width: 200,\n },\n },\n },\n { name: 'traceService', type: FieldType.string, config: { displayNameFromDS: 'Service' } },\n { name: 'traceName', type: FieldType.string, config: { displayNameFromDS: 'Name' } },\n {\n name: 'traceDuration',\n type: FieldType.number,\n config: {\n displayNameFromDS: 'Duration',\n unit: 'ms',\n custom: {\n width: 120,\n },\n },\n },\n {\n name: 'nested',\n type: FieldType.nestedFrames,\n },\n ],\n meta: {\n preferredVisualisationType: 'table',\n uniqueRowIdFields: [0],\n },\n });\n\n if (!data?.length) {\n return [frame];\n }\n frame.length = data.length;\n\n data\n // Show the most recent traces\n .sort((a, b) => parseInt(b?.startTimeUnixNano!, 10) / 1000000 - parseInt(a?.startTimeUnixNano!, 10) / 1000000)\n .forEach((trace) => {\n const traceData: TraceTableData = transformToTraceData(trace);\n frame.fields[0].values.push(traceData.traceID);\n frame.fields[1].values.push(traceData.startTime);\n frame.fields[2].values.push(traceData.traceService);\n frame.fields[3].values.push(traceData.traceName);\n\n // Note: this is a workaround to display the duration in the table when it is <1ms\n // and the duration is not available in the trace data response.\n frame.fields[4].values.push(traceData.traceDuration ? traceData.traceDuration : '<1ms');\n\n if (trace.spanSets) {\n frame.fields[5].values.push(\n trace.spanSets.map((spanSet: Spanset) => {\n return traceSubFrame(trace, spanSet, instanceSettings);\n })\n );\n } else if (trace.spanSet) {\n frame.fields[5].values.push([traceSubFrame(trace, trace.spanSet, instanceSettings)]);\n }\n });\n\n return [frame];\n}\n\nexport function createTableFrameFromTraceQlQueryAsSpans(\n data: TraceSearchMetadata[] | undefined,\n instanceSettings: DataSourceInstanceSettings\n): DataFrame[] {\n const spanDynamicAttrs: Record<string, FieldDTO> = {};\n let hasNameAttribute = false;\n\n data?.forEach((trace) =>\n getSpanSets(trace).forEach((ss) => {\n ss.attributes?.forEach((attr) => {\n spanDynamicAttrs[attr.key] = {\n name: attr.key,\n type: FieldType.string,\n config: { displayNameFromDS: attr.key },\n };\n });\n ss.spans.forEach((span) => {\n if (span.name) {\n hasNameAttribute = true;\n }\n span.attributes?.forEach((attr) => {\n spanDynamicAttrs[attr.key] = {\n name: attr.key,\n type: FieldType.string,\n config: { displayNameFromDS: attr.key },\n };\n });\n });\n })\n );\n\n const frame = new MutableDataFrame({\n name: 'Spans',\n refId: 'traces',\n fields: [\n {\n name: 'traceIdHidden',\n type: FieldType.string,\n config: {\n custom: { hidden: true },\n },\n },\n {\n name: 'traceService',\n type: FieldType.string,\n config: {\n displayNameFromDS: 'Trace Service',\n custom: {\n width: 200,\n },\n },\n },\n {\n name: 'traceName',\n type: FieldType.string,\n config: {\n displayNameFromDS: 'Trace Name',\n custom: {\n width: 200,\n },\n },\n },\n {\n name: 'spanID',\n type: FieldType.string,\n config: {\n unit: 'string',\n displayNameFromDS: 'Span ID',\n custom: {\n width: 200,\n },\n links: [\n {\n title: 'Span: ${__value.raw}',\n url: '',\n internal: {\n datasourceUid: instanceSettings.uid,\n datasourceName: instanceSettings.name,\n query: {\n query: '${__data.fields.traceIdHidden}',\n queryType: 'traceql',\n },\n panelsState: {\n trace: {\n spanId: '${__value.raw}',\n },\n },\n },\n },\n ],\n },\n },\n {\n name: 'time',\n type: FieldType.time,\n config: {\n displayNameFromDS: 'Start time',\n },\n },\n {\n name: 'name',\n type: FieldType.string,\n config: { displayNameFromDS: 'Name', custom: { hidden: !hasNameAttribute } },\n },\n ...Object.values(spanDynamicAttrs).sort((a, b) => a.name.localeCompare(b.name)),\n {\n name: 'duration',\n type: FieldType.number,\n config: {\n displayNameFromDS: 'Duration',\n unit: 'ns',\n custom: {\n width: 120,\n },\n },\n },\n ],\n meta: {\n preferredVisualisationType: 'table',\n },\n });\n\n if (!data || !data.length) {\n return [frame];\n }\n\n data\n // Show the most recent traces\n .sort((a, b) => parseInt(b?.startTimeUnixNano!, 10) / 1000000 - parseInt(a?.startTimeUnixNano!, 10) / 1000000)\n .forEach((trace) => {\n getSpanSets(trace).forEach((spanSet) => {\n spanSet.spans.forEach((span) => {\n frame.add(transformSpanToTraceData(span, spanSet, trace));\n });\n });\n });\n\n return [frame];\n}\n\n/**\n * Get the spansets of a trace.\n *\n * Field `spanSets` is preferred to `spanSet` since the latter is deprecated in Tempo, but we\n * support both for backward compatibility.\n *\n * @param trace a trace\n * @returns the spansets of the trace, if existing\n */\nconst getSpanSets = (trace: TraceSearchMetadata): Spanset[] => {\n return trace.spanSets || (trace.spanSet ? [trace.spanSet] : []);\n};\n\nconst traceSubFrame = (\n trace: TraceSearchMetadata,\n spanSet: Spanset,\n instanceSettings: DataSourceInstanceSettings\n): DataFrame => {\n const spanDynamicAttrs: Record<string, FieldDTO> = {};\n let hasNameAttribute = false;\n\n spanSet.attributes?.map((attr) => {\n spanDynamicAttrs[attr.key] = {\n name: attr.key,\n type: FieldType.string,\n config: { displayNameFromDS: attr.key },\n values: [],\n };\n });\n spanSet.spans.forEach((span) => {\n if (span.name) {\n hasNameAttribute = true;\n }\n span.attributes?.forEach((attr) => {\n spanDynamicAttrs[attr.key] = {\n name: attr.key,\n type: FieldType.string,\n config: { displayNameFromDS: attr.key },\n values: [],\n };\n });\n });\n\n const subFrame = new MutableDataFrame({\n fields: [\n {\n name: 'traceIdHidden',\n type: FieldType.string,\n config: {\n custom: { hidden: true },\n },\n values: [],\n },\n {\n name: 'spanID',\n type: FieldType.string,\n values: [],\n config: {\n unit: 'string',\n displayNameFromDS: 'Span ID',\n custom: {\n width: 200,\n },\n links: [\n {\n title: 'Span: ${__value.raw}',\n url: '',\n internal: {\n datasourceUid: instanceSettings.uid,\n datasourceName: instanceSettings.name,\n query: {\n query: '${__data.fields.traceIdHidden}',\n queryType: 'traceql',\n },\n panelsState: {\n trace: {\n spanId: '${__value.raw}',\n },\n },\n },\n },\n ],\n },\n },\n {\n name: 'time',\n type: FieldType.time,\n config: {\n displayNameFromDS: 'Start time',\n custom: {\n width: 200,\n },\n },\n },\n {\n name: 'name',\n type: FieldType.string,\n values: [],\n config: { displayNameFromDS: 'Name', custom: { hidden: !hasNameAttribute } },\n },\n ...Object.values(spanDynamicAttrs).sort((a, b) => a.name.localeCompare(b.name)),\n {\n name: 'duration',\n type: FieldType.number,\n values: [],\n config: {\n displayNameFromDS: 'Duration',\n unit: 'ns',\n custom: {\n width: 120,\n },\n },\n },\n ],\n meta: {\n preferredVisualisationType: 'table',\n },\n });\n\n // TODO: this should be done in `applyFieldOverrides` instead recursively for the nested `DataFrames`\n const theme = createTheme();\n for (const field of subFrame.fields) {\n field.display = getDisplayProcessor({ field, theme });\n }\n\n spanSet.spans.forEach((span) => {\n subFrame.add(transformSpanToTraceData(span, spanSet, trace));\n });\n\n return subFrame;\n};\n\ninterface TraceTableData {\n [key: string]: string | number | boolean | undefined; // dynamic attribute name\n traceID?: string;\n spanID?: string;\n startTime?: number;\n name?: string;\n traceDuration?: number;\n}\n\nfunction transformSpanToTraceData(span: Span, spanSet: Spanset, trace: TraceSearchMetadata): TraceTableData {\n const spanStartTimeUnixMs = parseInt(span.startTimeUnixNano, 10) / 1000000;\n\n const data: TraceTableData = {\n traceIdHidden: trace.traceID,\n traceService: trace.rootServiceName || '',\n traceName: trace.rootTraceName || '',\n spanID: span.spanID,\n time: spanStartTimeUnixMs,\n duration: parseInt(span.durationNanos, 10),\n name: span.name,\n };\n\n let attrs: SpanAttributes[] = [];\n if (spanSet.attributes) {\n attrs = attrs.concat(spanSet.attributes);\n }\n if (span.attributes) {\n attrs = attrs.concat(span.attributes);\n }\n\n attrs.forEach((attr) => {\n if (attr.value.boolValue || attr.value.Value?.bool_value) {\n data[attr.key] = attr.value.boolValue || attr.value.Value?.bool_value;\n }\n if (attr.value.doubleValue || attr.value.Value?.double_value) {\n data[attr.key] = attr.value.doubleValue || attr.value.Value?.double_value;\n }\n if (attr.value.intValue || attr.value.Value?.int_value) {\n data[attr.key] = attr.value.intValue || attr.value.Value?.int_value;\n }\n if (attr.value.stringValue || attr.value.Value?.string_value) {\n data[attr.key] = attr.value.stringValue || attr.value.Value?.string_value;\n }\n });\n\n return data;\n}\n\nconst emptyDataQueryResponse = {\n data: [\n 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: 'otlp',\n },\n },\n }),\n ],\n};\n","import {\n DataFrame,\n DataFrameType,\n DataQueryResponse,\n DataQueryResponseData,\n Field,\n FieldType,\n PanelData,\n QueryResultMetaStat,\n shallowCompare,\n} from '@grafana/data';\n\nexport function combinePanelData(currentData: PanelData, newData: PanelData): PanelData {\n const series = combineResponses({ data: currentData.series }, { data: newData.series }).data;\n return { ...currentData, series };\n}\n\nexport function combineResponses(currentResult: DataQueryResponse | null, newResult: DataQueryResponse) {\n if (!currentResult) {\n return cloneQueryResponse(newResult);\n }\n\n newResult.data.forEach((newFrame) => {\n const currentFrame = currentResult.data.find((frame) => shouldCombine(frame, newFrame));\n if (!currentFrame) {\n currentResult.data.push(cloneDataFrame(newFrame));\n return;\n }\n combineFrames(currentFrame, newFrame);\n });\n\n const mergedErrors = [...(currentResult.errors ?? []), ...(newResult.errors ?? [])];\n\n // we make sure to have `.errors` as undefined, instead of empty-array\n // when no errors.\n\n if (mergedErrors.length > 0) {\n currentResult.errors = mergedErrors;\n }\n\n // the `.error` attribute is obsolete now,\n // but we have to maintain it, otherwise\n // some grafana parts do not behave well.\n // we just choose the old error, if it exists,\n // otherwise the new error, if it exists.\n const mergedError = currentResult.error ?? newResult.error;\n if (mergedError != null) {\n currentResult.error = mergedError;\n }\n\n const mergedTraceIds = [...(currentResult.traceIds ?? []), ...(newResult.traceIds ?? [])];\n if (mergedTraceIds.length > 0) {\n currentResult.traceIds = mergedTraceIds;\n }\n\n return currentResult;\n}\n\nfunction combineFrames(dest: DataFrame, source: DataFrame) {\n // `dest` and `source` might have more or less fields, we need to go through all of them\n const totalFields = Math.max(dest.fields.length, source.fields.length);\n for (let i = 0; i < totalFields; i++) {\n // For now, skip undefined fields that exist in the new frame\n if (!dest.fields[i]) {\n continue;\n }\n // Index is not reliable when frames have disordered fields, or an extra/missing field, so we find them by name.\n // If the field has no name, we fallback to the old index version.\n const sourceField = findSourceField(dest.fields[i], source.fields, i);\n if (!sourceField) {\n continue;\n }\n dest.fields[i].values = [].concat.apply(sourceField.values, dest.fields[i].values);\n if (sourceField.nanos) {\n const nanos: number[] = dest.fields[i].nanos?.slice() || [];\n dest.fields[i].nanos = source.fields[i].nanos?.concat(nanos);\n }\n }\n dest.length += source.length;\n dest.meta = {\n ...dest.meta,\n stats: getCombinedMetadataStats(dest.meta?.stats ?? [], source.meta?.stats ?? []),\n };\n}\n\nfunction findSourceField(referenceField: Field, sourceFields: Field[], index: number) {\n const candidates = sourceFields.filter((f) => f.name === referenceField.name);\n\n if (candidates.length === 1) {\n return candidates[0];\n }\n\n if (referenceField.labels) {\n return candidates.find((candidate) => shallowCompare(referenceField.labels ?? {}, candidate.labels ?? {}));\n }\n\n return sourceFields[index];\n}\n\nconst TOTAL_BYTES_STAT = 'Summary: total bytes processed';\n// This is specific for Loki\nfunction getCombinedMetadataStats(\n destStats: QueryResultMetaStat[],\n sourceStats: QueryResultMetaStat[]\n): QueryResultMetaStat[] {\n // in the current approach, we only handle a single stat\n const destStat = destStats.find((s) => s.displayName === TOTAL_BYTES_STAT);\n const sourceStat = sourceStats.find((s) => s.displayName === TOTAL_BYTES_STAT);\n\n if (sourceStat != null && destStat != null) {\n return [{ value: sourceStat.value + destStat.value, displayName: TOTAL_BYTES_STAT, unit: destStat.unit }];\n }\n\n // maybe one of them exist\n const eitherStat = sourceStat ?? destStat;\n if (eitherStat != null) {\n return [eitherStat];\n }\n\n return [];\n}\n\n/**\n * Deep clones a DataQueryResponse\n */\nexport function cloneQueryResponse(response: DataQueryResponse): DataQueryResponse {\n const newResponse = {\n ...response,\n data: response.data.map(cloneDataFrame),\n };\n return newResponse;\n}\n\nfunction cloneDataFrame(frame: DataQueryResponseData): DataQueryResponseData {\n return {\n ...frame,\n fields: frame.fields.map((field: Field) => ({\n ...field,\n values: field.values,\n })),\n };\n}\n\nfunction shouldCombine(frame1: DataFrame, frame2: DataFrame): boolean {\n if (frame1.refId !== frame2.refId || frame1.name !== frame2.name) {\n return false;\n }\n\n const frameType1 = frame1.meta?.type;\n const frameType2 = frame2.meta?.type;\n\n if (frameType1 !== frameType2) {\n // we do not join things that have a different type\n return false;\n }\n\n // metric range query data\n if (frameType1 === DataFrameType.TimeSeriesMulti) {\n const field1 = frame1.fields.find((f) => f.type === FieldType.number);\n const field2 = frame2.fields.find((f) => f.type === FieldType.number);\n if (field1 === undefined || field2 === undefined) {\n // should never happen\n return false;\n }\n\n return shallowCompare(field1.labels ?? {}, field2.labels ?? {});\n }\n\n // logs query data\n // logs use a special attribute in the dataframe's \"custom\" section\n // because we do not have a good \"frametype\" value for them yet.\n const customType1 = frame1.meta?.custom?.frameType;\n const customType2 = frame2.meta?.custom?.frameType;\n // Legacy frames have this custom type\n if (customType1 === 'LabeledTimeValues' && customType2 === 'LabeledTimeValues') {\n return true;\n } else if (customType1 === customType2) {\n // Data plane frames don't\n return true;\n }\n\n // should never reach here\n return false;\n}\n","import { capitalize } from 'lodash';\nimport { map, Observable, scan, takeWhile } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n DataFrame,\n dataFrameFromJSON,\n DataQueryRequest,\n DataQueryResponse,\n DataSourceInstanceSettings,\n FieldCache,\n FieldType,\n LiveChannelScope,\n LoadingState,\n MutableDataFrame,\n sortDataFrame,\n ThresholdsConfig,\n ThresholdsMode,\n} from '@grafana/data';\nimport { cloneQueryResponse, combineResponses } from '@grafana/o11y-ds-frontend';\nimport { getGrafanaLiveSrv } from '@grafana/runtime';\n\nimport { MetricsQueryType, SearchStreamingState } from './dataquery.gen';\nimport { DEFAULT_SPSS, TempoDatasource } from './datasource';\nimport { formatTraceQLResponse } from './resultTransformer';\nimport { SearchMetrics, TempoJsonData, TempoQuery } from './types';\nimport { stepToNanos } from './utils';\n\nfunction getLiveStreamKey(): string {\n return uuidv4();\n}\n\nexport function doTempoSearchStreaming(\n query: TempoQuery,\n ds: TempoDatasource,\n options: DataQueryRequest<TempoQuery>,\n instanceSettings: DataSourceInstanceSettings<TempoJsonData>\n): Observable<DataQueryResponse> {\n const range = options.range;\n\n let frames: DataFrame[] | undefined = undefined;\n let state: LoadingState = LoadingState.NotStarted;\n const requestTime = performance.now();\n\n return getGrafanaLiveSrv()\n .getStream<MutableDataFrame>({\n scope: LiveChannelScope.DataSource,\n namespace: ds.uid,\n path: `search/${getLiveStreamKey()}`,\n data: {\n ...query,\n SpansPerSpanSet: query.spss ?? DEFAULT_SPSS,\n timeRange: {\n from: range.from.toISOString(),\n to: range.to.toISOString(),\n },\n },\n })\n .pipe(\n takeWhile((evt) => {\n if ('message' in evt && evt?.message) {\n const frameState: SearchStreamingState = evt.message.data.values[2][0];\n if (frameState === SearchStreamingState.Done || frameState === SearchStreamingState.Error) {\n return false;\n }\n }\n return true;\n }, true)\n )\n .pipe(\n map((evt) => {\n if ('message' in evt && evt?.message) {\n const currentTime = performance.now();\n const elapsedTime = currentTime - requestTime;\n\n const messageFrame = dataFrameFromJSON(evt.message);\n const fieldCache = new FieldCache(messageFrame);\n\n const traces = fieldCache.getFieldByName('result')?.values[0];\n const metrics = fieldCache.getFieldByName('metrics')?.values[0];\n const frameState = fieldCache.getFieldByName('state')?.values[0];\n const error = fieldCache.getFieldByName('error')?.values[0];\n\n switch (frameState) {\n case SearchStreamingState.Done:\n state = LoadingState.Done;\n break;\n case SearchStreamingState.Streaming:\n state = LoadingState.Streaming;\n break;\n case SearchStreamingState.Error:\n throw new Error(error);\n }\n\n // The order of the frames is important. The metrics frame should always be the last frame.\n // This is because the metrics frame is used to display the progress of the streaming query\n // and we would like to display the results first.\n frames = [\n ...formatTraceQLResponse(traces, instanceSettings, query.tableType),\n metricsDataFrame(metrics, frameState, elapsedTime),\n ];\n }\n return {\n data: frames || [],\n state,\n };\n })\n );\n}\n\nexport function doTempoMetricsStreaming(\n query: TempoQuery,\n ds: TempoDatasource,\n options: DataQueryRequest<TempoQuery>\n): Observable<DataQueryResponse> {\n const range = options.range;\n const key = getLiveStreamKey();\n\n let state: LoadingState = LoadingState.NotStarted;\n const step = stepToNanos(query.step);\n\n return getGrafanaLiveSrv()\n .getStream<MutableDataFrame>({\n scope: LiveChannelScope.DataSource,\n namespace: ds.uid,\n path: `metrics/${key}`,\n data: {\n ...query,\n step,\n timeRange: {\n from: range.from.toISOString(),\n to: range.to.toISOString(),\n },\n },\n })\n .pipe(\n takeWhile((evt) => {\n if ('message' in evt && evt?.message) {\n const frameState: SearchStreamingState = evt.message.data.values[2][0];\n if (frameState === SearchStreamingState.Done || frameState === SearchStreamingState.Error) {\n return false;\n }\n }\n return true;\n }, true),\n map((evt) => {\n let newResult: DataQueryResponse = { data: [], state: LoadingState.NotStarted };\n if ('message' in evt && evt?.message) {\n const messageFrame = dataFrameFromJSON(evt.message);\n const fieldCache = new FieldCache(messageFrame);\n\n const data = fieldCache.getFieldByName('result')?.values[0];\n const frameState = fieldCache.getFieldByName('state')?.values[0];\n const error = fieldCache.getFieldByName('error')?.values[0];\n\n switch (frameState) {\n case SearchStreamingState.Done:\n state = LoadingState.Done;\n break;\n case SearchStreamingState.Streaming:\n state = LoadingState.Streaming;\n break;\n case SearchStreamingState.Error:\n throw new Error(error);\n }\n\n newResult = {\n data: data?.map(dataFrameFromJSON) ?? [],\n state,\n };\n }\n\n return newResult;\n }),\n // Merge results on acc\n scan((acc, curr) => {\n if (!curr) {\n return acc;\n }\n // If the query is an instant query, we always want the latest result.\n if (!acc || query.metricsQueryType === MetricsQueryType.Instant) {\n return cloneQueryResponse(curr);\n }\n return mergeFrames(acc, curr);\n })\n );\n}\n\nfunction mergeFrames(acc: DataQueryResponse, newResult: DataQueryResponse): DataQueryResponse {\n const result = combineResponses(cloneQueryResponse(acc), newResult);\n\n result.data = result.data.map((frame: DataFrame) => {\n let newFrame = frame;\n const timeFieldIndex = frame.fields.findIndex((f) => f.type === FieldType.time);\n if (timeFieldIndex >= 0) {\n removeDuplicateTimeFieldValues(frame, timeFieldIndex);\n newFrame = sortDataFrame(frame, timeFieldIndex);\n }\n return newFrame;\n });\n\n result.state = newResult.state;\n return result;\n}\n\n/**\n * Remove duplicate time field values from the DataFrame. This is necessary because Tempo sends partial results to Grafana\n * that we append to an existing DataFrame. This can result in duplicate values for the same timestamp so this function removes\n * older values and keeps the latest value.\n * @param accFrame\n * @param timeFieldIndex\n */\nfunction removeDuplicateTimeFieldValues(accFrame: DataFrame, timeFieldIndex: number) {\n const duplicatesMap = accFrame.fields[timeFieldIndex].values.reduce((acc: Record<number, number[]>, value, index) => {\n if (acc[value]) {\n acc[value].push(index);\n } else {\n acc[value] = [index];\n }\n return acc;\n }, {});\n\n const indexesToRemove = Object.values(duplicatesMap)\n .filter((indexes) => indexes.length > 1)\n .map((indexes) => indexes.slice(1))\n .flat();\n accFrame.fields.forEach((field) => {\n field.values = field.values.filter((_, index) => !indexesToRemove.includes(index));\n });\n\n // This updates the length of the dataframe having already removed duplicate values.\n // This is necessary because Tempo sends partial results to Grafana and\n // this can result in duplicate values for the same timestamp so this removes\n // older values and keeps the latest value, and ensures the length of the dataframe is updated,\n // which would otherwise cause issues with rendering the exemplar data.\n if (accFrame.name === 'exemplar' && accFrame.meta?.dataTopic === 'annotations' && indexesToRemove.length > 0) {\n accFrame.length = accFrame.fields[timeFieldIndex].values.length;\n }\n}\n\nfunction metricsDataFrame(metrics: SearchMetrics, state: SearchStreamingState, elapsedTime: number) {\n const progressThresholds: ThresholdsConfig = {\n steps: [\n {\n color: 'blue',\n value: -Infinity,\n },\n {\n color: 'green',\n value: 75,\n },\n ],\n mode: ThresholdsMode.Absolute,\n };\n\n const frame: DataFrame = {\n refId: 'streaming-progress',\n name: 'Streaming Progress',\n length: 1,\n fields: [\n {\n name: 'state',\n type: FieldType.string,\n values: [capitalize(state.toString())],\n config: {\n displayNameFromDS: 'State',\n },\n },\n {\n name: 'elapsedTime',\n type: FieldType.number,\n values: [elapsedTime],\n config: {\n unit: 'ms',\n displayNameFromDS: 'Elapsed Time',\n },\n },\n {\n name: 'totalBlocks',\n type: FieldType.number,\n values: [metrics.totalBlocks],\n config: {\n displayNameFromDS: 'Total Blocks',\n },\n },\n {\n name: 'completedJobs',\n type: FieldType.number,\n values: [metrics.completedJobs],\n config: {\n displayNameFromDS: 'Completed Jobs',\n },\n },\n {\n name: 'totalJobs',\n type: FieldType.number,\n values: [metrics.totalJobs],\n config: {\n displayNameFromDS: 'Total Jobs',\n },\n },\n {\n name: 'progress',\n type: FieldType.number,\n values: [\n state === SearchStreamingState.Done ? 100 : ((metrics.completedJobs || 0) / (metrics.totalJobs || 1)) * 100,\n ],\n config: {\n displayNameFromDS: 'Progress',\n unit: 'percent',\n min: 0,\n max: 100,\n custom: {\n cellOptions: {\n type: 'gauge',\n mode: 'gradient',\n },\n },\n thresholds: progressThresholds,\n },\n },\n ],\n meta: {\n preferredVisualisationType: 'table',\n },\n };\n return frame;\n}\n","import { from, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { DataQueryRequest, CustomVariableSupport, MetricFindValue } from '@grafana/data';\n\nimport { TempoVariableQuery, TempoVariableQueryEditor } from './VariableQueryEditor';\nimport { TempoDatasource } from './datasource';\n\nexport class TempoVariableSupport extends CustomVariableSupport<TempoDatasource, TempoVariableQuery> {\n editor = TempoVariableQueryEditor;\n\n constructor(private datasource: TempoDatasource) {\n super();\n }\n\n query(request: DataQueryRequest<TempoVariableQuery>): Observable<{ data: MetricFindValue[] }> {\n if (!this.datasource) {\n throw new Error('Datasource not initialized');\n }\n\n const result = this.datasource.executeVariableQuery(request.targets[0], request.range);\n return from(result).pipe(map((data) => ({ data })));\n }\n}\n","import { groupBy } from 'lodash';\nimport { EMPTY, from, merge, Observable, of } from 'rxjs';\nimport { catchError, concatMap, finalize, map, mergeMap, toArray } from 'rxjs/operators';\n\nimport {\n CoreApp,\n DataFrame,\n DataFrameDTO,\n DataFrameJSON,\n DataLink,\n DataQueryRequest,\n DataQueryResponse,\n DataQueryResponseData,\n DataSourceGetTagKeysOptions,\n DataSourceGetTagValuesOptions,\n DataSourceInstanceSettings,\n dateTime,\n FieldType,\n LoadingState,\n NodeGraphDataFrameFieldNames,\n rangeUtil,\n ScopedVars,\n SelectableValue,\n TestDataSourceResponse,\n TimeRange,\n urlUtil,\n} from '@grafana/data';\nimport { NodeGraphOptions, SpanBarOptions, TraceToLogsOptions } from '@grafana/o11y-ds-frontend';\nimport {\n BackendSrvRequest,\n config,\n DataSourceWithBackend,\n getBackendSrv,\n getDataSourceSrv,\n getTemplateSrv,\n reportInteraction,\n TemplateSrv,\n} from '@grafana/runtime';\nimport { BarGaugeDisplayMode, TableCellDisplayMode, VariableFormatID } from '@grafana/schema';\n\nimport { interpolateFilters } from './SearchTraceQLEditor/utils';\nimport { TempoVariableQuery, TempoVariableQueryType } from './VariableQueryEditor';\nimport { PrometheusDatasource, PromQuery } from './_importedDependencies/datasources/prometheus/types';\nimport { TagLimitOptions } from './configuration/TagLimitSettings';\nimport { SearchTableType, TraceqlFilter, TraceqlSearchScope } from './dataquery.gen';\nimport {\n defaultTableFilter,\n durationMetric,\n errorRateMetric,\n failedMetric,\n histogramMetric,\n nativeHistogramMetric,\n mapPromMetricsToServiceMap,\n rateMetric,\n serviceMapMetrics,\n totalsMetric,\n nativeHistogramDurationMetric,\n} from './graphTransform';\nimport TempoLanguageProvider from './language_provider';\nimport {\n enhanceTraceQlMetricsResponse,\n formatTraceQLResponse,\n transformFromOTLP as transformFromOTEL,\n transformTrace,\n} from './resultTransformer';\nimport { doTempoMetricsStreaming, doTempoSearchStreaming } from './streaming';\nimport { TempoJsonData, TempoQuery } from './types';\nimport { getErrorMessage, mapErrorMessage, migrateFromSearchToTraceQLSearch } from './utils';\nimport { TempoVariableSupport } from './variables';\n\nexport const DEFAULT_LIMIT = 20;\nexport const DEFAULT_SPSS = 3; // spans per span set\n\nexport enum FeatureName {\n searchStreaming = 'searchStreaming',\n metricsStreaming = 'metricsStreaming',\n}\n\n/* Map, for each feature (e.g., streaming), the minimum Tempo version required to have that\n ** feature available. If the running Tempo instance on the user's backend is older than the\n ** target version, the feature is disabled in Grafana (frontend).\n */\nexport const featuresToTempoVersion = {\n [FeatureName.searchStreaming]: '2.2.0',\n [FeatureName.metricsStreaming]: '2.7.0',\n};\n\ninterface ServiceMapQueryResponse {\n nodes: DataFrame;\n edges: DataFrame;\n}\n\ninterface ServiceMapQueryResponseWithRates {\n rates: Array<DataFrame | DataFrameDTO>;\n nodes: DataFrame;\n edges: DataFrame;\n}\n\ninterface TempoQueryMetrics {\n success: boolean;\n streaming?: boolean;\n latencyMs: number;\n query?: string;\n error?: string;\n statusCode?: number;\n statusText?: string;\n}\n\nexport class TempoDatasource extends DataSourceWithBackend<TempoQuery, TempoJsonData> {\n tracesToLogs?: TraceToLogsOptions;\n serviceMap?: {\n datasourceUid?: string;\n };\n search?: {\n hide?: boolean;\n filters?: TraceqlFilter[];\n };\n nodeGraph?: NodeGraphOptions;\n traceQuery?: {\n timeShiftEnabled?: boolean;\n spanStartTimeShift?: string;\n spanEndTimeShift?: string;\n };\n uploadedJson?: string | null = null;\n spanBar?: SpanBarOptions;\n tagLimit?: TagLimitOptions;\n languageProvider: TempoLanguageProvider;\n\n streamingEnabled?: {\n search?: boolean;\n metrics?: boolean;\n };\n\n timeRangeForTags?: number;\n\n constructor(\n public instanceSettings: DataSourceInstanceSettings<TempoJsonData>,\n private readonly templateSrv: TemplateSrv = getTemplateSrv()\n ) {\n super(instanceSettings);\n\n this.tracesToLogs = instanceSettings.jsonData.tracesToLogs;\n this.serviceMap = instanceSettings.jsonData.serviceMap;\n this.search = instanceSettings.jsonData.search;\n this.nodeGraph = instanceSettings.jsonData.nodeGraph;\n this.traceQuery = instanceSettings.jsonData.traceQuery;\n this.streamingEnabled = instanceSettings.jsonData.streamingEnabled;\n this.timeRangeForTags = instanceSettings.jsonData.timeRangeForTags;\n this.languageProvider = new TempoLanguageProvider(this);\n\n if (!this.search?.filters) {\n this.search = {\n ...this.search,\n filters: [\n {\n id: 'service-name',\n tag: 'service.name',\n operator: '=',\n scope: TraceqlSearchScope.Resource,\n },\n { id: 'span-name', tag: 'name', operator: '=', scope: TraceqlSearchScope.Span },\n ],\n };\n }\n\n this.variables = new TempoVariableSupport(this);\n }\n\n async executeVariableQuery(query: TempoVariableQuery, range?: TimeRange) {\n // Avoid failing if the user did not select the query type (label names, label values, etc.)\n if (query.type === undefined) {\n return new Promise<Array<{ text: string }>>(() => []);\n }\n\n switch (query.type) {\n case TempoVariableQueryType.LabelNames: {\n return await this.labelNamesQuery(range);\n }\n case TempoVariableQueryType.LabelValues: {\n return this.labelValuesQuery(query.label, range);\n }\n default: {\n throw Error('Invalid query type: ' + query.type);\n }\n }\n }\n\n async labelNamesQuery(range?: TimeRange): Promise<Array<{ text: string }>> {\n await this.languageProvider.start(range, this.timeRangeForTags);\n const tags = this.languageProvider.getAutocompleteTags();\n return tags.filter((tag) => tag !== undefined).map((tag) => ({ text: tag }));\n }\n\n async labelValuesQuery(labelName?: string, range?: TimeRange): Promise<Array<{ text: string }>> {\n if (!labelName) {\n return [];\n }\n\n await this.languageProvider.start(range, this.timeRangeForTags);\n\n // Retrieve the scope of the tag\n // Example: given `http.status_code`, we want scope `span`\n // Note that we ignore possible name clashes, e.g., `http.status_code` in both `span` and `resource`\n const scope: string | undefined = (this.languageProvider.tagsV2 || [])\n // flatten the Scope objects\n .flatMap((tagV2) => tagV2.tags.map((tag) => ({ scope: tagV2.name, name: tag })))\n // find associated scope\n .find((tag) => tag.name === labelName)?.scope;\n if (!scope) {\n throw Error(`Scope for tag ${labelName} not found`);\n }\n\n // For V2, we need to send scope and tag name, e.g. `span.http.status_code`,\n // unless the tag has intrinsic scope\n const scopeAndTag = scope === 'intrinsic' ? labelName : `${scope}.${labelName}`;\n const options = await this.languageProvider.getOptionsV2({\n tag: scopeAndTag,\n timeRangeForTags: this.timeRangeForTags,\n range,\n });\n\n return options.flatMap((option: SelectableValue<string>) =>\n option.value !== undefined ? [{ text: option.value }] : []\n );\n }\n\n // Allows to retrieve the list of tags for ad-hoc filters\n async getTagKeys(options: DataSourceGetTagKeysOptions<TempoQuery>): Promise<Array<{ text: string }>> {\n await this.languageProvider.fetchTags(this.timeRangeForTags, options?.timeRange ?? undefined);\n const tags = this.languageProvider.tagsV2 || [];\n return tags\n .map(({ name, tags }) =>\n tags.filter((tag) => tag !== undefined).map((t) => (name !== 'intrinsic' ? `${name}.${t}` : `${t}`))\n )\n .flat()\n .map((tag) => ({ text: tag }));\n }\n\n // Allows to retrieve the list of tag values for ad-hoc filters\n getTagValues(options: DataSourceGetTagValuesOptions<TempoQuery>): Promise<Array<{ text: string }>> {\n const query = this.languageProvider.generateQueryFromFilters({ adhocFilters: options.filters });\n return this.tagValuesQuery(options.key, query, options?.timeRange ?? undefined);\n }\n\n async tagValuesQuery(tag: string, query: string, range?: TimeRange): Promise<Array<{ text: string }>> {\n // For V2, we need to send scope and tag name, e.g. `span.http.status_code`,\n // unless the tag has intrinsic scope\n const options = await this.languageProvider.getOptionsV2({\n tag,\n query,\n timeRangeForTags: this.timeRangeForTags,\n range,\n });\n\n return options.flatMap((option: SelectableValue<string>) =>\n option.value !== undefined ? [{ text: option.value }] : []\n );\n }\n\n // TODO: Implement this function in Prometheus datasource https://github.com/grafana/grafana/issues/109706\n async getNativeHistograms(timeRange?: TimeRange): Promise<boolean> {\n if (!this.serviceMap?.datasourceUid) {\n return false;\n }\n\n // remove _bucket from the metric name to get the native histogram metric name\n const metricName = histogramMetric.replace('_bucket', '');\n\n try {\n // Get the Prometheus datasource instance\n const promDs = await getDataSourceSrv().get(this.serviceMap.datasourceUid);\n // Use provided time range or default to last hour\n const from = timeRange?.from || dateTime().subtract(1, 'hour');\n const to = timeRange?.to || dateTime();\n\n // Convert to Unix timestamps (seconds since epoch)\n const start = Math.floor(from.valueOf() / 1000);\n const end = Math.floor(to.valueOf() / 1000);\n\n // Use the series endpoint to check if native histogram metrics exist\n // this has a 90% chance of returning correctly due to sparse data\n if (!('metadataRequest' in promDs) || typeof promDs.metadataRequest !== 'function') {\n return false;\n }\n\n const seriesResult = await promDs.metadataRequest('/api/v1/series', {\n 'match[]': metricName,\n limit: 1,\n start: start,\n end: end,\n });\n\n // Check if any native histogram series exist\n const seriesData = seriesResult?.data?.data;\n if (seriesData && Array.isArray(seriesData)) {\n // If the series array has any entries, native histograms exist\n return seriesData.length > 0;\n }\n\n return false;\n } catch (error) {\n console.warn('Failed to check for native histograms:', error);\n return false;\n }\n }\n\n /**\n * Check if streaming for search queries is enabled (and available).\n *\n * We need to check:\n * - the Tempo data source plugin toggle, to disable streaming if the user disabled it in the data source configuration\n * - if Grafana Live is enabled\n *\n * @return true if streaming for search queries is enabled, false otherwise\n */\n isStreamingSearchEnabled() {\n return this.streamingEnabled?.search && config.liveEnabled;\n }\n /**\n * Check if streaming for metrics queries is enabled (and available).\n *\n * We need to check:\n * - the Tempo data source plugin toggle, to disable streaming if the user disabled it in the data source configuration\n * - if Grafana Live is enabled\n *\n * @return true if streaming for metrics queries is enabled, false otherwise\n */\n isStreamingMetricsEnabled() {\n return this.streamingEnabled?.metrics && config.liveEnabled;\n }\n\n isTraceQlMetricsQuery(query: string): boolean {\n // Check whether this is a metrics query by checking if it contains a metrics function\n const metricsFnRegex =\n /\\|\\s*(rate|count_over_time|avg_over_time|max_over_time|min_over_time|sum_over_time|quantile_over_time|histogram_over_time|compare)\\s*\\(/;\n return !!query.trim().match(metricsFnRegex);\n }\n\n isTraceIdQuery(query: string): boolean {\n const hexOnlyRegex = /^[0-9A-Fa-f]*$/;\n // Check whether this is a trace ID or traceQL query by checking if it only contains hex characters\n return !!query.trim().match(hexOnlyRegex);\n }\n\n query(options: DataQueryRequest<TempoQuery>): Observable<DataQueryResponse> {\n const subQueries: Array<Observable<DataQueryResponse>> = [];\n const filteredTargets = options.targets.filter((target) => !target.hide);\n const targets: { [type: string]: TempoQuery[] } = groupBy(filteredTargets, (t) => t.queryType || 'traceql');\n\n if (targets.clear) {\n return of({ data: [], state: LoadingState.Done });\n }\n\n // Migrate user to new query type if they are using the old search query type\n if (targets.nativeSearch?.length) {\n if (\n targets.nativeSearch[0].spanName ||\n targets.nativeSearch[0].serviceName ||\n targets.nativeSearch[0].search ||\n targets.nativeSearch[0].maxDuration ||\n targets.nativeSearch[0].minDuration ||\n targets.nativeSearch[0].queryType === 'nativeSearch'\n ) {\n const migratedQuery = migrateFromSearchToTraceQLSearch(targets.nativeSearch[0]);\n if (targets.traceqlSearch?.length) {\n targets.traceqlSearch.push(migratedQuery);\n } else {\n targets.traceqlSearch = [migratedQuery];\n }\n }\n }\n\n // TraceQL\n if (targets.traceql?.length) {\n try {\n const appliedQuery = this.applyVariables(targets.traceql[0], options.scopedVars);\n const queryValue = appliedQuery?.query || '';\n // Check whether this is a trace ID or traceQL query by checking if it only contains hex characters\n if (this.isTraceIdQuery(queryValue)) {\n // There's only hex characters so let's assume that this is a trace ID\n reportInteraction('grafana_traces_traceID_queried', {\n datasourceType: 'tempo',\n app: options.app ?? '',\n grafana_version: config.buildInfo.version,\n hasQuery: queryValue !== '' ? true : false,\n });\n subQueries.push(this.handleTraceIdQuery(options, targets.traceql, queryValue));\n } else {\n if (this.isTraceQlMetricsQuery(queryValue)) {\n const useStreaming =\n this.isStreamingMetricsEnabled() &&\n options.app !== CoreApp.CloudAlerting &&\n options.app !== CoreApp.UnifiedAlerting;\n\n reportInteraction('grafana_traces_traceql_metrics_queried', {\n datasourceType: 'tempo',\n app: options.app ?? '',\n grafana_version: config.buildInfo.version,\n query: queryValue ?? '',\n streaming: useStreaming,\n });\n if (useStreaming) {\n subQueries.push(this.handleMetricsStreamingQuery(options, targets.traceql, queryValue));\n } else {\n subQueries.push(this.handleTraceQlMetricsQuery(options, targets.traceql, queryValue));\n }\n } else {\n reportInteraction('grafana_traces_traceql_queried', {\n datasourceType: 'tempo',\n app: options.app ?? '',\n grafana_version: config.buildInfo.version,\n query: queryValue ?? '',\n streaming: this.isStreamingSearchEnabled(),\n });\n\n if (this.isStreamingSearchEnabled()) {\n return this.handleStreamingQuery(options, targets.traceql, queryValue);\n }\n\n if (config.featureToggles.tempoSearchBackendMigration) {\n subQueries.push(this.handleTraceQlQuery(options, targets));\n } else {\n subQueries.push(this.oldSearchQueryLogic(options, targets, queryValue));\n }\n }\n }\n } catch (error) {\n return of({ error: { message: error instanceof Error ? error.message : 'Unknown error occurred' }, data: [] });\n }\n }\n\n // Search\n if (targets.traceqlSearch?.length) {\n if (targets.traceqlSearch[0].groupBy) {\n return of({\n error: {\n message:\n 'The aggregate by query is deprecated. Please remove the current query and create a new one. Alternatively, you can use Traces Drilldown.',\n },\n data: [],\n });\n }\n\n try {\n const traceqlSearchTargets = targets.traceqlSearch;\n if (traceqlSearchTargets.length > 0) {\n const appliedQuery = this.applyVariables(traceqlSearchTargets[0], options.scopedVars);\n const queryFromFilters = this.languageProvider.generateQueryFromFilters({\n traceqlFilters: appliedQuery.filters,\n adhocFilters: options.filters,\n });\n\n reportInteraction('grafana_traces_traceql_search_queried', {\n datasourceType: 'tempo',\n app: options.app ?? '',\n grafana_version: config.buildInfo.version,\n query: queryFromFilters ?? '',\n streaming: this.isStreamingSearchEnabled(),\n });\n\n if (this.isStreamingSearchEnabled()) {\n subQueries.push(this.handleStreamingQuery(options, traceqlSearchTargets, queryFromFilters));\n } else {\n if (config.featureToggles.tempoSearchBackendMigration) {\n subQueries.push(this.handleTraceQlQuery(options, targets));\n } else {\n subQueries.push(this.oldSearchQueryLogic(options, targets, queryFromFilters));\n }\n }\n }\n } catch (error) {\n return of({ error: { message: error instanceof Error ? error.message : 'Unknown error occurred' }, data: [] });\n }\n }\n\n // Upload\n if (targets.upload?.length) {\n if (this.uploadedJson) {\n reportInteraction('grafana_traces_json_file_uploaded', {\n datasourceType: 'tempo',\n app: options.app ?? '',\n grafana_version: config.buildInfo.version,\n });\n\n const jsonData = JSON.parse(this.uploadedJson);\n const isTraceData = jsonData.batches;\n const isServiceGraphData =\n Array.isArray(jsonData) && jsonData.some((df) => df?.meta?.preferredVisualisationType === 'nodeGraph');\n\n if (isTraceData) {\n subQueries.push(of(transformFromOTEL(jsonData.batches, this.nodeGraph?.enabled)));\n } else if (isServiceGraphData) {\n subQueries.push(of({ data: jsonData, state: LoadingState.Done }));\n } else {\n subQueries.push(of({ error: { message: 'Unable to parse uploaded data.' }, data: [] }));\n }\n } else {\n subQueries.push(of({ data: [], state: LoadingState.Done }));\n }\n }\n\n // Service Map\n if (this.serviceMap?.datasourceUid && targets.serviceMap?.length > 0) {\n reportInteraction('grafana_traces_service_graph_queried', {\n datasourceType: 'tempo',\n app: options.app ?? '',\n grafana_version: config.buildInfo.version,\n hasServiceMapQuery: targets.serviceMap[0].serviceMapQuery ? true : false,\n });\n\n const { datasourceUid } = this.serviceMap;\n\n // if the query contains the serviceMapUseNativeHistograms flag,\n // then use the native histograms\n const useNativeHistogram = options.targets[0].serviceMapUseNativeHistograms;\n\n const tempoDsUid = this.uid;\n subQueries.push(\n serviceMapQuery(options, datasourceUid, tempoDsUid, useNativeHistogram).pipe(\n concatMap((result) =>\n rateQuery(options, result, datasourceUid).pipe(\n concatMap((result) =>\n errorAndDurationQuery(options, result, datasourceUid, tempoDsUid, useNativeHistogram)\n )\n )\n )\n )\n );\n }\n\n return merge(...subQueries).pipe(\n map((response) => {\n if (response.errors?.[0]?.message) {\n response.errors[0].message = mapErrorMessage(response.errors?.[0]?.message);\n }\n return response;\n })\n );\n }\n\n applyTemplateVariables(query: TempoQuery, scopedVars: ScopedVars) {\n return this.applyVariables(query, scopedVars);\n }\n\n interpolateVariablesInQueries(queries: TempoQuery[], scopedVars: ScopedVars): TempoQuery[] {\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: TempoQuery, scopedVars: ScopedVars) {\n const expandedQuery = { ...query };\n\n if (query.filters) {\n expandedQuery.filters = interpolateFilters(query.filters, scopedVars);\n }\n\n return {\n ...expandedQuery,\n query: this.templateSrv.replace(query.query ?? '', scopedVars, VariableFormatID.Pipe),\n serviceMapQuery: Array.isArray(query.serviceMapQuery)\n ? query.serviceMapQuery.map((query) => this.templateSrv.replace(query, scopedVars))\n : this.templateSrv.replace(query.serviceMapQuery ?? '', scopedVars),\n };\n }\n\n /**\n * Handles the simplest of the queries where we have just a trace id and return trace data for it.\n * @param options\n * @param targets\n * @private\n */\n handleTraceIdQuery(\n options: DataQueryRequest<TempoQuery>,\n targets: TempoQuery[],\n query: string\n ): Observable<DataQueryResponse> {\n const validTargets = targets\n .filter((t) => t.query)\n .map((t): TempoQuery => ({ ...t, query: t.query?.trim(), queryType: 'traceId' }));\n if (!validTargets.length) {\n return EMPTY;\n }\n\n const startTime = performance.now();\n const request = this.makeTraceIdRequest(options, validTargets);\n return super.query(request).pipe(\n map((response) => {\n if (response.error) {\n reportTempoQueryMetrics('grafana_traces_traceID_response', options, {\n success: false,\n streaming: false,\n latencyMs: Math.round(performance.now() - startTime), // rounded to nearest millisecond\n query: query ?? '',\n error: getErrorMessage(response.error.message),\n statusCode: response.error.status,\n statusText: response.error.statusText,\n });\n return response;\n }\n reportTempoQueryMetrics('grafana_traces_traceID_response', options, {\n success: true,\n streaming: false,\n latencyMs: Math.round(performance.now() - startTime), // rounded to nearest millisecond\n query: query ?? '',\n });\n return transformTrace(response, this.instanceSettings, this.nodeGraph?.enabled);\n }),\n catchError((error) => {\n reportTempoQueryMetrics('grafana_traces_traceID_response', options, {\n success: false,\n streaming: false,\n latencyMs: Math.round(performance.now() - startTime), // rounded to nearest millisecond\n query: query ?? '',\n error: getErrorMessage(error.message),\n statusCode: error.status,\n statusText: error.statusText,\n });\n throw error;\n })\n );\n }\n\n handleTraceQlQuery = (options: DataQueryRequest<TempoQuery>, targets: { [type: string]: TempoQuery[] }) => {\n const startTime = performance.now();\n const traceqlSearchTargets = targets.traceqlSearch || targets.traceql;\n const appliedQuery = this.applyVariables(traceqlSearchTargets[0], options.scopedVars);\n let queries: TempoQuery[];\n\n if (targets.traceqlSearch) {\n const queryFromFilters = this.languageProvider.generateQueryFromFilters({\n traceqlFilters: appliedQuery.filters,\n adhocFilters: options.filters,\n });\n queries = traceqlSearchTargets.map((t) => ({ ...t, query: queryFromFilters }));\n } else {\n queries = traceqlSearchTargets.map((t) => ({ ...t, query: appliedQuery?.query }));\n }\n\n return super.query({ ...options, targets: queries }).pipe(\n map((response: DataQueryResponse) => {\n if (queries[0].tableType === SearchTableType.Traces && response.data && response.data.length > 0) {\n response.data.forEach((frame) => {\n reportTempoQueryMetrics('grafana_traces_traceql_response', options, {\n success: true,\n streaming: false,\n latencyMs: Math.round(performance.now() - startTime),\n query: queries[0].query ?? '',\n });\n\n // The backend does not support nested data frames directly, so we return\n // what should be nested as a JSON array in a column: e.g. \"[{dataframe}]\".\n // Here, we take the frames from that column, and change the type to \"nestedFrames\"\n // This allows the frontend to render the nested frames as intended.\n const nested = frame.fields[5];\n nested.type = 'nestedFrames';\n nested.typeInfo.frame = 'nestedFrames';\n\n // The returned JSON data frame structure does not fully match what the frontend expects for\n // rendering nested frames. Here, we transform each nested frame array to the correct format:\n //\n // - For each row in the main data frame, there is an array of nested frames (nestedFrameArray).\n // - Each nested frame (nestedFrame) contains a 'schema' (with 'fields' and 'meta') and 'data' (with 'values').\n // - We create a new frame object (newNestedFrame) with the expected 'fields' and 'meta' properties.\n // - For each field, we copy its definition and assign the corresponding values from nestedFrame.data.values.\n // - We also set the 'length' property on the new frame, which is required by the frontend to know how many rows it contains.\n // - Finally, we replace the original nestedFrame in the array with the transformed newNestedFrame.\n // const mestedFrames = nested.values as DataFrameJSON[][];\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const mestedFrames = nested.values as DataFrameJSON[][];\n\n nested.values = mestedFrames.map((nestedFrameArray) => {\n return nestedFrameArray.map((nestedFrame) => {\n const newNestedFrame = { fields: nestedFrame.schema?.fields, meta: nestedFrame.schema?.meta };\n\n newNestedFrame.fields = newNestedFrame.fields?.map((field, fieldIndex: number) => {\n return { ...field, values: nestedFrame.data?.values[fieldIndex] };\n });\n\n const rowCount = Array.isArray(nestedFrame.data?.values?.[0]) ? nestedFrame.data.values?.[0].length : 0;\n\n return { fields: newNestedFrame.fields, meta: nestedFrame.schema?.meta, length: rowCount };\n });\n });\n });\n }\n return response;\n }),\n catchError((err) => {\n reportTempoQueryMetrics('grafana_traces_traceql_response', options, {\n success: false,\n streaming: false,\n latencyMs: Math.round(performance.now() - startTime),\n query: queries[0].query ?? '',\n error: getErrorMessage(err.message),\n statusCode: err.status,\n statusText: err.statusText,\n });\n return of({ error: { message: getErrorMessage(err?.data?.message) }, data: [] });\n })\n );\n };\n\n // this is just a short term function, we will remove once we have rolled\n // out the backend migration and are happy with the stability of the feature\n oldSearchQueryLogic = (\n options: DataQueryRequest<TempoQuery>,\n targets: { [type: string]: TempoQuery[] },\n queryValue: string\n ) => {\n const startTime = performance.now();\n const tableType = targets.traceqlSearch?.[0]?.tableType ?? targets.traceql?.[0]?.tableType;\n\n return this._request('/api/search', {\n q: queryValue,\n limit: options.targets[0].limit ?? DEFAULT_LIMIT,\n spss: options.targets[0].spss ?? DEFAULT_SPSS,\n start: options.range.from.unix(),\n end: options.range.to.unix(),\n }).pipe(\n map((response) => {\n reportTempoQueryMetrics('grafana_traces_traceql_response', options, {\n success: true,\n streaming: false,\n latencyMs: Math.round(performance.now() - startTime), // rounded to nearest millisecond\n query: queryValue ?? '',\n });\n return {\n data: formatTraceQLResponse(response.data.traces, this.instanceSettings, tableType),\n };\n }),\n catchError((err) => {\n reportTempoQueryMetrics('grafana_traces_traceql_response', options, {\n success: false,\n streaming: false,\n latencyMs: Math.round(performance.now() - startTime), // rounded to nearest millisecond\n query: queryValue ?? '',\n error: getErrorMessage(err.message),\n statusCode: err.status,\n statusText: err.statusText,\n });\n return of({ error: { message: getErrorMessage(err?.data?.message) }, data: [] });\n })\n );\n };\n\n handleTraceQlMetricsQuery(\n options: DataQueryRequest<TempoQuery>,\n targets: TempoQuery[],\n query: string\n ): Observable<DataQueryResponse> {\n const validTargets = targets\n .filter((t) => t.query)\n .map(\n (t): TempoQuery => ({ ...t, query: this.applyVariables(t, options.scopedVars).query, queryType: 'traceql' })\n );\n if (!validTargets.length) {\n return EMPTY;\n }\n\n const startTime = performance.now();\n const request = { ...options, targets: validTargets };\n return super.query(request).pipe(\n map((response) => {\n reportTempoQueryMetrics('grafana_traces_traceql_metrics_response', options, {\n success: true,\n streaming: false,\n latencyMs: Math.round(performance.now() - startTime), // rounded to nearest millisecond\n query: query ?? '',\n });\n return enhanceTraceQlMetricsResponse(response, this.instanceSettings);\n }),\n catchError((err) => {\n reportTempoQueryMetrics('grafana_traces_traceql_metrics_response', options, {\n success: false,\n streaming: false,\n latencyMs: Math.round(performance.now() - startTime), // rounded to nearest millisecond\n query: query ?? '',\n error: getErrorMessage(err?.data?.message),\n statusCode: err.status,\n statusText: err.statusText,\n });\n return of({ error: { message: getErrorMessage(err?.data?.message) }, data: [] });\n })\n );\n }\n\n // This function can probably be simplified by avoiding passing both `targets` and `query`,\n // since `query` is built from `targets`, if you look at how this function is currently called\n handleStreamingQuery(\n options: DataQueryRequest<TempoQuery>,\n targets: TempoQuery[],\n query: string\n ): Observable<DataQueryResponse> {\n if (query === '') {\n return EMPTY;\n }\n\n const startTime = performance.now();\n return merge(\n ...targets.map((target) =>\n doTempoSearchStreaming(\n { ...target, query },\n this, // the datasource\n options,\n this.instanceSettings\n )\n )\n ).pipe(\n catchError((error) => {\n reportTempoQueryMetrics('grafana_traces_traceql_response', options, {\n success: false,\n streaming: true,\n latencyMs: Math.round(performance.now() - startTime), // rounded to nearest millisecond\n query: query ?? '',\n error: getErrorMessage(error?.data?.message),\n statusCode: error.status,\n statusText: error.statusText,\n });\n // Re-throw the error to maintain the error chain\n throw error;\n }),\n finalize(() => {\n reportTempoQueryMetrics('grafana_traces_traceql_response', options, {\n success: true,\n streaming: true,\n query: query ?? '',\n latencyMs: Math.round(performance.now() - startTime), // rounded to nearest millisecond\n });\n })\n );\n }\n\n // This function can probably be simplified by avoiding passing both `targets` and `query`,\n // since `query` is built from `targets`, if you look at how this function is currently called\n handleMetricsStreamingQuery(\n options: DataQueryRequest<TempoQuery>,\n targets: TempoQuery[],\n query: string\n ): Observable<DataQueryResponse> {\n if (query === '') {\n return EMPTY;\n }\n\n const startTime = performance.now();\n return merge(\n ...targets.map((target) =>\n doTempoMetricsStreaming(\n { ...target, query },\n this, // the datasource\n options\n )\n )\n ).pipe(\n map((response) => {\n return enhanceTraceQlMetricsResponse(response, this.instanceSettings);\n }),\n catchError((error) => {\n reportTempoQueryMetrics('grafana_traces_traceql_metrics_response', options, {\n success: false,\n streaming: true,\n latencyMs: Math.round(performance.now() - startTime), // rounded to nearest millisecond\n query: query ?? '',\n error: getErrorMessage(error?.data?.message),\n statusCode: error.status,\n statusText: error.statusText,\n });\n // Re-throw the error to maintain the error chain\n throw error;\n }),\n finalize(() => {\n reportTempoQueryMetrics('grafana_traces_traceql_metrics_response', options, {\n success: true,\n streaming: true,\n query: query ?? '',\n latencyMs: Math.round(performance.now() - startTime), // rounded to nearest millisecond\n });\n })\n );\n }\n\n makeTraceIdRequest(options: DataQueryRequest<TempoQuery>, targets: TempoQuery[]): DataQueryRequest<TempoQuery> {\n const request = {\n ...options,\n targets,\n };\n\n if (this.traceQuery?.timeShiftEnabled) {\n request.range = options.range && {\n ...options.range,\n from: dateTime(options.range.from).subtract(\n rangeUtil.intervalToMs(this.traceQuery?.spanStartTimeShift || '30m'),\n 'milliseconds'\n ),\n to: dateTime(options.range.to).add(\n rangeUtil.intervalToMs(this.traceQuery?.spanEndTimeShift || '30m'),\n 'milliseconds'\n ),\n };\n } else {\n request.range = { from: dateTime(0), to: dateTime(0), raw: { from: dateTime(0), to: dateTime(0) } };\n }\n\n return request;\n }\n\n async metadataRequest(url: string, params = {}) {\n // url must not start with a `/`, otherwise the AJAX-request\n // going from the browser will contain `//`, which can cause problems.\n if (url.startsWith('/')) {\n throw new Error(`invalid metadata request url: ${url}`);\n }\n\n const res = await this.getResource(url, params, { method: 'GET', hideFromInspector: true });\n return res?.data ?? res;\n }\n\n _request(apiUrl: string, data?: unknown, options?: Partial<BackendSrvRequest>): Observable<Record<string, any>> {\n const params = data ? urlUtil.serializeParams(data) : '';\n const url = `${this.instanceSettings.url}${apiUrl}${params.length ? `?${params}` : ''}`;\n const req = { ...options, url };\n return getBackendSrv().fetch(req);\n }\n\n async testDatasource(): Promise<TestDataSourceResponse> {\n return await super.testDatasource();\n }\n\n getQueryDisplayText(query: TempoQuery) {\n if (query.queryType === 'traceql' || query.queryType === 'traceId') {\n return query.query ?? '';\n }\n\n const appliedQuery = this.applyVariables(query, {});\n return this.languageProvider.generateQueryFromFilters({ traceqlFilters: appliedQuery.filters });\n }\n}\n\nfunction queryPrometheus(request: DataQueryRequest<PromQuery>, datasourceUid: string) {\n return from(getDataSourceSrv().get(datasourceUid)).pipe(\n mergeMap((ds) => {\n return (ds as PrometheusDatasource).query(request);\n })\n );\n}\n\nfunction serviceMapQuery(\n request: DataQueryRequest<TempoQuery>,\n datasourceUid: string,\n tempoDatasourceUid: string,\n useNativeHistogram?: boolean\n): Observable<ServiceMapQueryResponse> {\n const serviceMapRequest = makePromServiceMapRequest(request, useNativeHistogram);\n\n return queryPrometheus(serviceMapRequest, datasourceUid).pipe(\n // Just collect all the responses first before processing into node graph data\n toArray(),\n map((responses: DataQueryResponse[]) => {\n const errorRes = responses.find((res) => !!res.error);\n if (errorRes) {\n throw new Error(getErrorMessage(errorRes.error?.message));\n }\n\n const { nodes, edges } = mapPromMetricsToServiceMap(responses, request.range);\n if (nodes.fields.length > 0 && edges.fields.length > 0) {\n const nodeLength = nodes.fields[0].values.length;\n const edgeLength = edges.fields[0].values.length;\n\n reportInteraction('grafana_traces_service_graph_size', {\n datasourceType: 'tempo',\n grafana_version: config.buildInfo.version,\n nodeLength,\n edgeLength,\n });\n }\n\n // No handling of multiple targets assume just one. NodeGraph does not support it anyway, but still should be\n // fixed at some point.\n const { serviceMapIncludeNamespace, refId } = request.targets[0];\n nodes.refId = refId;\n edges.refId = refId;\n\n if (serviceMapIncludeNamespace) {\n nodes.fields[0].config = getFieldConfig(\n datasourceUid, // datasourceUid\n tempoDatasourceUid, // tempoDatasourceUid\n '__data.fields.title', // targetField\n '__data.fields[0]', // tempoField\n undefined, // sourceField\n { targetNamespace: '__data.fields.subtitle' },\n useNativeHistogram\n );\n\n edges.fields[0].config = getFieldConfig(\n datasourceUid, // datasourceUid\n tempoDatasourceUid, // tempoDatasourceUid\n '__data.fields.targetName', // targetField\n '__data.fields.target', // tempoField\n '__data.fields.sourceName', // sourceField\n { targetNamespace: '__data.fields.targetNamespace', sourceNamespace: '__data.fields.sourceNamespace' },\n useNativeHistogram\n );\n } else {\n nodes.fields[0].config = getFieldConfig(\n datasourceUid,\n tempoDatasourceUid,\n '__data.fields.id',\n '__data.fields[0]',\n undefined,\n undefined,\n useNativeHistogram\n );\n edges.fields[0].config = getFieldConfig(\n datasourceUid,\n tempoDatasourceUid,\n '__data.fields.target',\n '__data.fields.target',\n '__data.fields.source',\n undefined,\n useNativeHistogram\n );\n }\n\n return {\n nodes,\n edges,\n state: LoadingState.Done,\n };\n })\n );\n}\n\nfunction rateQuery(\n request: DataQueryRequest<TempoQuery>,\n serviceMapResponse: ServiceMapQueryResponse,\n datasourceUid: string,\n useNativeHistogram?: boolean\n): Observable<ServiceMapQueryResponseWithRates> {\n const serviceMapRequest = makePromServiceMapRequest(request, useNativeHistogram);\n serviceMapRequest.targets = makeServiceGraphViewRequest([buildExpr(rateMetric, defaultTableFilter, request)]);\n\n return queryPrometheus(serviceMapRequest, datasourceUid).pipe(\n toArray(),\n map((responses: DataQueryResponse[]) => {\n const errorRes = responses.find((res) => !!res.error);\n if (errorRes) {\n throw new Error(getErrorMessage(errorRes.error?.message));\n }\n return {\n rates: responses[0]?.data ?? [],\n nodes: serviceMapResponse.nodes,\n edges: serviceMapResponse.edges,\n };\n })\n );\n}\n\n// we need the response from the rate query to get the rate span_name(s),\n// -> which determine the errorRate/duration span_name(s) we need to query\nfunction errorAndDurationQuery(\n request: DataQueryRequest<TempoQuery>,\n rateResponse: ServiceMapQueryResponseWithRates,\n datasourceUid: string,\n tempoDatasourceUid: string,\n useNativeHistogram?: boolean\n) {\n let serviceGraphViewMetrics = [];\n let errorRateBySpanName = '';\n let durationsBySpanName: string[] = [];\n\n let labels = [];\n if (rateResponse.rates[0] && request.app === CoreApp.Explore) {\n const spanNameField = rateResponse.rates[0].fields.find((field) => field.name === 'span_name');\n if (spanNameField && spanNameField.values) {\n labels = spanNameField.values;\n }\n } else if (rateResponse.rates) {\n rateResponse.rates.map((df: DataFrame | DataFrameDTO) => {\n const spanNameLabels = df.fields.find((field) => field.labels?.['span_name']);\n if (spanNameLabels) {\n labels.push(spanNameLabels.labels?.['span_name']);\n }\n });\n }\n const spanNames = getEscapedRegexValues(getEscapedValues(labels));\n\n if (spanNames.length > 0) {\n errorRateBySpanName = buildExpr(errorRateMetric, 'span_name=~\"' + spanNames.join('|') + '\"', request);\n serviceGraphViewMetrics.push(errorRateBySpanName);\n spanNames.map((name: string) => {\n const checkedDurationMetric = useNativeHistogram ? nativeHistogramDurationMetric : durationMetric;\n const metric = buildExpr(checkedDurationMetric, 'span_name=~\"' + name + '\"', request);\n durationsBySpanName.push(metric);\n serviceGraphViewMetrics.push(metric);\n });\n }\n\n const serviceMapRequest = makePromServiceMapRequest(request, useNativeHistogram);\n serviceMapRequest.targets = makeServiceGraphViewRequest(serviceGraphViewMetrics);\n\n return queryPrometheus(serviceMapRequest, datasourceUid).pipe(\n // Just collect all the responses first before processing into node graph data\n toArray(),\n map((errorAndDurationResponse: DataQueryResponse[]) => {\n const errorRes = errorAndDurationResponse.find((res) => !!res.error);\n if (errorRes) {\n throw new Error(getErrorMessage(errorRes.error?.message));\n }\n\n const serviceGraphView = getServiceGraphViewDataFrames(\n request,\n rateResponse,\n errorAndDurationResponse[0],\n errorRateBySpanName,\n durationsBySpanName,\n datasourceUid,\n tempoDatasourceUid,\n useNativeHistogram\n );\n\n if (serviceGraphView.fields.length === 0) {\n return {\n data: [rateResponse.nodes, rateResponse.edges],\n state: LoadingState.Done,\n };\n }\n\n return {\n data: [serviceGraphView, rateResponse.nodes, rateResponse.edges],\n state: LoadingState.Done,\n };\n })\n );\n}\n\nfunction makePromLink(title: string, expr: string, datasourceUid: string, instant: boolean) {\n return {\n url: '',\n title,\n internal: {\n query: {\n expr: expr,\n range: !instant,\n exemplar: !instant,\n instant: instant,\n },\n datasourceUid,\n datasourceName: getDataSourceSrv().getInstanceSettings(datasourceUid)?.name ?? '',\n },\n };\n}\n\n// TODO: this is basically the same as prometheus/datasource.ts#prometheusSpecialRegexEscape which is used to escape\n// template variable values. It would be best to move it to some common place.\nexport function getEscapedRegexValues(values: string[]) {\n return values.map((value: string) => value.replace(/[$^*{}\\[\\]\\'+?.()|]/g, '\\\\\\\\$&'));\n}\n\nexport function getEscapedValues(values: string[]) {\n return values.map((value: string) => value.replace(/[\"\\\\]/g, '\\\\$&'));\n}\n\nexport function getFieldConfig(\n datasourceUid: string,\n tempoDatasourceUid: string,\n targetField: string,\n tempoField: string,\n sourceField?: string,\n namespaceFields?: { targetNamespace: string; sourceNamespace?: string },\n useNativeHistogram?: boolean\n) {\n let source = sourceField ? `client=\"\\${${sourceField}}\",` : '';\n let target = `server=\"\\${${targetField}}\"`;\n let serverSumBy = 'server';\n\n if (namespaceFields !== undefined) {\n const { targetNamespace } = namespaceFields;\n target += `,server_service_namespace=\"\\${${targetNamespace}}\"`;\n serverSumBy += ', server_service_namespace';\n\n if (source) {\n const { sourceNamespace } = namespaceFields;\n source += `client_service_namespace=\"\\${${sourceNamespace}}\",`;\n serverSumBy += ', client_service_namespace';\n }\n }\n\n return {\n links: [\n makePromLink(\n 'Request rate',\n `sum by (client, ${serverSumBy})(rate(${totalsMetric}{${source}${target}}[$__rate_interval]))`,\n datasourceUid,\n false\n ),\n ...makeHistogramLink(datasourceUid, source, target, serverSumBy, useNativeHistogram),\n makePromLink(\n 'Failed request rate',\n `sum by (client, ${serverSumBy})(rate(${failedMetric}{${source}${target}}[$__rate_interval]))`,\n datasourceUid,\n false\n ),\n makeTempoLinkServiceMap(\n 'View traces',\n namespaceFields !== undefined ? `\\${${namespaceFields.targetNamespace}}` : '',\n `\\${${targetField}}`,\n tempoDatasourceUid\n ),\n ],\n };\n}\n\nexport function makeHistogramLink(\n datasourceUid: string,\n source: string,\n target: string,\n serverSumBy: string,\n useNativeHistogram?: boolean\n) {\n const createHistogramLink = (metric: string, title: string) =>\n makePromLink(\n title,\n `histogram_quantile(0.9, sum(rate(${metric}{${source}${target}}[$__rate_interval])) by (le, client, ${serverSumBy}))`,\n datasourceUid,\n false\n );\n if (useNativeHistogram) {\n return [createHistogramLink(nativeHistogramMetric, 'Request native histogram')];\n }\n return [createHistogramLink(histogramMetric, 'Request classic histogram')];\n}\n\nexport function makeTempoLink(\n title: string,\n serviceNamespace: string | undefined,\n serviceName: string,\n spanName: string,\n datasourceUid: string\n) {\n let query: TempoQuery = { refId: 'A', queryType: 'traceqlSearch', filters: [] };\n if (serviceNamespace !== undefined && serviceNamespace !== '') {\n query.filters.push({\n id: 'service-namespace',\n scope: TraceqlSearchScope.Resource,\n tag: 'service.namespace',\n value: serviceNamespace,\n operator: '=',\n valueType: 'string',\n });\n }\n if (serviceName !== '') {\n query.filters.push({\n id: 'service-name',\n scope: TraceqlSearchScope.Resource,\n tag: 'service.name',\n value: serviceName,\n operator: '=',\n valueType: 'string',\n });\n }\n if (spanName !== '') {\n query.filters.push({\n id: 'span-name',\n scope: TraceqlSearchScope.Span,\n tag: 'name',\n value: spanName,\n operator: '=',\n valueType: 'string',\n });\n }\n\n return {\n url: '',\n title,\n internal: {\n query,\n datasourceUid,\n datasourceName: getDataSourceSrv().getInstanceSettings(datasourceUid)?.name ?? '',\n },\n };\n}\n\nfunction makeTempoLinkServiceMap(\n title: string,\n serviceNamespaceVar: string | undefined,\n serviceNameVar: string,\n datasourceUid: string\n): DataLink<TempoQuery> {\n return {\n url: '',\n title,\n internal: {\n datasourceUid,\n datasourceName: getDataSourceSrv().getInstanceSettings(datasourceUid)?.name ?? '',\n query: ({ replaceVariables, scopedVars }) => {\n const serviceName = replaceVariables?.(serviceNameVar, scopedVars);\n const serviceNamespace = serviceNamespaceVar ? replaceVariables?.(serviceNamespaceVar, scopedVars) : undefined;\n const isInstrumented =\n replaceVariables?.(`\\${__data.fields.${NodeGraphDataFrameFieldNames.isInstrumented}}`, scopedVars) !==\n 'false';\n const query: TempoQuery = { refId: 'A', queryType: 'traceqlSearch', filters: [] };\n\n // Only do the peer query if service is actively set as not instrumented\n if (isInstrumented === false) {\n const filters = ['db.name', 'db.system', 'peer.service', 'messaging.system', 'net.peer.name']\n .map((peerAttribute) => `span.${peerAttribute}=\"${serviceName}\"`)\n .join(' || ');\n query.queryType = 'traceql';\n query.query = `{${filters}}`;\n } else {\n if (serviceNamespace) {\n query.filters.push({\n id: 'service-namespace',\n scope: TraceqlSearchScope.Resource,\n tag: 'service.namespace',\n value: serviceNamespace,\n operator: '=',\n valueType: 'string',\n });\n }\n if (serviceName) {\n query.filters.push({\n id: 'service-name',\n scope: TraceqlSearchScope.Resource,\n tag: 'service.name',\n value: serviceName,\n operator: '=',\n valueType: 'string',\n });\n }\n }\n\n return query;\n },\n },\n };\n}\n\nexport function makePromServiceMapRequest(\n options: DataQueryRequest<TempoQuery>,\n useNativeHistogram?: boolean\n): DataQueryRequest<PromQuery> {\n return {\n ...options,\n targets: serviceMapMetrics\n .map<PromQuery[]>((metric) => {\n if (useNativeHistogram) {\n metric = metric.replace('_bucket', '');\n }\n const { serviceMapQuery, serviceMapIncludeNamespace: serviceMapIncludeNamespace } = options.targets[0];\n const extraSumByFields = serviceMapIncludeNamespace\n ? ', client_service_namespace, server_service_namespace'\n : '';\n const queries = Array.isArray(serviceMapQuery) ? serviceMapQuery : [serviceMapQuery];\n const sumSubExprs = queries.map(\n (query) => `sum by (client, server${extraSumByFields}) (rate(${metric}${query || ''}[$__range]))`\n );\n const groupSubExprs = queries.map(\n (query) => `group by (client, connection_type, server${extraSumByFields}) (${metric}${query || ''})`\n );\n\n return [\n {\n format: 'table',\n refId: metric,\n // options.targets[0] is not correct here, but not sure what should happen if you have multiple queries for\n // service map at the same time anyway\n expr: sumSubExprs.join(' OR '),\n instant: true,\n },\n {\n format: 'table',\n refId: `${metric}_labels`,\n expr: groupSubExprs.join(' OR '),\n instant: true,\n },\n ];\n })\n .flat(),\n };\n}\n\nfunction getServiceGraphViewDataFrames(\n request: DataQueryRequest<TempoQuery>,\n rateResponse: ServiceMapQueryResponseWithRates,\n secondResponse: DataQueryResponse,\n errorRateBySpanName: string,\n durationsBySpanName: string[],\n datasourceUid: string,\n tempoDatasourceUid: string,\n useNativeHistogram?: boolean\n) {\n let df: any = { fields: [] };\n\n const rate = rateResponse.rates.filter((x) => {\n return x.refId === buildExpr(rateMetric, defaultTableFilter, request);\n });\n const errorRate = secondResponse.data.filter((x) => {\n return x.refId === errorRateBySpanName;\n });\n const duration = secondResponse.data.filter((x) => {\n return durationsBySpanName.includes(x.refId ?? '');\n });\n\n if (rate.length > 0 && rate[0].fields?.length > 2) {\n df.fields.push({\n ...rate[0].fields[1],\n name: 'Name',\n config: {\n filterable: false,\n },\n });\n\n df.fields.push({\n ...rate[0].fields[2],\n name: 'Rate',\n config: {\n links: [\n makePromLink(\n 'Rate',\n buildLinkExpr(buildExpr(rateMetric, 'span_name=\"${__data.fields[0]}\"', request)),\n datasourceUid,\n false\n ),\n ],\n decimals: 2,\n },\n });\n\n df.fields.push({\n ...rate[0].fields[2],\n name: ' ',\n labels: null,\n config: {\n color: {\n mode: 'continuous-BlPu',\n },\n custom: {\n cellOptions: {\n mode: BarGaugeDisplayMode.Lcd,\n type: TableCellDisplayMode.Gauge,\n },\n },\n decimals: 3,\n },\n });\n }\n\n if (errorRate.length > 0 && errorRate[0].fields?.length > 2) {\n const errorRateNames = errorRate[0].fields[1]?.values ?? [];\n const errorRateValues = errorRate[0].fields[2]?.values ?? [];\n let errorRateObj: Record<\n string,\n {\n value: string;\n }\n > = {};\n errorRateNames.map((name: string, index: number) => {\n errorRateObj[name] = { value: errorRateValues[index] };\n });\n\n const values = getRateAlignedValues({ ...rate }, errorRateObj);\n\n df.fields.push({\n ...errorRate[0].fields[2],\n name: 'Error Rate',\n values: values,\n config: {\n links: [\n makePromLink(\n 'Error Rate',\n buildLinkExpr(buildExpr(errorRateMetric, 'span_name=\"${__data.fields[0]}\"', request)),\n datasourceUid,\n false\n ),\n ],\n decimals: 2,\n },\n });\n\n df.fields.push({\n ...errorRate[0].fields[2],\n name: ' ',\n values: values,\n labels: null,\n config: {\n color: {\n mode: 'continuous-RdYlGr',\n },\n custom: {\n cellOptions: {\n mode: BarGaugeDisplayMode.Lcd,\n type: TableCellDisplayMode.Gauge,\n },\n },\n decimals: 3,\n },\n });\n }\n\n if (duration.length > 0) {\n let durationObj: Record<\n string,\n {\n value: string;\n }\n > = {};\n duration.forEach((d) => {\n if (d.fields.length > 1) {\n const delimiter = d.refId?.includes('span_name=~\"') ? 'span_name=~\"' : 'span_name=\"';\n const name = d.refId?.split(delimiter)[1].split('\"}')[0];\n durationObj[name!] = { value: d.fields[1].values[0] };\n }\n });\n if (Object.keys(durationObj).length > 0) {\n const checkedDurationMetric = useNativeHistogram ? nativeHistogramDurationMetric : durationMetric;\n df.fields.push({\n ...duration[0].fields[1],\n name: 'Duration (p90)',\n values: getRateAlignedValues({ ...rate }, durationObj),\n config: {\n links: [\n makePromLink(\n 'Duration',\n buildLinkExpr(buildExpr(checkedDurationMetric, 'span_name=\"${__data.fields[0]}\"', request)),\n datasourceUid,\n false\n ),\n ],\n unit: 's',\n },\n });\n }\n }\n\n if (df.fields.length > 0 && df.fields[0].values) {\n df.fields.push({\n name: 'Links',\n type: FieldType.string,\n values: df.fields[0].values.map(() => {\n return 'Tempo';\n }),\n config: {\n links: [makeTempoLink('Tempo', undefined, '', `\\${__data.fields[0]}`, tempoDatasourceUid)],\n },\n });\n }\n\n return df;\n}\n\n/**\n * Reports metrics for Tempo query interactions.\n *\n * @param options - The data query request options containing app and other context\n * @param metrics - Object containing metrics to report:\n * - success: Whether the query was successful\n * - streaming: (optional) Whether streaming was used\n * - latencyMs: Query execution time in milliseconds\n * - query: (optional) The query string that was executed\n * - error: (optional) Error message if query failed\n * - statusCode: (optional) HTTP status code if query failed\n * - statusText: (optional) HTTP status text if query failed\n * @param interactionName - (optional) Name of the interaction to report.\n * Defaults to 'grafana_traces_traceql_response'\n *\n * @example\n * ```typescript\n * reportTempoQueryMetrics(options, {\n * success: true,\n * streaming: true,\n * latencyMs: Math.round(performance.now() - startTime),\n * query: 'my query'\n * });\n * ```\n */\nfunction reportTempoQueryMetrics(\n interactionName: string,\n options: DataQueryRequest<TempoQuery>,\n metrics: TempoQueryMetrics\n) {\n reportInteraction(interactionName, {\n datasourceType: 'tempo',\n app: options.app ?? '',\n grafana_version: config.buildInfo.version,\n timeRangeSeconds: options.range ? options.range.to.unix() - options.range.from.unix() : 0,\n timeRange: options.range ? options.range.raw.from + ';' + options.range.raw.to : '',\n ...metrics,\n });\n}\n\nexport function buildExpr(\n metric: { expr: string; params: string[]; topk?: number },\n extraParams: string,\n request: DataQueryRequest<TempoQuery>\n): string {\n let serviceMapQuery = request.targets[0]?.serviceMapQuery ?? '';\n const serviceMapQueries = Array.isArray(serviceMapQuery) ? serviceMapQuery : [serviceMapQuery];\n const metricParamsArray = serviceMapQueries.map((query) => {\n // remove surrounding curly braces from serviceMapQuery\n const serviceMapQueryMatch = query.match(/^{(.*)}$/);\n if (serviceMapQueryMatch?.length) {\n query = serviceMapQueryMatch[1];\n }\n // map serviceGraph metric tags to serviceGraphView metric tags\n query = query\n // client_deployment_environment=\"prod\" -> deployment_environment=\"prod\"\n .replaceAll('client_', '')\n .replaceAll('server_', '')\n .replace('client', 'service') // client=\"fooservice\" -> service=\"fooservice\"\n .replace('server', 'service');\n return query.includes('span_name')\n ? metric.params.concat(query)\n : metric.params\n .concat(query)\n .concat(extraParams)\n .filter((item: string) => item);\n });\n const exprs = metricParamsArray.map((params) => metric.expr.replace('{}', '{' + params.join(',') + '}'));\n const expr = exprs.join(' OR ');\n if (metric.topk) {\n return `topk(${metric.topk}, ${expr})`;\n }\n return expr;\n}\n\nexport function buildLinkExpr(expr: string) {\n // don't want top 5 or by span name in links\n expr = expr.replace('topk(5, ', '').replace(' by (span_name))', '');\n return expr.replace('__range', '__rate_interval');\n}\n\n// query result frames can come back in any order\n// here we align the table col values to the same row name (rateName) across the table\nexport function getRateAlignedValues(\n rateResp: DataQueryResponseData[],\n objToAlign: { [x: string]: { value: string } }\n) {\n const rateNames = rateResp[0]?.fields[1]?.values ?? [];\n let values: string[] = [];\n\n for (let i = 0; i < rateNames.length; i++) {\n if (Object.keys(objToAlign).includes(rateNames[i])) {\n values.push(objToAlign[rateNames[i]].value);\n } else {\n values.push('0');\n }\n }\n\n return values;\n}\n\nexport function makeServiceGraphViewRequest(metrics: string[]): PromQuery[] {\n return metrics.map((metric) => {\n return {\n refId: metric,\n expr: metric,\n instant: true,\n };\n });\n}\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { InlineLabel, SegmentInput, ToolbarButton, useStyles2 } from '@grafana/ui';\n\nimport { TraceToLogsTag } from './TraceToLogsSettings';\n\ninterface Props {\n values: TraceToLogsTag[];\n onChange: (values: TraceToLogsTag[]) => void;\n id?: string;\n}\n\nexport const TagMappingInput = ({ values, onChange, id }: Props) => {\n const styles = useStyles2(getStyles);\n\n return (\n <div className={styles.wrapper}>\n {values.length ? (\n values.map((value, idx) => (\n <div className={styles.pair} key={idx}>\n <SegmentInput\n id={`${id}-key-${idx}`}\n placeholder={'Tag name'}\n value={value.key}\n onChange={(e) => {\n onChange(\n values.map((v, i) => {\n if (i === idx) {\n return { ...v, key: String(e) };\n }\n return v;\n })\n );\n }}\n />\n <InlineLabel aria-label=\"equals\" className={styles.operator}>\n as\n </InlineLabel>\n <SegmentInput\n id={`${id}-value-${idx}`}\n placeholder={'New name (optional)'}\n value={value.value || ''}\n onChange={(e) => {\n onChange(\n values.map((v, i) => {\n if (i === idx) {\n return { ...v, value: String(e) };\n }\n return v;\n })\n );\n }}\n />\n <ToolbarButton\n onClick={() => onChange([...values.slice(0, idx), ...values.slice(idx + 1)])}\n className={cx(styles.removeTag, 'query-part')}\n aria-label=\"Remove tag\"\n type=\"button\"\n icon=\"times\"\n />\n\n {idx === values.length - 1 ? (\n <ToolbarButton\n onClick={() => onChange([...values, { key: '', value: '' }])}\n className=\"query-part\"\n aria-label=\"Add tag\"\n type=\"button\"\n icon=\"plus\"\n />\n ) : null}\n </div>\n ))\n ) : (\n <ToolbarButton\n icon=\"plus\"\n onClick={() => onChange([...values, { key: '', value: '' }])}\n className=\"query-part\"\n aria-label=\"Add tag\"\n type=\"button\"\n />\n )}\n </div>\n );\n};\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n wrapper: css({\n display: 'flex',\n flexDirection: 'column',\n gap: `${theme.spacing(0.5)} 0`,\n }),\n pair: css({\n display: 'flex',\n justifyContent: 'start',\n alignItems: 'center',\n }),\n operator: css({\n color: theme.v1.palette.orange,\n width: 'auto',\n }),\n removeTag: css({\n marginRight: theme.spacing(0.5),\n }),\n});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar react_1 = require(\"react\");\nfunction useMountedState() {\n var mountedRef = react_1.useRef(false);\n var get = react_1.useCallback(function () { return mountedRef.current; }, []);\n react_1.useEffect(function () {\n mountedRef.current = true;\n return function () {\n mountedRef.current = false;\n };\n }, []);\n return get;\n}\nexports.default = useMountedState;\n","import { AdHocVariableFilter, LanguageProvider, SelectableValue, TimeRange } from '@grafana/data';\nimport { getTemplateSrv } from '@grafana/runtime';\nimport { VariableFormatID } from '@grafana/schema';\n\nimport {\n filterToQuerySection,\n getAllTags,\n getIntrinsicTags,\n getTagsByScope,\n getUnscopedTags,\n} from './SearchTraceQLEditor/utils';\nimport { DEFAULT_TIME_RANGE_FOR_TAGS } from './configuration/TagsTimeRangeSettings';\nimport { TraceqlFilter, TraceqlSearchScope } from './dataquery.gen';\nimport { TempoDatasource } from './datasource';\nimport { enumIntrinsics, intrinsicsV1 } from './traceql/traceql';\nimport { Scope } from './types';\n\n// Limit maximum tags retrieved from the backend\nexport const TAGS_LIMIT = 5000;\n\n// Limit maximum options in select dropdowns\nexport const OPTIONS_LIMIT = 1000;\n\ninterface GetOptionsV2 {\n tag: string;\n query?: string;\n timeRangeForTags?: number;\n range?: TimeRange;\n}\n\nexport default class TempoLanguageProvider extends LanguageProvider {\n datasource: TempoDatasource;\n tagsV2?: Scope[];\n private previousRange?: TimeRange;\n\n constructor(datasource: TempoDatasource) {\n super();\n\n this.datasource = datasource;\n }\n\n request = async (url: string, params = {}) => {\n return await this.datasource.metadataRequest(url, params);\n };\n\n start = async (range?: TimeRange, timeRangeForTags?: number) => {\n // Check if we need to refetch tags due to range changes (minute-level granularity)\n const shouldRefetch = this.shouldRefreshLabels(range, this.previousRange);\n\n if (!this.startTask || shouldRefetch) {\n // Store the current range for future comparison\n this.previousRange = range;\n\n this.startTask = this.fetchTags(timeRangeForTags, range).then(() => {\n return [];\n });\n }\n\n return this.startTask;\n };\n\n roundMsToMin = (milliseconds: number) => {\n return this.roundSecToMin(milliseconds / 1000);\n };\n\n roundSecToMin = (seconds: number) => {\n return Math.floor(seconds / 60);\n };\n\n shouldRefreshLabels = (range?: TimeRange, prevRange?: TimeRange): boolean => {\n if (range && prevRange) {\n const sameMinuteFrom = this.roundMsToMin(range.from.valueOf()) === this.roundMsToMin(prevRange.from.valueOf());\n const sameMinuteTo = this.roundMsToMin(range.to.valueOf()) === this.roundMsToMin(prevRange.to.valueOf());\n // If both are same, don't need to refresh\n return !(sameMinuteFrom && sameMinuteTo);\n }\n // If one is defined and the other is not, we should refresh\n return prevRange !== range;\n };\n\n getTagsLimit = () => {\n return this.datasource.instanceSettings.jsonData?.tagLimit || TAGS_LIMIT;\n };\n\n async fetchTags(timeRangeForTags?: number, range?: TimeRange) {\n const params: { limit: number; start?: number; end?: number } = {\n limit: this.getTagsLimit(),\n };\n if (timeRangeForTags && range && timeRangeForTags !== DEFAULT_TIME_RANGE_FOR_TAGS) {\n const { start, end } = this.getTimeRangeForTags(timeRangeForTags, range);\n params.start = start;\n params.end = end;\n }\n const v2Resp = await this.request(`tags`, params);\n\n if (v2Resp && v2Resp.scopes) {\n this.setV2Tags(v2Resp.scopes);\n }\n }\n\n setV2Tags = (tags: Scope[]) => {\n this.tagsV2 = tags;\n };\n\n getIntrinsics = () => {\n if (this.tagsV2) {\n return getIntrinsicTags(this.tagsV2);\n }\n return intrinsicsV1;\n };\n\n getTags = (scope?: TraceqlSearchScope) => {\n if (this.tagsV2 && scope) {\n if (scope === TraceqlSearchScope.Unscoped) {\n return getUnscopedTags(this.tagsV2);\n }\n return getTagsByScope(this.tagsV2, scope);\n }\n return [];\n };\n\n getTraceqlAutocompleteTags = (scope?: string) => {\n if (this.tagsV2) {\n if (!scope) {\n // have not typed a scope yet || unscoped (.) typed\n return getUnscopedTags(this.tagsV2);\n } else if (scope === TraceqlSearchScope.Unscoped) {\n return getUnscopedTags(this.tagsV2);\n }\n return getTagsByScope(this.tagsV2, scope);\n }\n return [];\n };\n\n getAutocompleteTags = () => {\n if (this.tagsV2) {\n return getAllTags(this.tagsV2);\n }\n return [];\n };\n\n async getOptionsV2({ tag, query, timeRangeForTags, range }: GetOptionsV2): Promise<Array<SelectableValue<string>>> {\n const encodedTag = this.encodeTag(tag);\n const params: { q?: string; limit: number; start?: number; end?: number; tag?: string } = {\n limit: this.getTagsLimit(),\n };\n\n if (query) {\n params.q = getTemplateSrv().replace(query, {}, VariableFormatID.Pipe);\n }\n\n if (timeRangeForTags && range && timeRangeForTags !== DEFAULT_TIME_RANGE_FOR_TAGS) {\n const { start, end } = this.getTimeRangeForTags(timeRangeForTags, range);\n params.start = start;\n params.end = end;\n }\n\n // Add the encoded tag as a query parameter for the new resource endpoint\n params.tag = encodedTag;\n const response = await this.request(`tag-values`, params);\n\n let options: Array<SelectableValue<string>> = [];\n if (response && response.tagValues) {\n response.tagValues.forEach((v: { type: string; value?: string }) => {\n if (v.value) {\n options.push({\n type: v.type,\n value: v.value,\n label: v.value,\n });\n }\n });\n }\n return options;\n }\n\n getTimeRangeForTags = (timeRangeForTags: number, range: TimeRange) => {\n // Get tags from the last timeRangeForTags seconds, but don't go before the start of the range\n // If timeRangeForTags is 1 hour and your query range is 24 hours, it will fetch tags from the last 1 hour of that 24-hour period\n // If timeRangeForTags is larger than the total range duration, it will use the entire available range\n const start = Math.max(range.from.unix(), range.to.unix() - timeRangeForTags);\n const end = range.to.unix();\n return { start, end };\n };\n\n /**\n * Encode (serialize) a given tag for use in a URL.\n *\n * @param tag the tag to encode\n * @returns the encoded tag\n */\n private encodeTag = (tag: string): string => {\n // If we call `encodeURIComponent` only once, we still get an error when issuing a request to the backend\n // Reference: https://stackoverflow.com/a/37456192\n return encodeURIComponent(encodeURIComponent(tag));\n };\n\n generateQueryFromFilters({\n traceqlFilters,\n adhocFilters,\n }: {\n traceqlFilters?: TraceqlFilter[];\n adhocFilters?: AdHocVariableFilter[];\n }) {\n if (!traceqlFilters && !adhocFilters) {\n return '';\n }\n\n const allFilters = [\n ...this.generateQueryFromTraceQlFilters(traceqlFilters || []),\n ...this.generateQueryFromAdHocFilters(adhocFilters || []),\n ];\n\n return `{${allFilters.join(' && ')}}`;\n }\n\n private generateQueryFromTraceQlFilters(filters: TraceqlFilter[]) {\n if (!filters) {\n return '';\n }\n\n return filters\n .filter((f) => f.tag && f.operator && f.value?.length)\n .map((f) => filterToQuerySection(f, filters, this));\n }\n\n private generateQueryFromAdHocFilters = (filters: AdHocVariableFilter[]) => {\n return filters\n .filter((f) => f.key && f.operator && f.value)\n .map((f) => `${f.key}${f.operator}${this.adHocValueHelper(f)}`);\n };\n\n adHocValueHelper = (f: AdHocVariableFilter) => {\n if (this.getIntrinsics().find((t) => t === f.key) && enumIntrinsics.includes(f.key)) {\n return f.value;\n }\n if (parseInt(f.value, 10).toString() === f.value) {\n return f.value;\n }\n return `\"${f.value}\"`;\n };\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"public/plugins/tempo/\";","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t4231: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = globalThis[\"webpackChunktempo\"] = globalThis[\"webpackChunktempo\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","\n import amdMetaModule from 'amd-module';\n\n __webpack_public_path__ =\n amdMetaModule && amdMetaModule.uri\n ? amdMetaModule.uri.slice(0, amdMetaModule.uri.lastIndexOf('/') + 1)\n : 'public/plugins/tempo/';\n ","import { DashboardLoadedEvent } from '@grafana/data';\nimport { getTemplateSrv, reportInteraction } from '@grafana/runtime';\n\nimport pluginJson from './plugin.json';\nimport { TempoQuery } from './types';\n\ntype TempoOnDashboardLoadedTrackingEvent = {\n grafana_version?: string;\n dashboard_id?: string;\n org_id?: number;\n service_map_query_count: number;\n traceql_query_count: number;\n upload_query_count: number;\n service_map_queries_with_template_variables_count: number;\n traceql_queries_with_template_variables_count: number;\n};\n\nexport const onDashboardLoadedHandler = ({\n payload: { dashboardId, orgId, grafanaVersion, queries },\n}: DashboardLoadedEvent<TempoQuery>) => {\n try {\n const tempoQueries = queries[pluginJson.id];\n\n if (!tempoQueries?.length) {\n return;\n }\n\n let stats: TempoOnDashboardLoadedTrackingEvent = {\n grafana_version: grafanaVersion,\n dashboard_id: dashboardId,\n org_id: orgId,\n service_map_query_count: 0,\n traceql_query_count: 0,\n upload_query_count: 0,\n service_map_queries_with_template_variables_count: 0,\n traceql_queries_with_template_variables_count: 0,\n };\n\n for (const query of tempoQueries) {\n if (query.hide) {\n continue;\n }\n\n if (query.queryType === 'serviceMap') {\n stats.service_map_query_count++;\n if (query.serviceMapQuery && hasTemplateVariables(query.serviceMapQuery)) {\n stats.service_map_queries_with_template_variables_count++;\n }\n } else if (query.queryType === 'traceql') {\n stats.traceql_query_count++;\n if (hasTemplateVariables(query.query)) {\n stats.traceql_queries_with_template_variables_count++;\n }\n } else if (query.queryType === 'upload') {\n stats.upload_query_count++;\n }\n }\n\n reportInteraction('grafana_tempo_dashboard_loaded', stats);\n } catch (error) {\n console.error('error in tempo tracking handler', error);\n }\n};\n\nconst hasTemplateVariables = (val?: string | string[]): boolean => {\n return (Array.isArray(val) ? val : [val]).some((v) => getTemplateSrv().containsTemplate(v));\n};\n","import { lazy, Suspense } from 'react';\n\nimport { DataSourcePlugin, DashboardLoadedEvent, type QueryEditorProps } from '@grafana/data';\nimport { getAppEvents } from '@grafana/runtime';\nimport { LoadingPlaceholder } from '@grafana/ui';\n\nimport type { ConfigEditorProps } from './configuration/ConfigEditor';\nimport { TempoDatasource } from './datasource';\nimport { onDashboardLoadedHandler } from './tracking';\nimport type { TempoQuery } from './types';\n\n// Lazy load the QueryField and ConfigEditor components to reduce the size of the initial bundle\nconst TempoQueryFieldLazy = lazy(() => import('./QueryField'));\nconst ConfigEditorLazy = lazy(() => import('./configuration/ConfigEditor'));\nconst CheatSheetLazy = lazy(() => import('./CheatSheet'));\n\nfunction TempoQueryField(props: QueryEditorProps<TempoDatasource, TempoQuery>) {\n return (\n <Suspense fallback={<LoadingPlaceholder text={'Loading editor'} />}>\n <TempoQueryFieldLazy {...props} />\n </Suspense>\n );\n}\n\nfunction ConfigEditor(props: ConfigEditorProps) {\n return (\n <Suspense fallback={<LoadingPlaceholder text={'Loading editor'} />}>\n <ConfigEditorLazy {...props} />\n </Suspense>\n );\n}\n\nfunction CheatSheet() {\n return (\n <Suspense fallback={null}>\n <CheatSheetLazy />\n </Suspense>\n );\n}\n\nexport const plugin = new DataSourcePlugin(TempoDatasource)\n .setQueryEditor(TempoQueryField)\n .setConfigEditor(ConfigEditor)\n .setQueryEditorHelp(CheatSheet);\n\n// Subscribe to on dashboard loaded event so that we can track plugin adoption\ngetAppEvents().subscribe<DashboardLoadedEvent<TempoQuery>>(DashboardLoadedEvent, onDashboardLoadedHandler);\n"],"names":["inProgress","dataWebpackPrefix","operators","keywordOperators","stringOperators","numberOperators","intrinsicsV1","intrinsics","concat","scopes","enumIntrinsics","functions","withClauseKeywords","keywords","languageDefinition","id","extensions","aliases","mimetypes","def","language","ignoreCase","defaultToken","tokenPostfix","statusValues","withParameters","symbols","escapes","digits","octaldigits","binarydigits","tokenizer","root","token","next","join","cases","withStart","withClause","string_double","string_single","string_back","languageConfiguration","wordPattern","brackets","autoClosingPairs","open","close","surroundingPairs","folding","traceqlGrammar","comment","pattern","inside","filter","alias","punctuation","number","operator","RegExp","QuerySettings","options","onOptionsChange","styles","useStyles2","getStyles","getLabel","type","getTooltip","div","className","container","InlineField","label","tooltip","labelWidth","InlineSwitch","value","jsonData","traceQuery","timeShiftEnabled","onChange","event","updateDatasourcePluginJsonDataOption","currentTarget","checked","IntervalInput","spanStartTimeShift","disabled","val","isInvalidError","invalidTimeShiftError","spanEndTimeShift","theme","infoText","css","paddingBottom","spacing","color","colors","text","secondary","width","row","alignItems","datasource","updateFilter","isTagsLoading","tags","setError","hideScope","hideTag","hideValue","query","addVariablesToOptions","isMulti","allowCustomValue","range","timeRangeForTags","alertText","setAlertText","useState","scopedTag","useMemo","filterScopedTag","languageProvider","tagQuery","setTagQuery","tagValuesQuery","setTagValuesQuery","loading","isLoadingValues","useAsync","result","tag","getOptionsV2","undefined","error","isFetchError","status","Error","message","Array","isArray","find","o","push","toString","valueType","scopeOptions","Object","values","TraceqlSearchScope","s","getTags","length","map","t","optionsOfFirstType","uniqueOptionType","operatorList","allOperators","operatorOptions","operatorSelectableValue","formatTagOptions","filterTag","uniq","tagOptions","slice","OPTIONS_LIMIT","queryLowerCase","toLowerCase","filterdOptions","includes","tagValueOptions","currentOptions","isCustomValue","newCustomOptions","some","opt","Stack","gap","Select","dropdown","inputId","withTemplateVariableOptions","scope","v","placeholder","aria-label","isLoading","onInputChange","action","onCloseMenu","isClearable","virtualized","onCreateOption","allowCreateWhileLoading","TemporaryAlert","severity","getTemplateSrv","getVariables","name","boxShadow","ConfigSection","children","props","kind","module","exports","__WEBPACK_EXTERNAL_MODULE__1269__","__WEBPACK_EXTERNAL_MODULE__1308__","tslib_1","react_1","useAsyncFn_1","__importDefault","fn","deps","_a","default","state","callback","useEffect","__WEBPACK_EXTERNAL_MODULE__2007__","__WEBPACK_EXTERNAL_MODULE__3059__","__WEBPACK_EXTERNAL_MODULE__3241__","MetricsQueryType","SearchStreamingState","SearchTableType","extendStatics","d","b","setPrototypeOf","__proto__","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__assign","assign","i","n","arguments","apply","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","__decorate","decorators","target","key","desc","c","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","__param","paramIndex","decorator","__esDecorate","ctor","descriptorIn","contextIn","initializers","extraInitializers","accept","f","_","descriptor","done","context","access","addInitializer","get","set","init","unshift","__runInitializers","thisArg","useValue","__propKey","x","__setFunctionName","prefix","description","configurable","__metadata","metadataKey","metadataValue","metadata","__awaiter","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","rejected","then","__generator","body","y","sent","trys","ops","g","Iterator","verb","Symbol","iterator","op","pop","__createBinding","m","k","k2","__esModule","writable","enumerable","__exportStar","__values","__read","ar","__spread","__spreadArrays","il","a","j","jl","__spreadArray","to","from","pack","l","__await","__asyncGenerator","asyncIterator","q","AsyncIterator","resume","fulfill","settle","shift","__asyncDelegator","__asyncValues","__makeTemplateObject","cooked","raw","__setModuleDefault","ownKeys","getOwnPropertyNames","__importStar","mod","__classPrivateFieldGet","receiver","has","__classPrivateFieldSet","__classPrivateFieldIn","__addDisposableResource","env","async","dispose","inner","asyncDispose","stack","_SuppressedError","SuppressedError","suppressed","__disposeResources","fail","hasError","__rewriteRelativeImportExtension","path","preserveJsx","test","replace","tsx","ext","cm","TraceToLogsSettings","supportedDataSourceTypes","traceToLogs","data","tracesToLogsV2","tracesToLogs","customQuery","datasourceUid","mapTagNamesEnabled","mappedTags","filterByTraceID","filterBySpanID","getTraceToLogsOptions","updateTracesToLogs","useCallback","InlineFieldRow","DataSourcePicker","ds","current","noDefault","uid","onClear","getTimeShiftLabel","getTimeShiftTooltip","TagMappingInput","IdFilter","Boolean","grow","Input","allowFullScreen","defaultVal","TraceToLogsSection","suffix","title","ConfigDescriptionLink","feature","isCollapsible","isInitiallyOpen","useMountedState_1","initialState","lastCallId","useRef","isMounted","args","_i","callId","prevState","LIMIT_MESSAGE","LIMIT_MESSAGE_METRICS","mapErrorMessage","errorMessage","getErrorMessage","getDS","dsSrv","getDataSourceSrv","console","migrateFromSearchToTraceQLSearch","filters","spanName","Span","serviceName","Resource","minDuration","maxDuration","search","split","generateId","Unscoped","startsWith","endsWith","limit","queryType","refId","stepToNanos","match","rawLength","unit","parseInt","duration","parseDuration","seconds","minutes","hours","AccessoryButton","getButtonStyles","Button","cx","button","paddingLeft","paddingRight","vertical","display","flexDirection","horizontal","addTag","marginLeft","deleteFilter","staticTags","hideValues","requireTagAndValue","generateQueryWithoutFilter","handleOnAdd","getFilteredTags","validInput","SearchField","variant","icon","onClick","span","uuidv4","href","rel","link","textDecoration","__WEBPACK_EXTERNAL_MODULE__5959__","__WEBPACK_EXTERNAL_MODULE__6089__","randomUUID","crypto","bind","getRandomValues","rnds8","Uint8Array","byteToHex","unsafeStringify","arr","offset","buf","rnds","random","rng","RangeError","GenericConfigSection","typography","useTheme2","isOpen","setIsOpen","iconName","isSubSection","collapsibleButtonAriaLabel","header","justifyContent","margin","subtitle","fontWeight","fontWeightRegular","descriptionText","marginTop","marginBottom","bodySmall","content","IconButton","size","__WEBPACK_EXTERNAL_MODULE__7781__","BarGaugeDisplayMode","TableCellDisplayMode","VariableFormatID","for","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","ref","__self","__source","h","defaultProps","$$typeof","_owner","Fragment","jsx","jsxs","__WEBPACK_EXTERNAL_MODULE__8146__","__WEBPACK_EXTERNAL_MODULE__8531__","interpolateFilters","scopedVars","updatedFilter","Pipe","isRegExpOperator","valueHelper","getEscapedValues","getEscapedRegexValues","scopeHelper","lp","getIntrinsics","Event","Instrumentation","Link","tagHelper","durationType","filterToQuerySection","joinOperator","filterTitle","startCase","getUnscopedTags","Intrinsic","flat","getIntrinsicTags","getAllTags","getTagsByScope","replaceAt","array","index","ret","useDebounce","ms","ready","timeout","isReady","clearTimeout","setTimeout","clear","useTimeoutFn","cancel","reset","validateIntervalRegex","validateInterval","regex","intervalIsInvalid","setIntervalIsInvalid","validationRegex","fieldProps","invalid","ariaLabel","timeoutMap","style","position","zIndex","portal","top","right","visible","setVisible","timer","setTimer","Alert","elevated","onRemove","DEFAULT_TIME_RANGE_FOR_TAGS","TagsTimeRangeSettings","selectOptions","Combobox","TempoVariableQueryType","variableOptions","TempoVariableQueryEditor","setLabel","setType","labelOptions","setLabelOptions","labelQuery","setLabelQuery","setIsLoading","labelNamesQuery","labelNames","catch","handleBlur","newType","onBlur","newLabel","newLabelValue","secondsMetric","totalsMetric","failedMetric","histogramMetric","rateMetric","expr","topk","params","errorRateMetric","durationMetric","nativeHistogramDurationMetric","defaultTableFilter","serviceMapMetrics","mapPromMetricsToServiceMap","responses","frames","reduce","acc","frameDTO","frame","toDataFrame","DataFrameView","getMetricFrames","nodesMap","edgesMap","collectMetricData","collectIsInstrumented","nodes","edges","createDF","fields","MutableDataFrame","meta","preferredVisualisationType","Fields","FieldType","string","config","displayName","subTitle","mainStat","secondaryStat","arc","fixedColor","mode","FieldColorModeId","Fixed","isInstrumented","boolean","source","createServiceMapDataFrames","nodeId","keys","node","add","namespace","total","Number","NaN","Math","round","min","failed","edgeId","edge","sourceName","sourceNamespace","targetName","targetNamespace","convertToDataFrames","stat","metric","valueName","serverId","server_service_namespace","server","clientId","client_service_namespace","client","connection_type","createConstMap","res","len","toUpperCase","TMP_CLOUD_PROVIDER","TMP_CLOUD_ACCOUNT_ID","TMP_CLOUD_REGION","TMP_CLOUD_AVAILABILITY_ZONE","TMP_CLOUD_PLATFORM","TMP_AWS_ECS_CONTAINER_ARN","TMP_AWS_ECS_CLUSTER_ARN","TMP_AWS_ECS_LAUNCHTYPE","TMP_AWS_ECS_TASK_ARN","TMP_AWS_ECS_TASK_FAMILY","TMP_AWS_ECS_TASK_REVISION","TMP_AWS_EKS_CLUSTER_ARN","TMP_AWS_LOG_GROUP_NAMES","TMP_AWS_LOG_GROUP_ARNS","TMP_AWS_LOG_STREAM_NAMES","TMP_AWS_LOG_STREAM_ARNS","TMP_CONTAINER_NAME","TMP_CONTAINER_ID","TMP_CONTAINER_RUNTIME","TMP_CONTAINER_IMAGE_NAME","TMP_CONTAINER_IMAGE_TAG","TMP_DEPLOYMENT_ENVIRONMENT","TMP_DEVICE_ID","TMP_DEVICE_MODEL_IDENTIFIER","TMP_DEVICE_MODEL_NAME","TMP_FAAS_NAME","TMP_FAAS_ID","TMP_FAAS_VERSION","TMP_FAAS_INSTANCE","TMP_FAAS_MAX_MEMORY","TMP_HOST_ID","TMP_HOST_NAME","TMP_HOST_TYPE","TMP_HOST_ARCH","TMP_HOST_IMAGE_NAME","TMP_HOST_IMAGE_ID","TMP_HOST_IMAGE_VERSION","TMP_K8S_CLUSTER_NAME","TMP_K8S_NODE_NAME","TMP_K8S_NODE_UID","TMP_K8S_NAMESPACE_NAME","TMP_K8S_POD_UID","TMP_K8S_POD_NAME","TMP_K8S_CONTAINER_NAME","TMP_K8S_REPLICASET_UID","TMP_K8S_REPLICASET_NAME","TMP_K8S_DEPLOYMENT_UID","TMP_K8S_DEPLOYMENT_NAME","TMP_K8S_STATEFULSET_UID","TMP_K8S_STATEFULSET_NAME","TMP_K8S_DAEMONSET_UID","TMP_K8S_DAEMONSET_NAME","TMP_K8S_JOB_UID","TMP_K8S_JOB_NAME","TMP_K8S_CRONJOB_UID","TMP_K8S_CRONJOB_NAME","TMP_OS_TYPE","TMP_OS_DESCRIPTION","TMP_OS_NAME","TMP_OS_VERSION","TMP_PROCESS_PID","TMP_PROCESS_EXECUTABLE_NAME","TMP_PROCESS_EXECUTABLE_PATH","TMP_PROCESS_COMMAND","TMP_PROCESS_COMMAND_LINE","TMP_PROCESS_COMMAND_ARGS","TMP_PROCESS_OWNER","TMP_PROCESS_RUNTIME_NAME","TMP_PROCESS_RUNTIME_VERSION","TMP_PROCESS_RUNTIME_DESCRIPTION","TMP_SERVICE_NAME","TMP_SERVICE_NAMESPACE","TMP_SERVICE_INSTANCE_ID","TMP_SERVICE_VERSION","TMP_TELEMETRY_SDK_NAME","TMP_TELEMETRY_SDK_LANGUAGE","TMP_TELEMETRY_SDK_VERSION","TMP_TELEMETRY_AUTO_VERSION","TMP_WEBENGINE_NAME","TMP_WEBENGINE_VERSION","TMP_WEBENGINE_DESCRIPTION","SemanticResourceAttributes","createNodeGraphFrames","view","traceDuration","traceEndTime","traceStartTime","Infinity","startTime","findTraceDuration","spanMap","getSpan","parentId","parentIds","makeSpanMap","spanID","parentSpanID","childrenDuration","getNonOverlappingDuration","selfDuration","stats","getStats","operationName","main","convertTraceToGraph","nodesFrame","edgesFrame","makeFrames","ranges","sort","tail","prevStart","prevEnd","start","end","toFixedNoTrailingZeros","parseFloat","toFixed","getAttributeValue","stringValue","boolValue","intValue","doubleValue","arrayValue","arValue","resourceToProcess","resource","serviceTags","attribute","attributes","SERVICE_NAME","getSpanTags","spanTags","getSpanKind","getReferences","references","links","traceId","spanId","traceID","getLogs","logs","events","timestamp","timeUnixNano","transformTrace","response","instanceSettings","nodeGraph","emptyDataQueryResponse","traceToProfilesData","traceToProfilesOptions","tracesToProfiles","profilesDataSourceSettings","getInstanceSettings","dataLink","url","internal","datasourceName","labelSelector","groupBy","profileTypeId","spanSelector","origin","DataLinkConfigOrigin","Datasource","forEach","field","enhanceTraceQlMetricsResponse","dataTopic","traceIDField","dataLinks","getDataLinks","existingLinks","newLinks","existing","isEqual","formatTraceQLResponse","tableType","Spans","spanDynamicAttrs","hasNameAttribute","trace","getSpanSets","ss","attr","displayNameFromDS","spans","custom","hidden","panelsState","time","localeCompare","startTimeUnixNano","spanSet","transformSpanToTraceData","createTableFrameFromTraceQlQueryAsSpans","Raw","createDataFrame","JSON","stringify","createDataFrameFromTraceQlQuery","nestedFrames","uniqueRowIdFields","traceData","durationMs","traceService","rootServiceName","traceName","rootTraceName","transformToTraceData","spanSets","traceSubFrame","createTableFrameFromTraceQlQuery","subFrame","createTheme","getDisplayProcessor","spanStartTimeUnixMs","traceIdHidden","durationNanos","attrs","Value","bool_value","double_value","int_value","string_value","traceFormat","combineResponses","currentResult","newResult","cloneQueryResponse","newFrame","currentFrame","frame1","frame2","frameType1","frameType2","DataFrameType","TimeSeriesMulti","field1","field2","shallowCompare","labels","customType1","frameType","customType2","shouldCombine","dest","totalFields","max","sourceField","findSourceField","nanos","getCombinedMetadataStats","combineFrames","cloneDataFrame","mergedErrors","errors","mergedError","mergedTraceIds","traceIds","referenceField","sourceFields","candidates","candidate","TOTAL_BYTES_STAT","destStats","sourceStats","destStat","sourceStat","eitherStat","getLiveStreamKey","doTempoMetricsStreaming","LoadingState","NotStarted","getGrafanaLiveSrv","getStream","LiveChannelScope","DataSource","timeRange","toISOString","pipe","takeWhile","evt","frameState","Done","fieldCache","messageFrame","dataFrameFromJSON","FieldCache","getFieldByName","Streaming","scan","curr","metricsQueryType","Instant","timeFieldIndex","findIndex","accFrame","duplicatesMap","indexesToRemove","indexes","removeDuplicateTimeFieldValues","sortDataFrame","mergeFrames","metricsDataFrame","metrics","elapsedTime","progressThresholds","steps","ThresholdsMode","Absolute","capitalize","totalBlocks","completedJobs","totalJobs","cellOptions","thresholds","TempoVariableSupport","CustomVariableSupport","request","executeVariableQuery","targets","super","editor","DEFAULT_LIMIT","DEFAULT_SPSS","FeatureName","featuresToTempoVersion","TempoDatasource","DataSourceWithBackend","LabelNames","LabelValues","labelValuesQuery","getAutocompleteTags","labelName","tagsV2","flatMap","tagV2","scopeAndTag","option","getTagKeys","fetchTags","getTagValues","generateQueryFromFilters","adhocFilters","getNativeHistograms","serviceMap","metricName","seriesResult","promDs","dateTime","subtract","floor","valueOf","metadataRequest","seriesData","warn","isStreamingSearchEnabled","streamingEnabled","liveEnabled","isStreamingMetricsEnabled","isTraceQlMetricsQuery","trim","isTraceIdQuery","subQueries","filteredTargets","hide","of","nativeSearch","migratedQuery","traceqlSearch","traceql","appliedQuery","applyVariables","queryValue","reportInteraction","datasourceType","app","grafana_version","buildInfo","version","hasQuery","handleTraceIdQuery","useStreaming","CoreApp","CloudAlerting","UnifiedAlerting","streaming","handleMetricsStreamingQuery","handleTraceQlMetricsQuery","handleStreamingQuery","featureToggles","tempoSearchBackendMigration","handleTraceQlQuery","oldSearchQueryLogic","traceqlSearchTargets","queryFromFilters","traceqlFilters","upload","uploadedJson","parse","isTraceData","batches","isServiceGraphData","df","other","librarySpan","instrumentationLibrarySpans","parentSpanId","statusCode","code","statusMessage","instrumentationLibraryName","instrumentationLibrary","instrumentationLibraryVersion","traceState","endTimeUnixNano","transformFromOTEL","enabled","hasServiceMapQuery","serviceMapQuery","useNativeHistogram","serviceMapUseNativeHistograms","tempoDsUid","tempoDatasourceUid","serviceMapRequest","makePromServiceMapRequest","queryPrometheus","toArray","errorRes","nodeLength","edgeLength","serviceMapIncludeNamespace","getFieldConfig","concatMap","serviceMapResponse","makeServiceGraphViewRequest","buildExpr","rates","rateQuery","rateResponse","serviceGraphViewMetrics","errorRateBySpanName","durationsBySpanName","Explore","spanNameField","spanNameLabels","spanNames","errorAndDurationResponse","serviceGraphView","secondResponse","rate","errorRate","filterable","makePromLink","buildLinkExpr","decimals","Lcd","Gauge","errorRateNames","errorRateValues","errorRateObj","getRateAlignedValues","durationObj","delimiter","checkedDurationMetric","makeTempoLink","getServiceGraphViewDataFrames","errorAndDurationQuery","merge","applyTemplateVariables","interpolateVariablesInQueries","queries","getRef","expandedQuery","templateSrv","validTargets","EMPTY","performance","now","makeTraceIdRequest","reportTempoQueryMetrics","success","latencyMs","statusText","catchError","err","requestTime","SpansPerSpanSet","spss","traces","doTempoSearchStreaming","finalize","rangeUtil","intervalToMs","getResource","method","hideFromInspector","_request","apiUrl","urlUtil","serializeParams","req","getBackendSrv","fetch","testDatasource","getQueryDisplayText","spanBar","tagLimit","Traces","nested","typeInfo","mestedFrames","nestedFrameArray","nestedFrame","newNestedFrame","schema","fieldIndex","rowCount","unix","TempoLanguageProvider","variables","mergeMap","instant","exemplar","targetField","tempoField","namespaceFields","serverSumBy","makeHistogramLink","makeTempoLinkServiceMap","createHistogramLink","serviceNamespace","serviceNamespaceVar","serviceNameVar","replaceVariables","NodeGraphDataFrameFieldNames","peerAttribute","extraSumByFields","sumSubExprs","groupSubExprs","format","interactionName","timeRangeSeconds","extraParams","serviceMapQueryMatch","replaceAll","item","rateResp","objToAlign","rateNames","wrapper","idx","pair","SegmentInput","InlineLabel","ToolbarButton","removeTag","v1","palette","orange","marginRight","mountedRef","LanguageProvider","getTagsLimit","getTimeRangeForTags","v2Resp","setV2Tags","encodedTag","encodeTag","tagValues","generateQueryFromTraceQlFilters","generateQueryFromAdHocFilters","previousRange","shouldRefetch","shouldRefreshLabels","startTask","roundMsToMin","milliseconds","roundSecToMin","prevRange","sameMinuteFrom","sameMinuteTo","getTraceqlAutocompleteTags","encodeURIComponent","adHocValueHelper","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","amdO","getter","definition","chunkId","all","promises","u","globalThis","Function","window","obj","prop","script","needAttach","scripts","document","getElementsByTagName","getAttribute","createElement","charset","nc","setAttribute","src","onScriptComplete","prev","onerror","onload","doneFns","parentNode","removeChild","head","appendChild","toStringTag","baseURI","self","location","installedChunks","installedChunkData","promise","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","lastIndexOf","hasTemplateVariables","containsTemplate","TempoQueryFieldLazy","lazy","ConfigEditorLazy","CheatSheetLazy","plugin","DataSourcePlugin","setQueryEditor","Suspense","fallback","LoadingPlaceholder","setConfigEditor","setQueryEditorHelp","getAppEvents","subscribe","DashboardLoadedEvent","payload","dashboardId","orgId","grafanaVersion","tempoQueries","pluginJson","dashboard_id","org_id","service_map_query_count","traceql_query_count","upload_query_count","service_map_queries_with_template_variables_count","traceql_queries_with_template_variables_count"],"sourceRoot":""}
.
Edit
..
Edit
1070.js
Edit
1070.js.LICENSE.txt
Edit
1070.js.map
Edit
1246.js
Edit
1246.js.LICENSE.txt
Edit
1246.js.map
Edit
1326.js
Edit
1326.js.LICENSE.txt
Edit
1326.js.map
Edit
1898.js
Edit
1898.js.LICENSE.txt
Edit
1898.js.map
Edit
1948.js
Edit
1948.js.LICENSE.txt
Edit
1948.js.map
Edit
1988.js
Edit
1988.js.LICENSE.txt
Edit
1988.js.map
Edit
2138.js
Edit
2138.js.LICENSE.txt
Edit
2138.js.map
Edit
2182.js
Edit
2182.js.LICENSE.txt
Edit
2182.js.map
Edit
2378.js
Edit
2378.js.LICENSE.txt
Edit
2378.js.map
Edit
2552.js
Edit
2552.js.LICENSE.txt
Edit
2552.js.map
Edit
2716.js
Edit
2716.js.LICENSE.txt
Edit
2716.js.map
Edit
2770.js
Edit
2770.js.LICENSE.txt
Edit
2770.js.map
Edit
2838.js
Edit
2838.js.LICENSE.txt
Edit
2838.js.map
Edit
3070.js
Edit
3070.js.LICENSE.txt
Edit
3070.js.map
Edit
3238.js
Edit
3238.js.LICENSE.txt
Edit
3238.js.map
Edit
3294.js
Edit
3294.js.LICENSE.txt
Edit
3294.js.map
Edit
3304.js
Edit
3304.js.LICENSE.txt
Edit
3304.js.map
Edit
3380.js
Edit
3380.js.map
Edit
3646.js
Edit
3646.js.LICENSE.txt
Edit
3646.js.map
Edit
3851.js
Edit
3851.js.map
Edit
3918.js
Edit
3918.js.LICENSE.txt
Edit
3918.js.map
Edit
4039.js
Edit
4039.js.LICENSE.txt
Edit
4039.js.map
Edit
4418.js
Edit
4418.js.LICENSE.txt
Edit
4418.js.map
Edit
4462.js
Edit
4462.js.LICENSE.txt
Edit
4462.js.map
Edit
450.js
Edit
450.js.LICENSE.txt
Edit
450.js.map
Edit
4502.js
Edit
4502.js.LICENSE.txt
Edit
4502.js.map
Edit
4562.js
Edit
4562.js.LICENSE.txt
Edit
4562.js.map
Edit
4618.js
Edit
4618.js.LICENSE.txt
Edit
4618.js.map
Edit
4630.js
Edit
4630.js.LICENSE.txt
Edit
4630.js.map
Edit
470.js
Edit
470.js.LICENSE.txt
Edit
470.js.map
Edit
4726.js
Edit
4726.js.LICENSE.txt
Edit
4726.js.map
Edit
4832.js
Edit
4832.js.LICENSE.txt
Edit
4832.js.map
Edit
4910.js
Edit
4910.js.LICENSE.txt
Edit
4910.js.map
Edit
4994.js
Edit
4994.js.LICENSE.txt
Edit
4994.js.map
Edit
5202.js
Edit
5202.js.LICENSE.txt
Edit
5202.js.map
Edit
5246.js
Edit
5246.js.LICENSE.txt
Edit
5246.js.map
Edit
5292.js
Edit
5292.js.LICENSE.txt
Edit
5292.js.map
Edit
5374.js
Edit
5374.js.LICENSE.txt
Edit
5374.js.map
Edit
5534.js
Edit
5534.js.LICENSE.txt
Edit
5534.js.map
Edit
5646.js
Edit
5646.js.LICENSE.txt
Edit
5646.js.map
Edit
5658.js
Edit
5658.js.LICENSE.txt
Edit
5658.js.map
Edit
582.js
Edit
582.js.LICENSE.txt
Edit
582.js.map
Edit
5934.js
Edit
5934.js.LICENSE.txt
Edit
5934.js.map
Edit
5982.js
Edit
5982.js.LICENSE.txt
Edit
5982.js.map
Edit
5998.js
Edit
5998.js.LICENSE.txt
Edit
5998.js.map
Edit
6014.js
Edit
6014.js.LICENSE.txt
Edit
6014.js.map
Edit
6067.js
Edit
6067.js.LICENSE.txt
Edit
6067.js.map
Edit
6082.js
Edit
6082.js.map
Edit
6110.js
Edit
6110.js.LICENSE.txt
Edit
6110.js.map
Edit
6284.js
Edit
6284.js.LICENSE.txt
Edit
6284.js.map
Edit
6302.js
Edit
6302.js.LICENSE.txt
Edit
6302.js.map
Edit
6362.js
Edit
6362.js.LICENSE.txt
Edit
6362.js.map
Edit
6502.js
Edit
6502.js.LICENSE.txt
Edit
6502.js.map
Edit
6506.js
Edit
6506.js.LICENSE.txt
Edit
6506.js.map
Edit
6556.js
Edit
6556.js.LICENSE.txt
Edit
6556.js.map
Edit
6948.js
Edit
6948.js.map
Edit
7002.js
Edit
7002.js.LICENSE.txt
Edit
7002.js.map
Edit
7134.js
Edit
7134.js.LICENSE.txt
Edit
7134.js.map
Edit
7174.js
Edit
7174.js.LICENSE.txt
Edit
7174.js.map
Edit
7246.js
Edit
7246.js.LICENSE.txt
Edit
7246.js.map
Edit
7257.js
Edit
7257.js.LICENSE.txt
Edit
7257.js.map
Edit
7294.js
Edit
7294.js.LICENSE.txt
Edit
7294.js.map
Edit
7596.js
Edit
7596.js.LICENSE.txt
Edit
7596.js.map
Edit
7832.js
Edit
7832.js.LICENSE.txt
Edit
7832.js.map
Edit
8094.js
Edit
8094.js.LICENSE.txt
Edit
8094.js.map
Edit
8114.js
Edit
8114.js.LICENSE.txt
Edit
8114.js.map
Edit
8142.js
Edit
8142.js.LICENSE.txt
Edit
8142.js.map
Edit
8190.js
Edit
8190.js.LICENSE.txt
Edit
8190.js.map
Edit
8228.js
Edit
8228.js.LICENSE.txt
Edit
8228.js.map
Edit
8356.js
Edit
8356.js.LICENSE.txt
Edit
8356.js.map
Edit
8790.js
Edit
8790.js.LICENSE.txt
Edit
8790.js.map
Edit
8856.js
Edit
8856.js.LICENSE.txt
Edit
8856.js.map
Edit
8952.js
Edit
8952.js.LICENSE.txt
Edit
8952.js.map
Edit
9054.js
Edit
9054.js.LICENSE.txt
Edit
9054.js.map
Edit
9133.js
Edit
9133.js.LICENSE.txt
Edit
9133.js.map
Edit
9240.js
Edit
9240.js.LICENSE.txt
Edit
9240.js.map
Edit
9342.js
Edit
9342.js.LICENSE.txt
Edit
9342.js.map
Edit
9394.js
Edit
9394.js.LICENSE.txt
Edit
9394.js.map
Edit
9442.js
Edit
9442.js.LICENSE.txt
Edit
9442.js.map
Edit
9446.js
Edit
9446.js.LICENSE.txt
Edit
9446.js.map
Edit
9562.js
Edit
9562.js.LICENSE.txt
Edit
9562.js.map
Edit
960.js
Edit
960.js.LICENSE.txt
Edit
960.js.map
Edit
9726.js
Edit
9726.js.LICENSE.txt
Edit
9726.js.map
Edit
9762.js
Edit
9762.js.map
Edit
990.js
Edit
990.js.LICENSE.txt
Edit
990.js.map
Edit
9922.js
Edit
9922.js.LICENSE.txt
Edit
9922.js.map
Edit
9998.js
Edit
9998.js.LICENSE.txt
Edit
9998.js.map
Edit
CHANGELOG.md
Edit
LICENSE
Edit
README.md
Edit
fonts
Edit
img
Edit
module.js
Edit
module.js.LICENSE.txt
Edit
module.js.map
Edit
plugin.json
Edit
test
Edit