{"version":3,"file":"7837.5ee5598d29a5232ac912.js","mappings":"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","sources":["webpack://grafana/./public/app/features/dashboard/components/HelpWizard/randomizer.ts","webpack://grafana/./public/app/features/dashboard/components/HelpWizard/utils.ts","webpack://grafana/./public/app/features/dashboard/dashgrid/SeriesVisibilityConfigFactory.ts","webpack://grafana/./public/app/features/inspector/DetailText.tsx","webpack://grafana/./public/app/features/inspector/InspectDataOptions.tsx","webpack://grafana/./public/app/features/inspector/InspectDataTab.tsx","webpack://grafana/./public/app/features/inspector/InspectErrorTab.tsx","webpack://grafana/./public/app/features/inspector/InspectJSONTab.tsx","webpack://grafana/./public/app/features/inspector/InspectStatsTable.tsx","webpack://grafana/./public/app/features/inspector/InspectStatsTab.tsx","webpack://grafana/./public/app/features/inspector/QueryInspector.tsx","webpack://grafana/./public/app/features/inspector/styles.ts","webpack://grafana/./public/app/features/inspector/types.ts","webpack://grafana/./public/app/features/query/components/QueryEditorRows.tsx","webpack://grafana/./public/app/plugins/datasource/jaeger/responseTransform.ts","webpack://grafana/./public/app/plugins/datasource/zipkin/utils/transforms.ts"],"sourcesContent":["import { DataFrameJSON, Labels, FieldType } from '@grafana/data';\n\nexport function newLetterRandomizer(): (v: string) => string {\n const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n const lower = 'abcdefghijklmnopqrstuvwxyz';\n const charactersLength = upper.length;\n\n const history = new Map();\n return (v: string) => {\n const old = history.get(v);\n if (old != null) {\n return old;\n }\n const r = [...v]\n .map((c) => {\n if (c.toLowerCase() && c !== c.toUpperCase()) {\n return lower.charAt(Math.floor(Math.random() * charactersLength));\n }\n if (c.toUpperCase() && c !== c.toUpperCase()) {\n return upper.charAt(Math.floor(Math.random() * charactersLength));\n }\n return c;\n })\n .join('');\n history.set(v, r);\n return r;\n };\n}\n\nexport interface Randomize {\n names?: boolean;\n labels?: boolean;\n values?: boolean;\n}\n\nexport function randomizeData(data: DataFrameJSON[], opts: Randomize): DataFrameJSON[] {\n if (!(opts.labels || opts.names || opts.values)) {\n return data;\n }\n\n const keepNames = new Set(['time', 'value', 'exemplar', 'traceid', 'id', 'uid', 'uuid', '__name__', 'le', 'name']);\n const rand = newLetterRandomizer();\n return data.map((s) => {\n let { schema, data } = s;\n if (schema && data) {\n if (opts.labels) {\n for (const f of schema.fields) {\n if (f.labels) {\n const labels: Labels = {};\n for (const [key, value] of Object.entries(f.labels)) {\n labels[key] = rand(value);\n }\n f.labels = labels;\n }\n }\n }\n if (opts.names) {\n for (const f of schema.fields) {\n if (f.name?.length && !keepNames.has(f.name.toLowerCase())) {\n f.name = rand(f.name);\n }\n }\n }\n\n // Change values\n if (opts.values) {\n schema.fields.forEach((f, idx) => {\n if (f.type === FieldType.string && data) {\n // eslint-ignore-next-line\n const v = data.values[idx].map((v) => rand(v as string));\n data.values[idx] = v;\n }\n });\n }\n }\n return { schema, data };\n });\n}\n","import { cloneDeep } from 'lodash';\nimport { firstValueFrom } from 'rxjs';\n\nimport {\n dateTimeFormat,\n TimeRange,\n DataQuery,\n PanelData,\n DataTransformerConfig,\n DataFrameJSON,\n LoadingState,\n dataFrameToJSON,\n DataTopic,\n} from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { PanelModel } from 'app/features/dashboard/state';\nimport { GrafanaQueryType } from 'app/plugins/datasource/grafana/types';\n\nimport { Randomize, randomizeData } from './randomizer';\n\nexport function getPanelDataFrames(data?: PanelData): DataFrameJSON[] {\n const frames: DataFrameJSON[] = [];\n if (data?.series) {\n for (const f of data.series) {\n frames.push(dataFrameToJSON(f));\n }\n }\n if (data?.annotations) {\n for (const f of data.annotations) {\n const json = dataFrameToJSON(f);\n if (!json.schema?.meta) {\n json.schema!.meta = {};\n }\n json.schema!.meta.dataTopic = DataTopic.Annotations;\n frames.push(json);\n }\n }\n return frames;\n}\n\nexport function getGithubMarkdown(panel: PanelModel, snapshot: string): string {\n const saveModel = panel.getSaveModel();\n const info = {\n panelType: saveModel.type,\n datasource: '??',\n };\n const grafanaVersion = `${config.buildInfo.version} (${config.buildInfo.commit})`;\n\n let md = `| Key | Value |\n|--|--|\n| Panel | ${info.panelType} @ ${saveModel.pluginVersion ?? grafanaVersion} |\n| Grafana | ${grafanaVersion} // ${config.buildInfo.edition} |\n`;\n\n if (snapshot) {\n md += '
Panel debug snapshot dashboard\\n\\n```json\\n' + snapshot + '\\n```\\n
';\n }\n return md;\n}\n\nexport async function getDebugDashboard(panel: PanelModel, rand: Randomize, timeRange: TimeRange) {\n const saveModel = panel.getSaveModel();\n const dashboard = cloneDeep(embeddedDataTemplate);\n const info = {\n panelType: saveModel.type,\n datasource: '??',\n };\n\n // reproducable\n const data = await firstValueFrom(\n panel.getQueryRunner().getData({\n withFieldConfig: false,\n withTransforms: false,\n })\n );\n\n const dsref = panel.datasource;\n const frames = randomizeData(getPanelDataFrames(data), rand);\n const grafanaVersion = `${config.buildInfo.version} (${config.buildInfo.commit})`;\n const queries = saveModel?.targets ?? [];\n const html = `\n \n \n \n \n \n \n \n \n ${getTransformsRow(saveModel)}\n ${getDataRow(data, frames)}\n ${getAnnotationsRow(data)}\n \n \n \n \n
Panel${info.panelType} @ ${saveModel.pluginVersion ?? grafanaVersion}
Queries${queries\n .map((t: DataQuery) => {\n const ds = t.datasource ?? dsref;\n return `${t.refId}[${ds?.type}]`;\n })\n .join(', ')}
Grafana${grafanaVersion} // ${config.buildInfo.edition}
`.trim();\n\n // Replace the panel with embedded data\n dashboard.panels[0] = {\n ...saveModel,\n ...dashboard.panels[0],\n targets: [\n {\n refId: 'A',\n datasource: {\n type: 'grafana',\n uid: 'grafana',\n },\n queryType: GrafanaQueryType.Snapshot,\n snapshot: frames,\n },\n ],\n };\n\n if (saveModel.transformations?.length) {\n const last = dashboard.panels[dashboard.panels.length - 1];\n last.title = last.title + ' (after transformations)';\n\n const before = cloneDeep(last);\n before.id = 100;\n before.title = 'Data (before transformations)';\n before.gridPos.w = 24; // full width\n before.targets[0].withTransforms = false;\n dashboard.panels.push(before);\n }\n\n if (data.annotations?.length) {\n dashboard.panels.push({\n id: 7,\n gridPos: {\n h: 6,\n w: 24,\n x: 0,\n y: 20,\n },\n type: 'table',\n title: 'Annotations',\n datasource: {\n type: 'datasource',\n uid: '-- Dashboard --',\n },\n options: {\n showTypeIcons: true,\n },\n targets: [\n {\n datasource: {\n type: 'datasource',\n uid: '-- Dashboard --',\n },\n panelId: 2,\n withTransforms: true,\n topic: DataTopic.Annotations,\n refId: 'A',\n },\n ],\n });\n }\n\n dashboard.panels[1].options.content = html;\n dashboard.panels[2].options.content = JSON.stringify(saveModel, null, 2);\n\n dashboard.title = `Debug: ${saveModel.title} // ${dateTimeFormat(new Date())}`;\n dashboard.tags = ['debug', `debug-${info.panelType}`];\n dashboard.time = {\n from: timeRange.from.toISOString(),\n to: timeRange.to.toISOString(),\n };\n\n return dashboard;\n}\n\n// eslint-disable-next-line\nfunction getTransformsRow(saveModel: any): string {\n if (!saveModel.transformations) {\n return '';\n }\n return `\n Transforms (${saveModel.transformations.length})\n ${saveModel.transformations.map((t: DataTransformerConfig) => t.id).join(', ')}\n `;\n}\n\nfunction getDataRow(data: PanelData, frames: DataFrameJSON[]): string {\n let frameCount = data.series.length ?? 0;\n let fieldCount = 0;\n let rowCount = 0;\n for (const frame of data.series) {\n fieldCount += frame.fields.length;\n rowCount += frame.length;\n }\n return (\n '' +\n 'Data' +\n '' +\n `${data.state !== LoadingState.Done ? data.state : ''} ` +\n `${frameCount} frames, ${fieldCount} fields, ` +\n `${rowCount} rows ` +\n // `(${formattedValueToString(getValueFormat('decbytes')(raw?.length))} JSON)` +\n '' +\n ''\n );\n}\n\nfunction getAnnotationsRow(data: PanelData): string {\n if (!data.annotations?.length) {\n return '';\n }\n\n return `\n Annotations\n ${data.annotations.map((a, idx) => `${a.length}`)}\n`;\n}\n\n// eslint-disable-next-line\nconst embeddedDataTemplate: any = {\n // should be dashboard model when that is accurate enough\n panels: [\n {\n id: 2,\n title: 'Reproduced with embedded data',\n datasource: {\n type: 'grafana',\n uid: 'grafana',\n },\n gridPos: {\n h: 13,\n w: 15,\n x: 0,\n y: 0,\n },\n },\n {\n gridPos: {\n h: 7,\n w: 9,\n x: 15,\n y: 0,\n },\n id: 5,\n options: {\n content: '...',\n mode: 'html',\n },\n title: 'Debug info',\n type: 'text',\n },\n {\n id: 6,\n title: 'Original Panel JSON',\n type: 'text',\n gridPos: {\n h: 13,\n w: 9,\n x: 15,\n y: 7,\n },\n options: {\n content: '...',\n mode: 'code',\n code: {\n language: 'json',\n showLineNumbers: true,\n showMiniMap: true,\n },\n },\n },\n {\n id: 3,\n title: 'Data from panel above',\n type: 'table',\n datasource: {\n type: 'datasource',\n uid: '-- Dashboard --',\n },\n gridPos: {\n h: 7,\n w: 15,\n x: 0,\n y: 13,\n },\n options: {\n showTypeIcons: true,\n },\n targets: [\n {\n datasource: {\n type: 'datasource',\n uid: '-- Dashboard --',\n },\n panelId: 2,\n withTransforms: true,\n refId: 'A',\n },\n ],\n },\n ],\n schemaVersion: 37,\n};\n","import {\n ByNamesMatcherMode,\n ConfigOverrideRule,\n DataFrame,\n DynamicConfigValue,\n FieldConfigSource,\n FieldMatcherID,\n fieldMatchers,\n FieldType,\n getFieldDisplayName,\n isSystemOverrideWithRef,\n SystemConfigOverrideRule,\n} from '@grafana/data';\nimport { SeriesVisibilityChangeMode } from '@grafana/ui';\n\nconst displayOverrideRef = 'hideSeriesFrom';\nconst isHideSeriesOverride = isSystemOverrideWithRef(displayOverrideRef);\n\nexport function seriesVisibilityConfigFactory(\n label: string,\n mode: SeriesVisibilityChangeMode,\n fieldConfig: FieldConfigSource,\n data: DataFrame[]\n) {\n const { overrides } = fieldConfig;\n\n const displayName = label;\n const currentIndex = overrides.findIndex(isHideSeriesOverride);\n\n if (currentIndex < 0) {\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n const override = createOverride([displayName, ...getNamesOfHiddenFields(overrides, data)]);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const displayNames = getDisplayNames(data, displayName);\n const override = createOverride(displayNames);\n\n return {\n ...fieldConfig,\n overrides: [...fieldConfig.overrides, override],\n };\n }\n\n const overridesCopy = Array.from(overrides);\n const [current] = overridesCopy.splice(currentIndex, 1) as SystemConfigOverrideRule[];\n\n if (mode === SeriesVisibilityChangeMode.ToggleSelection) {\n let existing = getExistingDisplayNames(current);\n const nameOfHiddenFields = getNamesOfHiddenFields(overridesCopy, data);\n\n if (nameOfHiddenFields.length > 0) {\n existing = existing.filter((el) => nameOfHiddenFields.indexOf(el) < 0);\n }\n\n if (existing[0] === displayName && existing.length === 1) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n const override = createOverride([displayName, ...nameOfHiddenFields]);\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n }\n\n const override = createExtendedOverride(current, displayName);\n\n if (allFieldsAreExcluded(override, data)) {\n return {\n ...fieldConfig,\n overrides: overridesCopy,\n };\n }\n\n return {\n ...fieldConfig,\n overrides: [...overridesCopy, override],\n };\n}\n\nfunction createOverride(\n names: string[],\n mode = ByNamesMatcherMode.exclude,\n property?: DynamicConfigValue\n): SystemConfigOverrideRule {\n property = property ?? {\n id: 'custom.hideFrom',\n value: {\n viz: true,\n legend: false,\n tooltip: false,\n },\n };\n\n return {\n __systemRef: displayOverrideRef,\n matcher: {\n id: FieldMatcherID.byNames,\n options: {\n mode: mode,\n names: names,\n prefix: mode === ByNamesMatcherMode.exclude ? 'All except:' : undefined,\n readOnly: true,\n },\n },\n properties: [\n {\n ...property,\n value: {\n viz: true,\n legend: false,\n tooltip: false,\n },\n },\n ],\n };\n}\n\nconst createExtendedOverride = (\n current: SystemConfigOverrideRule,\n displayName: string,\n mode = ByNamesMatcherMode.exclude\n): SystemConfigOverrideRule => {\n const property = current.properties.find((p) => p.id === 'custom.hideFrom');\n const existing = getExistingDisplayNames(current);\n const index = existing.findIndex((name) => name === displayName);\n\n if (index < 0) {\n existing.push(displayName);\n } else {\n existing.splice(index, 1);\n }\n\n return createOverride(existing, mode, property);\n};\n\nconst getExistingDisplayNames = (rule: SystemConfigOverrideRule): string[] => {\n const names = rule.matcher.options?.names;\n if (!Array.isArray(names)) {\n return [];\n }\n return [...names];\n};\n\nconst allFieldsAreExcluded = (override: SystemConfigOverrideRule, data: DataFrame[]): boolean => {\n return getExistingDisplayNames(override).length === getDisplayNames(data).length;\n};\n\nconst getDisplayNames = (data: DataFrame[], excludeName?: string): string[] => {\n const unique = new Set();\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (name === excludeName) {\n continue;\n }\n\n unique.add(name);\n }\n }\n\n return Array.from(unique);\n};\n\nconst getNamesOfHiddenFields = (overrides: ConfigOverrideRule[], data: DataFrame[]): string[] => {\n let names: string[] = [];\n\n for (const override of overrides) {\n const property = override.properties.find((p) => p.id === 'custom.hideFrom');\n\n if (property !== undefined && property.value?.legend === true) {\n const info = fieldMatchers.get(override.matcher.id);\n const matcher = info.get(override.matcher.options);\n\n for (const frame of data) {\n for (const field of frame.fields) {\n if (field.type !== FieldType.number) {\n continue;\n }\n\n const name = getFieldDisplayName(field, frame, data);\n\n if (matcher(field, frame, data)) {\n names.push(name);\n }\n }\n }\n }\n }\n\n return names;\n};\n","import { css } from '@emotion/css';\nimport React, { FC } from 'react';\n\nimport { GrafanaTheme } from '@grafana/data';\nimport { useStyles } from '@grafana/ui';\n\nconst getStyles = (theme: GrafanaTheme) => css`\n margin: 0;\n margin-left: ${theme.spacing.md};\n font-size: ${theme.typography.size.sm};\n color: ${theme.colors.textWeak};\n`;\n\nexport const DetailText: FC = ({ children }) => {\n const collapsedTextStyles = useStyles(getStyles);\n return

{children}

;\n};\n","import { t } from '@lingui/macro';\nimport React, { FC } from 'react';\n\nimport { DataFrame, DataTransformerID, getFrameDisplayName, SelectableValue } from '@grafana/data';\nimport { Field, HorizontalGroup, Select, Switch, VerticalGroup } from '@grafana/ui';\nimport { QueryOperationRow } from 'app/core/components/QueryOperationRow/QueryOperationRow';\nimport { PanelModel } from 'app/features/dashboard/state';\nimport { DetailText } from 'app/features/inspector/DetailText';\nimport { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';\n\nimport { getPanelInspectorStyles } from './styles';\n\ninterface Props {\n options: GetDataOptions;\n dataFrames: DataFrame[];\n transformId: DataTransformerID;\n transformationOptions: Array>;\n selectedDataFrame: number | DataTransformerID;\n downloadForExcel: boolean;\n onDataFrameChange: (item: SelectableValue) => void;\n toggleDownloadForExcel: () => void;\n data?: DataFrame[];\n panel?: PanelModel;\n onOptionsChange?: (options: GetDataOptions) => void;\n}\n\nexport const InspectDataOptions: FC = ({\n options,\n onOptionsChange,\n panel,\n data,\n dataFrames,\n transformId,\n transformationOptions,\n selectedDataFrame,\n onDataFrameChange,\n downloadForExcel,\n toggleDownloadForExcel,\n}) => {\n const styles = getPanelInspectorStyles();\n\n const panelTransformations = panel?.getTransformations();\n const showPanelTransformationsOption =\n Boolean(panelTransformations?.length) && (transformId as any) !== 'join by time';\n const showFieldConfigsOption = panel && !panel.plugin?.fieldConfigRegistry.isEmpty();\n\n let dataSelect = dataFrames;\n if (selectedDataFrame === DataTransformerID.joinByField) {\n dataSelect = data!;\n }\n\n const choices = dataSelect.map((frame, index) => {\n return {\n value: index,\n label: `${getFrameDisplayName(frame)} (${index})`,\n } as SelectableValue;\n });\n\n const selectableOptions = [...transformationOptions, ...choices];\n\n function getActiveString() {\n let activeString = '';\n\n if (!data) {\n return activeString;\n }\n\n const parts: string[] = [];\n\n if (selectedDataFrame === DataTransformerID.joinByField) {\n parts.push(t({ id: 'dashboard.inspect-data.series-to-columns', message: 'Series joined by time' }));\n } else if (data.length > 1) {\n parts.push(getFrameDisplayName(data[selectedDataFrame as number]));\n }\n\n if (options.withTransforms || options.withFieldConfig) {\n if (options.withTransforms) {\n parts.push(t({ id: 'dashboard.inspect-data.panel-transforms', message: 'Panel transforms' }));\n }\n\n if (options.withTransforms && options.withFieldConfig) {\n }\n\n if (options.withFieldConfig) {\n parts.push(t({ id: 'dashboard.inspect-data.formatted', message: 'Formatted data' }));\n }\n }\n\n if (downloadForExcel) {\n parts.push(t({ id: 'dashboard.inspect-data.excel-header', message: 'Excel header' }));\n }\n\n return parts.join(', ');\n }\n\n return (\n
\n {getActiveString()}}\n isOpen={false}\n >\n
\n \n {data!.length > 1 && (\n \n \n \n )}\n\n \n {showPanelTransformationsOption && onOptionsChange && (\n \n onOptionsChange({ ...options, withTransforms: !options.withTransforms })}\n />\n \n )}\n {showFieldConfigsOption && onOptionsChange && (\n \n onOptionsChange({ ...options, withFieldConfig: !options.withFieldConfig })}\n />\n \n )}\n \n \n \n \n \n
\n \n
\n );\n};\n","import { css } from '@emotion/css';\nimport { Trans, t } from '@lingui/macro';\nimport { saveAs } from 'file-saver';\nimport React, { PureComponent } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport {\n applyFieldOverrides,\n applyRawFieldOverrides,\n CSVConfig,\n DataFrame,\n DataTransformerID,\n dateTimeFormat,\n dateTimeFormatISO,\n MutableDataFrame,\n SelectableValue,\n toCSV,\n transformDataFrame,\n TimeZone,\n CoreApp,\n} from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { reportInteraction } from '@grafana/runtime';\nimport { Button, Spinner, Table } from '@grafana/ui';\nimport { config } from 'app/core/config';\nimport { dataFrameToLogsModel } from 'app/core/logsModel';\nimport { PanelModel } from 'app/features/dashboard/state';\nimport { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';\nimport { transformToJaeger } from 'app/plugins/datasource/jaeger/responseTransform';\nimport { transformToOTLP } from 'app/plugins/datasource/tempo/resultTransformer';\nimport { transformToZipkin } from 'app/plugins/datasource/zipkin/utils/transforms';\n\nimport { InspectDataOptions } from './InspectDataOptions';\nimport { getPanelInspectorStyles } from './styles';\n\ninterface Props {\n isLoading: boolean;\n options: GetDataOptions;\n timeZone: TimeZone;\n app?: CoreApp;\n data?: DataFrame[];\n panel?: PanelModel;\n onOptionsChange?: (options: GetDataOptions) => void;\n}\n\ninterface State {\n /** The string is joinByField transformation. Otherwise it is a dataframe index */\n selectedDataFrame: number | DataTransformerID;\n transformId: DataTransformerID;\n dataFrameIndex: number;\n transformationOptions: Array>;\n transformedData: DataFrame[];\n downloadForExcel: boolean;\n}\n\nexport class InspectDataTab extends PureComponent {\n constructor(props: Props) {\n super(props);\n\n this.state = {\n selectedDataFrame: 0,\n dataFrameIndex: 0,\n transformId: DataTransformerID.noop,\n transformationOptions: buildTransformationOptions(),\n transformedData: props.data ?? [],\n downloadForExcel: false,\n };\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if (!this.props.data) {\n this.setState({ transformedData: [] });\n return;\n }\n\n if (this.props.options.withTransforms) {\n this.setState({ transformedData: this.props.data });\n return;\n }\n\n if (prevProps.data !== this.props.data || prevState.transformId !== this.state.transformId) {\n const currentTransform = this.state.transformationOptions.find((item) => item.value === this.state.transformId);\n\n if (currentTransform && currentTransform.transformer.id !== DataTransformerID.noop) {\n const selectedDataFrame = this.state.selectedDataFrame;\n const dataFrameIndex = this.state.dataFrameIndex;\n const subscription = transformDataFrame([currentTransform.transformer], this.props.data).subscribe((data) => {\n this.setState({ transformedData: data, selectedDataFrame, dataFrameIndex }, () => subscription.unsubscribe());\n });\n return;\n }\n\n this.setState({ transformedData: this.props.data });\n return;\n }\n }\n\n exportCsv = (dataFrame: DataFrame, csvConfig: CSVConfig = {}) => {\n const { panel } = this.props;\n const { transformId } = this.state;\n\n const dataFrameCsv = toCSV([dataFrame], csvConfig);\n\n const blob = new Blob([String.fromCharCode(0xfeff), dataFrameCsv], {\n type: 'text/csv;charset=utf-8',\n });\n const displayTitle = panel ? panel.getDisplayTitle() : 'Explore';\n const transformation = transformId !== DataTransformerID.noop ? '-as-' + transformId.toLocaleLowerCase() : '';\n const fileName = `${displayTitle}-data${transformation}-${dateTimeFormat(new Date())}.csv`;\n saveAs(blob, fileName);\n };\n\n exportLogsAsTxt = () => {\n const { data, panel, app } = this.props;\n reportInteraction('grafana_logs_download_logs_clicked', {\n app,\n format: 'logs',\n });\n const logsModel = dataFrameToLogsModel(data || [], undefined);\n let textToDownload = '';\n\n logsModel.meta?.forEach((metaItem) => {\n const string = `${metaItem.label}: ${JSON.stringify(metaItem.value)}\\n`;\n textToDownload = textToDownload + string;\n });\n textToDownload = textToDownload + '\\n\\n';\n\n logsModel.rows.forEach((row) => {\n const newRow = dateTimeFormatISO(row.timeEpochMs) + '\\t' + row.entry + '\\n';\n textToDownload = textToDownload + newRow;\n });\n\n const blob = new Blob([textToDownload], {\n type: 'text/plain;charset=utf-8',\n });\n const displayTitle = panel ? panel.getDisplayTitle() : 'Explore';\n const fileName = `${displayTitle}-logs-${dateTimeFormat(new Date())}.txt`;\n saveAs(blob, fileName);\n };\n\n exportTracesAsJson = () => {\n const { data, panel } = this.props;\n if (!data) {\n return;\n }\n\n for (const df of data) {\n // Only export traces\n if (df.meta?.preferredVisualisationType !== 'trace') {\n continue;\n }\n\n switch (df.meta?.custom?.traceFormat) {\n case 'jaeger': {\n let res = transformToJaeger(new MutableDataFrame(df));\n this.saveTraceJson(res, panel);\n break;\n }\n case 'zipkin': {\n let res = transformToZipkin(new MutableDataFrame(df));\n this.saveTraceJson(res, panel);\n break;\n }\n case 'otlp':\n default: {\n let res = transformToOTLP(new MutableDataFrame(df));\n this.saveTraceJson(res, panel);\n break;\n }\n }\n }\n };\n\n saveTraceJson = (json: any, panel?: PanelModel) => {\n const blob = new Blob([JSON.stringify(json)], {\n type: 'application/json',\n });\n const displayTitle = panel ? panel.getDisplayTitle() : 'Explore';\n const fileName = `${displayTitle}-traces-${dateTimeFormat(new Date())}.json`;\n saveAs(blob, fileName);\n };\n\n exportServiceGraph = () => {\n const { data, panel } = this.props;\n if (!data) {\n return;\n }\n\n const blob = new Blob([JSON.stringify(data)], {\n type: 'application/json',\n });\n const displayTitle = panel ? panel.getDisplayTitle() : 'Explore';\n const fileName = `${displayTitle}-service-graph-${dateTimeFormat(new Date())}.json`;\n saveAs(blob, fileName);\n };\n\n onDataFrameChange = (item: SelectableValue) => {\n this.setState({\n transformId:\n item.value === DataTransformerID.joinByField ? DataTransformerID.joinByField : DataTransformerID.noop,\n dataFrameIndex: typeof item.value === 'number' ? item.value : 0,\n selectedDataFrame: item.value!,\n });\n };\n\n toggleDownloadForExcel = () => {\n this.setState((prevState) => ({\n downloadForExcel: !prevState.downloadForExcel,\n }));\n };\n\n getProcessedData(): DataFrame[] {\n const { options, panel, timeZone } = this.props;\n const data = this.state.transformedData;\n\n if (!options.withFieldConfig || !panel) {\n return applyRawFieldOverrides(data);\n }\n\n // We need to apply field config even though it was already applied in the PanelQueryRunner.\n // That's because transformers create new fields and data frames, so i.e. display processor is no longer there\n return applyFieldOverrides({\n data,\n theme: config.theme2,\n fieldConfig: panel.fieldConfig,\n timeZone,\n replaceVariables: (value: string) => {\n return value;\n },\n });\n }\n\n render() {\n const { isLoading, options, data, panel, onOptionsChange, app } = this.props;\n const { dataFrameIndex, transformId, transformationOptions, selectedDataFrame, downloadForExcel } = this.state;\n const styles = getPanelInspectorStyles();\n\n if (isLoading) {\n return (\n
\n Loading\n
\n );\n }\n\n const dataFrames = this.getProcessedData();\n\n if (!dataFrames || !dataFrames.length) {\n return
No Data
;\n }\n\n // let's make sure we don't try to render a frame that doesn't exists\n const index = !dataFrames[dataFrameIndex] ? 0 : dataFrameIndex;\n const dataFrame = dataFrames[index];\n const hasLogs = dataFrames.some((df) => df?.meta?.preferredVisualisationType === 'logs');\n const hasTraces = dataFrames.some((df) => df?.meta?.preferredVisualisationType === 'trace');\n const hasServiceGraph = dataFrames.some((df) => df?.meta?.preferredVisualisationType === 'nodeGraph');\n\n return (\n
\n
\n \n {\n if (hasLogs) {\n reportInteraction('grafana_logs_download_clicked', {\n app,\n format: 'csv',\n });\n }\n this.exportCsv(dataFrames[dataFrameIndex], { useExcelHeader: this.state.downloadForExcel });\n }}\n className={css`\n margin-bottom: 10px;\n `}\n >\n Download CSV\n \n {hasLogs && (\n \n Download logs\n \n )}\n {hasTraces && (\n \n Download traces\n \n )}\n {hasServiceGraph && (\n \n Download service graph\n \n )}\n
\n
\n \n {({ width, height }) => {\n if (width === 0) {\n return null;\n }\n\n return (\n
\n \n \n );\n }}\n \n \n \n );\n }\n}\n\nfunction buildTransformationOptions() {\n const transformations: Array> = [\n {\n value: DataTransformerID.joinByField,\n label: t({\n id: 'dashboard.inspect-data.transformation',\n message: 'Series joined by time',\n }),\n transformer: {\n id: DataTransformerID.joinByField,\n options: { byField: undefined }, // defaults to time field\n },\n },\n ];\n\n return transformations;\n}\n","import React from 'react';\n\nimport { DataQueryError } from '@grafana/data';\nimport { JSONFormatter } from '@grafana/ui';\n\ninterface InspectErrorTabProps {\n error?: DataQueryError;\n}\n\nconst parseErrorMessage = (message: string): { msg: string; json?: any } => {\n try {\n const [msg, json] = message.split(/(\\{.+)/);\n const jsonError = JSON.parse(json);\n return {\n msg,\n json: jsonError,\n };\n } catch {\n return { msg: message };\n }\n};\n\nexport const InspectErrorTab: React.FC = ({ error }) => {\n if (!error) {\n return null;\n }\n if (error.data) {\n return (\n <>\n

{error.data.message}

\n \n \n );\n }\n if (error.message) {\n const { msg, json } = parseErrorMessage(error.message);\n if (!json) {\n return
{msg}
;\n } else {\n return (\n <>\n {msg !== '' &&

{msg}

}\n \n \n );\n }\n }\n return ;\n};\n","import { t } from '@lingui/macro';\nimport React, { PureComponent } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { firstValueFrom } from 'rxjs';\n\nimport { AppEvents, PanelData, SelectableValue, LoadingState } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { locationService } from '@grafana/runtime';\nimport { Button, CodeEditor, Field, Select } from '@grafana/ui';\nimport { appEvents } from 'app/core/core';\nimport { DashboardModel, PanelModel } from 'app/features/dashboard/state';\n\nimport { getPanelDataFrames } from '../dashboard/components/HelpWizard/utils';\nimport { getPanelInspectorStyles } from '../inspector/styles';\n\nimport { InspectTab } from './types';\n\nenum ShowContent {\n PanelJSON = 'panel',\n PanelData = 'data',\n DataFrames = 'frames',\n}\n\nconst options: Array> = [\n {\n label: t({ id: 'dashboard.inspect-json.panel-json-label', message: 'Panel JSON' }),\n description: t({\n id: 'dashboard.inspect-json.panel-json-description',\n message: 'The model saved in the dashboard JSON that configures how everything works.',\n }),\n value: ShowContent.PanelJSON,\n },\n {\n label: t({ id: 'dashboard.inspect-json.panel-data-label', message: 'Panel data' }),\n description: t({\n id: 'dashboard.inspect-json.panel-data-description',\n message: 'The raw model passed to the panel visualization',\n }),\n value: ShowContent.PanelData,\n },\n {\n label: t({ id: 'dashboard.inspect-json.dataframe-label', message: 'DataFrame JSON (from Query)' }),\n description: t({\n id: 'dashboard.inspect-json.dataframe-description',\n message: 'Raw data without transformations and field config applied. ',\n }),\n value: ShowContent.DataFrames,\n },\n];\n\ninterface Props {\n onClose: () => void;\n dashboard?: DashboardModel;\n panel?: PanelModel;\n data?: PanelData;\n}\n\ninterface State {\n show: ShowContent;\n text: string;\n}\n\nexport class InspectJSONTab extends PureComponent {\n hasPanelJSON: boolean;\n\n constructor(props: Props) {\n super(props);\n this.hasPanelJSON = !!(props.panel && props.dashboard);\n // If we are in panel, we want to show PanelJSON, otherwise show DataFrames\n this.state = {\n show: this.hasPanelJSON ? ShowContent.PanelJSON : ShowContent.DataFrames,\n text: this.hasPanelJSON ? getPrettyJSON(props.panel!.getSaveModel()) : getPrettyJSON(props.data),\n };\n }\n\n onSelectChanged = async (item: SelectableValue) => {\n const show = await this.getJSONObject(item.value!);\n const text = getPrettyJSON(show);\n this.setState({ text, show: item.value! });\n };\n\n // Called onBlur\n onTextChanged = (text: string) => {\n this.setState({ text });\n };\n\n async getJSONObject(show: ShowContent) {\n const { data, panel } = this.props;\n if (show === ShowContent.PanelData) {\n return data;\n }\n\n if (show === ShowContent.DataFrames) {\n let d = data;\n\n // do not include transforms and\n if (panel && data?.state === LoadingState.Done) {\n d = await firstValueFrom(\n panel.getQueryRunner().getData({\n withFieldConfig: false,\n withTransforms: false,\n })\n );\n }\n return getPanelDataFrames(d);\n }\n\n if (this.hasPanelJSON && show === ShowContent.PanelJSON) {\n return panel!.getSaveModel();\n }\n\n return { note: t({ id: 'dashboard.inspect-json.unknown', message: `Unknown Object: ${show}` }) };\n }\n\n onApplyPanelModel = () => {\n const { panel, dashboard, onClose } = this.props;\n if (this.hasPanelJSON) {\n try {\n if (!dashboard!.meta.canEdit) {\n appEvents.emit(AppEvents.alertError, ['Unable to apply']);\n } else {\n const updates = JSON.parse(this.state.text);\n dashboard!.shouldUpdateDashboardPanelFromJSON(updates, panel!);\n panel!.restoreModel(updates);\n panel!.refresh();\n appEvents.emit(AppEvents.alertSuccess, ['Panel model updated']);\n }\n } catch (err) {\n console.error('Error applying updates', err);\n appEvents.emit(AppEvents.alertError, ['Invalid JSON text']);\n }\n\n onClose();\n }\n };\n\n onShowHelpWizard = () => {\n const queryParms = locationService.getSearch();\n queryParms.set('inspectTab', InspectTab.Help.toString());\n locationService.push('?' + queryParms.toString());\n };\n\n render() {\n const { dashboard } = this.props;\n const { show, text } = this.state;\n const jsonOptions = this.hasPanelJSON ? options : options.slice(1, options.length);\n const selected = options.find((v) => v.value === show);\n const isPanelJSON = show === ShowContent.PanelJSON;\n const canEdit = dashboard && dashboard.meta.canEdit;\n const styles = getPanelInspectorStyles();\n\n return (\n
\n
\n \n \n \n {this.hasPanelJSON && isPanelJSON && canEdit && (\n \n )}\n {show === ShowContent.DataFrames && (\n \n )}\n
\n
\n \n {({ height }) => (\n 100}\n value={text || ''}\n readOnly={!isPanelJSON}\n onBlur={this.onTextChanged}\n />\n )}\n \n
\n
\n );\n }\n}\n\nfunction getPrettyJSON(obj: any): string {\n return JSON.stringify(obj, null, 2);\n}\n","import { css } from '@emotion/css';\nimport React from 'react';\n\nimport {\n FieldType,\n formattedValueToString,\n getDisplayProcessor,\n GrafanaTheme2,\n QueryResultMetaStat,\n TimeZone,\n} from '@grafana/data';\nimport { stylesFactory, useTheme2 } from '@grafana/ui';\n\ninterface InspectStatsTableProps {\n timeZone: TimeZone;\n name: string;\n stats: QueryResultMetaStat[];\n}\n\nexport const InspectStatsTable: React.FC = ({ timeZone, name, stats }) => {\n const theme = useTheme2();\n const styles = getStyles(theme);\n\n if (!stats || !stats.length) {\n return null;\n }\n\n return (\n
\n
{name}
\n
\n \n {stats.map((stat, index) => {\n return (\n \n \n \n \n );\n })}\n \n
{stat.displayName}{formatStat(stat, timeZone, theme)}
\n
\n );\n};\n\nfunction formatStat(stat: QueryResultMetaStat, timeZone: TimeZone, theme: GrafanaTheme2): string {\n const display = getDisplayProcessor({\n field: {\n type: FieldType.number,\n config: stat,\n },\n theme,\n timeZone,\n });\n return formattedValueToString(display(stat.value));\n}\n\nconst getStyles = stylesFactory((theme: GrafanaTheme2) => {\n return {\n wrapper: css`\n padding-bottom: ${theme.spacing(2)};\n `,\n cell: css`\n text-align: right;\n `,\n };\n});\n","import { t } from '@lingui/macro';\nimport React from 'react';\n\nimport { PanelData, QueryResultMetaStat, TimeZone } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { InspectStatsTable } from './InspectStatsTable';\n\ninterface InspectStatsTabProps {\n data: PanelData;\n timeZone: TimeZone;\n}\n\nexport const InspectStatsTab: React.FC = ({ data, timeZone }) => {\n if (!data.request) {\n return null;\n }\n\n let stats: QueryResultMetaStat[] = [];\n\n const requestTime = data.request.endTime ? data.request.endTime - data.request.startTime : -1;\n const processingTime = data.timings?.dataProcessingTime || -1;\n let dataRows = 0;\n\n for (const frame of data.series) {\n dataRows += frame.length;\n }\n\n if (requestTime > 0) {\n stats.push({\n displayName: t({ id: 'dashboard.inspect-stats.request-time', message: 'Total request time' }),\n value: requestTime,\n unit: 'ms',\n });\n }\n if (processingTime > 0) {\n stats.push({\n displayName: t({ id: 'dashboard.inspect-stats.processing-time', message: 'Data processing time' }),\n value: processingTime,\n unit: 'ms',\n });\n }\n stats.push({\n displayName: t({ id: 'dashboard.inspect-stats.queries', message: 'Number of queries' }),\n value: data.request.targets.length,\n });\n stats.push({\n displayName: t({ id: 'dashboard.inspect-stats.rows', message: 'Total number rows' }),\n value: dataRows,\n });\n\n let dataStats: QueryResultMetaStat[] = [];\n\n for (const series of data.series) {\n if (series.meta && series.meta.stats) {\n dataStats = dataStats.concat(series.meta.stats);\n }\n }\n\n const statsTableName = t({ id: 'dashboard.inspect-stats.table-title', message: 'Stats' });\n const dataStatsTableName = t({ id: 'dashboard.inspect-stats.data-title', message: 'Data source stats' });\n\n return (\n
\n \n \n
\n );\n};\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\nimport { Subscription } from 'rxjs';\n\nimport { DataFrame } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { config, RefreshEvent } from '@grafana/runtime';\nimport { Button, ClipboardButton, JSONFormatter, LoadingPlaceholder, Stack } from '@grafana/ui';\nimport { backendSrv } from 'app/core/services/backend_srv';\nimport { supportsDataQuery } from 'app/features/dashboard/components/PanelEditor/utils';\nimport { PanelModel } from 'app/features/dashboard/state';\n\nimport { getPanelInspectorStyles } from './styles';\n\ninterface DsQuery {\n isLoading: boolean;\n response: {};\n}\n\ninterface ExecutedQueryInfo {\n refId: string;\n query: string;\n frames: number;\n rows: number;\n}\n\ninterface Props {\n data: DataFrame[];\n onRefreshQuery: () => void;\n panel?: PanelModel;\n}\n\ninterface State {\n allNodesExpanded: boolean | null;\n isMocking: boolean;\n mockedResponse: string;\n dsQuery: DsQuery;\n executedQueries: ExecutedQueryInfo[];\n}\n\nexport class QueryInspector extends PureComponent {\n private formattedJson: any;\n private subs = new Subscription();\n\n constructor(props: Props) {\n super(props);\n this.state = {\n executedQueries: [],\n allNodesExpanded: null,\n isMocking: false,\n mockedResponse: '',\n dsQuery: {\n isLoading: false,\n response: {},\n },\n };\n }\n\n componentDidMount() {\n const { panel } = this.props;\n\n this.subs.add(\n backendSrv.getInspectorStream().subscribe({\n next: (response) => this.onDataSourceResponse(response),\n })\n );\n\n if (panel) {\n this.subs.add(panel.events.subscribe(RefreshEvent, this.onPanelRefresh));\n this.updateQueryList();\n }\n }\n\n componentDidUpdate(oldProps: Props) {\n if (this.props.data !== oldProps.data) {\n this.updateQueryList();\n }\n }\n\n /**\n * Find the list of executed queries\n */\n updateQueryList() {\n const { data } = this.props;\n const executedQueries: ExecutedQueryInfo[] = [];\n\n if (data?.length) {\n let last: ExecutedQueryInfo | undefined = undefined;\n\n data.forEach((frame, idx) => {\n const query = frame.meta?.executedQueryString;\n\n if (query) {\n const refId = frame.refId || '?';\n\n if (last?.refId === refId) {\n last.frames++;\n last.rows += frame.length;\n } else {\n last = {\n refId,\n frames: 0,\n rows: frame.length,\n query,\n };\n executedQueries.push(last);\n }\n }\n });\n }\n\n this.setState({ executedQueries });\n }\n\n componentWillUnmount() {\n this.subs.unsubscribe();\n }\n\n onPanelRefresh = () => {\n this.setState((prevState) => ({\n ...prevState,\n dsQuery: {\n isLoading: true,\n response: {},\n },\n }));\n };\n\n onDataSourceResponse(response: any) {\n // ignore silent requests\n if (response.config?.hideFromInspector) {\n return;\n }\n\n response = { ...response }; // clone - dont modify the response\n\n if (response.headers) {\n delete response.headers;\n }\n\n if (response.config) {\n response.request = response.config;\n\n delete response.config;\n delete response.request.transformRequest;\n delete response.request.transformResponse;\n delete response.request.paramSerializer;\n delete response.request.jsonpCallbackParam;\n delete response.request.headers;\n delete response.request.requestId;\n delete response.request.inspect;\n delete response.request.retry;\n delete response.request.timeout;\n }\n\n if (response.data) {\n response.response = response.data;\n\n delete response.config;\n delete response.data;\n delete response.status;\n delete response.statusText;\n delete response.ok;\n delete response.url;\n delete response.redirected;\n delete response.type;\n delete response.$$config;\n }\n\n this.setState((prevState) => ({\n ...prevState,\n dsQuery: {\n isLoading: false,\n response: response,\n },\n }));\n }\n\n setFormattedJson = (formattedJson: any) => {\n this.formattedJson = formattedJson;\n };\n\n getTextForClipboard = () => {\n return JSON.stringify(this.formattedJson, null, 2);\n };\n\n onToggleExpand = () => {\n this.setState((prevState) => ({\n ...prevState,\n allNodesExpanded: !this.state.allNodesExpanded,\n }));\n };\n\n onToggleMocking = () => {\n this.setState((prevState) => ({\n ...prevState,\n isMocking: !this.state.isMocking,\n }));\n };\n\n getNrOfOpenNodes = () => {\n if (this.state.allNodesExpanded === null) {\n return 3; // 3 is default, ie when state is null\n } else if (this.state.allNodesExpanded) {\n return 20;\n }\n return 1;\n };\n\n setMockedResponse = (evt: any) => {\n const mockedResponse = evt.target.value;\n this.setState((prevState) => ({\n ...prevState,\n mockedResponse,\n }));\n };\n\n renderExecutedQueries(executedQueries: ExecutedQueryInfo[]) {\n if (!executedQueries.length) {\n return null;\n }\n\n const styles = {\n refId: css`\n font-weight: ${config.theme.typography.weight.semibold};\n color: ${config.theme.colors.textBlue};\n margin-right: 8px;\n `,\n };\n\n return (\n
\n {executedQueries.map((info) => {\n return (\n \n
\n {info.refId}:\n {info.frames > 1 && {info.frames} frames, }\n {info.rows} rows\n
\n
{info.query}
\n
\n );\n })}\n
\n );\n }\n\n render() {\n const { allNodesExpanded, executedQueries } = this.state;\n const { panel, onRefreshQuery } = this.props;\n const { response, isLoading } = this.state.dsQuery;\n const openNodes = this.getNrOfOpenNodes();\n const styles = getPanelInspectorStyles();\n const haveData = Object.keys(response).length > 0;\n\n if (panel && !supportsDataQuery(panel.plugin)) {\n return null;\n }\n\n return (\n
\n
\n

Query inspector

\n

\n Query inspector allows you to view raw request and response. To collect this data Grafana needs to issue a\n new query. Click refresh button below to trigger a new query.\n

\n
\n {this.renderExecutedQueries(executedQueries)}\n
\n \n Refresh\n \n\n {haveData && allNodesExpanded && (\n \n )}\n {haveData && !allNodesExpanded && (\n \n )}\n\n {haveData && (\n \n Copy to clipboard\n \n )}\n
\n
\n
\n {isLoading && }\n {!isLoading && haveData && (\n \n )}\n {!isLoading && !haveData && (\n

No request and response collected yet. Hit refresh button

\n )}\n
\n
\n );\n }\n}\n","import { css } from '@emotion/css';\n\nimport { stylesFactory } from '@grafana/ui';\nimport { config } from 'app/core/config';\n\nexport const getPanelInspectorStyles = stylesFactory(() => {\n return {\n wrap: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n flex: 1 1 0;\n `,\n toolbar: css`\n display: flex;\n width: 100%;\n flex-grow: 0;\n align-items: center;\n justify-content: flex-end;\n margin-bottom: ${config.theme.spacing.sm};\n `,\n toolbarItem: css`\n margin-left: ${config.theme.spacing.md};\n `,\n content: css`\n flex-grow: 1;\n height: 100%;\n overflow: scroll;\n `,\n editor: css`\n font-family: monospace;\n height: 100%;\n flex-grow: 1;\n `,\n viewer: css`\n overflow: scroll;\n `,\n dataFrameSelect: css`\n flex-grow: 2;\n `,\n leftActions: css`\n display: flex;\n flex-grow: 1;\n\n max-width: 85%;\n @media (max-width: 1345px) {\n max-width: 75%;\n }\n `,\n options: css`\n padding-top: ${config.theme.spacing.sm};\n `,\n dataDisplayOptions: css`\n flex-grow: 1;\n min-width: 300px;\n margin-right: ${config.theme.spacing.sm};\n `,\n selects: css`\n display: flex;\n > * {\n margin-right: ${config.theme.spacing.sm};\n }\n `,\n };\n});\n","export enum InspectTab {\n Data = 'data',\n Meta = 'meta', // When result metadata exists\n Error = 'error',\n Stats = 'stats',\n JSON = 'json',\n Query = 'query',\n Actions = 'actions', // ALPHA!\n Help = 'help', // get info required for support+debugging\n}\n","import React, { PureComponent } from 'react';\nimport { DragDropContext, DragStart, Droppable, DropResult } from 'react-beautiful-dnd';\n\nimport {\n CoreApp,\n DataQuery,\n DataSourceInstanceSettings,\n DataSourceRef,\n EventBusExtended,\n HistoryItem,\n PanelData,\n} from '@grafana/data';\nimport { getDataSourceSrv, reportInteraction } from '@grafana/runtime';\n\nimport { QueryEditorRow } from './QueryEditorRow';\n\ninterface Props {\n // The query configuration\n queries: DataQuery[];\n dsSettings: DataSourceInstanceSettings;\n\n // Query editing\n onQueriesChange: (queries: DataQuery[]) => void;\n onAddQuery: (query: DataQuery) => void;\n onRunQueries: () => void;\n\n // Query Response Data\n data: PanelData;\n\n // Misc\n app?: CoreApp;\n history?: Array>;\n eventBus?: EventBusExtended;\n onQueryCopied?: () => void;\n onQueryRemoved?: () => void;\n onQueryToggled?: (queryStatus?: boolean | undefined) => void;\n onDatasourceChange?: (dataSource: DataSourceInstanceSettings, query: DataQuery) => void;\n}\n\nexport class QueryEditorRows extends PureComponent {\n onRemoveQuery = (query: DataQuery) => {\n this.props.onQueriesChange(this.props.queries.filter((item) => item !== query));\n };\n\n onChangeQuery(query: DataQuery, index: number) {\n const { queries, onQueriesChange } = this.props;\n\n // update query in array\n onQueriesChange(\n queries.map((item, itemIndex) => {\n if (itemIndex === index) {\n return query;\n }\n return item;\n })\n );\n }\n\n onDataSourceChange(dataSource: DataSourceInstanceSettings, index: number) {\n const { queries, onQueriesChange } = this.props;\n\n if (this.props.onDatasourceChange) {\n this.props.onDatasourceChange(dataSource, queries[index]);\n }\n\n onQueriesChange(\n queries.map((item, itemIndex) => {\n if (itemIndex !== index) {\n return item;\n }\n\n const dataSourceRef: DataSourceRef = {\n type: dataSource.type,\n uid: dataSource.uid,\n };\n\n if (item.datasource) {\n const previous = getDataSourceSrv().getInstanceSettings(item.datasource);\n\n if (previous?.type === dataSource.type) {\n return {\n ...item,\n datasource: dataSourceRef,\n };\n }\n }\n\n return {\n refId: item.refId,\n hide: item.hide,\n datasource: dataSourceRef,\n };\n })\n );\n }\n\n onDragStart = (result: DragStart) => {\n const { queries, dsSettings } = this.props;\n\n reportInteraction('query_row_reorder_started', {\n startIndex: result.source.index,\n numberOfQueries: queries.length,\n datasourceType: dsSettings.type,\n });\n };\n\n onDragEnd = (result: DropResult) => {\n const { queries, onQueriesChange, dsSettings } = this.props;\n\n if (!result || !result.destination) {\n return;\n }\n\n const startIndex = result.source.index;\n const endIndex = result.destination.index;\n if (startIndex === endIndex) {\n reportInteraction('query_row_reorder_canceled', {\n startIndex,\n endIndex,\n numberOfQueries: queries.length,\n datasourceType: dsSettings.type,\n });\n return;\n }\n\n const update = Array.from(queries);\n const [removed] = update.splice(startIndex, 1);\n update.splice(endIndex, 0, removed);\n onQueriesChange(update);\n\n reportInteraction('query_row_reorder_ended', {\n startIndex,\n endIndex,\n numberOfQueries: queries.length,\n datasourceType: dsSettings.type,\n });\n };\n\n render() {\n const {\n dsSettings,\n data,\n queries,\n app,\n history,\n eventBus,\n onAddQuery,\n onRunQueries,\n onQueryCopied,\n onQueryRemoved,\n onQueryToggled,\n } = this.props;\n\n return (\n \n \n {(provided) => {\n return (\n
\n {queries.map((query, index) => {\n const dataSourceSettings = getDataSourceSettings(query, dsSettings);\n const onChangeDataSourceSettings = dsSettings.meta.mixed\n ? (settings: DataSourceInstanceSettings) => this.onDataSourceChange(settings, index)\n : undefined;\n\n return (\n this.onChangeQuery(query, index)}\n onRemoveQuery={this.onRemoveQuery}\n onAddQuery={onAddQuery}\n onRunQuery={onRunQueries}\n onQueryCopied={onQueryCopied}\n onQueryRemoved={onQueryRemoved}\n onQueryToggled={onQueryToggled}\n queries={queries}\n app={app}\n history={history}\n eventBus={eventBus}\n />\n );\n })}\n {provided.placeholder}\n
\n );\n }}\n
\n
\n );\n }\n}\n\nconst getDataSourceSettings = (\n query: DataQuery,\n groupSettings: DataSourceInstanceSettings\n): DataSourceInstanceSettings => {\n if (!query.datasource) {\n return groupSettings;\n }\n const querySettings = getDataSourceSrv().getInstanceSettings(query.datasource);\n return querySettings || groupSettings;\n};\n","import {\n DataFrame,\n DataSourceInstanceSettings,\n FieldType,\n MutableDataFrame,\n TraceLog,\n TraceSpanRow,\n} from '@grafana/data';\nimport { transformTraceData } from '@jaegertracing/jaeger-ui-components';\n\nimport { JaegerResponse, Span, TraceProcess, TraceResponse } from './types';\n\nexport function createTraceFrame(data: TraceResponse): DataFrame {\n const spans = data.spans.map((s) => toSpanRow(s, data.processes));\n\n const frame = new MutableDataFrame({\n fields: [\n { name: 'traceID', type: FieldType.string },\n { name: 'spanID', type: FieldType.string },\n { name: 'parentSpanID', type: FieldType.string },\n { name: 'operationName', type: FieldType.string },\n { name: 'serviceName', type: FieldType.string },\n { name: 'serviceTags', type: FieldType.other },\n { name: 'startTime', type: FieldType.number },\n { name: 'duration', type: FieldType.number },\n { name: 'logs', type: FieldType.other },\n { name: 'tags', type: FieldType.other },\n { name: 'warnings', type: FieldType.other },\n { name: 'stackTraces', type: FieldType.other },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'jaeger',\n },\n },\n });\n\n for (const span of spans) {\n frame.add(span);\n }\n\n return frame;\n}\n\nfunction toSpanRow(span: Span, processes: Record): TraceSpanRow {\n return {\n spanID: span.spanID,\n traceID: span.traceID,\n parentSpanID: span.references?.find((r) => r.refType === 'CHILD_OF')?.spanID,\n operationName: span.operationName,\n // from micro to millis\n startTime: span.startTime / 1000,\n duration: span.duration / 1000,\n logs: span.logs.map((l) => ({\n ...l,\n timestamp: l.timestamp / 1000,\n })),\n tags: span.tags,\n warnings: span.warnings ?? undefined,\n stackTraces: span.stackTraces,\n serviceName: processes[span.processID].serviceName,\n serviceTags: processes[span.processID].tags,\n };\n}\n\nexport function createTableFrame(data: TraceResponse[], instanceSettings: DataSourceInstanceSettings): DataFrame {\n const frame = new MutableDataFrame({\n fields: [\n {\n name: 'traceID',\n type: FieldType.string,\n config: {\n unit: 'string',\n displayNameFromDS: 'Trace ID',\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 },\n },\n },\n ],\n },\n },\n { name: 'traceName', type: FieldType.string, config: { displayNameFromDS: 'Trace name' } },\n { name: 'startTime', type: FieldType.time, config: { displayNameFromDS: 'Start time' } },\n { name: 'duration', type: FieldType.number, config: { displayNameFromDS: 'Duration', unit: 'µs' } },\n ],\n meta: {\n preferredVisualisationType: 'table',\n },\n });\n // Show the most recent traces\n const traceData = data.map(transformToTraceData).sort((a, b) => b?.startTime! - a?.startTime!);\n\n for (const trace of traceData) {\n frame.add(trace);\n }\n\n return frame;\n}\n\nfunction transformToTraceData(data: TraceResponse) {\n const traceData = transformTraceData(data);\n if (!traceData) {\n return;\n }\n\n return {\n traceID: traceData.traceID,\n startTime: traceData.startTime / 1000,\n duration: traceData.duration,\n traceName: traceData.traceName,\n };\n}\n\nexport function transformToJaeger(data: MutableDataFrame): JaegerResponse {\n let traceResponse: TraceResponse = {\n traceID: '',\n spans: [],\n processes: {},\n warnings: null,\n };\n let processes: string[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const span = data.get(i);\n\n // Set traceID\n if (!traceResponse.traceID) {\n traceResponse.traceID = span.traceID;\n }\n\n // Create process if doesn't exist\n if (!processes.find((p) => p === span.serviceName)) {\n processes.push(span.serviceName);\n traceResponse.processes[`p${processes.length}`] = {\n serviceName: span.serviceName,\n tags: span.serviceTags,\n };\n }\n\n // Create span\n traceResponse.spans.push({\n traceID: span.traceID,\n spanID: span.spanID,\n duration: span.duration * 1000,\n references: span.parentSpanID\n ? [\n {\n refType: 'CHILD_OF',\n spanID: span.parentSpanID,\n traceID: span.traceID,\n },\n ]\n : [],\n flags: 0,\n logs: span.logs.map((l: TraceLog) => ({\n ...l,\n timestamp: l.timestamp * 1000,\n })),\n operationName: span.operationName,\n processID:\n Object.keys(traceResponse.processes).find(\n (key) => traceResponse.processes[key].serviceName === span.serviceName\n ) || '',\n startTime: span.startTime * 1000,\n tags: span.tags,\n warnings: span.warnings ? span.warnings : null,\n });\n }\n\n return { data: [traceResponse], total: 0, limit: 0, offset: 0, errors: null };\n}\n","import { identity } from 'lodash';\n\nimport { DataFrame, FieldType, MutableDataFrame, TraceKeyValuePair, TraceLog, TraceSpanRow } from '@grafana/data';\n\nimport { ZipkinAnnotation, ZipkinEndpoint, ZipkinSpan } from '../types';\n\n/**\n * Transforms response to Grafana trace data frame.\n */\nexport function transformResponse(zSpans: ZipkinSpan[]): DataFrame {\n const spanRows = zSpans.map(transformSpan);\n const frame = new MutableDataFrame({\n fields: [\n { name: 'traceID', type: FieldType.string },\n { name: 'spanID', type: FieldType.string },\n { name: 'parentSpanID', type: FieldType.string },\n { name: 'operationName', type: FieldType.string },\n { name: 'serviceName', type: FieldType.string },\n { name: 'serviceTags', type: FieldType.other },\n { name: 'startTime', type: FieldType.number },\n { name: 'duration', type: FieldType.number },\n { name: 'logs', type: FieldType.other },\n { name: 'tags', type: FieldType.other },\n ],\n meta: {\n preferredVisualisationType: 'trace',\n custom: {\n traceFormat: 'zipkin',\n },\n },\n });\n\n for (const span of spanRows) {\n frame.add(span);\n }\n\n return frame;\n}\n\nfunction transformSpan(span: ZipkinSpan): TraceSpanRow {\n const row = {\n traceID: span.traceId,\n spanID: span.id,\n parentSpanID: span.parentId,\n operationName: span.name,\n serviceName: span.localEndpoint?.serviceName || span.remoteEndpoint?.serviceName || 'unknown',\n serviceTags: serviceTags(span),\n startTime: span.timestamp / 1000,\n duration: span.duration / 1000,\n logs: span.annotations?.map(transformAnnotation) ?? [],\n tags: Object.keys(span.tags || {}).reduce((acc, key) => {\n // If tag is error we remap it to simple boolean so that the trace ui will show an error icon.\n if (key === 'error') {\n acc.push({\n key: 'error',\n value: true,\n });\n\n acc.push({\n key: 'errorValue',\n value: span.tags!['error'],\n });\n return acc;\n }\n acc.push({ key, value: span.tags![key] });\n return acc;\n }, []),\n };\n\n if (span.kind) {\n row.tags = [\n {\n key: 'kind',\n value: span.kind,\n },\n ...(row.tags ?? []),\n ];\n }\n\n if (span.shared) {\n row.tags = [\n {\n key: 'shared',\n value: span.shared,\n },\n ...(row.tags ?? []),\n ];\n }\n\n return row;\n}\n\n/**\n * Maps annotations as a log as that seems to be the closest thing.\n * See https://zipkin.io/zipkin-api/#/default/get_trace__traceId_\n */\nfunction transformAnnotation(annotation: ZipkinAnnotation): TraceLog {\n return {\n timestamp: annotation.timestamp,\n fields: [\n {\n key: 'annotation',\n value: annotation.value,\n },\n ],\n };\n}\n\nfunction serviceTags(span: ZipkinSpan): TraceKeyValuePair[] {\n const endpoint = span.localEndpoint || span.remoteEndpoint;\n if (!endpoint) {\n return [];\n }\n return [\n valueToTag('ipv4', endpoint.ipv4),\n valueToTag('ipv6', endpoint.ipv6),\n valueToTag('port', endpoint.port),\n valueToTag('endpointType', span.localEndpoint ? 'local' : 'remote'),\n ].filter(identity) as TraceKeyValuePair[];\n}\n\nfunction valueToTag(key: string, value: T): TraceKeyValuePair | undefined {\n if (!value) {\n return undefined;\n }\n return {\n key,\n value,\n };\n}\n\n/**\n * Transforms data frame to Zipkin response\n */\nexport const transformToZipkin = (data: MutableDataFrame): ZipkinSpan[] => {\n let response: ZipkinSpan[] = [];\n\n for (let i = 0; i < data.length; i++) {\n const span = data.get(i);\n response.push({\n traceId: span.traceID,\n parentId: span.parentSpanID,\n name: span.operationName,\n id: span.spanID,\n timestamp: span.startTime * 1000,\n duration: span.duration * 1000,\n ...getEndpoint(span),\n annotations: span.logs.length\n ? span.logs.map((l: TraceLog) => ({ timestamp: l.timestamp, value: l.fields[0].value }))\n : undefined,\n tags: span.tags.length\n ? span.tags\n .filter((t: TraceKeyValuePair) => t.key !== 'kind' && t.key !== 'endpointType' && t.key !== 'shared')\n .reduce((tags: { [key: string]: string }, t: TraceKeyValuePair) => {\n if (t.key === 'error') {\n return {\n ...tags,\n [t.key]: span.tags.find((t: TraceKeyValuePair) => t.key === 'errorValue').value || '',\n };\n }\n return { ...tags, [t.key]: t.value };\n }, {})\n : undefined,\n kind: span.tags.find((t: TraceKeyValuePair) => t.key === 'kind')?.value,\n shared: span.tags.find((t: TraceKeyValuePair) => t.key === 'shared')?.value,\n });\n }\n\n return response;\n};\n\n// Returns remote or local endpoint object\nconst getEndpoint = (span: any): { [key: string]: ZipkinEndpoint } | undefined => {\n const key =\n span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'endpointType')?.value === 'local'\n ? 'localEndpoint'\n : 'remoteEndpoint';\n return span.serviceName !== 'unknown'\n ? {\n [key]: {\n serviceName: span.serviceName,\n ipv4: span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'ipv4')?.value,\n ipv6: span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'ipv6')?.value,\n port: span.serviceTags.find((t: TraceKeyValuePair) => t.key === 'port')?.value,\n },\n }\n : undefined;\n};\n"],"names":["randomizeData","data","opts","labels","names","values","keepNames","Set","rand","upper","charactersLength","length","history","Map","v","old","get","r","map","c","toLowerCase","toUpperCase","charAt","Math","floor","random","join","set","newLetterRandomizer","s","schema","f","fields","key","value","Object","entries","name","has","forEach","idx","type","FieldType","getPanelDataFrames","frames","series","push","dataFrameToJSON","annotations","json","meta","dataTopic","DataTopic","getGithubMarkdown","panel","snapshot","saveModel","getSaveModel","info","grafanaVersion","config","md","pluginVersion","async","getDebugDashboard","timeRange","dashboard","cloneDeep","embeddedDataTemplate","firstValueFrom","getQueryRunner","getData","withFieldConfig","withTransforms","dsref","datasource","queries","targets","html","t","ds","refId","transformations","id","getTransformsRow","frameCount","fieldCount","rowCount","frame","state","LoadingState","getDataRow","a","getAnnotationsRow","trim","panels","uid","queryType","GrafanaQueryType","last","title","before","gridPos","w","h","x","y","options","showTypeIcons","panelId","topic","content","JSON","stringify","dateTimeFormat","Date","tags","time","from","toISOString","to","mode","code","language","showLineNumbers","showMiniMap","schemaVersion","displayOverrideRef","isHideSeriesOverride","isSystemOverrideWithRef","seriesVisibilityConfigFactory","label","fieldConfig","overrides","displayName","currentIndex","findIndex","SeriesVisibilityChangeMode","override","createOverride","getNamesOfHiddenFields","getDisplayNames","overridesCopy","Array","current","splice","existing","getExistingDisplayNames","nameOfHiddenFields","filter","el","indexOf","createExtendedOverride","allFieldsAreExcluded","ByNamesMatcherMode","property","viz","legend","tooltip","__systemRef","matcher","FieldMatcherID","prefix","undefined","readOnly","properties","find","p","index","rule","isArray","excludeName","unique","field","getFieldDisplayName","add","fieldMatchers","getStyles","theme","css","spacing","typography","size","sm","colors","textWeak","DetailText","children","collapsedTextStyles","useStyles","className","InspectDataOptions","onOptionsChange","dataFrames","transformId","transformationOptions","selectedDataFrame","onDataFrameChange","downloadForExcel","toggleDownloadForExcel","styles","getPanelInspectorStyles","panelTransformations","getTransformations","showPanelTransformationsOption","Boolean","showFieldConfigsOption","plugin","fieldConfigRegistry","isEmpty","dataSelect","DataTransformerID","selectableOptions","getFrameDisplayName","dataDisplayOptions","QueryOperationRow","headerElement","parts","getActiveString","isOpen","Field","Select","onChange","width","description","Switch","InspectDataTab","PureComponent","constructor","props","super","dataFrame","csvConfig","dataFrameCsv","toCSV","blob","Blob","String","fromCharCode","displayTitle","getDisplayTitle","transformation","toLocaleLowerCase","fileName","saveAs","app","this","reportInteraction","format","logsModel","dataFrameToLogsModel","textToDownload","metaItem","string","rows","row","newRow","dateTimeFormatISO","timeEpochMs","entry","df","preferredVisualisationType","custom","traceFormat","res","transformToJaeger","MutableDataFrame","saveTraceJson","transformToZipkin","transformToOTLP","item","setState","dataFrameIndex","prevState","buildTransformationOptions","transformedData","componentDidUpdate","prevProps","currentTransform","transformer","subscription","transformDataFrame","subscribe","unsubscribe","getProcessedData","timeZone","applyFieldOverrides","replaceVariables","applyRawFieldOverrides","render","isLoading","Spinner","inline","hasLogs","some","hasTraces","hasServiceGraph","wrap","selectors","toolbar","Button","variant","onClick","exportCsv","useExcelHeader","exportLogsAsTxt","exportTracesAsJson","exportServiceGraph","height","style","Table","byField","InspectErrorTab","error","message","open","msg","split","parse","parseErrorMessage","ShowContent","PanelJSON","PanelData","DataFrames","InspectJSONTab","text","getPrettyJSON","getJSONObject","show","onClose","hasPanelJSON","canEdit","updates","shouldUpdateDashboardPanelFromJSON","restoreModel","refresh","appEvents","AppEvents","err","console","queryParms","locationService","InspectTab","toString","d","note","jsonOptions","slice","selected","isPanelJSON","inputId","onSelectChanged","toolbarItem","onApplyPanelModel","onShowHelpWizard","disableWidth","onBlur","onTextChanged","obj","InspectStatsTable","stats","useTheme2","wrapper","stat","cell","formatStat","display","getDisplayProcessor","formattedValueToString","stylesFactory","InspectStatsTab","request","requestTime","endTime","startTime","processingTime","timings","dataProcessingTime","dataRows","unit","dataStats","concat","statsTableName","dataStatsTableName","QueryInspector","Subscription","dsQuery","response","formattedJson","allNodesExpanded","isMocking","evt","mockedResponse","target","executedQueries","componentDidMount","subs","backendSrv","next","onDataSourceResponse","events","RefreshEvent","onPanelRefresh","updateQueryList","oldProps","query","executedQueryString","componentWillUnmount","hideFromInspector","headers","transformRequest","transformResponse","paramSerializer","jsonpCallbackParam","requestId","inspect","retry","timeout","status","statusText","ok","url","redirected","$$config","renderExecutedQueries","gap","direction","onRefreshQuery","openNodes","getNrOfOpenNodes","haveData","keys","supportsDataQuery","icon","onToggleExpand","getText","getTextForClipboard","onDidRender","setFormattedJson","editor","viewer","dataFrameSelect","leftActions","selects","QueryEditorRows","onQueriesChange","result","dsSettings","startIndex","source","numberOfQueries","datasourceType","destination","endIndex","update","removed","onChangeQuery","itemIndex","onDataSourceChange","dataSource","onDatasourceChange","dataSourceRef","previous","getDataSourceSrv","getInstanceSettings","hide","eventBus","onAddQuery","onRunQueries","onQueryCopied","onQueryRemoved","onQueryToggled","onDragStart","onDragEnd","droppableId","provided","ref","innerRef","droppableProps","dataSourceSettings","getDataSourceSettings","onChangeDataSourceSettings","mixed","settings","onChangeDataSource","onRemoveQuery","onRunQuery","placeholder","groupSettings","createTraceFrame","spans","toSpanRow","span","processes","spanID","traceID","parentSpanID","references","refType","operationName","duration","logs","l","timestamp","warnings","stackTraces","serviceName","processID","serviceTags","createTableFrame","instanceSettings","displayNameFromDS","links","internal","datasourceUid","datasourceName","traceData","transformToTraceData","sort","b","trace","transformTraceData","traceName","traceResponse","i","flags","total","limit","offset","errors","zSpans","spanRows","transformSpan","traceId","parentId","localEndpoint","remoteEndpoint","transformAnnotation","reduce","acc","kind","shared","annotation","endpoint","valueToTag","ipv4","ipv6","port","identity","getEndpoint"],"sourceRoot":""}