{"version":3,"file":"1918.0cedc4c919aff84ce58c.js","mappings":"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","sources":["webpack://grafana/./public/app/core/components/PluginHelp/PluginHelp.tsx","webpack://grafana/./public/app/features/query/components/QueryGroupOptions.tsx","webpack://grafana/./public/app/features/query/components/QueryGroup.tsx","webpack://grafana/./public/app/features/query/state/updateQueries.ts"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport { renderMarkdown } from '@grafana/data';\nimport { getBackendSrv } from '@grafana/runtime';\n\ninterface Props {\n plugin: {\n name: string;\n id: string;\n };\n type: string;\n}\n\ninterface State {\n isError: boolean;\n isLoading: boolean;\n help: string;\n}\n\nexport class PluginHelp extends PureComponent {\n state = {\n isError: false,\n isLoading: false,\n help: '',\n };\n\n componentDidMount(): void {\n this.loadHelp();\n }\n\n constructPlaceholderInfo() {\n return 'No plugin help or readme markdown file was found';\n }\n\n loadHelp = () => {\n const { plugin, type } = this.props;\n this.setState({ isLoading: true });\n\n getBackendSrv()\n .get(`/api/plugins/${plugin.id}/markdown/${type}`)\n .then((response: string) => {\n const helpHtml = renderMarkdown(response);\n\n if (response === '' && type === 'help') {\n this.setState({\n isError: false,\n isLoading: false,\n help: this.constructPlaceholderInfo(),\n });\n } else {\n this.setState({\n isError: false,\n isLoading: false,\n help: helpHtml,\n });\n }\n })\n .catch(() => {\n this.setState({\n isError: true,\n isLoading: false,\n });\n });\n };\n\n render() {\n const { type } = this.props;\n const { isError, isLoading, help } = this.state;\n\n if (isLoading) {\n return

Loading help...

;\n }\n\n if (isError) {\n return

'Error occurred when loading help'

;\n }\n\n if (type === 'panel_help' && help === '') {\n }\n\n return
;\n }\n}\n","// Libraries\nimport React, { PureComponent, ChangeEvent, FocusEvent } from 'react';\n\n// Utils\nimport { rangeUtil, PanelData, DataSourceApi } from '@grafana/data';\n\n// Components\nimport { Switch, Input, InlineField, InlineFormLabel, stylesFactory } from '@grafana/ui';\n\n// Types\nimport { QueryOperationRow } from 'app/core/components/QueryOperationRow/QueryOperationRow';\nimport { config } from 'app/core/config';\nimport { css } from '@emotion/css';\nimport { QueryGroupOptions } from 'app/types';\n\ninterface Props {\n options: QueryGroupOptions;\n dataSource: DataSourceApi;\n data: PanelData;\n onChange: (options: QueryGroupOptions) => void;\n}\n\ninterface State {\n timeRangeFrom: string;\n timeRangeShift: string;\n timeRangeHide: boolean;\n isOpen: boolean;\n relativeTimeIsValid: boolean;\n timeShiftIsValid: boolean;\n}\n\nexport class QueryGroupOptionsEditor extends PureComponent {\n constructor(props: Props) {\n super(props);\n\n const { options } = props;\n\n this.state = {\n timeRangeFrom: options.timeRange?.from || '',\n timeRangeShift: options.timeRange?.shift || '',\n timeRangeHide: options.timeRange?.hide ?? false,\n isOpen: false,\n relativeTimeIsValid: true,\n timeShiftIsValid: true,\n };\n }\n\n onRelativeTimeChange = (event: ChangeEvent) => {\n this.setState({\n timeRangeFrom: event.target.value,\n });\n };\n\n onTimeShiftChange = (event: ChangeEvent) => {\n this.setState({\n timeRangeShift: event.target.value,\n });\n };\n\n onOverrideTime = (event: FocusEvent) => {\n const { options, onChange } = this.props;\n\n const newValue = emptyToNull(event.target.value);\n const isValid = timeRangeValidation(newValue);\n\n if (isValid && options.timeRange?.from !== newValue) {\n onChange({\n ...options,\n timeRange: {\n ...(options.timeRange ?? {}),\n from: newValue,\n },\n });\n }\n\n this.setState({ relativeTimeIsValid: isValid });\n };\n\n onTimeShift = (event: FocusEvent) => {\n const { options, onChange } = this.props;\n\n const newValue = emptyToNull(event.target.value);\n const isValid = timeRangeValidation(newValue);\n\n if (isValid && options.timeRange?.shift !== newValue) {\n onChange({\n ...options,\n timeRange: {\n ...(options.timeRange ?? {}),\n shift: newValue,\n },\n });\n }\n\n this.setState({ timeShiftIsValid: isValid });\n };\n\n onToggleTimeOverride = () => {\n const { onChange, options } = this.props;\n\n this.setState({ timeRangeHide: !this.state.timeRangeHide }, () => {\n onChange({\n ...options,\n timeRange: {\n ...(options.timeRange ?? {}),\n hide: this.state.timeRangeHide,\n },\n });\n });\n };\n\n onCacheTimeoutBlur = (event: ChangeEvent) => {\n const { options, onChange } = this.props;\n onChange({\n ...options,\n cacheTimeout: emptyToNull(event.target.value),\n });\n };\n\n onMaxDataPointsBlur = (event: ChangeEvent) => {\n const { options, onChange } = this.props;\n\n let maxDataPoints: number | null = parseInt(event.target.value as string, 10);\n\n if (isNaN(maxDataPoints) || maxDataPoints === 0) {\n maxDataPoints = null;\n }\n\n if (maxDataPoints !== options.maxDataPoints) {\n onChange({\n ...options,\n maxDataPoints,\n });\n }\n };\n\n onMinIntervalBlur = (event: ChangeEvent) => {\n const { options, onChange } = this.props;\n const minInterval = emptyToNull(event.target.value);\n if (minInterval !== options.minInterval) {\n onChange({\n ...options,\n minInterval,\n });\n }\n };\n\n renderCacheTimeoutOption() {\n const { dataSource, options } = this.props;\n\n const tooltip = `If your time series store has a query cache this option can override the default cache timeout. Specify a\n numeric value in seconds.`;\n\n if (!dataSource.meta.queryOptions?.cacheTimeout) {\n return null;\n }\n\n return (\n
\n
\n \n Cache timeout\n \n \n
\n
\n );\n }\n\n renderMaxDataPointsOption() {\n const { data, options } = this.props;\n const realMd = data.request?.maxDataPoints;\n const value = options.maxDataPoints ?? '';\n const isAuto = value === '';\n\n return (\n
\n
\n \n The maximum data points per series. Used directly by some data sources and used in calculation of auto\n interval. With streaming data this value is used for the rolling buffer.\n \n }\n >\n Max data points\n \n \n {isAuto && (\n <>\n
=
\n
Width of panel
\n \n )}\n
\n
\n );\n }\n\n renderIntervalOption() {\n const { data, dataSource, options } = this.props;\n const realInterval = data.request?.interval;\n const minIntervalOnDs = dataSource.interval ?? 'No limit';\n\n return (\n <>\n
\n
\n \n A lower limit for the interval. Recommended to be set to write frequency, for example 1m{' '}\n if your data is written every minute. Default value can be set in data source settings for most data\n sources.\n \n }\n >\n Min interval\n \n \n
\n
\n
\n
\n \n The evaluated interval that is sent to data source and is used in $__interval and{' '}\n $__interval_ms\n \n }\n >\n Interval\n \n {realInterval}\n
=
\n
Time range / max data points
\n
\n
\n \n );\n }\n\n onOpenOptions = () => {\n this.setState({ isOpen: true });\n };\n\n onCloseOptions = () => {\n this.setState({ isOpen: false });\n };\n\n renderCollapsedText(styles: StylesType): React.ReactNode | undefined {\n const { data, options } = this.props;\n const { isOpen } = this.state;\n\n if (isOpen) {\n return undefined;\n }\n\n let mdDesc = options.maxDataPoints ?? '';\n if (mdDesc === '' && data.request) {\n mdDesc = `auto = ${data.request.maxDataPoints}`;\n }\n\n let intervalDesc = options.minInterval;\n if (data.request) {\n intervalDesc = `${data.request.interval}`;\n }\n\n return (\n <>\n {
MD = {mdDesc}
}\n {
Interval = {intervalDesc}
}\n \n );\n }\n\n render() {\n const { timeRangeHide: hideTimeOverride, relativeTimeIsValid, timeShiftIsValid } = this.state;\n const { timeRangeFrom: relativeTime, timeRangeShift: timeShift, isOpen } = this.state;\n const styles = getStyles();\n\n return (\n \n {this.renderMaxDataPointsOption()}\n {this.renderIntervalOption()}\n {this.renderCacheTimeoutOption()}\n\n
\n Relative time\n \n
\n\n
\n Time shift\n \n
\n {(timeShift || relativeTime) && (\n
\n \n \n \n
\n )}\n \n );\n }\n}\n\nconst timeRangeValidation = (value: string | null) => {\n if (!value) {\n return true;\n }\n\n return rangeUtil.isValidTimeSpan(value);\n};\n\nconst emptyToNull = (value: string) => {\n return value === '' ? null : value;\n};\n\nconst getStyles = stylesFactory(() => {\n const { theme } = config;\n\n return {\n collapsedText: css`\n margin-left: ${theme.spacing.md};\n font-size: ${theme.typography.size.sm};\n color: ${theme.colors.textWeak};\n `,\n };\n});\n\ntype StylesType = ReturnType;\n","// Libraries\nimport React, { PureComponent } from 'react';\n// Components\nimport {\n Button,\n CustomScrollbar,\n HorizontalGroup,\n InlineFormLabel,\n Modal,\n ScrollbarPosition,\n stylesFactory,\n} from '@grafana/ui';\nimport { DataSourcePicker, getDataSourceSrv } from '@grafana/runtime';\nimport { QueryEditorRows } from './QueryEditorRows';\n// Services\nimport { backendSrv } from 'app/core/services/backend_srv';\nimport config from 'app/core/config';\n// Types\nimport {\n DataQuery,\n DataSourceApi,\n DataSourceInstanceSettings,\n getDefaultTimeRange,\n LoadingState,\n PanelData,\n} from '@grafana/data';\nimport { PluginHelp } from 'app/core/components/PluginHelp/PluginHelp';\nimport { addQuery } from 'app/core/utils/query';\nimport { Unsubscribable } from 'rxjs';\nimport { dataSource as expressionDatasource } from 'app/features/expressions/ExpressionDatasource';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { PanelQueryRunner } from '../state/PanelQueryRunner';\nimport { QueryGroupOptionsEditor } from './QueryGroupOptions';\nimport { DashboardQueryEditor, isSharedDashboardQuery } from 'app/plugins/datasource/dashboard';\nimport { css } from '@emotion/css';\nimport { QueryGroupOptions } from 'app/types';\nimport { GroupActionComponents } from './QueryActionComponent';\nimport { updateQueries } from '../state/updateQueries';\n\ninterface Props {\n queryRunner: PanelQueryRunner;\n options: QueryGroupOptions;\n onOpenQueryInspector?: () => void;\n onRunQueries: () => void;\n onOptionsChange: (options: QueryGroupOptions) => void;\n}\n\ninterface State {\n dataSource?: DataSourceApi;\n dsSettings?: DataSourceInstanceSettings;\n queries: DataQuery[];\n helpContent: React.ReactNode;\n isLoadingHelp: boolean;\n isPickerOpen: boolean;\n isAddingMixed: boolean;\n scrollTop: number;\n data: PanelData;\n isHelpOpen: boolean;\n defaultDataSource?: DataSourceApi;\n}\n\nexport class QueryGroup extends PureComponent {\n backendSrv = backendSrv;\n dataSourceSrv = getDataSourceSrv();\n querySubscription: Unsubscribable | null = null;\n\n state: State = {\n isLoadingHelp: false,\n helpContent: null,\n isPickerOpen: false,\n isAddingMixed: false,\n isHelpOpen: false,\n scrollTop: 0,\n queries: [],\n data: {\n state: LoadingState.NotStarted,\n series: [],\n timeRange: getDefaultTimeRange(),\n },\n };\n\n async componentDidMount() {\n const { queryRunner, options } = this.props;\n\n this.querySubscription = queryRunner.getData({ withTransforms: false, withFieldConfig: false }).subscribe({\n next: (data: PanelData) => this.onPanelDataUpdate(data),\n });\n\n try {\n const ds = await this.dataSourceSrv.get(options.dataSource);\n const dsSettings = this.dataSourceSrv.getInstanceSettings(options.dataSource);\n const defaultDataSource = await this.dataSourceSrv.get();\n const datasource = ds.getRef();\n const queries = options.queries.map((q) => (q.datasource ? q : { ...q, datasource }));\n this.setState({ queries, dataSource: ds, dsSettings, defaultDataSource });\n } catch (error) {\n console.log('failed to load data source', error);\n }\n }\n\n componentWillUnmount() {\n if (this.querySubscription) {\n this.querySubscription.unsubscribe();\n this.querySubscription = null;\n }\n }\n\n onPanelDataUpdate(data: PanelData) {\n this.setState({ data });\n }\n\n onChangeDataSource = async (newSettings: DataSourceInstanceSettings) => {\n const { dsSettings } = this.state;\n const queries = updateQueries(newSettings, this.state.queries, dsSettings);\n\n const dataSource = await this.dataSourceSrv.get(newSettings.name);\n this.onChange({\n queries,\n dataSource: {\n name: newSettings.name,\n uid: newSettings.uid,\n type: newSettings.meta.id,\n default: newSettings.isDefault,\n },\n });\n\n this.setState({\n queries,\n dataSource: dataSource,\n dsSettings: newSettings,\n });\n };\n\n onAddQueryClick = () => {\n const { queries } = this.state;\n this.onQueriesChange(addQuery(queries, this.newQuery()));\n this.onScrollBottom();\n };\n\n newQuery(): Partial {\n const { dsSettings, defaultDataSource } = this.state;\n\n const ds = !dsSettings?.meta.mixed ? dsSettings : defaultDataSource;\n\n return {\n datasource: { uid: ds?.uid, type: ds?.type },\n };\n }\n\n onChange(changedProps: Partial) {\n this.props.onOptionsChange({\n ...this.props.options,\n ...changedProps,\n });\n }\n\n onAddExpressionClick = () => {\n this.onQueriesChange(addQuery(this.state.queries, expressionDatasource.newQuery()));\n this.onScrollBottom();\n };\n\n onScrollBottom = () => {\n this.setState({ scrollTop: 1000 });\n };\n\n onUpdateAndRun = (options: QueryGroupOptions) => {\n this.props.onOptionsChange(options);\n this.props.onRunQueries();\n };\n\n renderTopSection(styles: QueriesTabStyles) {\n const { onOpenQueryInspector, options } = this.props;\n const { dataSource, data } = this.state;\n\n return (\n
\n
\n \n Data source\n \n
\n \n
\n {dataSource && (\n <>\n
\n \n
\n
\n \n
\n {onOpenQueryInspector && (\n
\n \n Query inspector\n \n
\n )}\n \n )}\n
\n
\n );\n }\n\n onOpenHelp = () => {\n this.setState({ isHelpOpen: true });\n };\n\n onCloseHelp = () => {\n this.setState({ isHelpOpen: false });\n };\n\n renderMixedPicker = () => {\n return (\n \n );\n };\n\n onAddMixedQuery = (datasource: any) => {\n this.onAddQuery({ datasource: datasource.name });\n this.setState({ isAddingMixed: false, scrollTop: this.state.scrollTop + 10000 });\n };\n\n onMixedPickerBlur = () => {\n this.setState({ isAddingMixed: false });\n };\n\n onAddQuery = (query: Partial) => {\n const { dsSettings, queries } = this.state;\n this.onQueriesChange(addQuery(queries, query, { type: dsSettings?.type, uid: dsSettings?.uid }));\n this.onScrollBottom();\n };\n\n setScrollTop = ({ scrollTop }: ScrollbarPosition) => {\n this.setState({ scrollTop: scrollTop });\n };\n\n onQueriesChange = (queries: DataQuery[]) => {\n this.onChange({ queries });\n this.setState({ queries });\n };\n\n renderQueries(dsSettings: DataSourceInstanceSettings) {\n const { onRunQueries } = this.props;\n const { data, queries } = this.state;\n\n if (isSharedDashboardQuery(dsSettings.name)) {\n return (\n \n );\n }\n\n return (\n
\n \n
\n );\n }\n\n isExpressionsSupported(dsSettings: DataSourceInstanceSettings): boolean {\n return (dsSettings.meta.alerting || dsSettings.meta.mixed) === true;\n }\n\n renderExtraActions() {\n return GroupActionComponents.getAllExtraRenderAction()\n .map((action, index) =>\n action({\n onAddQuery: this.onAddQuery,\n onChangeDataSource: this.onChangeDataSource,\n key: index,\n })\n )\n .filter(Boolean);\n }\n\n renderAddQueryRow(dsSettings: DataSourceInstanceSettings, styles: QueriesTabStyles) {\n const { isAddingMixed } = this.state;\n const showAddButton = !(isAddingMixed || isSharedDashboardQuery(dsSettings.name));\n\n return (\n \n {showAddButton && (\n \n Query\n \n )}\n {config.expressionsEnabled && this.isExpressionsSupported(dsSettings) && (\n \n Expression \n \n )}\n {this.renderExtraActions()}\n \n );\n }\n\n render() {\n const { scrollTop, isHelpOpen, dsSettings } = this.state;\n const styles = getStyles();\n\n return (\n \n
\n {this.renderTopSection(styles)}\n {dsSettings && (\n <>\n
{this.renderQueries(dsSettings)}
\n {this.renderAddQueryRow(dsSettings, styles)}\n {isHelpOpen && (\n \n \n \n )}\n \n )}\n
\n
\n );\n }\n}\n\nconst getStyles = stylesFactory(() => {\n const { theme } = config;\n\n return {\n innerWrapper: css`\n display: flex;\n flex-direction: column;\n height: 100%;\n padding: ${theme.spacing.md};\n `,\n dataSourceRow: css`\n display: flex;\n margin-bottom: ${theme.spacing.md};\n `,\n dataSourceRowItem: css`\n margin-right: ${theme.spacing.inlineFormMargin};\n `,\n dataSourceRowItemOptions: css`\n flex-grow: 1;\n margin-right: ${theme.spacing.inlineFormMargin};\n `,\n queriesWrapper: css`\n padding-bottom: 16px;\n `,\n expressionWrapper: css``,\n expressionButton: css`\n margin-right: ${theme.spacing.sm};\n `,\n };\n});\n\ntype QueriesTabStyles = ReturnType;\n","import { DataQuery, DataSourceInstanceSettings, getDataSourceRef } from '@grafana/data';\nimport { isExpressionReference } from '@grafana/runtime/src/utils/DataSourceWithBackend';\n\nexport function updateQueries(\n newSettings: DataSourceInstanceSettings,\n queries: DataQuery[],\n dsSettings?: DataSourceInstanceSettings\n): DataQuery[] {\n const datasource = getDataSourceRef(newSettings);\n\n // we are changing data source type\n if (dsSettings?.type !== newSettings.type) {\n // If changing to mixed do nothing\n if (newSettings.meta.mixed) {\n return queries;\n } else {\n // Changing to another datasource type clear queries\n return [{ refId: 'A', datasource }];\n }\n }\n\n // Set data source on all queries except expression queries\n return queries.map((query) => {\n if (!isExpressionReference(query.datasource) && !newSettings.meta.mixed) {\n query.datasource = datasource;\n }\n return query;\n });\n}\n"],"names":["PluginHelp","PureComponent","isError","isLoading","help","plugin","type","this","props","setState","getBackendSrv","get","id","then","response","helpHtml","renderMarkdown","constructPlaceholderInfo","catch","componentDidMount","loadHelp","render","state","className","dangerouslySetInnerHTML","__html","QueryGroupOptionsEditor","constructor","super","event","timeRangeFrom","target","value","timeRangeShift","options","onChange","newValue","emptyToNull","isValid","timeRangeValidation","timeRange","from","relativeTimeIsValid","shift","timeShiftIsValid","timeRangeHide","hide","cacheTimeout","maxDataPoints","parseInt","isNaN","minInterval","isOpen","renderCacheTimeoutOption","dataSource","meta","queryOptions","InlineFormLabel","width","tooltip","Input","placeholder","spellCheck","onBlur","onCacheTimeoutBlur","defaultValue","renderMaxDataPointsOption","data","realMd","request","isAuto","onMaxDataPointsBlur","renderIntervalOption","realInterval","interval","minIntervalOnDs","onMinIntervalBlur","renderCollapsedText","styles","mdDesc","intervalDesc","collapsedText","hideTimeOverride","relativeTime","timeShift","getStyles","QueryOperationRow","index","title","headerElement","onOpen","onOpenOptions","onClose","onCloseOptions","onRelativeTimeChange","onOverrideTime","invalid","onTimeShiftChange","onTimeShift","InlineField","label","labelWidth","Switch","onToggleTimeOverride","rangeUtil","stylesFactory","theme","config","css","spacing","md","typography","size","sm","colors","textWeak","QueryGroup","backendSrv","getDataSourceSrv","isLoadingHelp","helpContent","isPickerOpen","isAddingMixed","isHelpOpen","scrollTop","queries","LoadingState","series","getDefaultTimeRange","async","dsSettings","newSettings","datasource","getDataSourceRef","mixed","refId","map","query","isExpressionReference","updateQueries","dataSourceSrv","name","uid","default","isDefault","onQueriesChange","addQuery","newQuery","onScrollBottom","expressionDatasource","onOptionsChange","onRunQueries","DataSourcePicker","onAddMixedQuery","current","autoFocus","variables","onMixedPickerBlur","openMenuOnFocus","onAddQuery","queryRunner","querySubscription","getData","withTransforms","withFieldConfig","subscribe","next","onPanelDataUpdate","ds","getInstanceSettings","defaultDataSource","getRef","q","error","console","log","componentWillUnmount","unsubscribe","changedProps","renderTopSection","onOpenQueryInspector","dataSourceRow","htmlFor","dataSourceRowItem","onChangeDataSource","metrics","dashboard","Button","variant","icon","onClick","onOpenHelp","dataSourceRowItemOptions","onUpdateAndRun","selectors","renderQueries","isSharedDashboardQuery","panelData","QueryEditorRows","isExpressionsSupported","alerting","renderExtraActions","GroupActionComponents","action","key","filter","Boolean","renderAddQueryRow","showAddButton","HorizontalGroup","align","onAddQueryClick","onAddExpressionClick","expressionButton","CustomScrollbar","autoHeightMin","setScrollTop","innerWrapper","queriesWrapper","Modal","onDismiss","onCloseHelp","inlineFormMargin","expressionWrapper"],"sourceRoot":""}