{"version":3,"sources":["webpack:///./public/app/features/inspector/DetailText.tsx","webpack:///./public/app/features/inspector/InspectDataTab.tsx","webpack:///./public/app/features/inspector/InspectJSONTab.tsx","webpack:///./public/app/features/inspector/styles.ts","webpack:///./public/app/features/inspector/QueryInspector.tsx","webpack:///./public/app/features/inspector/InspectStatsTable.tsx","webpack:///./public/app/features/inspector/InspectStatsTab.tsx","webpack:///./public/app/features/dashboard/components/PanelEditor/utils.ts"],"names":["getStyles","theme","css","spacing","md","typography","size","sm","colors","textWeak","DetailText","children","collapsedTextStyles","useStyles","className","InspectDataTab","props","transformations","exportCsv","dataFrame","csvConfig","panel","transformId","state","dataFrameCsv","toCSV","blob","Blob","String","fromCharCode","type","displayTitle","getDisplayTitle","transformation","DataTransformerID","noop","toLocaleLowerCase","fileName","dateTimeFormat","Date","saveAs","onDataFrameChange","item","setState","value","seriesToColumns","dataFrameIndex","selectedDataFrame","transformationOptions","label","transformer","id","options","byField","transformedData","data","downloadForExcel","prevProps","prevState","this","withTransforms","currentTransform","find","subscription","transformDataFrame","subscribe","unsubscribe","withFieldConfig","applyFieldOverrides","config","fieldConfig","replaceVariables","applyRawFieldOverrides","parts","push","length","getFrameDisplayName","join","dataFrames","onOptionsChange","styles","getPanelInspectorStyles","panelTransformations","getTransformations","showPanelTransformationsOption","Boolean","showFieldConfigsOption","plugin","fieldConfigRegistry","isEmpty","dataSelect","choices","map","frame","index","selectableOptions","QueryOperationRow","title","headerElement","getActiveString","isOpen","data-testid","onChange","width","aria-label","description","isLoading","inline","getProcessedData","dataTabContent","selectors","components","PanelInspector","Data","content","actionsWrapper","dataDisplayOptions","renderDataOptions","variant","onClick","useExcelHeader","grow","height","style","PureComponent","ShowContent","PanelJSON","DataJSON","DataStructure","InspectJSONTab","onSelectChanged","text","getPrettyJSON","getJSONObject","show","onTextChanged","onApplyPanelModel","dashboard","onClose","hasPanelJSON","meta","canEdit","updates","JSON","parse","restoreModel","refresh","appEvents","emit","AppEvents","alertSuccess","alertError","err","console","error","getSaveModel","series","table","fields","field","chain","omit","note","jsonOptions","slice","selected","v","isPanelJSON","toolbar","Json","toolbarItem","disableWidth","language","showLineNumbers","showMiniMap","readOnly","onBlur","obj","stringify","stylesFactory","wrap","contentQueryInspector","editor","viewer","dataFrameSelect","tabContent","leftActions","selects","QueryInspector","subs","Subscription","onPanelRefresh","dsQuery","response","setFormattedJson","formattedJson","getTextForClipboard","onClipboardSuccess","onToggleExpand","allNodesExpanded","onToggleMocking","isMocking","getNrOfOpenNodes","setMockedResponse","evt","mockedResponse","target","executedQueries","add","backendSrv","getInspectorStream","next","onDataSourceResponse","events","RefreshEvent","updateQueryList","oldProps","last","undefined","forEach","idx","query","executedQueryString","refId","frames","rows","hideFromInspector","headers","request","transformRequest","transformResponse","paramSerializer","jsonpCallbackParam","requestId","inspect","retry","timeout","status","statusText","ok","url","redirected","$$config","weight","semibold","textBlue","info","key","onRefreshQuery","openNodes","haveData","Object","keys","supportsDataQuery","Query","renderExecutedQueries","icon","refreshButton","onSuccess","elType","json","open","onDidRender","InspectStatsTable","timeZone","name","stats","useTheme","wrapper","stat","displayName","cell","display","getDisplayProcessor","FieldType","number","formattedValueToString","formatStat","InspectStatsTab","requestTime","endTime","startTime","processingTime","timings","dataProcessingTime","dataRows","unit","targets","dataStats","concat","Stats","calculatePanelSize","mode","DisplayMode","Fill","pWidth","window","innerWidth","GRID_CELL_VMARGIN","GRID_COLUMN_COUNT","gridPos","w","pHeight","GRID_CELL_HEIGHT","h","scale","Math","min","Exact","skipDataQuery","updateDefaultFieldConfigValue","isCustom","defaults","remove","custom","lodashSet"],"mappings":"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","file":"default~DashboardPage~explore.3817b8b78f33fc1605dc.js","sourcesContent":["import React, { FC } from 'react';\nimport { useStyles } from '@grafana/ui';\nimport { GrafanaTheme } from '@grafana/data';\nimport { css } from 'emotion';\n\nconst getStyles = (theme: GrafanaTheme) => css`\n margin: 0;\n margin-left: ${theme.spacing.md};\n font-size: ${theme.typography.size.sm};\n color: ${theme.colors.textWeak};\n`;\n\nexport const DetailText: FC = ({ children }) => {\n const collapsedTextStyles = useStyles(getStyles);\n return

{children}

;\n};\n","import React, { PureComponent } from 'react';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport {\n applyFieldOverrides,\n applyRawFieldOverrides,\n CSVConfig,\n DataFrame,\n DataTransformerID,\n dateTimeFormat,\n getFrameDisplayName,\n SelectableValue,\n toCSV,\n transformDataFrame,\n} from '@grafana/data';\nimport { Button, Container, Field, HorizontalGroup, Select, Spinner, Switch, Table, VerticalGroup } from '@grafana/ui';\nimport { selectors } from '@grafana/e2e-selectors';\n\nimport { getPanelInspectorStyles } from './styles';\nimport { config } from 'app/core/config';\nimport { saveAs } from 'file-saver';\nimport { css } from 'emotion';\nimport { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';\nimport { QueryOperationRow } from 'app/core/components/QueryOperationRow/QueryOperationRow';\nimport { PanelModel } from 'app/features/dashboard/state';\nimport { DetailText } from 'app/features/inspector/DetailText';\n\ninterface Props {\n isLoading: boolean;\n options: GetDataOptions;\n data?: DataFrame[];\n panel?: PanelModel;\n onOptionsChange?: (options: GetDataOptions) => void;\n}\n\ninterface State {\n /** The string is seriesToColumns transformation. Otherwise it is a dataframe index */\n selectedDataFrame: number | DataTransformerID;\n transformId: DataTransformerID;\n dataFrameIndex: number;\n transformationOptions: Array>;\n transformedData: DataFrame[];\n downloadForExcel: boolean;\n}\n\nexport class InspectDataTab extends PureComponent {\n constructor(props: Props) {\n super(props);\n\n this.state = {\n selectedDataFrame: 0,\n dataFrameIndex: 0,\n transformId: DataTransformerID.noop,\n transformationOptions: buildTransformationOptions(),\n transformedData: props.data ?? [],\n downloadForExcel: false,\n };\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if (!this.props.data) {\n this.setState({ transformedData: [] });\n return;\n }\n\n if (this.props.options.withTransforms) {\n this.setState({ transformedData: this.props.data });\n return;\n }\n\n if (prevProps.data !== this.props.data || prevState.transformId !== this.state.transformId) {\n const currentTransform = this.state.transformationOptions.find((item) => item.value === this.state.transformId);\n\n if (currentTransform && currentTransform.transformer.id !== DataTransformerID.noop) {\n const selectedDataFrame = this.state.selectedDataFrame;\n const dataFrameIndex = this.state.dataFrameIndex;\n const subscription = transformDataFrame([currentTransform.transformer], this.props.data).subscribe((data) => {\n this.setState({ transformedData: data, selectedDataFrame, dataFrameIndex }, () => subscription.unsubscribe());\n });\n return;\n }\n\n this.setState({ transformedData: this.props.data });\n return;\n }\n }\n\n exportCsv = (dataFrame: DataFrame, csvConfig: CSVConfig = {}) => {\n const { panel } = this.props;\n const { transformId } = this.state;\n\n const dataFrameCsv = toCSV([dataFrame], csvConfig);\n\n const blob = new Blob([String.fromCharCode(0xfeff), dataFrameCsv], {\n type: 'text/csv;charset=utf-8',\n });\n const displayTitle = panel ? panel.getDisplayTitle() : 'Explore';\n const transformation = transformId !== DataTransformerID.noop ? '-as-' + transformId.toLocaleLowerCase() : '';\n const fileName = `${displayTitle}-data${transformation}-${dateTimeFormat(new Date())}.csv`;\n saveAs(blob, fileName);\n };\n\n onDataFrameChange = (item: SelectableValue) => {\n this.setState({\n transformId:\n item.value === DataTransformerID.seriesToColumns ? DataTransformerID.seriesToColumns : DataTransformerID.noop,\n dataFrameIndex: typeof item.value === 'number' ? item.value : 0,\n selectedDataFrame: item.value!,\n });\n };\n\n getProcessedData(): DataFrame[] {\n const { options, panel } = 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.theme,\n fieldConfig: panel.fieldConfig,\n replaceVariables: (value: string) => {\n return value;\n },\n });\n }\n\n getActiveString() {\n const { selectedDataFrame } = this.state;\n const { options, data } = this.props;\n let activeString = '';\n\n if (!data) {\n return activeString;\n }\n\n const parts: string[] = [];\n\n if (selectedDataFrame === DataTransformerID.seriesToColumns) {\n parts.push('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('Panel transforms');\n }\n\n if (options.withTransforms && options.withFieldConfig) {\n }\n\n if (options.withFieldConfig) {\n parts.push('Formatted data');\n }\n }\n\n if (this.state.downloadForExcel) {\n parts.push('Excel header');\n }\n\n return parts.join(', ');\n }\n\n renderDataOptions(dataFrames: DataFrame[]) {\n const { options, onOptionsChange, panel, data } = this.props;\n const { transformId, transformationOptions, selectedDataFrame } = this.state;\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.seriesToColumns) {\n dataSelect = data!;\n }\n\n const choices = dataSelect.map((frame, index) => {\n return {\n value: index,\n label: `${getFrameDisplayName(frame)} (${index})`,\n } as SelectableValue;\n });\n\n const selectableOptions = [...transformationOptions, ...choices];\n\n return (\n {this.getActiveString()}}\n isOpen={false}\n >\n
\n \n {data!.length > 1 && (\n \n \n \n )}\n\n \n {showPanelTransformationsOption && onOptionsChange && (\n \n onOptionsChange({ ...options, withTransforms: !options.withTransforms })}\n />\n \n )}\n {showFieldConfigsOption && onOptionsChange && (\n \n onOptionsChange({ ...options, withFieldConfig: !options.withFieldConfig })}\n />\n \n )}\n \n this.setState({ downloadForExcel: !this.state.downloadForExcel })}\n />\n \n \n \n
\n \n );\n }\n\n render() {\n const { isLoading } = this.props;\n const { dataFrameIndex } = 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 data = dataFrames[index];\n\n return (\n
\n
\n
{this.renderDataOptions(dataFrames)}
\n this.exportCsv(dataFrames[dataFrameIndex], { useExcelHeader: this.state.downloadForExcel })}\n className={css`\n margin-bottom: 10px;\n `}\n >\n Download CSV\n \n
\n \n \n {({ width, height }) => {\n if (width === 0) {\n return null;\n }\n\n return (\n
\n \n \n );\n }}\n \n \n \n );\n }\n}\n\nfunction buildTransformationOptions() {\n const transformations: Array> = [\n {\n value: DataTransformerID.seriesToColumns,\n label: 'Series joined by time',\n transformer: {\n id: DataTransformerID.seriesToColumns,\n options: { byField: 'Time' },\n },\n },\n ];\n\n return transformations;\n}\n","import React, { PureComponent } from 'react';\nimport { chain } from 'lodash';\nimport { AppEvents, PanelData, SelectableValue } from '@grafana/data';\nimport { Button, CodeEditor, Field, Select } from '@grafana/ui';\nimport AutoSizer from 'react-virtualized-auto-sizer';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { appEvents } from 'app/core/core';\nimport { DashboardModel, PanelModel } from 'app/features/dashboard/state';\nimport { getPanelInspectorStyles } from '../inspector/styles';\n\nenum ShowContent {\n PanelJSON = 'panel',\n DataJSON = 'data',\n DataStructure = 'structure',\n}\n\nconst options: Array> = [\n {\n label: 'Panel JSON',\n description: 'The model saved in the dashboard JSON that configures how everything works.',\n value: ShowContent.PanelJSON,\n },\n {\n label: 'Data',\n description: 'The raw model passed to the panel visualization',\n value: ShowContent.DataJSON,\n },\n {\n label: 'DataFrame structure',\n description: 'Response info without any values',\n value: ShowContent.DataStructure,\n },\n];\n\ninterface Props {\n onClose: () => void;\n dashboard?: DashboardModel;\n panel?: PanelModel;\n data?: PanelData;\n}\n\ninterface State {\n show: ShowContent;\n text: string;\n}\n\nexport class InspectJSONTab extends PureComponent {\n hasPanelJSON: boolean;\n\n constructor(props: Props) {\n super(props);\n this.hasPanelJSON = !!(props.panel && props.dashboard);\n // If we are in panel, we want to show PanelJSON, otherwise show DataJSON\n this.state = {\n show: this.hasPanelJSON ? ShowContent.PanelJSON : ShowContent.DataJSON,\n text: this.hasPanelJSON ? getPrettyJSON(props.panel!.getSaveModel()) : getPrettyJSON(props.data),\n };\n }\n\n onSelectChanged = (item: SelectableValue) => {\n const show = 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 getJSONObject(show: ShowContent) {\n const { data, panel } = this.props;\n if (show === ShowContent.DataJSON) {\n return data;\n }\n\n if (show === ShowContent.DataStructure) {\n const series = data?.series;\n if (!series) {\n return { note: 'Missing Response Data' };\n }\n return data!.series.map((frame) => {\n const { table, fields, ...rest } = frame as any; // remove 'table' from arrow response\n return {\n ...rest,\n fields: frame.fields.map((field) => {\n return chain(field).omit('values').omit('state').omit('display').value();\n }),\n };\n });\n }\n\n if (this.hasPanelJSON && show === ShowContent.PanelJSON) {\n return panel!.getSaveModel();\n }\n\n return { note: `Unknown Object: ${show}` };\n }\n\n onApplyPanelModel = () => {\n const { panel, dashboard, onClose } = this.props;\n if (this.hasPanelJSON) {\n try {\n if (!dashboard!.meta.canEdit) {\n appEvents.emit(AppEvents.alertError, ['Unable to apply']);\n } else {\n const updates = JSON.parse(this.state.text);\n 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 render() {\n const { dashboard } = this.props;\n const { show, text } = this.state;\n const jsonOptions = this.hasPanelJSON ? options : options.slice(1, options.length);\n const selected = options.find((v) => v.value === show);\n const isPanelJSON = show === ShowContent.PanelJSON;\n const canEdit = dashboard && dashboard.meta.canEdit;\n const styles = getPanelInspectorStyles();\n\n return (\n <>\n
\n \n
\n \n {stats.map((stat, index) => {\n return (\n \n \n \n \n );\n })}\n \n
{stat.displayName}{formatStat(stat, timeZone)}
\n
\n );\n};\n\nfunction formatStat(stat: QueryResultMetaStat, timeZone?: TimeZone): string {\n const display = getDisplayProcessor({\n field: {\n type: FieldType.number,\n config: stat,\n },\n theme: config.theme,\n timeZone,\n });\n return formattedValueToString(display(stat.value));\n}\n\nconst getStyles = stylesFactory((theme: GrafanaTheme) => {\n return {\n wrapper: css`\n padding-bottom: ${theme.spacing.md};\n `,\n cell: css`\n text-align: right;\n `,\n };\n});\n","import { PanelData, QueryResultMetaStat, TimeZone } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { InspectStatsTable } from './InspectStatsTable';\nimport React from 'react';\n\ninterface InspectStatsTabProps {\n data: PanelData;\n timeZone: TimeZone;\n}\n\nexport const InspectStatsTab: React.FC = ({ data, timeZone }) => {\n if (!data.request) {\n return null;\n }\n\n let stats: QueryResultMetaStat[] = [];\n\n const requestTime = data.request.endTime ? data.request.endTime - data.request.startTime : -1;\n const processingTime = data.timings?.dataProcessingTime || -1;\n let dataRows = 0;\n\n for (const frame of data.series) {\n dataRows += frame.length;\n }\n\n if (requestTime > 0) {\n stats.push({ displayName: 'Total request time', value: requestTime, unit: 'ms' });\n }\n if (processingTime > 0) {\n stats.push({ displayName: 'Data processing time', value: processingTime, unit: 'ms' });\n }\n stats.push({ displayName: 'Number of queries', value: data.request.targets.length });\n stats.push({ displayName: 'Total number rows', value: dataRows });\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 return (\n
\n \n \n
\n );\n};\n","import { CSSProperties } from 'react';\nimport { set as lodashSet, omit } from 'lodash';\nimport { FieldConfigSource, PanelPlugin } from '@grafana/data';\nimport { PanelModel } from '../../state/PanelModel';\nimport { DisplayMode } from './types';\nimport { GRID_CELL_HEIGHT, GRID_CELL_VMARGIN, GRID_COLUMN_COUNT } from 'app/core/constants';\n\nexport function calculatePanelSize(mode: DisplayMode, width: number, height: number, panel: PanelModel): CSSProperties {\n if (mode === DisplayMode.Fill) {\n return { width, height };\n }\n const colWidth = (window.innerWidth - GRID_CELL_VMARGIN * 4) / GRID_COLUMN_COUNT;\n const pWidth = colWidth * panel.gridPos.w;\n const pHeight = GRID_CELL_HEIGHT * panel.gridPos.h;\n const scale = Math.min(width / pWidth, height / pHeight);\n\n if (mode === DisplayMode.Exact && pWidth <= width && pHeight <= height) {\n return {\n width: pWidth,\n height: pHeight,\n };\n }\n\n return {\n width: pWidth * scale,\n height: pHeight * scale,\n };\n}\n\nexport function supportsDataQuery(plugin: PanelPlugin | undefined): boolean {\n return plugin?.meta.skipDataQuery === false;\n}\n\nexport const updateDefaultFieldConfigValue = (\n config: FieldConfigSource,\n name: string,\n value: any,\n isCustom?: boolean\n) => {\n let defaults = { ...config.defaults };\n const remove = value === undefined || value === null || '';\n\n if (isCustom) {\n if (defaults.custom) {\n if (remove) {\n defaults.custom = omit(defaults.custom, name);\n } else {\n defaults.custom = lodashSet({ ...defaults.custom }, name, value);\n }\n } else if (!remove) {\n defaults.custom = lodashSet({ ...defaults.custom }, name, value);\n }\n } else if (remove) {\n defaults = omit(defaults, name);\n } else {\n defaults = lodashSet({ ...defaults }, name, value);\n }\n\n return {\n ...config,\n defaults,\n };\n};\n"],"sourceRoot":""}