{"version":3,"file":"8339.15467d3678c125574e97.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/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/utils/download.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<string, string>();\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 += '<details><summary>Panel debug snapshot dashboard</summary>\\n\\n```json\\n' + snapshot + '\\n```\\n</details>';\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 = `<table width=\"100%\">\n    <tr>\n      <th width=\"2%\">Panel</th>\n      <td >${info.panelType} @ ${saveModel.pluginVersion ?? grafanaVersion}</td>\n    </tr>\n    <tr>\n      <th>Queries</th>\n      <td>${queries\n        .map((t: DataQuery) => {\n          const ds = t.datasource ?? dsref;\n          return `${t.refId}[${ds?.type}]`;\n        })\n        .join(', ')}</td>\n    </tr>\n    ${getTransformsRow(saveModel)}\n    ${getDataRow(data, frames)}\n    ${getAnnotationsRow(data)}\n    <tr>\n      <th>Grafana</th>\n      <td>${grafanaVersion} // ${config.buildInfo.edition}</td>\n    </tr>\n  </table>`.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 `<tr>\n      <th>Transforms (${saveModel.transformations.length})</th>\n      <td>${saveModel.transformations.map((t: DataTransformerConfig) => t.id).join(', ')}</td>\n  </tr>`;\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    '<tr>' +\n    '<th>Data</th>' +\n    '<td>' +\n    `${data.state !== LoadingState.Done ? data.state : ''} ` +\n    `${frameCount} frames, ${fieldCount} fields, ` +\n    `${rowCount} rows ` +\n    // `(${formattedValueToString(getValueFormat('decbytes')(raw?.length))} JSON)` +\n    '</td>' +\n    '</tr>'\n  );\n}\n\nfunction getAnnotationsRow(data: PanelData): string {\n  if (!data.annotations?.length) {\n    return '';\n  }\n\n  return `<tr>\n  <th>Annotations</th>\n  <td>${data.annotations.map((a, idx) => `<span>${a.length}</span>`)}</td>\n</tr>`;\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  margin: 0;\n  margin-left: ${theme.spacing(2)};\n  font-size: ${theme.typography.bodySmall.fontSize};\n  color: ${theme.colors.text.secondary};\n`;\n\nexport const DetailText = ({ children }: React.PropsWithChildren<{}>) => {\n  const collapsedTextStyles = useStyles2(getStyles);\n  return <p className={collapsedTextStyles}>{children}</p>;\n};\n","import 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 { t } from 'app/core/internationalization';\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<SelectableValue<DataTransformerID>>;\n  selectedDataFrame: number | DataTransformerID;\n  downloadForExcel: boolean;\n  onDataFrameChange: (item: SelectableValue<DataTransformerID | number>) => void;\n  toggleDownloadForExcel: () => void;\n  data?: DataFrame[];\n  panel?: PanelModel;\n  onOptionsChange?: (options: GetDataOptions) => void;\n}\n\nexport const InspectDataOptions: FC<Props> = ({\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<number>;\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    <div className={styles.dataDisplayOptions}>\n      <QueryOperationRow\n        id=\"Data options\"\n        index={0}\n        title={t('dashboard.inspect-data.data-options', 'Data options')}\n        headerElement={<DetailText>{getActiveString()}</DetailText>}\n        isOpen={false}\n      >\n        <div className={styles.options} data-testid=\"dataOptions\">\n          <VerticalGroup spacing=\"none\">\n            {data!.length > 1 && (\n              <Field label={t('dashboard.inspect-data.dataframe-label', 'Show data frame')}>\n                <Select\n                  options={selectableOptions}\n                  value={selectedDataFrame}\n                  onChange={onDataFrameChange}\n                  width={30}\n                  aria-label={t('dashboard.inspect-data.dataframe-aria-label', 'Select dataframe')}\n                />\n              </Field>\n            )}\n\n            <HorizontalGroup>\n              {showPanelTransformationsOption && onOptionsChange && (\n                <Field\n                  label={t('dashboard.inspect-data.transformations-label', 'Apply panel transformations')}\n                  description={t(\n                    'dashboard.inspect-data.transformations-description',\n                    'Table data is displayed with transformations defined in the panel Transform tab.'\n                  )}\n                >\n                  <Switch\n                    value={!!options.withTransforms}\n                    onChange={() => onOptionsChange({ ...options, withTransforms: !options.withTransforms })}\n                  />\n                </Field>\n              )}\n              {showFieldConfigsOption && onOptionsChange && (\n                <Field\n                  label={t('dashboard.inspect-data.formatted-data-label', 'Formatted data')}\n                  description={t(\n                    'dashboard.inspect-data.formatted-data-description',\n                    'Table data is formatted with options defined in the Field and Override tabs.'\n                  )}\n                >\n                  <Switch\n                    id=\"formatted-data-toggle\"\n                    value={!!options.withFieldConfig}\n                    onChange={() => onOptionsChange({ ...options, withFieldConfig: !options.withFieldConfig })}\n                  />\n                </Field>\n              )}\n              <Field\n                label={t('dashboard.inspect-data.download-excel-label', 'Download for Excel')}\n                description={t(\n                  'dashboard.inspect-data.download-excel-description',\n                  'Adds header to CSV for use with Excel'\n                )}\n              >\n                <Switch id=\"excel-toggle\" value={downloadForExcel} onChange={toggleDownloadForExcel} />\n              </Field>\n            </HorizontalGroup>\n          </VerticalGroup>\n        </div>\n      </QueryOperationRow>\n    </div>\n  );\n};\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\n\nimport {\n  applyFieldOverrides,\n  applyRawFieldOverrides,\n  CoreApp,\n  CSVConfig,\n  DataFrame,\n  DataTransformerID,\n  MutableDataFrame,\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 { 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';\nimport { downloadAsJson, downloadDataFrameAsCsv, downloadLogsModelAsTxt } from './utils/download';\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<SelectableValue<DataTransformerID>>;\n  transformedData: DataFrame[];\n  downloadForExcel: boolean;\n}\n\nexport class InspectDataTab extends PureComponent<Props, State> {\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    downloadDataFrameAsCsv(dataFrame, panel ? panel.getDisplayTitle() : 'Explore', csvConfig, transformId);\n  };\n\n  exportLogsAsTxt = () => {\n    const { data, panel, app } = this.props;\n\n    reportInteraction('grafana_logs_download_logs_clicked', {\n      app,\n      format: 'logs',\n    });\n\n    const logsModel = dataFrameToLogsModel(data || [], undefined);\n    downloadLogsModelAsTxt(logsModel, panel ? panel.getDisplayTitle() : 'Explore');\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          downloadAsJson(res, (panel ? panel.getDisplayTitle() : 'Explore') + '-traces');\n          break;\n        }\n        case 'zipkin': {\n          let res = transformToZipkin(new MutableDataFrame(df));\n          downloadAsJson(res, (panel ? panel.getDisplayTitle() : 'Explore') + '-traces');\n          break;\n        }\n        case 'otlp':\n        default: {\n          let res = transformToOTLP(new MutableDataFrame(df));\n          downloadAsJson(res, (panel ? panel.getDisplayTitle() : 'Explore') + '-traces');\n          break;\n        }\n      }\n    }\n  };\n\n  exportServiceGraph = () => {\n    const { data, panel } = this.props;\n    if (!data) {\n      return;\n    }\n\n    downloadAsJson(data, panel ? panel.getDisplayTitle() : 'Explore');\n  };\n\n  onDataFrameChange = (item: SelectableValue<DataTransformerID | number>) => {\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        <div>\n          <Spinner inline={true} /> Loading\n        </div>\n      );\n    }\n\n    const dataFrames = this.getProcessedData();\n\n    if (!dataFrames || !dataFrames.length) {\n      return <div>No Data</div>;\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      <div className={styles.wrap} aria-label={selectors.components.PanelInspector.Data.content}>\n        <div className={styles.toolbar}>\n          <InspectDataOptions\n            data={data}\n            panel={panel}\n            options={options}\n            dataFrames={dataFrames}\n            transformId={transformId}\n            transformationOptions={transformationOptions}\n            selectedDataFrame={selectedDataFrame}\n            downloadForExcel={downloadForExcel}\n            onOptionsChange={onOptionsChange}\n            onDataFrameChange={this.onDataFrameChange}\n            toggleDownloadForExcel={this.toggleDownloadForExcel}\n          />\n          <Button\n            variant=\"primary\"\n            onClick={() => {\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            <Trans i18nKey=\"dashboard.inspect-data.download-csv\">Download CSV</Trans>\n          </Button>\n          {hasLogs && (\n            <Button\n              variant=\"primary\"\n              onClick={this.exportLogsAsTxt}\n              className={css`\n                margin-bottom: 10px;\n                margin-left: 10px;\n              `}\n            >\n              <Trans i18nKey=\"dashboard.inspect-data.download-logs\">Download logs</Trans>\n            </Button>\n          )}\n          {hasTraces && (\n            <Button\n              variant=\"primary\"\n              onClick={this.exportTracesAsJson}\n              className={css`\n                margin-bottom: 10px;\n                margin-left: 10px;\n              `}\n            >\n              <Trans i18nKey=\"dashboard.inspect-data.download-traces\">Download traces</Trans>\n            </Button>\n          )}\n          {hasServiceGraph && (\n            <Button\n              variant=\"primary\"\n              onClick={this.exportServiceGraph}\n              className={css`\n                margin-bottom: 10px;\n                margin-left: 10px;\n              `}\n            >\n              <Trans i18nKey=\"dashboard.inspect-data.download-service\">Download service graph</Trans>\n            </Button>\n          )}\n        </div>\n        <div className={styles.content}>\n          <AutoSizer>\n            {({ width, height }) => {\n              if (width === 0) {\n                return null;\n              }\n\n              return (\n                <div style={{ width, height }}>\n                  <Table width={width} height={height} data={dataFrame} showTypeIcons={true} />\n                </div>\n              );\n            }}\n          </AutoSizer>\n        </div>\n      </div>\n    );\n  }\n}\n\nfunction buildTransformationOptions() {\n  const transformations: Array<SelectableValue<DataTransformerID>> = [\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 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<InspectErrorTabProps> = ({ error }) => {\n  if (!error) {\n    return null;\n  }\n  if (error.data) {\n    return (\n      <>\n        <h4>{error.data.message}</h4>\n        <JSONFormatter json={error} open={2} />\n      </>\n    );\n  }\n  if (error.message) {\n    const { msg, json } = parseErrorMessage(error.message);\n    if (!json) {\n      return <div>{msg}</div>;\n    } else {\n      return (\n        <>\n          {msg !== '' && <h3>{msg}</h3>}\n          <JSONFormatter json={json} open={5} />\n        </>\n      );\n    }\n  }\n  return <JSONFormatter json={error} open={2} />;\n};\n","import { isEqual } from 'lodash';\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 { t } from 'app/core/internationalization';\nimport { DashboardModel, PanelModel } from 'app/features/dashboard/state';\n\nimport { getPanelDataFrames } from '../dashboard/components/HelpWizard/utils';\nimport { getPanelInspectorStyles } from '../inspector/styles';\nimport { reportPanelInspectInteraction } from '../search/page/reporting';\n\nimport { InspectTab } from './types';\n\nenum ShowContent {\n  PanelJSON = 'panel',\n  PanelData = 'data',\n  DataFrames = 'frames',\n}\n\nconst options: Array<SelectableValue<ShowContent>> = [\n  {\n    label: t('dashboard.inspect-json.panel-json-label', 'Panel JSON'),\n    description: t(\n      'dashboard.inspect-json.panel-json-description',\n      'The model saved in the dashboard JSON that configures how everything works.'\n    ),\n    value: ShowContent.PanelJSON,\n  },\n  {\n    label: t('dashboard.inspect-json.panel-data-label', 'Panel data'),\n    description: t('dashboard.inspect-json.panel-data-description', 'The raw model passed to the panel visualization'),\n    value: ShowContent.PanelData,\n  },\n  {\n    label: t('dashboard.inspect-json.dataframe-label', 'DataFrame JSON (from Query)'),\n    description: t(\n      'dashboard.inspect-json.dataframe-description',\n      '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<Props, State> {\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  componentDidMount() {\n    // when opening the inspector we want to report the interaction\n    reportPanelInspectInteraction(InspectTab.JSON, 'panelJSON');\n  }\n\n  onSelectChanged = async (item: SelectableValue<ShowContent>) => {\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      reportPanelInspectInteraction(InspectTab.JSON, 'panelData');\n      return data;\n    }\n\n    if (show === ShowContent.DataFrames) {\n      reportPanelInspectInteraction(InspectTab.JSON, 'dataFrame');\n\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      reportPanelInspectInteraction(InspectTab.JSON, 'panelJSON');\n      return panel!.getSaveModel();\n    }\n\n    return { note: t('dashboard.inspect-json.unknown', 'Unknown Object: {{show}}', { 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\n          //Report relevant updates\n          reportPanelInspectInteraction(InspectTab.JSON, 'apply', {\n            panel_type_changed: panel!.type !== updates.type,\n            panel_id_changed: panel!.id !== updates.id,\n            panel_grid_pos_changed: !isEqual(panel!.gridPos, updates.gridPos),\n            panel_targets_changed: !isEqual(panel!.targets, updates.targets),\n          });\n\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    reportPanelInspectInteraction(InspectTab.JSON, 'supportWizard');\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      <div className={styles.wrap}>\n        <div className={styles.toolbar} aria-label={selectors.components.PanelInspector.Json.content}>\n          <Field label={t('dashboard.inspect-json.select-source', 'Select source')} className=\"flex-grow-1\">\n            <Select\n              inputId=\"select-source-dropdown\"\n              options={jsonOptions}\n              value={selected}\n              onChange={this.onSelectChanged}\n            />\n          </Field>\n          {this.hasPanelJSON && isPanelJSON && canEdit && (\n            <Button className={styles.toolbarItem} onClick={this.onApplyPanelModel}>\n              Apply\n            </Button>\n          )}\n          {show === ShowContent.DataFrames && (\n            <Button className={styles.toolbarItem} onClick={this.onShowHelpWizard}>\n              Support\n            </Button>\n          )}\n        </div>\n        <div className={styles.content}>\n          <AutoSizer disableWidth>\n            {({ height }) => (\n              <CodeEditor\n                width=\"100%\"\n                height={height}\n                language=\"json\"\n                showLineNumbers={true}\n                showMiniMap={(text && text.length) > 100}\n                value={text || ''}\n                readOnly={!isPanelJSON}\n                onBlur={this.onTextChanged}\n              />\n            )}\n          </AutoSizer>\n        </div>\n      </div>\n    );\n  }\n}\n\nfunction getPrettyJSON(obj: any): string {\n  let r = '';\n  try {\n    r = JSON.stringify(obj, null, 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","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<InspectStatsTableProps> = ({ 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    <div className={styles.wrapper}>\n      <div className=\"section-heading\">{name}</div>\n      <table className=\"filter-table width-30\">\n        <tbody>\n          {stats.map((stat, index) => {\n            return (\n              <tr key={`${stat.displayName}-${index}`}>\n                <td>{stat.displayName}</td>\n                <td className={styles.cell}>{formatStat(stat, timeZone, theme)}</td>\n              </tr>\n            );\n          })}\n        </tbody>\n      </table>\n    </div>\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 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';\n\ninterface InspectStatsTabProps {\n  data: PanelData;\n  timeZone: TimeZone;\n}\n\nexport const InspectStatsTab: React.FC<InspectStatsTabProps> = ({ 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('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,\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\n  return (\n    <div aria-label={selectors.components.PanelInspector.Stats.content}>\n      <InspectStatsTable timeZone={timeZone} name={statsTableName} stats={stats} />\n      <InspectStatsTable timeZone={timeZone} name={dataStatsTableName} stats={dataStats} />\n    </div>\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 { Stack } from '@grafana/experimental';\nimport { config, RefreshEvent } from '@grafana/runtime';\nimport { Button, ClipboardButton, JSONFormatter, LoadingPlaceholder } 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<Props, State> {\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      <div>\n        {executedQueries.map((info) => {\n          return (\n            <Stack key={info.refId} gap={1} direction=\"column\">\n              <div>\n                <span className={styles.refId}>{info.refId}:</span>\n                {info.frames > 1 && <span>{info.frames} frames, </span>}\n                <span>{info.rows} rows</span>\n              </div>\n              <pre>{info.query}</pre>\n            </Stack>\n          );\n        })}\n      </div>\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      <div className={styles.wrap}>\n        <div aria-label={selectors.components.PanelInspector.Query.content}>\n          <h3 className=\"section-heading\">Query inspector</h3>\n          <p className=\"small muted\">\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          </p>\n        </div>\n        {this.renderExecutedQueries(executedQueries)}\n        <div className={styles.toolbar}>\n          <Button\n            icon=\"sync\"\n            onClick={onRefreshQuery}\n            aria-label={selectors.components.PanelInspector.Query.refreshButton}\n          >\n            Refresh\n          </Button>\n\n          {haveData && allNodesExpanded && (\n            <Button icon=\"minus\" variant=\"secondary\" className={styles.toolbarItem} onClick={this.onToggleExpand}>\n              Collapse all\n            </Button>\n          )}\n          {haveData && !allNodesExpanded && (\n            <Button icon=\"plus\" variant=\"secondary\" className={styles.toolbarItem} onClick={this.onToggleExpand}>\n              Expand all\n            </Button>\n          )}\n\n          {haveData && (\n            <ClipboardButton\n              getText={this.getTextForClipboard}\n              className={styles.toolbarItem}\n              icon=\"copy\"\n              variant=\"secondary\"\n            >\n              Copy to clipboard\n            </ClipboardButton>\n          )}\n          <div className=\"flex-grow-1\" />\n        </div>\n        <div className={styles.content}>\n          {isLoading && <LoadingPlaceholder text=\"Loading query inspector...\" />}\n          {!isLoading && haveData && (\n            <JSONFormatter json={response} open={openNodes} onDidRender={this.setFormattedJson} />\n          )}\n          {!isLoading && !haveData && (\n            <p className=\"muted\">No request and response collected yet. Hit refresh button</p>\n          )}\n        </div>\n      </div>\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","import saveAs from 'file-saver';\n\nimport {\n  CSVConfig,\n  DataFrame,\n  DataTransformerID,\n  dateTimeFormat,\n  dateTimeFormatISO,\n  LogsModel,\n  toCSV,\n} from '@grafana/data';\n\n/**\n * Downloads a DataFrame as a TXT file.\n *\n * @param {(Pick<LogsModel, 'meta' | 'rows'>)} logsModel\n * @param {string} title\n */\nexport function downloadLogsModelAsTxt(logsModel: Pick<LogsModel, 'meta' | 'rows'>, title: string) {\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\n  const fileName = `${title}-logs-${dateTimeFormat(new Date())}.txt`;\n  saveAs(blob, fileName);\n}\n\n/**\n * Exports a DataFrame as a CSV file.\n *\n * @param {DataFrame} dataFrame\n * @param {string} title\n * @param {CSVConfig} [csvConfig]\n * @param {DataTransformerID} [transformId=DataTransformerID.noop]\n */\nexport function downloadDataFrameAsCsv(\n  dataFrame: DataFrame,\n  title: string,\n  csvConfig?: CSVConfig,\n  transformId: DataTransformerID = DataTransformerID.noop\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\n  const transformation = transformId !== DataTransformerID.noop ? '-as-' + transformId.toLocaleLowerCase() : '';\n  const fileName = `${title}-data${transformation}-${dateTimeFormat(new Date())}.csv`;\n  saveAs(blob, fileName);\n}\n\n/**\n * Downloads any object as JSON file.\n *\n * @param {unknown} json\n * @param {string} title\n */\nexport function downloadAsJson(json: unknown, title: string) {\n  const blob = new Blob([JSON.stringify(json)], {\n    type: 'application/json',\n  });\n\n  const fileName = `${title}-${dateTimeFormat(new Date())}.json`;\n  saveAs(blob, fileName);\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<HistoryItem<DataQuery>>;\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<Props> {\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      <DragDropContext onDragStart={this.onDragStart} onDragEnd={this.onDragEnd}>\n        <Droppable droppableId=\"transformations-list\" direction=\"vertical\">\n          {(provided) => {\n            return (\n              <div ref={provided.innerRef} {...provided.droppableProps}>\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                    <QueryEditorRow\n                      id={query.refId}\n                      index={index}\n                      key={query.refId}\n                      data={data}\n                      query={query}\n                      dataSource={dataSourceSettings}\n                      onChangeDataSource={onChangeDataSourceSettings}\n                      onChange={(query) => 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              </div>\n            );\n          }}\n        </Droppable>\n      </DragDropContext>\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<string, TraceProcess>): 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<TraceKeyValuePair[]>((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<T>(key: string, value: T): TraceKeyValuePair<T> | 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","getStyles","theme","css","spacing","typography","bodySmall","fontSize","colors","text","secondary","DetailText","children","collapsedTextStyles","useStyles2","className","InspectDataOptions","onOptionsChange","dataFrames","transformId","transformationOptions","selectedDataFrame","onDataFrameChange","downloadForExcel","toggleDownloadForExcel","styles","getPanelInspectorStyles","panelTransformations","getTransformations","showPanelTransformationsOption","Boolean","showFieldConfigsOption","plugin","fieldConfigRegistry","isEmpty","dataSelect","DataTransformerID","selectableOptions","index","label","getFrameDisplayName","dataDisplayOptions","QueryOperationRow","headerElement","parts","getActiveString","isOpen","Field","Select","onChange","width","description","Switch","InspectDataTab","PureComponent","constructor","props","super","dataFrame","csvConfig","downloadDataFrameAsCsv","getDisplayTitle","app","this","reportInteraction","format","logsModel","dataFrameToLogsModel","undefined","downloadLogsModelAsTxt","df","preferredVisualisationType","custom","traceFormat","res","transformToJaeger","MutableDataFrame","downloadAsJson","transformToZipkin","transformToOTLP","item","setState","dataFrameIndex","prevState","buildTransformationOptions","transformedData","componentDidUpdate","prevProps","currentTransform","find","transformer","subscription","transformDataFrame","subscribe","unsubscribe","getProcessedData","timeZone","applyFieldOverrides","fieldConfig","replaceVariables","applyRawFieldOverrides","render","isLoading","Spinner","inline","hasLogs","some","hasTraces","hasServiceGraph","wrap","selectors","toolbar","Button","variant","onClick","exportCsv","useExcelHeader","i18nKey","exportLogsAsTxt","exportTracesAsJson","exportServiceGraph","height","style","Table","byField","InspectErrorTab","error","message","open","msg","split","parse","parseErrorMessage","ShowContent","PanelJSON","PanelData","DataFrames","InspectJSONTab","getPrettyJSON","getJSONObject","show","onClose","hasPanelJSON","canEdit","updates","shouldUpdateDashboardPanelFromJSON","reportPanelInspectInteraction","InspectTab","panel_type_changed","panel_id_changed","panel_grid_pos_changed","isEqual","panel_targets_changed","restoreModel","refresh","appEvents","AppEvents","err","console","queryParms","locationService","toString","componentDidMount","d","note","jsonOptions","slice","selected","isPanelJSON","inputId","onSelectChanged","toolbarItem","onApplyPanelModel","onShowHelpWizard","disableWidth","readOnly","onBlur","onTextChanged","obj","e","Error","includes","InspectStatsTable","stats","useTheme2","wrapper","stat","displayName","cell","formatStat","display","getDisplayProcessor","field","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","subs","add","backendSrv","next","onDataSourceResponse","events","RefreshEvent","onPanelRefresh","updateQueryList","oldProps","query","executedQueryString","rows","componentWillUnmount","hideFromInspector","headers","transformRequest","transformResponse","paramSerializer","jsonpCallbackParam","requestId","inspect","retry","timeout","status","statusText","ok","url","redirected","$$config","renderExecutedQueries","Stack","gap","direction","onRefreshQuery","openNodes","getNrOfOpenNodes","haveData","keys","supportsDataQuery","icon","onToggleExpand","getText","getTextForClipboard","onDidRender","setFormattedJson","editor","viewer","dataFrameSelect","leftActions","selects","textToDownload","metaItem","string","row","newRow","dateTimeFormatISO","timeEpochMs","entry","blob","Blob","fileName","saveAs","dataFrameCsv","toCSV","String","fromCharCode","transformation","toLocaleLowerCase","QueryEditorRows","onQueriesChange","filter","result","dsSettings","startIndex","source","numberOfQueries","datasourceType","destination","endIndex","update","Array","removed","splice","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","p","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":""}