{"version":3,"sources":["webpack:///./public/app/features/query/components/QueryEditorRows.tsx","webpack:///./public/app/features/query/components/QueryGroupOptions.tsx","webpack:///./public/app/features/query/components/QueryGroup.tsx"],"names":["QueryEditorRows","onRemoveQuery","query","props","onQueriesChange","queries","filter","item","onDragEnd","result","destination","startIndex","source","index","endIndex","update","Array","from","removed","splice","this","old","datasource","map","itemIndex","dsSettings","data","droppableId","direction","provided","ref","innerRef","droppableProps","QueryEditorRow","id","refId","key","onChange","onChangeQuery","onAddQuery","onRunQuery","onRunQueries","placeholder","PureComponent","QueryGroupOptionsEditor","onRelativeTimeChange","event","setState","timeRangeFrom","target","value","onTimeShiftChange","timeRangeShift","onOverrideTime","options","newValue","emptyToNull","isValid","timeRangeValidation","timeRange","relativeTimeIsValid","onTimeShift","shift","timeShiftIsValid","onToggleTimeOverride","timeRangeHide","state","hide","onCacheTimeoutBlur","cacheTimeout","onMaxDataPointsBlur","maxDataPoints","parseInt","isNaN","onMinIntervalBlur","minInterval","onOpenOptions","isOpen","onCloseOptions","dataSource","meta","queryOptions","className","width","tooltip","type","spellCheck","onBlur","defaultValue","realMd","request","isAuto","realInterval","interval","minIntervalOnDs","styles","mdDesc","intervalDesc","collapsedText","hideTimeOverride","relativeTime","timeShift","getStyles","QueryOperationRow","title","headerElement","renderCollapsedText","onOpen","onClose","renderMaxDataPointsOption","renderIntervalOption","renderCacheTimeoutOption","invalid","label","labelWidth","rangeUtil","isValidTimeSpan","stylesFactory","theme","config","css","spacing","md","typography","size","sm","colors","textWeak","QueryGroup","backendSrv","dataSourceSrv","getDataSourceSrv","isLoadingHelp","helpContent","isPickerOpen","isAddingMixed","isHelpOpen","scrollTop","LoadingState","NotStarted","series","getDefaultTimeRange","onChangeDataSource","newSettings","mixed","ExpressionDatasourceID","name","defaultDatasource","get","uid","default","isDefault","onAddQueryClick","addQuery","onScrollBottom","onAddExpressionClick","expressionDatasource","newQuery","onUpdateAndRun","onOptionsChange","onOpenHelp","onCloseHelp","renderMixedPicker","DataSourcePicker","onAddMixedQuery","current","autoFocus","variables","onMixedPickerBlur","openMenuOnFocus","setScrollTop","queryRunner","querySubscription","getData","withTransforms","withFieldConfig","subscribe","next","onPanelDataUpdate","ds","getInstanceSettings","console","log","unsubscribe","changedProps","onOpenQueryInspector","dataSourceRow","dataSourceRowItem","metrics","dashboard","variant","icon","onClick","dataSourceRowItemOptions","aria-label","selectors","components","QueryTab","queryInspectorButton","isSharedDashboardQuery","panelData","content","alerting","showAddButton","align","expressionsEnabled","isExpressionsSupported","placement","expressionButton","autoHeightMin","innerWrapper","renderTopSection","queriesWrapper","renderQueries","renderAddQueryRow","onDismiss","PluginHelp","plugin","inlineFormMargin","expressionWrapper"],"mappings":"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","file":"default~DashboardPage~NgAlertingPage~sandbox.3817b8b78f33fc1605dc.js","sourcesContent":["// Libraries\nimport React, { PureComponent } from 'react';\n\n// Types\nimport { DataQuery, DataSourceInstanceSettings, PanelData } from '@grafana/data';\nimport { QueryEditorRow } from './QueryEditorRow';\nimport { DragDropContext, Droppable, DropResult } from 'react-beautiful-dnd';\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\nexport class QueryEditorRows extends PureComponent {\n onRemoveQuery = (query: DataQuery) => {\n this.props.onQueriesChange(this.props.queries.filter((item) => item !== query));\n };\n\n onChangeQuery(query: DataQuery, index: number) {\n const { queries, onQueriesChange } = this.props;\n\n const old = queries[index];\n\n if (old.datasource) {\n query.datasource = old.datasource;\n }\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 onDragEnd = (result: DropResult) => {\n const { queries, onQueriesChange } = 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 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\n render() {\n const { dsSettings, data, queries } = this.props;\n\n return (\n \n \n {(provided) => {\n return (\n
\n {queries.map((query, index) => (\n this.onChangeQuery(query, index)}\n onRemoveQuery={this.onRemoveQuery}\n onAddQuery={this.props.onAddQuery}\n onRunQuery={this.props.onRunQueries}\n queries={queries}\n />\n ))}\n {provided.placeholder}\n
\n );\n }}\n
\n
\n );\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';\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
Max data points / time range
\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 { DataSourcePicker } from 'app/core/components/Select/DataSourcePicker';\nimport { Button, CustomScrollbar, HorizontalGroup, Icon, Modal, stylesFactory, Tooltip } from '@grafana/ui';\nimport { 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 { expressionDatasource, ExpressionDatasourceID } 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';\nimport { QueryGroupOptions } from 'app/types';\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 helpContent: React.ReactNode;\n isLoadingHelp: boolean;\n isPickerOpen: boolean;\n isAddingMixed: boolean;\n scrollTop: number;\n data: PanelData;\n isHelpOpen: boolean;\n}\n\nexport class QueryGroup extends PureComponent {\n backendSrv = backendSrv;\n dataSourceSrv = getDataSourceSrv();\n querySubscription: Unsubscribable | null;\n\n state: State = {\n isLoadingHelp: false,\n helpContent: null,\n isPickerOpen: false,\n isAddingMixed: false,\n isHelpOpen: false,\n scrollTop: 0,\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.name);\n const dsSettings = this.dataSourceSrv.getInstanceSettings(options.dataSource.name);\n this.setState({ dataSource: ds, dsSettings });\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 let { queries } = this.props.options;\n const { dsSettings } = this.state;\n\n // switching to mixed\n if (newSettings.meta.mixed) {\n for (const query of queries) {\n if (query.datasource !== ExpressionDatasourceID) {\n query.datasource = dsSettings?.name;\n if (!query.datasource) {\n query.datasource = config.defaultDatasource;\n }\n }\n }\n } else if (dsSettings) {\n // if switching from mixed\n if (dsSettings.meta.mixed) {\n // Remove the explicit datasource\n for (const query of queries) {\n if (query.datasource !== ExpressionDatasourceID) {\n delete query.datasource;\n }\n }\n } else if (dsSettings.meta.id !== newSettings.meta.id) {\n // we are changing data source type, clear queries\n queries = [{ refId: 'A' }];\n }\n }\n\n const dataSource = await this.dataSourceSrv.get(newSettings.name);\n\n this.onChange({\n queries,\n dataSource: {\n name: newSettings.name,\n uid: newSettings.uid,\n default: newSettings.isDefault,\n },\n });\n\n this.setState({\n dataSource: dataSource,\n dsSettings: newSettings,\n });\n };\n\n onAddQueryClick = () => {\n if (this.state.dsSettings?.meta.mixed) {\n this.setState({ isAddingMixed: true });\n return;\n }\n\n this.onChange({ queries: addQuery(this.props.options.queries) });\n this.onScrollBottom();\n };\n\n onChange(changedProps: Partial) {\n this.props.onOptionsChange({\n ...this.props.options,\n ...changedProps,\n });\n }\n\n onAddExpressionClick = () => {\n this.onChange({\n queries: addQuery(this.props.options.queries, expressionDatasource.newQuery()),\n });\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 \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 { queries } = this.props.options;\n this.onChange({ queries: addQuery(queries, query) });\n this.onScrollBottom();\n };\n\n setScrollTop = (event: React.MouseEvent) => {\n const target = event.target as HTMLElement;\n this.setState({ scrollTop: target.scrollTop });\n };\n\n onQueriesChange = (queries: DataQuery[]) => {\n this.onChange({ queries });\n };\n\n renderQueries(dsSettings: DataSourceInstanceSettings) {\n const { options, onRunQueries } = this.props;\n const { data } = 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 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 {isAddingMixed && this.renderMixedPicker()}\n {config.expressionsEnabled && this.isExpressionsSupported(dsSettings) && (\n \n \n Expression \n \n \n \n )}\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"],"sourceRoot":""}