{"version":3,"file":"7848.fb0e5a9340e66eace681.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/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/InspectStatsTable.tsx","webpack://grafana/./public/app/features/inspector/InspectStatsTraceIdsTable.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/utils/utils.ts","webpack://grafana/./public/app/features/search/page/reporting.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 const v = data.values[idx].map((v) => rand(String(v)));\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 Transform\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 { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { useStyles2 } from '@grafana/ui';\n\nconst getStyles = (theme: GrafanaTheme2) => css`\n padding: ${theme.spacing(0, 2)};\n font-size: ${theme.typography.bodySmall.fontSize};\n color: ${theme.colors.text.secondary};\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nexport const DetailText = ({ children }: React.PropsWithChildren<{}>) => {\n const collapsedTextStyles = useStyles2(getStyles);\n return
{children}
;\n};\n","import React from 'react';\n\nimport { DataFrame, DataTransformerID, getFrameDisplayName, SelectableValue } from '@grafana/data';\nimport { Field, HorizontalGroup, Select, Switch, VerticalGroup, useStyles2 } from '@grafana/ui';\nimport { QueryOperationRow } from 'app/core/components/QueryOperationRow/QueryOperationRow';\nimport { t } from 'app/core/internationalization';\nimport { DetailText } from 'app/features/inspector/DetailText';\nimport { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';\n\nimport { getPanelInspectorStyles2 } from './styles';\n\ninterface Props {\n options: GetDataOptions;\n dataFrames: DataFrame[];\n transformationOptions: Array>;\n selectedDataFrame: number | DataTransformerID;\n downloadForExcel: boolean;\n onDataFrameChange: (item: SelectableValue) => void;\n toggleDownloadForExcel: () => void;\n data?: DataFrame[];\n hasTransformations?: boolean;\n onOptionsChange?: (options: GetDataOptions) => void;\n actions?: React.ReactNode;\n}\n\nexport const InspectDataOptions = ({\n options,\n actions,\n onOptionsChange,\n hasTransformations,\n data,\n dataFrames,\n transformationOptions,\n selectedDataFrame,\n onDataFrameChange,\n downloadForExcel,\n toggleDownloadForExcel,\n}: Props) => {\n const styles = useStyles2(getPanelInspectorStyles2);\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 };\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('dashboard.inspect-data.series-to-columns', '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('dashboard.inspect-data.panel-transforms', 'Panel transforms'));\n }\n\n if (options.withTransforms && options.withFieldConfig) {\n }\n\n if (options.withFieldConfig) {\n parts.push(t('dashboard.inspect-data.formatted', 'Formatted data'));\n }\n }\n\n if (downloadForExcel) {\n parts.push(t('dashboard.inspect-data.excel-header', 'Excel header'));\n }\n\n return parts.join(', ');\n }\n\n return (\n
\n {getActiveString()}}\n isOpen={false}\n actions={actions}\n >\n
\n \n {data!.length > 1 && (\n \n \n \n )}\n\n \n {hasTransformations && onOptionsChange && (\n \n onOptionsChange({ ...options, withTransforms: !options.withTransforms })}\n />\n \n )}\n {onOptionsChange && (\n \n onOptionsChange({ ...options, withFieldConfig: !options.withFieldConfig })}\n />\n \n )}\n \n \n \n \n \n
\n \n
\n );\n};\n","import { cloneDeep } from 'lodash';\nimport React, { PureComponent } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport {\n applyFieldOverrides,\n applyRawFieldOverrides,\n CoreApp,\n DataFrame,\n DataTransformerID,\n FieldConfigSource,\n SelectableValue,\n TimeZone,\n transformDataFrame,\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 { t, Trans } from 'app/core/internationalization';\nimport { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';\n\nimport { dataFrameToLogsModel } from '../logs/logsModel';\n\nimport { InspectDataOptions } from './InspectDataOptions';\nimport { getPanelInspectorStyles } from './styles';\nimport { downloadAsJson, downloadDataFrameAsCsv, downloadLogsModelAsTxt, downloadTraceAsJson } from './utils/download';\n\ninterface Props {\n isLoading: boolean;\n options: GetDataOptions;\n timeZone: TimeZone;\n app?: CoreApp;\n data?: DataFrame[];\n /** The title of the panel or other context name */\n dataName: string;\n panelPluginId?: string;\n fieldConfig?: FieldConfigSource;\n hasTransformations?: boolean;\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(dataFrames: DataFrame[], hasLogs: boolean) {\n const { dataName } = this.props;\n const { transformId } = this.state;\n const dataFrame = dataFrames[this.state.dataFrameIndex];\n\n if (hasLogs) {\n reportInteraction('grafana_logs_download_clicked', { app: this.props.app, format: 'csv' });\n }\n\n downloadDataFrameAsCsv(dataFrame, dataName, { useExcelHeader: this.state.downloadForExcel }, transformId);\n }\n\n onExportLogsAsTxt = () => {\n const { data, dataName, app } = this.props;\n\n reportInteraction('grafana_logs_download_logs_clicked', {\n app,\n format: 'logs',\n area: 'inspector',\n });\n\n const logsModel = dataFrameToLogsModel(data || []);\n downloadLogsModelAsTxt(logsModel, dataName);\n };\n\n onExportTracesAsJson = () => {\n const { data, dataName, app } = this.props;\n\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 const traceFormat = downloadTraceAsJson(df, dataName + '-traces');\n\n reportInteraction('grafana_traces_download_traces_clicked', {\n app,\n grafana_version: config.buildInfo.version,\n trace_format: traceFormat,\n location: 'inspector',\n });\n }\n };\n\n onExportServiceGraph = () => {\n const { data, dataName, app } = this.props;\n\n reportInteraction('grafana_traces_download_service_graph_clicked', {\n app,\n grafana_version: config.buildInfo.version,\n location: 'inspector',\n });\n\n if (!data) {\n return;\n }\n\n downloadAsJson(data, dataName);\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 onToggleDownloadForExcel = () => {\n this.setState((prevState) => ({\n downloadForExcel: !prevState.downloadForExcel,\n }));\n };\n\n getProcessedData(): DataFrame[] {\n const { options, panelPluginId, fieldConfig, timeZone } = this.props;\n const data = this.state.transformedData;\n\n if (!options.withFieldConfig || !panelPluginId || !fieldConfig) {\n return applyRawFieldOverrides(data);\n }\n\n const fieldConfigCleaned = this.cleanTableConfigFromFieldConfig(panelPluginId, fieldConfig);\n\n // We need to apply field config as it's not done by PanelQueryRunner (even when withFieldConfig is true).\n // It's because transformers create new fields and data frames, and we need to clean field config of any table settings.\n return applyFieldOverrides({\n data,\n theme: config.theme2,\n fieldConfig: fieldConfigCleaned,\n timeZone,\n replaceVariables: (value: string) => {\n return value;\n },\n });\n }\n\n // Because we visualize this data in a table we have to remove any custom table display settings\n cleanTableConfigFromFieldConfig(panelPluginId: string, fieldConfig: FieldConfigSource): FieldConfigSource {\n if (panelPluginId !== 'table') {\n return fieldConfig;\n }\n\n fieldConfig = cloneDeep(fieldConfig);\n // clear all table specific options\n fieldConfig.defaults.custom = {};\n\n // clear all table override properties\n for (const override of fieldConfig.overrides) {\n for (const prop of override.properties) {\n if (prop.id.startsWith('custom.')) {\n const index = override.properties.indexOf(prop);\n override.properties.slice(index, 1);\n }\n }\n }\n\n return fieldConfig;\n }\n\n renderActions(dataFrames: DataFrame[], hasLogs: boolean, hasTraces: boolean, hasServiceGraph: boolean) {\n return (\n <>\n \n {hasLogs && (\n \n )}\n {hasTraces && (\n \n )}\n {hasServiceGraph && (\n \n )}\n \n );\n }\n\n render() {\n const { isLoading, options, data, onOptionsChange, hasTransformations } = this.props;\n const { dataFrameIndex, 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
\n \n {({ width, height }) => {\n if (width === 0) {\n return null;\n }\n\n return ;\n }}\n \n \n \n );\n }\n}\n\nfunction buildTransformationOptions() {\n const transformations: Array> = [\n {\n value: DataTransformerID.joinByField,\n label: t('dashboard.inspect-data.transformation', 'Series joined by time'),\n transformer: {\n id: DataTransformerID.joinByField,\n options: { byField: undefined }, // defaults to time field\n },\n },\n ];\n\n return transformations;\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 = ({ timeZone, name, stats }: InspectStatsTableProps) => {\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 { css } from '@emotion/css';\nimport React from 'react';\n\nimport { GrafanaTheme2 } from '@grafana/data';\nimport { stylesFactory, useTheme2 } from '@grafana/ui';\n\ntype Props = {\n name: string;\n traceIds: string[];\n};\n\nexport const InspectStatsTraceIdsTable = ({ name, traceIds }: Props) => {\n const theme = useTheme2();\n const styles = getStyles(theme);\n\n if (traceIds.length === 0) {\n return null;\n }\n\n return (\n
\n
{name}
\n \n \n {traceIds.map((traceId, index) => {\n return (\n \n \n \n );\n })}\n \n
{traceId}
\n
\n );\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 { css } from '@emotion/css';\nimport React from 'react';\n\nimport { PanelData, QueryResultMetaStat, TimeZone } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { t } from 'app/core/internationalization';\n\nimport { InspectStatsTable } from './InspectStatsTable';\nimport { InspectStatsTraceIdsTable } from './InspectStatsTraceIdsTable';\n\ninterface InspectStatsTabProps {\n data: PanelData;\n timeZone: TimeZone;\n}\n\nexport const InspectStatsTab = ({ data, timeZone }: InspectStatsTabProps) => {\n if (!data.request) {\n return null;\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('dashboard.inspect-stats.request-time', 'Total request time'),\n value: requestTime,\n unit: 'ms',\n });\n }\n if (processingTime > 0) {\n stats.push({\n displayName: t('dashboard.inspect-stats.processing-time', 'Data processing time'),\n value: processingTime,\n unit: 'ms',\n });\n }\n stats.push({\n displayName: t('dashboard.inspect-stats.queries', 'Number of queries'),\n value: data.request.targets?.length ?? 0,\n });\n stats.push({\n displayName: t('dashboard.inspect-stats.rows', '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('dashboard.inspect-stats.table-title', 'Stats');\n const dataStatsTableName = t('dashboard.inspect-stats.data-title', 'Data source stats');\n const traceIdsStatsTableName = t('dashboard.inspect-stats.data-traceids', 'Trace IDs');\n\n return (\n
\n \n \n \n
\n );\n};\n\nconst containerStyles = css`\n height: 100%;\n overflow-y: scroll;\n`;\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\nimport { Subscription } from 'rxjs';\n\nimport { LoadingState, PanelData } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Stack } from '@grafana/experimental';\nimport { config } from '@grafana/runtime';\nimport { Button, ClipboardButton, JSONFormatter, LoadingPlaceholder } from '@grafana/ui';\nimport { backendSrv } from 'app/core/services/backend_srv';\n\nimport { getPanelInspectorStyles } from './styles';\n\ninterface ExecutedQueryInfo {\n refId: string;\n query: string;\n frames: number;\n rows: number;\n}\n\ninterface Props {\n data: PanelData;\n onRefreshQuery: () => void;\n}\n\ninterface State {\n allNodesExpanded: boolean | null;\n isMocking: boolean;\n mockedResponse: string;\n response: {};\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 response: {},\n };\n }\n\n componentDidMount() {\n this.subs.add(\n backendSrv.getInspectorStream().subscribe({\n next: (response) => this.onDataSourceResponse(response),\n })\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 frames = data.series;\n const executedQueries: ExecutedQueryInfo[] = [];\n\n if (frames?.length) {\n let last: ExecutedQueryInfo | undefined = undefined;\n\n frames.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 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({\n response: response,\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 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, response } = this.state;\n const { onRefreshQuery, data } = this.props;\n const openNodes = this.getNrOfOpenNodes();\n const styles = getPanelInspectorStyles();\n const haveData = Object.keys(response).length > 0;\n const isLoading = data.state === LoadingState.Loading;\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 { GrafanaTheme2 } from '@grafana/data';\nimport { stylesFactory } from '@grafana/ui';\nimport { config } from 'app/core/config';\n\n/** @deprecated */\nexport const getPanelInspectorStyles = stylesFactory(() => {\n return getPanelInspectorStyles2(config.theme2);\n});\n\nexport const getPanelInspectorStyles2 = (theme: GrafanaTheme2) => {\n return {\n wrap: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n flex: 1 1 0;\n min-height: 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: ${theme.v1.spacing.sm};\n `,\n toolbarItem: css`\n margin-left: ${theme.v1.spacing.md};\n `,\n content: css`\n flex-grow: 1;\n height: 100%;\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: ${theme.v1.spacing.sm};\n `,\n dataDisplayOptions: css`\n flex-grow: 1;\n min-width: 300px;\n margin-right: ${theme.v1.spacing.sm};\n `,\n selects: css`\n display: flex;\n > * {\n margin-right: ${theme.v1.spacing.sm};\n }\n `,\n };\n};\n","import { AppEvents } from '@grafana/data';\nimport appEvents from 'app/core/app_events';\n\nexport function getPrettyJSON(obj: unknown): string {\n let r = '';\n try {\n r = JSON.stringify(obj, getCircularReplacer(), 2);\n } catch (e) {\n if (\n e instanceof Error &&\n (e.toString().includes('RangeError') || e.toString().includes('allocation size overflow'))\n ) {\n appEvents.emit(AppEvents.alertError, [e.toString(), 'Cannot display JSON, the object is too big.']);\n } else {\n appEvents.emit(AppEvents.alertError, [e instanceof Error ? e.toString() : e]);\n }\n }\n return r;\n}\n\nfunction getCircularReplacer() {\n const seen = new WeakSet();\n\n return (key: string, value: unknown) => {\n if (key === '__dataContext' || key === '__sceneObject') {\n return 'Filtered out in JSON serialization';\n }\n\n if (typeof value === 'object' && value !== null) {\n if (seen.has(value)) {\n return;\n }\n seen.add(value);\n }\n return value;\n };\n}\n","import { reportInteraction } from '@grafana/runtime';\nimport { InspectTab } from 'app/features/inspector/types';\n\nimport { EventTrackingNamespace, SearchLayout } from '../types';\n\ninterface QueryProps {\n layout: SearchLayout;\n starred: boolean;\n sortValue?: string;\n query: string;\n tagCount: number;\n includePanels?: boolean;\n}\n\nexport const reportDashboardListViewed = (eventTrackingNamespace: EventTrackingNamespace, query: QueryProps) => {\n reportInteraction(`${eventTrackingNamespace}_viewed`, getQuerySearchContext(query));\n};\n\nexport const reportSearchResultInteraction = (eventTrackingNamespace: EventTrackingNamespace, query: QueryProps) => {\n reportInteraction(`${eventTrackingNamespace}_result_clicked`, getQuerySearchContext(query));\n};\n\nexport const reportSearchQueryInteraction = (eventTrackingNamespace: EventTrackingNamespace, query: QueryProps) => {\n reportInteraction(`${eventTrackingNamespace}_query_submitted`, getQuerySearchContext(query));\n};\n\nexport const reportSearchFailedQueryInteraction = (\n eventTrackingNamespace: EventTrackingNamespace,\n { error, ...query }: QueryProps & { error?: string }\n) => {\n reportInteraction(`${eventTrackingNamespace}_query_failed`, { ...getQuerySearchContext(query), error });\n};\n\nexport const reportPanelInspectInteraction = (\n PanelInspectType: InspectTab,\n name: string,\n properties?: Record\n) => {\n reportInteraction(`grafana_panel_inspect_${PanelInspectType}_${name}_clicked`, properties);\n};\n\nconst getQuerySearchContext = (query: QueryProps) => {\n return {\n layout: query.layout,\n starredFilter: query.starred ?? false,\n sort: query.sortValue ?? '',\n tagCount: query.tagCount ?? 0,\n queryLength: query.query?.length ?? 0,\n includePanels: query.includePanels ?? false,\n };\n};\n"],"names":["newLetterRandomizer","upper","lower","charactersLength","history","v","old","r","c","randomizeData","data","opts","keepNames","rand","s","schema","f","labels","key","value","idx","getPanelDataFrames","frames","json","getGithubMarkdown","panel","snapshot","saveModel","info","grafanaVersion","config","md","getDebugDashboard","timeRange","dashboard","embeddedDataTemplate","firstValueFrom","dsref","queries","html","t","ds","getTransformsRow","getDataRow","getAnnotationsRow","last","before","frameCount","fieldCount","rowCount","frame","a","getStyles","theme","DetailText","children","collapsedTextStyles","InspectDataOptions","options","actions","onOptionsChange","hasTransformations","dataFrames","transformationOptions","selectedDataFrame","onDataFrameChange","downloadForExcel","toggleDownloadForExcel","styles","dataSelect","choices","index","selectableOptions","getActiveString","activeString","parts","QueryOperationRow","Field","Select","Switch","InspectDataTab","props","dataName","app","logsModel","download","df","traceFormat","item","prevState","buildTransformationOptions","prevProps","currentTransform","dataFrameIndex","subscription","transformDataFrame","hasLogs","transformId","dataFrame","panelPluginId","fieldConfig","timeZone","fieldConfigCleaned","override","prop","hasTraces","hasServiceGraph","Button","isLoading","Spinner","selectors","width","height","Table","InspectStatsTable","name","stats","stat","formatStat","display","stylesFactory","InspectStatsTraceIdsTable","traceIds","traceId","InspectStatsTab","requestTime","processingTime","dataRows","dataStats","series","statsTableName","dataStatsTableName","traceIdsStatsTableName","containerStyles","QueryInspector","formattedJson","response","oldProps","executedQueries","query","refId","allNodesExpanded","onRefreshQuery","openNodes","haveData","getPanelInspectorStyles","getPanelInspectorStyles2","getPrettyJSON","obj","getCircularReplacer","e","seen","reportDashboardListViewed","eventTrackingNamespace","getQuerySearchContext","reportSearchResultInteraction","reportSearchQueryInteraction","reportSearchFailedQueryInteraction","error","reportPanelInspectInteraction","PanelInspectType","properties"],"sourceRoot":""}