{"version":3,"file":"9227.80dfbef510faf13ba773.js","mappings":"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","sources":["webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/AliasBy.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/GraphPeriod.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/AlignmentFunction.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/Alignment.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/Aggregation.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/GroupBy.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/LabelFilter.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/Metrics.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/Preprocessor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/VisualMetricQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/MetricQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/PeriodSelect.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/Project.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/MQLQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/GraphPeriod.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/MetricQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/QueryHeader.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/SLO.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/Selector.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/Service.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Experimental/SLOQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/QueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLO/Service.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLO/SLO.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLO/Selector.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLO/SLOQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Project.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Metrics.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/GroupBy.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/LabelFilter.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AnnotationsHelp.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AlignmentFunction.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AlignmentPeriodLabel.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AliasBy.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Fields.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/VisualMetricQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/PeriodSelect.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Preprocessor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/constants.ts","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/functions.ts","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/types.ts","webpack://grafana/../../opt/drone/yarncache/@grafana-google-sdk-npm-0.0.3-c91663433f-9eb5e043e0.zip/node_modules/@grafana/google-sdk/dist/index.production.js","webpack://grafana/../../opt/drone/yarncache/@grafana-google-sdk-npm-0.0.3-c91663433f-9eb5e043e0.zip/node_modules/@grafana/google-sdk/index.js"],"sourcesContent":["import { debounce } from 'lodash';\nimport React, { FunctionComponent, useState } from 'react';\n\nimport { EditorField } from '@grafana/experimental';\nimport { Input } from '@grafana/ui';\n\nimport { SELECT_WIDTH } from '../../constants';\n\nexport interface Props {\n refId: string;\n onChange: (alias: any) => void;\n value?: string;\n}\n\nexport const AliasBy: FunctionComponent = ({ refId, value = '', onChange }) => {\n const [alias, setAlias] = useState(value ?? '');\n\n const propagateOnChange = debounce(onChange, 1000);\n\n onChange = (e: any) => {\n setAlias(e.target.value);\n propagateOnChange(e.target.value);\n };\n\n return (\n \n \n \n );\n};\n","import React, { FunctionComponent } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorRow } from '@grafana/experimental';\nimport { HorizontalGroup, Switch } from '@grafana/ui';\n\nimport { GRAPH_PERIODS, SELECT_WIDTH } from '../../constants';\nimport { PeriodSelect } from '../index';\n\nexport interface Props {\n refId: string;\n onChange: (period: string) => void;\n variableOptionGroup: SelectableValue;\n graphPeriod?: string;\n}\n\nexport const GraphPeriod: FunctionComponent = ({ refId, onChange, graphPeriod, variableOptionGroup }) => {\n return (\n \n \n Set graph_period which forces a preferred period between points. Automatically set to the\n current interval if left blank.\n \n }\n >\n \n onChange(e.currentTarget.checked ? '' : 'disabled')}\n />\n \n \n \n \n );\n};\n","import React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { getAlignmentPickerData } from '../../functions';\nimport { MetricQuery } from '../../types';\n\nexport interface Props {\n inputId: string;\n onChange: (query: MetricQuery) => void;\n query: MetricQuery;\n templateVariableOptions: Array>;\n}\n\nexport const AlignmentFunction: FC = ({ inputId, query, templateVariableOptions, onChange }) => {\n const { valueType, metricKind, perSeriesAligner: psa, preprocessor } = query;\n const { perSeriesAligner, alignOptions } = useMemo(\n () => getAlignmentPickerData(valueType, metricKind, psa, preprocessor),\n [valueType, metricKind, psa, preprocessor]\n );\n\n return (\n onChange({ ...query, perSeriesAligner: value! })}\n value={[...alignOptions, ...templateVariableOptions].find((s) => s.value === perSeriesAligner)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n {\n label: 'Alignment options',\n expanded: true,\n options: alignOptions,\n },\n ]}\n placeholder=\"Select Alignment\"\n inputId={inputId}\n />\n );\n};\n","import React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorFieldGroup } from '@grafana/experimental';\n\nimport { ALIGNMENT_PERIODS } from '../../constants';\nimport CloudMonitoringDatasource from '../../datasource';\nimport { alignmentPeriodLabel } from '../../functions';\nimport { CustomMetaData, MetricQuery, SLOQuery } from '../../types';\n\nimport { AlignmentFunction } from './AlignmentFunction';\nimport { PeriodSelect } from './PeriodSelect';\n\nexport interface Props {\n refId: string;\n onChange: (query: MetricQuery | SLOQuery) => void;\n query: MetricQuery;\n templateVariableOptions: Array>;\n customMetaData: CustomMetaData;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const Alignment: FC = ({\n refId,\n templateVariableOptions,\n onChange,\n query,\n customMetaData,\n datasource,\n}) => {\n const alignmentLabel = useMemo(() => alignmentPeriodLabel(customMetaData, datasource), [customMetaData, datasource]);\n return (\n \n \n \n \n \n onChange({ ...query, alignmentPeriod: period })}\n aligmentPeriods={ALIGNMENT_PERIODS}\n />\n \n \n );\n};\n","import React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport { getAggregationOptionsByMetric } from '../../functions';\nimport { MetricDescriptor, MetricKind, ValueTypes } from '../../types';\n\nexport interface Props {\n refId: string;\n onChange: (metricDescriptor: string) => void;\n metricDescriptor?: MetricDescriptor;\n crossSeriesReducer: string;\n groupBys: string[];\n templateVariableOptions: Array>;\n}\n\nexport const Aggregation: FC = (props) => {\n const aggOptions = useAggregationOptionsByMetric(props);\n const selected = useSelectedFromOptions(aggOptions, props);\n\n return (\n \n props.onChange(value!)}\n value={selected}\n options={[\n {\n label: 'Template Variables',\n options: props.templateVariableOptions,\n },\n {\n label: 'Aggregations',\n expanded: true,\n options: aggOptions,\n },\n ]}\n placeholder=\"Select Reducer\"\n inputId={`${props.refId}-group-by-function`}\n />\n \n );\n};\n\nconst useAggregationOptionsByMetric = ({ metricDescriptor }: Props): Array> => {\n const valueType = metricDescriptor?.valueType;\n const metricKind = metricDescriptor?.metricKind;\n\n return useMemo(() => {\n if (!valueType || !metricKind) {\n return [];\n }\n\n return getAggregationOptionsByMetric(valueType as ValueTypes, metricKind as MetricKind).map((a) => ({\n ...a,\n label: a.text,\n }));\n }, [valueType, metricKind]);\n};\n\nconst useSelectedFromOptions = (aggOptions: Array>, props: Props) => {\n return useMemo(() => {\n const allOptions = [...aggOptions, ...props.templateVariableOptions];\n return allOptions.find((s) => s.value === props.crossSeriesReducer);\n }, [aggOptions, props.crossSeriesReducer, props.templateVariableOptions]);\n};\n","import React, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorFieldGroup } from '@grafana/experimental';\nimport { MultiSelect } from '@grafana/ui';\n\nimport { SYSTEM_LABELS } from '../../constants';\nimport { labelsToGroupedOptions } from '../../functions';\nimport { MetricDescriptor, MetricQuery } from '../../types';\n\nimport { Aggregation } from './Aggregation';\n\nexport interface Props {\n refId: string;\n variableOptionGroup: SelectableValue;\n labels: string[];\n metricDescriptor?: MetricDescriptor;\n onChange: (query: MetricQuery) => void;\n query: MetricQuery;\n}\n\nexport const GroupBy: FunctionComponent = ({\n refId,\n labels: groupBys = [],\n query,\n onChange,\n variableOptionGroup,\n metricDescriptor,\n}) => {\n const options = useMemo(\n () => [variableOptionGroup, ...labelsToGroupedOptions([...groupBys, ...SYSTEM_LABELS])],\n [groupBys, variableOptionGroup]\n );\n\n return (\n \n \n {\n onChange({ ...query, groupBys: options.map((o) => o.value!) });\n }}\n />\n \n onChange({ ...query, crossSeriesReducer })}\n refId={refId}\n />\n \n );\n};\n","import React, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { AccessoryButton, EditorRow, EditorField, EditorList } from '@grafana/experimental';\nimport { HorizontalGroup, Select } from '@grafana/ui';\n\nimport { labelsToGroupedOptions, stringArrayToFilters } from '../../functions';\n\nexport interface Props {\n labels: { [key: string]: string[] };\n filters: string[];\n onChange: (filters: string[]) => void;\n variableOptionGroup: SelectableValue;\n}\n\ninterface Filter {\n key: string;\n operator: string;\n value: string;\n condition: string;\n}\n\nconst DEFAULT_OPERATOR = '=';\nconst DEFAULT_CONDITION = 'AND';\n\nconst filtersToStringArray = (filters: Filter[]) =>\n filters.flatMap(({ key, operator, value, condition }) => [key, operator, value, condition]).slice(0, -1);\n\nconst operators = ['=', '!=', '=~', '!=~'].map(toOption);\n\nexport const LabelFilter: FunctionComponent = ({\n labels = {},\n filters: filterArray,\n onChange: _onChange,\n variableOptionGroup,\n}) => {\n const filters: Filter[] = useMemo(() => stringArrayToFilters(filterArray), [filterArray]);\n const options = useMemo(\n () => [variableOptionGroup, ...labelsToGroupedOptions(Object.keys(labels))],\n [labels, variableOptionGroup]\n );\n\n const getOptions = ({ key = '', value = '' }: Partial) => {\n // Add the current key and value as options if they are manually entered\n const keyPresent = options.some((op) => {\n if (op.options) {\n return options.some((opp) => opp.label === key);\n }\n return op.label === key;\n });\n if (!keyPresent) {\n options.push({ label: key, value: key });\n }\n\n const valueOptions = labels.hasOwnProperty(key)\n ? [variableOptionGroup, ...labels[key].map(toOption)]\n : [variableOptionGroup];\n const valuePresent = valueOptions.some((op) => op.label === value);\n if (!valuePresent) {\n valueOptions.push({ label: value, value });\n }\n\n return { options, valueOptions };\n };\n\n const onChange = (items: Array>) => {\n const filters = items.map(({ key, operator, value, condition }) => ({\n key: key || '',\n operator: operator || DEFAULT_OPERATOR,\n value: value || '',\n condition: condition || DEFAULT_CONDITION,\n }));\n _onChange(filtersToStringArray(filters));\n };\n\n const renderItem = (item: Partial, onChangeItem: (item: Filter) => void, onDeleteItem: () => void) => {\n const { key = '', operator = DEFAULT_OPERATOR, value = '', condition = DEFAULT_CONDITION } = item;\n const { options, valueOptions } = getOptions(item);\n\n return (\n \n `Use label key: ${v}`}\n allowCustomValue\n value={key}\n options={options}\n onChange={({ value: key = '' }) => onChangeItem({ key, operator, value, condition })}\n />\n onChangeItem({ key, operator, value, condition })}\n />\n `Use label value: ${v}`}\n allowCustomValue\n value={value}\n options={valueOptions}\n onChange={({ value = '' }) => onChangeItem({ key, operator, value, condition })}\n />\n \n \n );\n };\n\n return (\n \n \n \n \n \n );\n};\n","import { css } from '@emotion/css';\nimport { startCase, uniqBy } from 'lodash';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { EditorRow, EditorField, EditorFieldGroup } from '@grafana/experimental';\nimport { getSelectStyles, Select, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../../datasource';\nimport { MetricDescriptor, MetricQuery } from '../../types';\n\nimport { Project } from './Project';\n\nexport interface Props {\n refId: string;\n onChange: (metricDescriptor: MetricDescriptor) => void;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n projectName: string;\n metricType: string;\n query: MetricQuery;\n children: (metricDescriptor?: MetricDescriptor) => JSX.Element;\n onProjectChange: (query: MetricQuery) => void;\n}\n\nexport function Metrics(props: Props) {\n const [metricDescriptors, setMetricDescriptors] = useState([]);\n const [metricDescriptor, setMetricDescriptor] = useState();\n const [metrics, setMetrics] = useState>>([]);\n const [services, setServices] = useState>>([]);\n const [service, setService] = useState('');\n\n const theme = useTheme2();\n const selectStyles = getSelectStyles(theme);\n\n const customStyle = useStyles2(getStyles);\n\n const {\n onProjectChange,\n query,\n refId,\n metricType,\n templateVariableOptions,\n projectName,\n datasource,\n onChange,\n children,\n } = props;\n const { templateSrv } = datasource;\n\n const getSelectedMetricDescriptor = useCallback(\n (metricDescriptors: MetricDescriptor[], metricType: string) => {\n return metricDescriptors.find((md) => md.type === templateSrv.replace(metricType))!;\n },\n [templateSrv]\n );\n\n useEffect(() => {\n const getMetricsList = (metricDescriptors: MetricDescriptor[]) => {\n const selectedMetricDescriptor = getSelectedMetricDescriptor(metricDescriptors, metricType);\n if (!selectedMetricDescriptor) {\n return [];\n }\n\n const metricsByService = metricDescriptors\n .filter((m) => m.service === selectedMetricDescriptor.service)\n .map((m) => ({\n service: m.service,\n value: m.type,\n label: m.displayName,\n component: function optionComponent() {\n return (\n
\n
{m.type}
\n
{m.description}
\n
\n );\n },\n }));\n return metricsByService;\n };\n\n const loadMetricDescriptors = async () => {\n if (projectName) {\n const metricDescriptors = await datasource.getMetricTypes(projectName);\n const services = getServicesList(metricDescriptors);\n const metrics = getMetricsList(metricDescriptors);\n const service = metrics.length > 0 ? metrics[0].service : '';\n const metricDescriptor = getSelectedMetricDescriptor(metricDescriptors, metricType);\n setMetricDescriptors(metricDescriptors);\n setServices(services);\n setMetrics(metrics);\n setService(service);\n setMetricDescriptor(metricDescriptor);\n }\n };\n loadMetricDescriptors();\n }, [datasource, getSelectedMetricDescriptor, metricType, projectName, customStyle, selectStyles.optionDescription]);\n\n const onServiceChange = ({ value: service }: any) => {\n const metrics = metricDescriptors\n .filter((m: MetricDescriptor) => m.service === templateSrv.replace(service))\n .map((m: MetricDescriptor) => ({\n service: m.service,\n value: m.type,\n label: m.displayName,\n description: m.description,\n }));\n\n if (metrics.length > 0 && !metrics.some((m) => m.value === templateSrv.replace(metricType))) {\n onMetricTypeChange(metrics[0]);\n setService(service);\n setMetrics(metrics);\n } else {\n setService(service);\n setMetrics(metrics);\n }\n };\n\n const onMetricTypeChange = ({ value }: SelectableValue) => {\n const metricDescriptor = getSelectedMetricDescriptor(metricDescriptors, value!);\n setMetricDescriptor(metricDescriptor);\n onChange({ ...metricDescriptor, type: value! });\n };\n\n const getServicesList = (metricDescriptors: MetricDescriptor[]) => {\n const services = metricDescriptors.map((m) => ({\n value: m.service,\n label: startCase(m.serviceShortName),\n }));\n\n return services.length > 0 ? uniqBy(services, (s) => s.value) : [];\n };\n\n return (\n <>\n \n \n {\n onProjectChange({ ...query, projectName });\n }}\n />\n\n \n s.value === service)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...services,\n ]}\n placeholder=\"Select Services\"\n inputId={`${props.refId}-service`}\n />\n \n \n s.value === metricType)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...metrics,\n ]}\n placeholder=\"Select Metric\"\n inputId={`${props.refId}-select-metric`}\n />\n \n \n \n\n {children(metricDescriptor)}\n \n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => css`\n label: grafana-select-option-description;\n font-weight: normal;\n font-style: italic;\n color: ${theme.colors.text.secondary};\n`;\n","import React, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { RadioButtonGroup } from '@grafana/ui';\n\nimport { getAlignmentPickerData } from '../../functions';\nimport { MetricDescriptor, MetricKind, MetricQuery, PreprocessorType, ValueTypes } from '../../types';\n\nconst NONE_OPTION = { label: 'None', value: PreprocessorType.None };\n\nexport interface Props {\n metricDescriptor?: MetricDescriptor;\n onChange: (query: MetricQuery) => void;\n query: MetricQuery;\n}\n\nexport const Preprocessor: FunctionComponent = ({ query, metricDescriptor, onChange }) => {\n const options = useOptions(metricDescriptor);\n return (\n \n {\n const { valueType, metricKind, perSeriesAligner: psa } = query;\n const { perSeriesAligner } = getAlignmentPickerData(valueType, metricKind, psa, value);\n onChange({ ...query, preprocessor: value, perSeriesAligner });\n }}\n value={query.preprocessor ?? PreprocessorType.None}\n options={options}\n />\n \n );\n};\n\nconst useOptions = (metricDescriptor?: MetricDescriptor): Array> => {\n const metricKind = metricDescriptor?.metricKind;\n const valueType = metricDescriptor?.valueType;\n\n return useMemo(() => {\n if (!metricKind || metricKind === MetricKind.GAUGE || valueType === ValueTypes.DISTRIBUTION) {\n return [NONE_OPTION];\n }\n\n const options = [\n NONE_OPTION,\n {\n label: 'Rate',\n value: PreprocessorType.Rate,\n description: 'Data points are aligned and converted to a rate per time series',\n },\n ];\n\n return metricKind === MetricKind.CUMULATIVE\n ? [\n ...options,\n {\n label: 'Delta',\n value: PreprocessorType.Delta,\n description: 'Data points are aligned by their delta (difference) per time series',\n },\n ]\n : options;\n }, [metricKind, valueType]);\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorRow } from '@grafana/experimental';\n\nimport CloudMonitoringDatasource from '../../datasource';\nimport { CustomMetaData, MetricDescriptor, MetricQuery, SLOQuery } from '../../types';\n\nimport { AliasBy } from './AliasBy';\nimport { Alignment } from './Alignment';\nimport { GroupBy } from './GroupBy';\nimport { LabelFilter } from './LabelFilter';\nimport { Metrics } from './Metrics';\nimport { Preprocessor } from './Preprocessor';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue;\n onMetricTypeChange: (query: MetricDescriptor) => void;\n onChange: (query: MetricQuery | SLOQuery) => void;\n query: MetricQuery;\n datasource: CloudMonitoringDatasource;\n labels: any;\n}\n\nfunction Editor({\n refId,\n query,\n labels,\n datasource,\n onChange,\n onMetricTypeChange,\n customMetaData,\n variableOptionGroup,\n}: React.PropsWithChildren) {\n return (\n \n {(metric) => (\n <>\n onChange({ ...query, filters })}\n variableOptionGroup={variableOptionGroup}\n />\n \n \n \n \n {\n onChange({ ...query, aliasBy });\n }}\n />\n \n \n )}\n \n );\n}\n\nexport const VisualMetricQueryEditor = React.memo(Editor);\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorRows } from '@grafana/experimental';\n\nimport CloudMonitoringDatasource from '../../datasource';\nimport { getAlignmentPickerData } from '../../functions';\nimport {\n AlignmentTypes,\n CustomMetaData,\n EditorMode,\n MetricDescriptor,\n MetricKind,\n MetricQuery,\n PreprocessorType,\n SLOQuery,\n ValueTypes,\n} from '../../types';\n\nimport { MQLQueryEditor } from './../MQLQueryEditor';\nimport { GraphPeriod } from './GraphPeriod';\nimport { VisualMetricQueryEditor } from './VisualMetricQueryEditor';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue;\n onChange: (query: MetricQuery) => void;\n onRunQuery: () => void;\n query: MetricQuery;\n datasource: CloudMonitoringDatasource;\n}\n\ninterface State {\n labels: any;\n [key: string]: any;\n}\n\nexport const defaultState: State = {\n labels: {},\n};\n\nexport const defaultQuery: (dataSource: CloudMonitoringDatasource) => MetricQuery = (dataSource) => ({\n editorMode: EditorMode.Visual,\n projectName: dataSource.getDefaultProject(),\n metricType: '',\n metricKind: MetricKind.GAUGE,\n valueType: '',\n crossSeriesReducer: 'REDUCE_MEAN',\n alignmentPeriod: 'cloud-monitoring-auto',\n perSeriesAligner: AlignmentTypes.ALIGN_MEAN,\n groupBys: [],\n filters: [],\n aliasBy: '',\n query: '',\n preprocessor: PreprocessorType.None,\n});\n\nfunction Editor({\n refId,\n query,\n datasource,\n onChange: onQueryChange,\n onRunQuery,\n customMetaData,\n variableOptionGroup,\n}: React.PropsWithChildren) {\n const [state, setState] = useState(defaultState);\n const { projectName, metricType, groupBys, editorMode, crossSeriesReducer } = query;\n\n useEffect(() => {\n if (projectName && metricType) {\n datasource\n .getLabels(metricType, refId, projectName)\n .then((labels) => setState((prevState) => ({ ...prevState, labels })));\n }\n }, [datasource, groupBys, metricType, projectName, refId, crossSeriesReducer]);\n\n const onChange = useCallback(\n (metricQuery: MetricQuery | SLOQuery) => {\n onQueryChange({ ...query, ...metricQuery });\n onRunQuery();\n },\n [onQueryChange, onRunQuery, query]\n );\n\n const onMetricTypeChange = useCallback(\n ({ valueType, metricKind, type }: MetricDescriptor) => {\n const preprocessor =\n metricKind === MetricKind.GAUGE || valueType === ValueTypes.DISTRIBUTION\n ? PreprocessorType.None\n : PreprocessorType.Rate;\n const { perSeriesAligner } = getAlignmentPickerData(valueType, metricKind, state.perSeriesAligner, preprocessor);\n onChange({\n ...query,\n perSeriesAligner,\n metricType: type,\n valueType,\n metricKind,\n preprocessor,\n });\n },\n [onChange, query, state]\n );\n\n return (\n \n {editorMode === EditorMode.Visual && (\n \n )}\n\n {editorMode === EditorMode.MQL && (\n <>\n onQueryChange({ ...query, query: q })}\n onRunQuery={onRunQuery}\n query={query.query}\n >\n onQueryChange({ ...query, graphPeriod })}\n graphPeriod={query.graphPeriod}\n refId={refId}\n variableOptionGroup={variableOptionGroup}\n />\n \n )}\n \n );\n}\n\nexport const MetricQueryEditor = React.memo(Editor);\n","import React, { useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { periodOption } from '../../constants';\n\nexport interface Props {\n inputId: string;\n onChange: (period: string) => void;\n templateVariableOptions: Array>;\n aligmentPeriods: periodOption[];\n selectWidth?: number;\n category?: string;\n disabled?: boolean;\n current?: string;\n}\n\nexport function PeriodSelect({\n inputId,\n templateVariableOptions,\n onChange,\n current,\n disabled,\n aligmentPeriods,\n}: Props) {\n const options = useMemo(\n () =>\n aligmentPeriods.map((ap) => ({\n ...ap,\n label: ap.text,\n })),\n [aligmentPeriods]\n );\n const visibleOptions = useMemo(() => options.filter((ap) => !ap.hidden), [options]);\n\n return (\n onChange(value!)}\n value={[...options, ...templateVariableOptions].find((s) => s.value === current)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n {\n label: 'Aggregations',\n expanded: true,\n options: visibleOptions,\n },\n ]}\n placeholder=\"Select Period\"\n inputId={inputId}\n disabled={disabled}\n allowCustomValue\n />\n );\n}\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../../datasource';\n\nexport interface Props {\n refId: string;\n datasource: CloudMonitoringDatasource;\n onChange: (projectName: string) => void;\n templateVariableOptions: Array>;\n projectName: string;\n}\n\nexport function Project({ refId, projectName, datasource, onChange, templateVariableOptions }: Props) {\n const [projects, setProjects] = useState>>([]);\n useEffect(() => {\n datasource.getProjects().then((projects) => setProjects(projects));\n }, [datasource]);\n\n const projectsWithTemplateVariables = useMemo(\n () => [\n projects,\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...projects,\n ],\n [projects, templateVariableOptions]\n );\n\n return (\n \n `Use project: ${v}`}\n onChange={({ value }) => onChange(value!)}\n options={projectsWithTemplateVariables}\n value={{ value: projectName, label: projectName }}\n placeholder=\"Select Project\"\n inputId={`${refId}-project`}\n />\n \n );\n}\n","import React from 'react';\n\nimport { TextArea } from '@grafana/ui';\n\nexport interface Props {\n onChange: (query: string) => void;\n onRunQuery: () => void;\n query: string;\n}\n\nexport function MQLQueryEditor({ query, onChange, onRunQuery }: React.PropsWithChildren) {\n const onKeyDown = (event: any) => {\n if (event.key === 'Enter' && (event.shiftKey || event.ctrlKey)) {\n event.preventDefault();\n onRunQuery();\n }\n };\n\n return (\n <>\n onChange(e.currentTarget.value)}\n onKeyDown={onKeyDown}\n />\n \n );\n}\n","import React, { FunctionComponent } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Switch } from '@grafana/ui';\n\nimport { GRAPH_PERIODS, SELECT_WIDTH } from '../constants';\n\nimport { PeriodSelect, QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n onChange: (period: string) => void;\n variableOptionGroup: SelectableValue;\n graphPeriod?: string;\n}\n\nexport const GraphPeriod: FunctionComponent = ({ refId, onChange, graphPeriod, variableOptionGroup }) => {\n return (\n <>\n \n Set graph_period which forces a preferred period between points. Automatically set to the\n current interval if left blank.\n \n }\n >\n onChange(e.currentTarget.checked ? '' : 'disabled')}\n />\n \n \n \n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { getAlignmentPickerData } from '../functions';\nimport {\n AlignmentTypes,\n CustomMetaData,\n EditorMode,\n MetricDescriptor,\n MetricKind,\n MetricQuery,\n PreprocessorType,\n SLOQuery,\n ValueTypes,\n} from '../types';\n\nimport { GraphPeriod } from './GraphPeriod';\nimport { MQLQueryEditor } from './MQLQueryEditor';\n\nimport { AliasBy, Project, VisualMetricQueryEditor } from '.';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue;\n onChange: (query: MetricQuery) => void;\n onRunQuery: () => void;\n query: MetricQuery;\n datasource: CloudMonitoringDatasource;\n}\n\ninterface State {\n labels: any;\n [key: string]: any;\n}\n\nexport const defaultState: State = {\n labels: {},\n};\n\nexport const defaultQuery: (dataSource: CloudMonitoringDatasource) => MetricQuery = (dataSource) => ({\n editorMode: EditorMode.Visual,\n projectName: dataSource.getDefaultProject(),\n metricType: '',\n metricKind: MetricKind.GAUGE,\n valueType: '',\n crossSeriesReducer: 'REDUCE_MEAN',\n alignmentPeriod: 'cloud-monitoring-auto',\n perSeriesAligner: AlignmentTypes.ALIGN_MEAN,\n groupBys: [],\n filters: [],\n aliasBy: '',\n query: '',\n preprocessor: PreprocessorType.None,\n});\n\nfunction Editor({\n refId,\n query,\n datasource,\n onChange: onQueryChange,\n onRunQuery,\n customMetaData,\n variableOptionGroup,\n}: React.PropsWithChildren) {\n const [state, setState] = useState(defaultState);\n const { projectName, metricType, groupBys, editorMode, crossSeriesReducer } = query;\n\n useEffect(() => {\n if (projectName && metricType) {\n datasource\n .getLabels(metricType, refId, projectName)\n .then((labels) => setState((prevState) => ({ ...prevState, labels })));\n }\n }, [datasource, groupBys, metricType, projectName, refId, crossSeriesReducer]);\n\n const onChange = useCallback(\n (metricQuery: MetricQuery | SLOQuery) => {\n onQueryChange({ ...query, ...metricQuery });\n onRunQuery();\n },\n [onQueryChange, onRunQuery, query]\n );\n\n const onMetricTypeChange = useCallback(\n ({ valueType, metricKind, type }: MetricDescriptor) => {\n const preprocessor =\n metricKind === MetricKind.GAUGE || valueType === ValueTypes.DISTRIBUTION\n ? PreprocessorType.None\n : PreprocessorType.Rate;\n const { perSeriesAligner } = getAlignmentPickerData(valueType, metricKind, state.perSeriesAligner, preprocessor);\n onChange({\n ...query,\n perSeriesAligner,\n metricType: type,\n valueType,\n metricKind,\n preprocessor,\n });\n },\n [onChange, query, state]\n );\n\n return (\n <>\n {\n onChange({ ...query, projectName });\n }}\n />\n\n {editorMode === EditorMode.Visual && (\n \n )}\n\n {editorMode === EditorMode.MQL && (\n <>\n onQueryChange({ ...query, query: q })}\n onRunQuery={onRunQuery}\n query={query.query}\n >\n onQueryChange({ ...query, graphPeriod })}\n graphPeriod={query.graphPeriod}\n refId={refId}\n variableOptionGroup={variableOptionGroup}\n />\n \n )}\n\n {\n onChange({ ...query, aliasBy });\n }}\n />\n \n );\n}\n\nexport const MetricQueryEditor = React.memo(Editor);\n","import React from 'react';\n\nimport { EditorHeader, FlexItem, InlineSelect } from '@grafana/experimental';\nimport { RadioButtonGroup } from '@grafana/ui';\n\nimport { QUERY_TYPES } from '../../constants';\nimport { EditorMode, CloudMonitoringQuery, QueryType, SLOQuery, MetricQuery } from '../../types';\n\nexport interface QueryEditorHeaderProps {\n query: CloudMonitoringQuery;\n metricQuery: MetricQuery;\n sloQuery: SLOQuery;\n onChange: (value: CloudMonitoringQuery) => void;\n onRunQuery: () => void;\n}\n\nconst EDITOR_MODES = [\n { label: 'Builder', value: EditorMode.Visual },\n { label: 'MQL', value: EditorMode.MQL },\n];\n\nexport const QueryHeader = (props: QueryEditorHeaderProps) => {\n const { query, metricQuery, sloQuery, onChange, onRunQuery } = props;\n const { queryType } = query;\n const { editorMode } = metricQuery;\n\n return (\n \n {\n onChange({ ...query, sloQuery, queryType: value! });\n onRunQuery();\n }}\n />\n \n {queryType !== QueryType.SLO && (\n {\n onChange({\n ...query,\n metricQuery: {\n ...metricQuery,\n editorMode: value,\n },\n });\n }}\n />\n )}\n \n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../../datasource';\nimport { SLOQuery } from '../../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const SLO: React.FC = ({ refId, query, templateVariableOptions, onChange, datasource }) => {\n const [slos, setSLOs] = useState>>([]);\n const { projectName, serviceId } = query;\n\n useEffect(() => {\n if (!projectName || !serviceId) {\n return;\n }\n\n datasource.getServiceLevelObjectives(projectName, serviceId).then((sloIds: Array>) => {\n setSLOs([\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...sloIds,\n ]);\n });\n }, [datasource, projectName, serviceId, templateVariableOptions]);\n\n return (\n \n {\n const slos = await datasource.getServiceLevelObjectives(projectName, serviceId);\n const slo = slos.find(({ value }) => value === datasource.templateSrv.replace(sloId));\n onChange({ ...query, sloId, sloName, goal: slo?.goal });\n }}\n />\n \n );\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport { SELECTORS } from '../../constants';\nimport CloudMonitoringDatasource from '../../datasource';\nimport { SLOQuery } from '../../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const Selector: React.FC = ({ refId, query, templateVariableOptions, onChange, datasource }) => {\n return (\n \n s.value === query?.selectorName ?? '')}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...SELECTORS,\n ]}\n onChange={({ value: selectorName }) => onChange({ ...query, selectorName: selectorName ?? '' })}\n />\n \n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../../datasource';\nimport { SLOQuery } from '../../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const Service: React.FC = ({ refId, query, templateVariableOptions, onChange, datasource }) => {\n const [services, setServices] = useState>>([]);\n const { projectName } = query;\n\n useEffect(() => {\n if (!projectName) {\n return;\n }\n\n datasource.getSLOServices(projectName).then((services: Array>) => {\n setServices([\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...services,\n ]);\n });\n }, [datasource, projectName, templateVariableOptions]);\n\n return (\n \n \n onChange({ ...query, serviceId, serviceName, sloId: '' })\n }\n />\n \n );\n};\n","import React, { useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorFieldGroup, EditorRow } from '@grafana/experimental';\n\nimport { ALIGNMENT_PERIODS } from '../../constants';\nimport CloudMonitoringDatasource from '../../datasource';\nimport { alignmentPeriodLabel } from '../../functions';\nimport { AlignmentTypes, CustomMetaData, SLOQuery } from '../../types';\n\nimport { AliasBy } from './AliasBy';\nimport { PeriodSelect } from './PeriodSelect';\nimport { Project } from './Project';\nimport { SLO } from './SLO';\nimport { Selector } from './Selector';\nimport { Service } from './Service';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue;\n onChange: (query: SLOQuery) => void;\n onRunQuery: () => void;\n query: SLOQuery;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const defaultQuery: (dataSource: CloudMonitoringDatasource) => SLOQuery = (dataSource) => ({\n projectName: dataSource.getDefaultProject(),\n alignmentPeriod: 'cloud-monitoring-auto',\n perSeriesAligner: AlignmentTypes.ALIGN_MEAN,\n aliasBy: '',\n selectorName: 'select_slo_health',\n serviceId: '',\n serviceName: '',\n sloId: '',\n sloName: '',\n});\n\nexport function SLOQueryEditor({\n refId,\n query,\n datasource,\n onChange,\n variableOptionGroup,\n customMetaData,\n}: React.PropsWithChildren) {\n const alignmentLabel = useMemo(() => alignmentPeriodLabel(customMetaData, datasource), [customMetaData, datasource]);\n return (\n <>\n \n onChange({ ...query, projectName })}\n />\n \n \n \n\n \n \n onChange({ ...query, alignmentPeriod: period })}\n aligmentPeriods={ALIGNMENT_PERIODS}\n />\n \n \n\n onChange({ ...query, aliasBy })} />\n \n \n );\n}\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\n\nimport { QueryEditorProps, toOption } from '@grafana/data';\nimport { EditorRows } from '@grafana/experimental';\nimport { config } from '@grafana/runtime';\nimport { Button, Select } from '@grafana/ui';\n\nimport { QUERY_TYPES, SELECT_WIDTH } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { CloudMonitoringQuery, EditorMode, MetricQuery, QueryType, SLOQuery, CloudMonitoringOptions } from '../types';\n\nimport { MetricQueryEditor as ExperimentalMetricQueryEditor } from './Experimental/MetricQueryEditor';\nimport { QueryHeader } from './Experimental/QueryHeader';\nimport { SLOQueryEditor as ExperimentalSLOQueryEditor } from './Experimental/SLOQueryEditor';\nimport { defaultQuery } from './MetricQueryEditor';\nimport { defaultQuery as defaultSLOQuery } from './SLO/SLOQueryEditor';\n\nimport { MetricQueryEditor, QueryEditorRow, SLOQueryEditor } from './';\n\nexport type Props = QueryEditorProps;\n\nexport class QueryEditor extends PureComponent {\n async UNSAFE_componentWillMount() {\n const { datasource, query } = this.props;\n\n // Unfortunately, migrations like this need to go UNSAFE_componentWillMount. As soon as there's\n // migration hook for this module.ts, we can do the migrations there instead.\n if (!this.props.query.hasOwnProperty('metricQuery')) {\n const { hide, refId, datasource, key, queryType, maxLines, metric, ...metricQuery } = this.props.query as any;\n this.props.query.metricQuery = metricQuery;\n }\n\n if (!this.props.query.hasOwnProperty('queryType')) {\n this.props.query.queryType = QueryType.METRICS;\n }\n\n await datasource.ensureGCEDefaultProject();\n if (!query.metricQuery.projectName) {\n this.props.query.metricQuery.projectName = datasource.getDefaultProject();\n }\n }\n\n onQueryChange(prop: string, value: MetricQuery | SLOQuery) {\n this.props.onChange({ ...this.props.query, [prop]: value });\n this.props.onRunQuery();\n }\n\n render() {\n const { datasource, query, onRunQuery, onChange } = this.props;\n const metricQuery = { ...defaultQuery(datasource), ...query.metricQuery };\n const sloQuery = { ...defaultSLOQuery(datasource), ...query.sloQuery };\n const queryType = query.queryType || QueryType.METRICS;\n const meta = this.props.data?.series.length ? this.props.data?.series[0].meta : {};\n const customMetaData = meta?.custom ?? {};\n const variableOptionGroup = {\n label: 'Template Variables',\n expanded: false,\n options: datasource.getVariables().map(toOption),\n };\n\n return config.featureToggles.cloudMonitoringExperimentalUI ? (\n \n \n {queryType === QueryType.METRICS && (\n {\n this.props.onChange({ ...this.props.query, metricQuery });\n }}\n onRunQuery={onRunQuery}\n datasource={datasource}\n query={metricQuery}\n />\n )}\n\n {queryType === QueryType.SLO && (\n this.onQueryChange('sloQuery', query)}\n onRunQuery={onRunQuery}\n datasource={datasource}\n query={sloQuery}\n />\n )}\n \n ) : (\n \n \n this.onQueryChange('metricQuery', {\n ...metricQuery,\n editorMode: metricQuery.editorMode === EditorMode.MQL ? EditorMode.Visual : EditorMode.MQL,\n })\n }\n >\n {metricQuery.editorMode === EditorMode.MQL ? 'Switch to builder' : 'Edit MQL'}\n \n )\n }\n htmlFor={`${query.refId}-query-type`}\n >\n {\n onChange({ ...query, sloQuery, queryType: value! });\n onRunQuery();\n }}\n inputId={`${query.refId}-query-type`}\n />\n \n\n {queryType === QueryType.METRICS && (\n {\n this.props.onChange({ ...this.props.query, metricQuery });\n }}\n onRunQuery={onRunQuery}\n datasource={datasource}\n query={metricQuery}\n />\n )}\n\n {queryType === QueryType.SLO && (\n this.onQueryChange('sloQuery', query)}\n onRunQuery={onRunQuery}\n datasource={datasource}\n query={sloQuery}\n />\n )}\n \n );\n }\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { QueryEditorRow } from '..';\nimport { SELECT_WIDTH } from '../../constants';\nimport CloudMonitoringDatasource from '../../datasource';\nimport { SLOQuery } from '../../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const Service: React.FC = ({ refId, query, templateVariableOptions, onChange, datasource }) => {\n const [services, setServices] = useState>>([]);\n const { projectName } = query;\n\n useEffect(() => {\n if (!projectName) {\n return;\n }\n\n datasource.getSLOServices(projectName).then((services: Array>) => {\n setServices([\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...services,\n ]);\n });\n }, [datasource, projectName, templateVariableOptions]);\n\n return (\n \n \n onChange({ ...query, serviceId, serviceName, sloId: '' })\n }\n />\n \n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { QueryEditorRow } from '..';\nimport { SELECT_WIDTH } from '../../constants';\nimport CloudMonitoringDatasource from '../../datasource';\nimport { SLOQuery } from '../../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const SLO: React.FC = ({ refId, query, templateVariableOptions, onChange, datasource }) => {\n const [slos, setSLOs] = useState>>([]);\n const { projectName, serviceId } = query;\n\n useEffect(() => {\n if (!projectName || !serviceId) {\n return;\n }\n\n datasource.getServiceLevelObjectives(projectName, serviceId).then((sloIds: Array>) => {\n setSLOs([\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...sloIds,\n ]);\n });\n }, [datasource, projectName, serviceId, templateVariableOptions]);\n\n return (\n \n {\n const slos = await datasource.getServiceLevelObjectives(projectName, serviceId);\n const slo = slos.find(({ value }) => value === datasource.templateSrv.replace(sloId));\n onChange({ ...query, sloId, sloName, goal: slo?.goal });\n }}\n />\n \n );\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { QueryEditorRow } from '..';\nimport { SELECT_WIDTH, SELECTORS } from '../../constants';\nimport CloudMonitoringDatasource from '../../datasource';\nimport { SLOQuery } from '../../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const Selector: React.FC = ({ refId, query, templateVariableOptions, onChange, datasource }) => {\n return (\n \n s.value === query?.selectorName ?? '')}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...SELECTORS,\n ]}\n onChange={({ value: selectorName }) => onChange({ ...query, selectorName: selectorName ?? '' })}\n />\n \n );\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport { AliasBy, PeriodSelect, AlignmentPeriodLabel, Project, QueryEditorRow } from '..';\nimport { ALIGNMENT_PERIODS, SELECT_WIDTH } from '../../constants';\nimport CloudMonitoringDatasource from '../../datasource';\nimport { AlignmentTypes, CustomMetaData, SLOQuery } from '../../types';\n\nimport { Selector, Service, SLO } from '.';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue;\n onChange: (query: SLOQuery) => void;\n onRunQuery: () => void;\n query: SLOQuery;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const defaultQuery: (dataSource: CloudMonitoringDatasource) => SLOQuery = (dataSource) => ({\n projectName: dataSource.getDefaultProject(),\n alignmentPeriod: 'cloud-monitoring-auto',\n perSeriesAligner: AlignmentTypes.ALIGN_MEAN,\n aliasBy: '',\n selectorName: 'select_slo_health',\n serviceId: '',\n serviceName: '',\n sloId: '',\n sloName: '',\n});\n\nexport function SLOQueryEditor({\n refId,\n query,\n datasource,\n onChange,\n variableOptionGroup,\n customMetaData,\n}: React.PropsWithChildren) {\n return (\n <>\n onChange({ ...query, projectName })}\n />\n \n \n \n\n \n onChange({ ...query, alignmentPeriod: period })}\n aligmentPeriods={ALIGNMENT_PERIODS}\n />\n \n \n\n onChange({ ...query, aliasBy })} />\n \n );\n}\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { SELECT_WIDTH } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\n\nimport { QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n datasource: CloudMonitoringDatasource;\n onChange: (projectName: string) => void;\n templateVariableOptions: Array>;\n projectName: string;\n}\n\nexport function Project({ refId, projectName, datasource, onChange, templateVariableOptions }: Props) {\n const [projects, setProjects] = useState>>([]);\n useEffect(() => {\n datasource.getProjects().then((projects) => setProjects(projects));\n }, [datasource]);\n\n const projectsWithTemplateVariables = useMemo(\n () => [\n projects,\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...projects,\n ],\n [projects, templateVariableOptions]\n );\n\n return (\n \n `Use project: ${v}`}\n onChange={({ value }) => onChange(value!)}\n options={projectsWithTemplateVariables}\n value={{ value: projectName, label: projectName }}\n placeholder=\"Select Project\"\n inputId={`${refId}-project`}\n />\n \n );\n}\n","import { css } from '@emotion/css';\nimport { startCase, uniqBy } from 'lodash';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { TemplateSrv } from '@grafana/runtime';\nimport { getSelectStyles, Select, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport { INNER_LABEL_WIDTH, LABEL_WIDTH, SELECT_WIDTH } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { MetricDescriptor } from '../types';\n\nimport { QueryEditorField, QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n onChange: (metricDescriptor: MetricDescriptor) => void;\n templateSrv: TemplateSrv;\n templateVariableOptions: Array>;\n datasource: CloudMonitoringDatasource;\n projectName: string;\n metricType: string;\n children: (metricDescriptor?: MetricDescriptor) => JSX.Element;\n}\n\ninterface State {\n metricDescriptors: MetricDescriptor[];\n metrics: any[];\n services: any[];\n service: string;\n metric: string;\n metricDescriptor?: MetricDescriptor;\n projectName: string | null;\n}\n\nexport function Metrics(props: Props) {\n const [state, setState] = useState({\n metricDescriptors: [],\n metrics: [],\n services: [],\n service: '',\n metric: '',\n projectName: null,\n });\n\n const theme = useTheme2();\n const selectStyles = getSelectStyles(theme);\n\n const customStyle = useStyles2(getStyles);\n\n const { services, service, metrics, metricDescriptors } = state;\n const { metricType, templateVariableOptions, projectName, templateSrv, datasource, onChange, children } = props;\n\n const getSelectedMetricDescriptor = useCallback(\n (metricDescriptors: MetricDescriptor[], metricType: string) => {\n return metricDescriptors.find((md) => md.type === templateSrv.replace(metricType))!;\n },\n [templateSrv]\n );\n\n useEffect(() => {\n const getMetricsList = (metricDescriptors: MetricDescriptor[]) => {\n const selectedMetricDescriptor = getSelectedMetricDescriptor(metricDescriptors, metricType);\n if (!selectedMetricDescriptor) {\n return [];\n }\n\n const metricsByService = metricDescriptors\n .filter((m) => m.service === selectedMetricDescriptor.service)\n .map((m) => ({\n service: m.service,\n value: m.type,\n label: m.displayName,\n component: function optionComponent() {\n return (\n
\n
{m.type}
\n
{m.description}
\n
\n );\n },\n }));\n return metricsByService;\n };\n\n const loadMetricDescriptors = async () => {\n if (projectName) {\n const metricDescriptors = await datasource.getMetricTypes(projectName);\n const services = getServicesList(metricDescriptors);\n const metrics = getMetricsList(metricDescriptors);\n const service = metrics.length > 0 ? metrics[0].service : '';\n const metricDescriptor = getSelectedMetricDescriptor(metricDescriptors, metricType);\n setState((prevState) => ({\n ...prevState,\n metricDescriptors,\n services,\n metrics,\n service: service,\n metricDescriptor,\n }));\n }\n };\n loadMetricDescriptors();\n }, [datasource, getSelectedMetricDescriptor, metricType, projectName, customStyle, selectStyles.optionDescription]);\n\n const onServiceChange = ({ value: service }: any) => {\n const metrics = metricDescriptors\n .filter((m: MetricDescriptor) => m.service === templateSrv.replace(service))\n .map((m: MetricDescriptor) => ({\n service: m.service,\n value: m.type,\n label: m.displayName,\n description: m.description,\n }));\n\n if (metrics.length > 0 && !metrics.some((m) => m.value === templateSrv.replace(metricType))) {\n onMetricTypeChange(metrics[0], { service, metrics });\n } else {\n setState({ ...state, service, metrics });\n }\n };\n\n const onMetricTypeChange = ({ value }: SelectableValue, extra: any = {}) => {\n const metricDescriptor = getSelectedMetricDescriptor(state.metricDescriptors, value!);\n setState({ ...state, metricDescriptor, ...extra });\n onChange({ ...metricDescriptor, type: value! });\n };\n\n const getServicesList = (metricDescriptors: MetricDescriptor[]) => {\n const services = metricDescriptors.map((m) => ({\n value: m.service,\n label: startCase(m.serviceShortName),\n }));\n\n return services.length > 0 ? uniqBy(services, (s) => s.value) : [];\n };\n\n return (\n <>\n \n \n s.value === service)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...services,\n ]}\n placeholder=\"Select Services\"\n inputId={`${props.refId}-service`}\n >\n \n \n s.value === metricType)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n ...metrics,\n ]}\n placeholder=\"Select Metric\"\n inputId={`${props.refId}-select-metric`}\n >\n \n \n\n {children(state.metricDescriptor)}\n \n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => css`\n label: grafana-select-option-description;\n font-weight: normal;\n font-style: italic;\n color: ${theme.colors.text.secondary};\n`;\n","import React, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { MultiSelect } from '@grafana/ui';\n\nimport { INPUT_WIDTH, SYSTEM_LABELS } from '../constants';\nimport { labelsToGroupedOptions } from '../functions';\nimport { MetricDescriptor, MetricQuery } from '../types';\n\nimport { Aggregation, QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n variableOptionGroup: SelectableValue;\n labels: string[];\n metricDescriptor?: MetricDescriptor;\n onChange: (query: MetricQuery) => void;\n query: MetricQuery;\n}\n\nexport const GroupBy: FunctionComponent = ({\n refId,\n labels: groupBys = [],\n query,\n onChange,\n variableOptionGroup,\n metricDescriptor,\n}) => {\n const options = useMemo(\n () => [variableOptionGroup, ...labelsToGroupedOptions([...groupBys, ...SYSTEM_LABELS])],\n [groupBys, variableOptionGroup]\n );\n\n return (\n \n {\n onChange({ ...query, groupBys: options.map((o) => o.value!) });\n }}\n >\n onChange({ ...query, crossSeriesReducer })}\n refId={refId}\n >\n \n );\n};\n","import React, { FC } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport { ALIGNMENT_PERIODS, SELECT_WIDTH } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { CustomMetaData, MetricQuery, SLOQuery } from '../types';\n\nimport { AlignmentFunction, PeriodSelect, AlignmentPeriodLabel, QueryEditorField, QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n onChange: (query: MetricQuery | SLOQuery) => void;\n query: MetricQuery;\n templateVariableOptions: Array>;\n customMetaData: CustomMetaData;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const Alignment: FC = ({\n refId,\n templateVariableOptions,\n onChange,\n query,\n customMetaData,\n datasource,\n}) => {\n return (\n }\n htmlFor={`${refId}-alignment-function`}\n >\n \n \n onChange({ ...query, alignmentPeriod: period })}\n aligmentPeriods={ALIGNMENT_PERIODS}\n />\n \n \n );\n};\n","import { flatten } from 'lodash';\nimport React, { FunctionComponent, useCallback, useMemo } from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { Button, HorizontalGroup, Select, VerticalGroup } from '@grafana/ui';\nimport { CustomControlProps } from '@grafana/ui/src/components/Select/types';\n\nimport { SELECT_WIDTH } from '../constants';\nimport { labelsToGroupedOptions, stringArrayToFilters } from '../functions';\nimport { Filter } from '../types';\n\nimport { QueryEditorRow } from '.';\n\nexport interface Props {\n labels: { [key: string]: string[] };\n filters: string[];\n onChange: (filters: string[]) => void;\n variableOptionGroup: SelectableValue;\n}\n\nconst operators = ['=', '!=', '=~', '!=~'];\n\nconst FilterButton = React.forwardRef>(\n ({ value, isOpen, invalid, ...rest }, ref) => {\n return ;\n }\n);\nFilterButton.displayName = 'FilterButton';\n\nconst OperatorButton = React.forwardRef>(({ value, ...rest }, ref) => {\n return (\n \n );\n});\nOperatorButton.displayName = 'OperatorButton';\n\nexport const LabelFilter: FunctionComponent = ({\n labels = {},\n filters: filterArray,\n onChange,\n variableOptionGroup,\n}) => {\n const filters = useMemo(() => stringArrayToFilters(filterArray), [filterArray]);\n const options = useMemo(\n () => [variableOptionGroup, ...labelsToGroupedOptions(Object.keys(labels))],\n [labels, variableOptionGroup]\n );\n\n const filtersToStringArray = useCallback((filters: Filter[]) => {\n const strArr = flatten(filters.map(({ key, operator, value, condition }) => [key, operator, value, condition!]));\n return strArr.slice(0, strArr.length - 1);\n }, []);\n\n const AddFilter = () => {\n return (\n \n onChange(filtersToStringArray([...filters, { key, operator: '=', condition: 'AND', value: '' }]))\n }\n menuPlacement=\"bottom\"\n renderControl={FilterButton}\n />\n );\n };\n\n return (\n 1}\n >\n \n {filters.map(({ key, operator, value, condition }, index) => {\n // Add the current key and value as options if they are manually entered\n const keyPresent = options.some((op) => {\n if (op.options) {\n return options.some((opp) => opp.label === key);\n }\n return op.label === key;\n });\n if (!keyPresent) {\n options.push({ label: key, value: key });\n }\n\n const valueOptions = labels.hasOwnProperty(key)\n ? [variableOptionGroup, ...labels[key].map(toOption)]\n : [variableOptionGroup];\n const valuePresent = valueOptions.some((op) => {\n return op.label === value;\n });\n if (!valuePresent) {\n valueOptions.push({ label: value, value });\n }\n\n return (\n \n `Use label key: ${v}`}\n value={key}\n options={options}\n onChange={({ value: key = '' }) => {\n onChange(\n filtersToStringArray(\n filters.map((f, i) => (i === index ? { key, operator, condition, value: '' } : f))\n )\n );\n }}\n />\n \n onChange(filtersToStringArray(filters.map((f, i) => (i === index ? { ...f, operator } : f))))\n }\n menuPlacement=\"bottom\"\n renderControl={OperatorButton}\n />\n `Use label value: ${v}`}\n allowCustomValue\n value={value}\n placeholder=\"add filter value\"\n options={valueOptions}\n onChange={({ value = '' }) =>\n onChange(filtersToStringArray(filters.map((f, i) => (i === index ? { ...f, value } : f))))\n }\n />\n onChange(filtersToStringArray(filters.filter((_, i) => i !== index)))}\n >\n {index + 1 === filters.length && Object.values(filters).every(({ value }) => value) && }\n \n );\n })}\n {!filters.length && }\n \n \n );\n};\n","import React, { FC } from 'react';\n\nexport const AnnotationsHelp: FC = () => {\n return (\n
\n
\n
Annotation Query Format
\n

\n An annotation is an event that is overlaid on top of graphs. Annotation rendering is expensive so it is\n important to limit the number of rows returned.{' '}\n

\n

\n The Title and Text fields support templating and can use data returned from the query. For example, the Title\n field could have the following text:\n

\n \n {`${'{{metric.type}}'}`} has value: {`${'{{metric.value}}'}`}\n \n

\n Example Result: monitoring.googleapis.com/uptime_check/http_status has this value: 502\n

\n \n

\n {`${'{{metric.value}}'}`} = value of the metric/point\n

\n

\n {`${'{{metric.type}}'}`} = metric type e.g. compute.googleapis.com/instance/cpu/usage_time\n

\n

\n {`${'{{metric.name}}'}`} = name part of metric e.g. instance/cpu/usage_time\n

\n

\n {`${'{{metric.service}}'}`} = service part of metric e.g. compute\n

\n

\n {`${'{{metric.label.label_name}}'}`} = Metric label metadata e.g. metric.label.instance_name\n

\n

\n {`${'{{resource.label.label_name}}'}`} = Resource label metadata e.g. resource.label.zone\n

\n
\n
\n );\n};\n","import React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { SELECT_WIDTH } from '../constants';\nimport { getAlignmentPickerData } from '../functions';\nimport { MetricQuery } from '../types';\n\nexport interface Props {\n inputId: string;\n onChange: (query: MetricQuery) => void;\n query: MetricQuery;\n templateVariableOptions: Array>;\n}\n\nexport const AlignmentFunction: FC = ({ inputId, query, templateVariableOptions, onChange }) => {\n const { valueType, metricKind, perSeriesAligner: psa, preprocessor } = query;\n const { perSeriesAligner, alignOptions } = useMemo(\n () => getAlignmentPickerData(valueType, metricKind, psa, preprocessor),\n [valueType, metricKind, psa, preprocessor]\n );\n\n return (\n onChange({ ...query, perSeriesAligner: value! })}\n value={[...alignOptions, ...templateVariableOptions].find((s) => s.value === perSeriesAligner)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n {\n label: 'Alignment options',\n expanded: true,\n options: alignOptions,\n },\n ]}\n placeholder=\"Select Alignment\"\n inputId={inputId}\n >\n );\n};\n","import React, { FC, useMemo } from 'react';\n\nimport { rangeUtil } from '@grafana/data';\n\nimport { ALIGNMENTS } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { CustomMetaData } from '../types';\n\nexport interface Props {\n customMetaData: CustomMetaData;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const AlignmentPeriodLabel: FC = ({ customMetaData, datasource }) => {\n const { perSeriesAligner, alignmentPeriod } = customMetaData;\n const formatAlignmentText = useMemo(() => {\n if (!alignmentPeriod || !perSeriesAligner) {\n return '';\n }\n\n const alignment = ALIGNMENTS.find((ap) => ap.value === datasource.templateSrv.replace(perSeriesAligner));\n const seconds = parseInt(alignmentPeriod ?? ''.replace(/[^0-9]/g, ''), 10);\n const hms = rangeUtil.secondsToHms(seconds);\n return `${hms} interval (${alignment?.text ?? ''})`;\n }, [datasource, perSeriesAligner, alignmentPeriod]);\n\n return ;\n};\n","import { debounce } from 'lodash';\nimport React, { FunctionComponent, useState } from 'react';\n\nimport { Input } from '@grafana/ui';\n\nimport { INPUT_WIDTH } from '../constants';\n\nimport { QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n onChange: (alias: any) => void;\n value?: string;\n}\n\nexport const AliasBy: FunctionComponent = ({ refId, value = '', onChange }) => {\n const [alias, setAlias] = useState(value ?? '');\n\n const propagateOnChange = debounce(onChange, 1000);\n\n onChange = (e: any) => {\n setAlias(e.target.value);\n propagateOnChange(e.target.value);\n };\n\n return (\n \n \n \n );\n};\n","import React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { getAggregationOptionsByMetric } from '../functions';\nimport { MetricDescriptor, MetricKind, ValueTypes } from '../types';\n\nimport { QueryEditorField } from '.';\n\nexport interface Props {\n refId: string;\n onChange: (metricDescriptor: string) => void;\n metricDescriptor?: MetricDescriptor;\n crossSeriesReducer: string;\n groupBys: string[];\n templateVariableOptions: Array>;\n}\n\nexport const Aggregation: FC = (props) => {\n const aggOptions = useAggregationOptionsByMetric(props);\n const selected = useSelectedFromOptions(aggOptions, props);\n\n return (\n \n props.onChange(value!)}\n value={selected}\n options={[\n {\n label: 'Template Variables',\n options: props.templateVariableOptions,\n },\n {\n label: 'Aggregations',\n expanded: true,\n options: aggOptions,\n },\n ]}\n placeholder=\"Select Reducer\"\n inputId={`${props.refId}-group-by-function`}\n />\n \n );\n};\n\nconst useAggregationOptionsByMetric = ({ metricDescriptor }: Props): Array> => {\n const valueType = metricDescriptor?.valueType;\n const metricKind = metricDescriptor?.metricKind;\n\n return useMemo(() => {\n if (!valueType || !metricKind) {\n return [];\n }\n\n return getAggregationOptionsByMetric(valueType as ValueTypes, metricKind as MetricKind).map((a) => ({\n ...a,\n label: a.text,\n }));\n }, [valueType, metricKind]);\n};\n\nconst useSelectedFromOptions = (aggOptions: Array>, props: Props) => {\n return useMemo(() => {\n const allOptions = [...aggOptions, ...props.templateVariableOptions];\n return allOptions.find((s) => s.value === props.crossSeriesReducer);\n }, [aggOptions, props.crossSeriesReducer, props.templateVariableOptions]);\n};\n","import { css } from '@emotion/css';\nimport React, { FC } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { HorizontalGroup, InlineField, InlineLabel, PopoverContent, Select } from '@grafana/ui';\n\nimport { INNER_LABEL_WIDTH, LABEL_WIDTH } from '../constants';\n\ninterface VariableQueryFieldProps {\n onChange: (value: string) => void;\n options: SelectableValue[];\n value: string;\n label: string;\n allowCustomValue?: boolean;\n}\n\nexport const VariableQueryField: FC = ({\n label,\n onChange,\n value,\n options,\n allowCustomValue = false,\n}) => {\n return (\n \n onChange(value!)}\n options={options}\n />\n \n );\n};\n\nexport interface Props {\n children: React.ReactNode;\n tooltip?: PopoverContent;\n label?: React.ReactNode;\n className?: string;\n noFillEnd?: boolean;\n labelWidth?: number;\n fillComponent?: React.ReactNode;\n htmlFor?: string;\n}\n\nexport const QueryEditorRow: FC = ({\n children,\n label,\n tooltip,\n fillComponent,\n noFillEnd = false,\n labelWidth = LABEL_WIDTH,\n htmlFor,\n ...rest\n}) => {\n return (\n
\n {label && (\n \n {label}\n \n )}\n \n \n {children}\n \n
\n
\n {noFillEnd ||
{fillComponent}
}\n
\n \n );\n};\n\nexport const QueryEditorField: FC = ({ children, label, tooltip, labelWidth = INNER_LABEL_WIDTH, ...rest }) => {\n return (\n <>\n {label && (\n \n {label}\n \n )}\n {children}\n \n );\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { CustomMetaData, MetricDescriptor, MetricQuery, SLOQuery } from '../types';\n\nimport { Alignment, GroupBy, LabelFilter, Metrics, Preprocessor } from '.';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue;\n onMetricTypeChange: (query: MetricDescriptor) => void;\n onChange: (query: MetricQuery | SLOQuery) => void;\n query: MetricQuery;\n datasource: CloudMonitoringDatasource;\n labels: any;\n}\n\nfunction Editor({\n refId,\n query,\n labels,\n datasource,\n onChange,\n onMetricTypeChange,\n customMetaData,\n variableOptionGroup,\n}: React.PropsWithChildren) {\n return (\n \n {(metric) => (\n <>\n onChange({ ...query, filters })}\n variableOptionGroup={variableOptionGroup}\n />\n \n \n \n \n )}\n \n );\n}\n\nexport const VisualMetricQueryEditor = React.memo(Editor);\n","import React, { useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { periodOption } from '../constants';\n\nexport interface Props {\n inputId: string;\n onChange: (period: string) => void;\n templateVariableOptions: Array>;\n aligmentPeriods: periodOption[];\n selectWidth?: number;\n category?: string;\n disabled?: boolean;\n current?: string;\n}\n\nexport function PeriodSelect({\n inputId,\n templateVariableOptions,\n onChange,\n current,\n selectWidth,\n disabled,\n aligmentPeriods,\n}: Props) {\n const options = useMemo(\n () =>\n aligmentPeriods.map((ap) => ({\n ...ap,\n label: ap.text,\n })),\n [aligmentPeriods]\n );\n const visibleOptions = useMemo(() => options.filter((ap) => !ap.hidden), [options]);\n\n return (\n onChange(value!)}\n value={[...options, ...templateVariableOptions].find((s) => s.value === current)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n {\n label: 'Aggregations',\n expanded: true,\n options: visibleOptions,\n },\n ]}\n placeholder=\"Select Period\"\n inputId={inputId}\n disabled={disabled}\n allowCustomValue\n >\n );\n}\n","import React, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { RadioButtonGroup } from '@grafana/ui';\n\nimport { getAlignmentPickerData } from '../functions';\nimport { MetricDescriptor, MetricKind, MetricQuery, PreprocessorType, ValueTypes } from '../types';\n\nimport { QueryEditorRow } from '.';\n\nconst NONE_OPTION = { label: 'None', value: PreprocessorType.None };\n\nexport interface Props {\n metricDescriptor?: MetricDescriptor;\n onChange: (query: MetricQuery) => void;\n query: MetricQuery;\n}\n\nexport const Preprocessor: FunctionComponent = ({ query, metricDescriptor, onChange }) => {\n const options = useOptions(metricDescriptor);\n return (\n \n {\n const { valueType, metricKind, perSeriesAligner: psa } = query;\n const { perSeriesAligner } = getAlignmentPickerData(valueType, metricKind, psa, value);\n onChange({ ...query, preprocessor: value, perSeriesAligner });\n }}\n value={query.preprocessor ?? PreprocessorType.None}\n options={options}\n >\n \n );\n};\n\nconst useOptions = (metricDescriptor?: MetricDescriptor): Array> => {\n const metricKind = metricDescriptor?.metricKind;\n const valueType = metricDescriptor?.valueType;\n\n return useMemo(() => {\n if (!metricKind || metricKind === MetricKind.GAUGE || valueType === ValueTypes.DISTRIBUTION) {\n return [NONE_OPTION];\n }\n\n const options = [\n NONE_OPTION,\n {\n label: 'Rate',\n value: PreprocessorType.Rate,\n description: 'Data points are aligned and converted to a rate per time series',\n },\n ];\n\n return metricKind === MetricKind.CUMULATIVE\n ? [\n ...options,\n {\n label: 'Delta',\n value: PreprocessorType.Delta,\n description: 'Data points are aligned by their delta (difference) per time series',\n },\n ]\n : options;\n }, [metricKind, valueType]);\n};\n","import { GoogleAuthType } from '@grafana/google-sdk';\n\nimport { MetricKind, QueryType, ValueTypes } from './types';\n\n// not super excited about using uneven numbers, but this makes it align perfectly with rows that has two fields\nexport const INPUT_WIDTH = 71;\nexport const LABEL_WIDTH = 19;\nexport const INNER_LABEL_WIDTH = 14;\nexport const SELECT_WIDTH = 28;\nexport const AUTH_TYPES = [\n { value: 'Google JWT File', key: GoogleAuthType.JWT },\n { value: 'GCE Default Service Account', key: GoogleAuthType.GCE },\n];\n\nexport const ALIGNMENTS = [\n {\n text: 'none',\n value: 'ALIGN_NONE',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.STRING,\n ValueTypes.VALUE_TYPE_UNSPECIFIED,\n ValueTypes.BOOL,\n ],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'delta',\n value: 'ALIGN_DELTA',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.CUMULATIVE, MetricKind.DELTA],\n },\n {\n text: 'rate',\n value: 'ALIGN_RATE',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.CUMULATIVE, MetricKind.DELTA],\n },\n {\n text: 'interpolate',\n value: 'ALIGN_INTERPOLATE',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'next older',\n value: 'ALIGN_NEXT_OLDER',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.STRING,\n ValueTypes.VALUE_TYPE_UNSPECIFIED,\n ValueTypes.BOOL,\n ],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'min',\n value: 'ALIGN_MIN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'max',\n value: 'ALIGN_MAX',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'mean',\n value: 'ALIGN_MEAN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'count',\n value: 'ALIGN_COUNT',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'sum',\n value: 'ALIGN_SUM',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'stddev',\n value: 'ALIGN_STDDEV',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'count true',\n value: 'ALIGN_COUNT_TRUE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'count false',\n value: 'ALIGN_COUNT_FALSE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'fraction true',\n value: 'ALIGN_FRACTION_TRUE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'percentile 99',\n value: 'ALIGN_PERCENTILE_99',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percentile 95',\n value: 'ALIGN_PERCENTILE_95',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percentile 50',\n value: 'ALIGN_PERCENTILE_50',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percentile 05',\n value: 'ALIGN_PERCENTILE_05',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percent change',\n value: 'ALIGN_PERCENT_CHANGE',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n];\n\nexport const AGGREGATIONS = [\n {\n text: 'none',\n value: 'REDUCE_NONE',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.BOOL,\n ValueTypes.STRING,\n ],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'mean',\n value: 'REDUCE_MEAN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: 'min',\n value: 'REDUCE_MIN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'max',\n value: 'REDUCE_MAX',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'sum',\n value: 'REDUCE_SUM',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'std. dev.',\n value: 'REDUCE_STDDEV',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'count',\n value: 'REDUCE_COUNT',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.BOOL,\n ValueTypes.STRING,\n ],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: 'count true',\n value: 'REDUCE_COUNT_TRUE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'count false',\n value: 'REDUCE_COUNT_FALSE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: '99th percentile',\n value: 'REDUCE_PERCENTILE_99',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: '95th percentile',\n value: 'REDUCE_PERCENTILE_95',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: '50th percentile',\n value: 'REDUCE_PERCENTILE_50',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: '5th percentile',\n value: 'REDUCE_PERCENTILE_05',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n];\n\nexport type periodOption = {\n text: string;\n value: string;\n hidden?: boolean;\n};\n\nexport const ALIGNMENT_PERIODS: periodOption[] = [\n { text: 'grafana auto', value: 'grafana-auto' },\n { text: 'stackdriver auto', value: 'stackdriver-auto', hidden: true },\n { text: 'cloud monitoring auto', value: 'cloud-monitoring-auto' },\n { text: '1m', value: '+60s' },\n { text: '2m', value: '+120s' },\n { text: '5m', value: '+300s' },\n { text: '10m', value: '+600s' },\n { text: '30m', value: '+1800s' },\n { text: '1h', value: '+3600s' },\n { text: '3h', value: '+7200s' },\n { text: '6h', value: '+21600s' },\n { text: '1d', value: '+86400s' },\n { text: '3d', value: '+259200s' },\n { text: '1w', value: '+604800s' },\n];\n\nexport const GRAPH_PERIODS: periodOption[] = [\n { text: 'auto', value: 'auto' },\n { text: '1m', value: '1m' },\n { text: '2m', value: '2m' },\n { text: '5m', value: '5m' },\n { text: '10m', value: '10m' },\n { text: '30m', value: '30m' },\n { text: '1h', value: '1h' },\n { text: '3h', value: '3h' },\n { text: '6h', value: '6h' },\n { text: '1d', value: '1d' },\n { text: '3d', value: '3d' },\n { text: '1w', value: '1w' },\n];\n\nexport const SYSTEM_LABELS = [\n 'metadata.system_labels.cloud_account',\n 'metadata.system_labels.name',\n 'metadata.system_labels.region',\n 'metadata.system_labels.state',\n 'metadata.system_labels.instance_group',\n 'metadata.system_labels.node_name',\n 'metadata.system_labels.service_name',\n 'metadata.system_labels.top_level_controller_type',\n 'metadata.system_labels.top_level_controller_name',\n 'metadata.system_labels.container_image',\n];\n\nexport const SELECTORS = [\n { label: 'SLI Value', value: 'select_slo_health' },\n { label: 'SLO Compliance', value: 'select_slo_compliance' },\n { label: 'SLO Error Budget Remaining', value: 'select_slo_budget_fraction' },\n];\n\nexport const QUERY_TYPES = [\n { label: 'Metrics', value: QueryType.METRICS },\n { label: 'Service Level Objectives (SLO)', value: QueryType.SLO },\n];\n","import { chunk, initial, startCase, uniqBy } from 'lodash';\n\nimport { rangeUtil } from '@grafana/data';\nimport { getTemplateSrv, TemplateSrv } from '@grafana/runtime';\n\nimport { AGGREGATIONS, ALIGNMENTS, SYSTEM_LABELS } from './constants';\nimport CloudMonitoringDatasource from './datasource';\nimport { AlignmentTypes, CustomMetaData, MetricDescriptor, MetricKind, PreprocessorType, ValueTypes } from './types';\n\nconst templateSrv: TemplateSrv = getTemplateSrv();\n\nexport const extractServicesFromMetricDescriptors = (metricDescriptors: MetricDescriptor[]) =>\n uniqBy(metricDescriptors, 'service');\n\nexport const getMetricTypesByService = (metricDescriptors: MetricDescriptor[], service: string) =>\n metricDescriptors.filter((m: MetricDescriptor) => m.service === service);\n\nexport const getMetricTypes = (\n metricDescriptors: MetricDescriptor[],\n metricType: string,\n interpolatedMetricType: string,\n selectedService: string\n) => {\n const metricTypes = getMetricTypesByService(metricDescriptors, selectedService).map((m) => ({\n value: m.type,\n name: m.displayName,\n }));\n const metricTypeExistInArray = metricTypes.some(\n (m: { value: string; name: string }) => m.value === interpolatedMetricType\n );\n const metricTypeByService = metricTypes.length ? metricTypes[0].value : '';\n const selectedMetricType = metricTypeExistInArray ? metricType : metricTypeByService;\n return {\n metricTypes,\n selectedMetricType,\n };\n};\n\nexport const getAlignmentOptionsByMetric = (\n metricValueType: string,\n metricKind: string,\n preprocessor?: PreprocessorType\n) => {\n if (preprocessor && preprocessor === PreprocessorType.Rate) {\n metricKind = MetricKind.GAUGE;\n }\n\n return !metricValueType\n ? []\n : ALIGNMENTS.filter((i) => {\n return (\n i.valueTypes.indexOf(metricValueType as ValueTypes) !== -1 &&\n i.metricKinds.indexOf(metricKind as MetricKind) !== -1\n );\n });\n};\n\nexport const getAggregationOptionsByMetric = (valueType: ValueTypes, metricKind: MetricKind) => {\n return !metricKind\n ? []\n : AGGREGATIONS.filter((i) => {\n return i.valueTypes.indexOf(valueType) !== -1 && i.metricKinds.indexOf(metricKind) !== -1;\n });\n};\n\nexport const getLabelKeys = async (\n datasource: CloudMonitoringDatasource,\n selectedMetricType: string,\n projectName: string\n) => {\n const refId = 'handleLabelKeysQuery';\n const labels = await datasource.getLabels(selectedMetricType, refId, projectName);\n return [...Object.keys(labels), ...SYSTEM_LABELS];\n};\n\nexport const getAlignmentPickerData = (\n valueType: string | undefined = ValueTypes.DOUBLE,\n metricKind: string | undefined = MetricKind.GAUGE,\n perSeriesAligner: string | undefined = AlignmentTypes.ALIGN_MEAN,\n preprocessor?: PreprocessorType\n) => {\n const alignOptions = getAlignmentOptionsByMetric(valueType!, metricKind!, preprocessor!).map((option) => ({\n ...option,\n label: option.text,\n }));\n if (!alignOptions.some((o: { value: string }) => o.value === templateSrv.replace(perSeriesAligner))) {\n perSeriesAligner = alignOptions.length > 0 ? alignOptions[0].value : AlignmentTypes.ALIGN_MEAN;\n }\n return { alignOptions, perSeriesAligner };\n};\n\nexport const labelsToGroupedOptions = (groupBys: string[]) => {\n const groups = groupBys.reduce((acc: any, curr: string) => {\n const arr = curr.split('.').map(startCase);\n const group = (arr.length === 2 ? arr : initial(arr)).join(' ');\n const option = {\n value: curr,\n label: curr,\n };\n if (acc[group]) {\n acc[group] = [...acc[group], option];\n } else {\n acc[group] = [option];\n }\n return acc;\n }, {});\n return Object.entries(groups).map(([label, options]) => ({ label, options, expanded: true }), []);\n};\n\nexport const stringArrayToFilters = (filterArray: string[]) =>\n chunk(filterArray, 4).map(([key, operator, value, condition = 'AND']) => ({\n key,\n operator,\n value,\n condition,\n }));\n\nexport const alignmentPeriodLabel = (customMetaData: CustomMetaData, datasource: CloudMonitoringDatasource) => {\n const { perSeriesAligner, alignmentPeriod } = customMetaData;\n if (!alignmentPeriod || !perSeriesAligner) {\n return '';\n }\n\n const alignment = ALIGNMENTS.find((ap) => ap.value === datasource.templateSrv.replace(perSeriesAligner));\n const seconds = parseInt(alignmentPeriod, 10);\n const hms = rangeUtil.secondsToHms(seconds);\n return `${hms} interval (${alignment?.text ?? ''})`;\n};\n","import { DataQuery, DataSourceJsonData, SelectableValue } from '@grafana/data';\nimport { GoogleAuthType } from '@grafana/google-sdk';\n\nexport const authTypes: Array> = [\n { label: 'Google JWT File', value: GoogleAuthType.JWT },\n { label: 'GCE Default Service Account', value: GoogleAuthType.GCE },\n];\n\nexport enum MetricFindQueryTypes {\n Projects = 'projects',\n Services = 'services',\n DefaultProject = 'defaultProject',\n MetricTypes = 'metricTypes',\n LabelKeys = 'labelKeys',\n LabelValues = 'labelValues',\n ResourceTypes = 'resourceTypes',\n Aggregations = 'aggregations',\n Aligners = 'aligners',\n AlignmentPeriods = 'alignmentPeriods',\n Selectors = 'selectors',\n SLOServices = 'sloServices',\n SLO = 'slo',\n}\n\nexport interface CloudMonitoringVariableQuery extends DataQuery {\n selectedQueryType: string;\n selectedService: string;\n selectedMetricType: string;\n selectedSLOService: string;\n labelKey: string;\n projects: SelectableValue[];\n sloServices: SelectableValue[];\n projectName: string;\n}\n\nexport interface VariableQueryData {\n selectedQueryType: string;\n metricDescriptors: MetricDescriptor[];\n selectedService: string;\n selectedMetricType: string;\n selectedSLOService: string;\n labels: string[];\n labelKey: string;\n metricTypes: Array<{ value: string; name: string }>;\n services: SelectableValue[];\n projects: SelectableValue[];\n sloServices: SelectableValue[];\n projectName: string;\n loading: boolean;\n}\n\nexport interface Aggregation {\n crossSeriesReducer?: string;\n groupBys?: string[];\n}\n\nexport enum QueryType {\n METRICS = 'metrics',\n SLO = 'slo',\n}\n\nexport enum EditorMode {\n Visual = 'visual',\n MQL = 'mql',\n}\n\nexport enum PreprocessorType {\n None = 'none',\n Rate = 'rate',\n Delta = 'delta',\n}\n\nexport enum MetricKind {\n METRIC_KIND_UNSPECIFIED = 'METRIC_KIND_UNSPECIFIED',\n GAUGE = 'GAUGE',\n DELTA = 'DELTA',\n CUMULATIVE = 'CUMULATIVE',\n}\n\nexport enum ValueTypes {\n VALUE_TYPE_UNSPECIFIED = 'VALUE_TYPE_UNSPECIFIED',\n BOOL = 'BOOL',\n INT64 = 'INT64',\n DOUBLE = 'DOUBLE',\n STRING = 'STRING',\n DISTRIBUTION = 'DISTRIBUTION',\n MONEY = 'MONEY',\n}\n\nexport enum AlignmentTypes {\n ALIGN_DELTA = 'ALIGN_DELTA',\n ALIGN_RATE = 'ALIGN_RATE',\n ALIGN_INTERPOLATE = 'ALIGN_INTERPOLATE',\n ALIGN_NEXT_OLDER = 'ALIGN_NEXT_OLDER',\n ALIGN_MIN = 'ALIGN_MIN',\n ALIGN_MAX = 'ALIGN_MAX',\n ALIGN_MEAN = 'ALIGN_MEAN',\n ALIGN_COUNT = 'ALIGN_COUNT',\n ALIGN_SUM = 'ALIGN_SUM',\n ALIGN_STDDEV = 'ALIGN_STDDEV',\n ALIGN_COUNT_TRUE = 'ALIGN_COUNT_TRUE',\n ALIGN_COUNT_FALSE = 'ALIGN_COUNT_FALSE',\n ALIGN_FRACTION_TRUE = 'ALIGN_FRACTION_TRUE',\n ALIGN_PERCENTILE_99 = 'ALIGN_PERCENTILE_99',\n ALIGN_PERCENTILE_95 = 'ALIGN_PERCENTILE_95',\n ALIGN_PERCENTILE_50 = 'ALIGN_PERCENTILE_50',\n ALIGN_PERCENTILE_05 = 'ALIGN_PERCENTILE_05',\n ALIGN_PERCENT_CHANGE = 'ALIGN_PERCENT_CHANGE',\n ALIGN_NONE = 'ALIGN_NONE',\n}\n\nexport interface BaseQuery {\n projectName: string;\n perSeriesAligner?: string;\n alignmentPeriod?: string;\n aliasBy?: string;\n}\n\nexport interface MetricQuery extends BaseQuery {\n editorMode: EditorMode;\n metricType: string;\n crossSeriesReducer: string;\n groupBys?: string[];\n filters?: string[];\n metricKind?: MetricKind;\n valueType?: string;\n view?: string;\n query: string;\n preprocessor?: PreprocessorType;\n // To disable the graphPeriod, it should explictly be set to 'disabled'\n graphPeriod?: 'disabled' | string;\n}\n\nexport interface AnnotationMetricQuery extends MetricQuery {\n title?: string;\n text?: string;\n}\n\nexport interface SLOQuery extends BaseQuery {\n selectorName: string;\n serviceId: string;\n serviceName: string;\n sloId: string;\n sloName: string;\n goal?: number;\n}\n\nexport interface CloudMonitoringQuery extends DataQuery {\n datasourceId?: number; // Should not be necessary anymore\n queryType: QueryType;\n metricQuery: MetricQuery | AnnotationMetricQuery;\n sloQuery?: SLOQuery;\n intervalMs: number;\n type: string;\n}\n\nexport interface CloudMonitoringOptions extends DataSourceJsonData {\n defaultProject?: string;\n gceDefaultProject?: string;\n authenticationType: GoogleAuthType;\n clientEmail?: string;\n tokenUri?: string;\n}\n\nexport interface CloudMonitoringSecureJsonData {\n privateKey?: string;\n}\n\nexport interface LegacyCloudMonitoringAnnotationQuery {\n projectName: string;\n metricType: string;\n refId: string;\n filters: string[];\n metricKind: MetricKind;\n valueType: string;\n title: string;\n text: string;\n}\n\nexport interface QueryMeta {\n alignmentPeriod: string;\n rawQuery: string;\n rawQueryString: string;\n metricLabels: { [key: string]: string[] };\n resourceLabels: { [key: string]: string[] };\n resourceTypes: string[];\n}\n\nexport interface MetricDescriptor {\n valueType: string;\n metricKind: MetricKind;\n type: string;\n unit: string;\n service: string;\n serviceShortName: string;\n displayName: string;\n description: string;\n}\n\nexport interface Segment {\n type: string;\n value: string;\n}\n\nexport interface Filter {\n key: string;\n operator: string;\n value: string;\n condition?: string;\n}\n\nexport interface CustomMetaData {\n perSeriesAligner?: string;\n alignmentPeriod?: string;\n}\n\nexport interface PostResponse {\n results: Record;\n}\n","Object.defineProperty(exports,\"__esModule\",{value:!0});var e=require(\"@grafana/data\"),t=require(\"@grafana/ui\"),a=require(\"react\"),n=require(\"lodash\");function l(e){return e&&\"object\"==typeof e&&\"default\"in e?e:{default:e}}var o=l(a),r=function(){return r=Object.assign||function(e){for(var t,a=1,n=arguments.length;a0)&&!(n=o.next()).done;)r.push(n.value)}catch(e){l={error:e}}finally{try{n&&!n.done&&(a=o.return)&&a.call(o)}finally{if(l)throw l.error}}return r}var u,c=\"Configuration help box\",d=\"Configuration drop zone\",f=\"Configuration text area\",s=\"Paste JWT button\",p=\"Reset JWT button\",m=\"JWT form\",y=\"JWT button\",h=\"GCE button\",v=[\"private_key\",\"token_uri\",\"client_email\",\"project_id\"],g=function(e){var n=e.onChange,l=i(a.useState(),2),r=l[0],u=l[1],c=i(a.useState(null),2),p=c[0],m=c[1],y=t.useTheme2(),h=a.useCallback((function(e){u(null),m(!0)}),[m]),v=a.useCallback((function(e){m(null),u(null)}),[m]),g=a.useCallback((function(e){if(\"\"!==e.trim()){var t=void 0;try{t=JSON.parse(e)}catch(e){u(\"Invalid JWT token\")}var a=E(t);a.isValid?n({privateKey:t.private_key,tokenUri:t.token_uri,clientEmail:t.client_email,projectId:t.project_id}):u(a.error)}}),[u,n]);return o.default.createElement(o.default.Fragment,null,o.default.createElement(t.Field,{label:\"JWT token\",invalid:Boolean(r),description:p?\"Paste JWT token below\":\"Upload or paste Google JWT token\",error:r},o.default.createElement(o.default.Fragment,null,!0!==p&&o.default.createElement(\"div\",{\"data-testid\":d},o.default.createElement(t.FileDropzone,{options:{multiple:!1,accept:\"application/json\"},readAs:\"readAsText\",onLoad:function(e){g(e),m(!1)}},o.default.createElement(\"p\",{style:{margin:0,fontSize:\"\"+y.typography.h4.fontSize,textAlign:\"center\"}},\"Drop the Google JWT file here\",o.default.createElement(\"br\",null),o.default.createElement(\"br\",null),o.default.createElement(t.LinkButton,{fill:\"outline\"},\"Click to browse files\")))),p&&o.default.createElement(t.TextArea,{\"data-testid\":f,autoFocus:!0,invalid:Boolean(r),placeholder:\"Paste Google JWT token here\",onBlur:function(e){return g(e.currentTarget.value)},rows:12}))),!p&&o.default.createElement(t.Field,null,o.default.createElement(t.Button,{\"data-testid\":s,type:\"button\",fill:\"outline\",style:{color:\"\"+y.colors.primary.text},onClick:h},\"Paste JWT Token\")),p&&r&&o.default.createElement(t.Field,null,o.default.createElement(t.Button,{type:\"button\",fill:\"outline\",style:{color:\"\"+y.colors.primary.text},onClick:v},\"Upload JWT Token\")))},E=function(e){if(!n.isObject(e))return{isValid:!1,error:\"Invalid JWT token\"};var t=v.filter((function(t){return!e[t]}));return t.length>0?{isValid:!1,error:\"Missing keys: \"+t.join(\", \")}:{isValid:!0}},T=function(e){var a=e.options,n=e.onReset,l=e.onChange;return o.default.createElement(\"div\",{\"data-testid\":m},o.default.createElement(t.Field,{label:\"Project ID\"},o.default.createElement(t.Input,{id:\"defaultProject\",width:60,value:a.defaultProject||\"\",onChange:l(\"defaultProject\")})),o.default.createElement(t.Field,{label:\"Client email\"},o.default.createElement(t.Input,{width:60,id:\"clientEmail\",value:a.clientEmail||\"\",onChange:l(\"clientEmail\")})),o.default.createElement(t.Field,{label:\"Token URI\"},o.default.createElement(t.Input,{width:60,id:\"tokenUri\",value:a.tokenUri||\"\",onChange:l(\"tokenUri\")})),o.default.createElement(t.Field,{label:\"Private key\",disabled:!0},o.default.createElement(t.Input,{width:60,id:\"privateKey\",readOnly:!0,placeholder:\"Private key configured\",addonAfter:o.default.createElement(t.Tooltip,{content:\"Click to clear the uploaded JWT token and upload a new one\"},o.default.createElement(t.Button,{\"data-testid\":p,icon:\"sync\",size:\"xs\",onClick:function(){return n(null)},fill:\"outline\"},\"Reset token\"))})))};exports.GoogleAuthType=void 0,(u=exports.GoogleAuthType||(exports.GoogleAuthType={})).JWT=\"jwt\",u.GCE=\"gce\";var k=[{label:\"Google JWT File\",value:exports.GoogleAuthType.JWT,ariaLabel:y},{label:\"GCE Default Service Account\",value:exports.GoogleAuthType.GCE,ariaLabel:h}];exports.ConnectionConfig=function(a){var n=a.options,l=a.onOptionsChange,i=n.jsonData,u=n.secureJsonFields,d=n.secureJsonData;i.authenticationType||(i.authenticationType=exports.GoogleAuthType.JWT);var f=i.authenticationType===exports.GoogleAuthType.JWT||void 0===i.authenticationType,s=Boolean(u&&u.privateKey&&i.clientEmail&&i.defaultProject&&i.tokenUri);return o.default.createElement(o.default.Fragment,null,o.default.createElement(t.FieldSet,{label:\"Authentication\"},o.default.createElement(t.Field,{label:\"Authentication type\"},o.default.createElement(t.RadioButtonGroup,{options:k,value:i.authenticationType||exports.GoogleAuthType.JWT,onChange:function(e){l(r(r({},n),{jsonData:r(r({},n.jsonData),{authenticationType:e})}))}}))),f&&o.default.createElement(t.FieldSet,{label:\"JWT Key Details\"},s?o.default.createElement(T,{options:n.jsonData,onReset:function(e){var t=r({},d),a=e?r(r({},n.jsonData),e):r({},n.jsonData);delete a.clientEmail,delete a.defaultProject,delete a.tokenUri,delete t.privateKey,l(r(r({},n),{secureJsonData:t,jsonData:a}))},onChange:function(t){return e.onUpdateDatasourceJsonDataOption(a,t)}}):o.default.createElement(g,{onChange:function(e){l(r(r({},n),{secureJsonFields:r(r({},u),{privateKey:!0}),secureJsonData:r(r({},d),{privateKey:e.privateKey}),jsonData:r(r({},i),{clientEmail:e.clientEmail,defaultProject:e.projectId,tokenUri:e.tokenUri})}))}}),\" \"),o.default.createElement(\"div\",{className:\"grafana-info-box\",style:{marginTop:\"16px\"},\"data-testid\":c},o.default.createElement(\"p\",null,\"Don’t know how to get a service account key file or create a service account? Read more\",\" \",o.default.createElement(\"a\",{className:\"external-link\",target:\"_blank\",rel:\"noopener noreferrer\",href:\"https://grafana.com/docs/grafana/latest/datasources/google-cloud-monitoring/google-authentication/\"},\"in the documentation.\"))),!f&&o.default.createElement(t.Alert,{title:\"\",severity:\"info\"},\"Verify GCE default service account by clicking Save & Test\"))};\n//# sourceMappingURL=index.production.js.map\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./dist/index.production.js');\n} else {\n module.exports = require('./dist/index.development.js');\n}\n"],"names":["AliasBy","refId","value","onChange","alias","setAlias","useState","propagateOnChange","debounce","e","target","EditorField","label","Input","id","width","SELECT_WIDTH","GraphPeriod","graphPeriod","variableOptionGroup","EditorRow","htmlFor","tooltip","HorizontalGroup","Switch","currentTarget","checked","inputId","templateVariableOptions","options","current","selectWidth","disabled","aligmentPeriods","GRAPH_PERIODS","AlignmentFunction","query","valueType","metricKind","perSeriesAligner","psa","preprocessor","alignOptions","useMemo","getAlignmentPickerData","Select","find","s","expanded","placeholder","Alignment","customMetaData","datasource","alignmentLabel","alignmentPeriodLabel","EditorFieldGroup","PeriodSelect","alignmentPeriod","period","ALIGNMENT_PERIODS","Aggregation","props","aggOptions","useAggregationOptionsByMetric","selected","useSelectedFromOptions","metricDescriptor","getAggregationOptionsByMetric","map","a","text","crossSeriesReducer","GroupBy","labels","groupBys","labelsToGroupedOptions","SYSTEM_LABELS","MultiSelect","o","DEFAULT_OPERATOR","DEFAULT_CONDITION","operators","toOption","LabelFilter","filters","filterArray","_onChange","stringArrayToFilters","Object","keys","getOptions","key","some","op","opp","push","valueOptions","hasOwnProperty","EditorList","items","renderItem","item","onChangeItem","onDeleteItem","operator","condition","spacing","formatCreateLabel","v","allowCustomValue","AccessoryButton","icon","variant","onClick","type","flatMap","slice","filtersToStringArray","Metrics","metricDescriptors","setMetricDescriptors","setMetricDescriptor","metrics","setMetrics","services","setServices","service","setService","theme","useTheme2","selectStyles","getSelectStyles","customStyle","useStyles2","getStyles","onProjectChange","metricType","projectName","children","templateSrv","getSelectedMetricDescriptor","useCallback","md","replace","useEffect","async","getMetricTypes","getServicesList","selectedMetricDescriptor","filter","m","displayName","component","className","optionDescription","description","getMetricsList","length","loadMetricDescriptors","onMetricTypeChange","startCase","serviceShortName","uniqBy","Project","css","colors","secondary","NONE_OPTION","PreprocessorType","Preprocessor","useOptions","RadioButtonGroup","MetricKind","ValueTypes","Editor","metric","aliasBy","VisualMetricQueryEditor","React","defaultState","onQueryChange","onRunQuery","state","setState","editorMode","getLabels","then","prevState","metricQuery","EditorRows","EditorMode","MQLQueryEditor","q","MetricQueryEditor","ap","visibleOptions","hidden","projects","setProjects","getProjects","projectsWithTemplateVariables","TextArea","name","rows","onBlur","onKeyDown","event","shiftKey","ctrlKey","preventDefault","defaultQuery","dataSource","getDefaultProject","AlignmentTypes","EDITOR_MODES","QueryHeader","sloQuery","queryType","EditorHeader","InlineSelect","QUERY_TYPES","FlexItem","grow","QueryType","size","SLO","slos","setSLOs","serviceId","getServiceLevelObjectives","sloIds","sloId","sloName","slo","goal","Selector","SELECTORS","selectorName","Service","getSLOServices","serviceName","SLOQueryEditor","QueryEditor","PureComponent","this","ensureGCEDefaultProject","prop","render","defaultSLOQuery","meta","data","series","custom","getVariables","config","fillComponent","Button","QueryEditorRow","extra","QueryEditorField","labelWidth","LABEL_WIDTH","INNER_LABEL_WIDTH","INPUT_WIDTH","AlignmentPeriodLabel","FilterButton","ref","rest","OperatorButton","strArr","flatten","AddFilter","menuPlacement","renderControl","noFillEnd","VerticalGroup","index","f","i","_","values","every","AnnotationsHelp","formatAlignmentText","alignment","ALIGNMENTS","seconds","parseInt","rangeUtil","VariableQueryField","InlineField","InlineLabel","GoogleAuthType","valueTypes","metricKinds","AGGREGATIONS","getTemplateSrv","extractServicesFromMetricDescriptors","getMetricTypesByService","interpolatedMetricType","selectedService","metricTypes","metricTypeExistInArray","metricTypeByService","selectedMetricType","getAlignmentOptionsByMetric","metricValueType","indexOf","getLabelKeys","option","groups","reduce","acc","curr","arr","split","group","initial","join","entries","chunk","MetricFindQueryTypes","t","n","default","l","r","assign","arguments","prototype","call","apply","Symbol","iterator","next","done","error","return","u","g","c","p","y","h","trim","JSON","parse","E","isValid","privateKey","private_key","tokenUri","token_uri","clientEmail","client_email","projectId","project_id","createElement","Fragment","Field","invalid","Boolean","FileDropzone","multiple","accept","readAs","onLoad","style","margin","fontSize","typography","h4","textAlign","LinkButton","fill","autoFocus","color","primary","isObject","T","onReset","defaultProject","readOnly","addonAfter","Tooltip","content","exports","JWT","GCE","k","ariaLabel","ConnectionConfig","onOptionsChange","jsonData","secureJsonFields","d","secureJsonData","authenticationType","FieldSet","onUpdateDatasourceJsonDataOption","marginTop","rel","href","Alert","title","severity","module"],"sourceRoot":""}