{"version":3,"file":"2773.272a000a5cb9ba81dba1.js","mappings":"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","sources":["webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AliasBy.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AlignmentFunction.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/GroupBy.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/LabelFilter.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/PeriodSelect.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Preprocessor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Project.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/QueryHeader.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/QueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/LookbackPeriodSelect.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLO.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Selector.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Service.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLOQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/VisualMetricQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AnnotationsHelp.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Fields.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"],"sourcesContent":["import React, { 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 = (props: 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 menuPlacement=\"top\"\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 { debounce } from 'lodash';\nimport React, { useState } from 'react';\n\nimport { EditorField } from '@grafana/experimental';\nimport { Input } from '@grafana/ui';\n\nexport interface Props {\n refId: string;\n onChange: (alias: any) => void;\n value?: string;\n}\n\nexport const AliasBy = ({ refId, value = '', onChange }: Props) => {\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, { 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, MetricDescriptor, PreprocessorType, TimeSeriesList } from '../types';\n\nimport { AlignmentFunction } from './AlignmentFunction';\nimport { PeriodSelect } from './PeriodSelect';\n\nexport interface Props {\n refId: string;\n onChange: (query: TimeSeriesList) => void;\n query: TimeSeriesList;\n templateVariableOptions: Array>;\n customMetaData: CustomMetaData;\n datasource: CloudMonitoringDatasource;\n metricDescriptor?: MetricDescriptor;\n preprocessor?: PreprocessorType;\n}\n\nexport const Alignment = ({\n refId,\n templateVariableOptions,\n onChange,\n query,\n customMetaData,\n datasource,\n metricDescriptor,\n preprocessor,\n}: Props) => {\n const alignmentLabel = useMemo(() => alignmentPeriodLabel(customMetaData, datasource), [customMetaData, datasource]);\n return (\n \n \n onChange({ ...query, ...q })}\n metricDescriptor={metricDescriptor}\n preprocessor={preprocessor}\n />\n \n \n onChange({ ...query, alignmentPeriod: period })}\n aligmentPeriods={ALIGNMENT_PERIODS}\n />\n \n \n );\n};\n","import React, { useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { getAlignmentPickerData } from '../functions';\nimport { MetricDescriptor, PreprocessorType, SLOQuery, TimeSeriesList } from '../types';\n\nexport interface Props {\n inputId: string;\n onChange: (query: TimeSeriesList | SLOQuery) => void;\n query: TimeSeriesList | SLOQuery;\n templateVariableOptions: Array>;\n metricDescriptor?: MetricDescriptor;\n preprocessor?: PreprocessorType;\n}\n\nexport const AlignmentFunction = ({\n inputId,\n query,\n templateVariableOptions,\n onChange,\n metricDescriptor,\n preprocessor,\n}: Props) => {\n const { perSeriesAligner: psa } = query;\n let { valueType, metricKind } = metricDescriptor || {};\n\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 menuPlacement=\"top\"\n />\n );\n};\n","import React, { 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, TimeSeriesList } 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: TimeSeriesList) => void;\n query: TimeSeriesList;\n}\n\nexport const GroupBy = ({\n refId,\n labels: groupBys = [],\n query,\n onChange,\n variableOptionGroup,\n metricDescriptor,\n}: Props) => {\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 menuPlacement=\"top\"\n />\n \n onChange({ ...query, crossSeriesReducer })}\n refId={refId}\n />\n \n );\n};\n","import React, { useMemo } from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { AccessoryButton, EditorField, EditorList, EditorRow } 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\n// These keys are not editable as labels but they have its own selector.\n// For example the 'metric.type' is set with the metric name selector.\nconst protectedFilterKeys = ['metric.type'];\n\nexport const LabelFilter = ({ labels = {}, filters: filterArray, onChange: _onChange, variableOptionGroup }: Props) => {\n const rawFilters: Filter[] = stringArrayToFilters(filterArray);\n const filters = rawFilters.filter(({ key }) => !protectedFilterKeys.includes(key));\n const protectedFilters = rawFilters.filter(({ key }) => protectedFilterKeys.includes(key));\n\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.concat(protectedFilters).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 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 from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorRow } from '@grafana/experimental';\nimport { HorizontalGroup, Switch } from '@grafana/ui';\n\nimport { GRAPH_PERIODS } from '../constants';\n\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 = ({ refId, onChange, graphPeriod, variableOptionGroup }: Props) => {\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, { useCallback, useEffect } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorRows } from '@grafana/experimental';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport {\n AlignmentTypes,\n CloudMonitoringQuery,\n CustomMetaData,\n QueryType,\n TimeSeriesList,\n TimeSeriesQuery,\n} from '../types';\n\nimport { GraphPeriod } from './GraphPeriod';\nimport { MQLQueryEditor } from './MQLQueryEditor';\nimport { Project } from './Project';\nimport { VisualMetricQueryEditor } from './VisualMetricQueryEditor';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue;\n onChange: (query: CloudMonitoringQuery) => void;\n onRunQuery: () => void;\n query: CloudMonitoringQuery;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const defaultTimeSeriesList: (dataSource: CloudMonitoringDatasource) => TimeSeriesList = (dataSource) => ({\n projectName: dataSource.getDefaultProject(),\n crossSeriesReducer: 'REDUCE_NONE',\n alignmentPeriod: 'cloud-monitoring-auto',\n perSeriesAligner: AlignmentTypes.ALIGN_MEAN,\n groupBys: [],\n filters: [],\n});\n\nexport const defaultTimeSeriesQuery: (dataSource: CloudMonitoringDatasource) => TimeSeriesQuery = (dataSource) => ({\n projectName: dataSource.getDefaultProject(),\n query: '',\n});\n\nfunction Editor({\n refId,\n query,\n datasource,\n onChange: onQueryChange,\n onRunQuery,\n customMetaData,\n variableOptionGroup,\n}: React.PropsWithChildren) {\n const onChangeTimeSeriesList = useCallback(\n (timeSeriesList: TimeSeriesList) => {\n onQueryChange({ ...query, timeSeriesList });\n onRunQuery();\n },\n [onQueryChange, onRunQuery, query]\n );\n\n const onChangeTimeSeriesQuery = useCallback(\n (timeSeriesQuery: TimeSeriesQuery) => {\n onQueryChange({ ...query, timeSeriesQuery });\n onRunQuery();\n },\n [onQueryChange, onRunQuery, query]\n );\n\n useEffect(() => {\n if (query.queryType === QueryType.TIME_SERIES_LIST && !query.timeSeriesList) {\n onChangeTimeSeriesList(defaultTimeSeriesList(datasource));\n }\n if (query.queryType === QueryType.TIME_SERIES_QUERY && !query.timeSeriesQuery) {\n onChangeTimeSeriesQuery(defaultTimeSeriesQuery(datasource));\n }\n }, [\n onChangeTimeSeriesList,\n onChangeTimeSeriesQuery,\n query.queryType,\n query.timeSeriesList,\n query.timeSeriesQuery,\n datasource,\n ]);\n\n return (\n \n {[QueryType.TIME_SERIES_LIST, QueryType.ANNOTATION].includes(query.queryType) && query.timeSeriesList && (\n onQueryChange({ ...query, aliasBy })}\n />\n )}\n\n {query.queryType === QueryType.TIME_SERIES_QUERY && query.timeSeriesQuery && (\n <>\n onChangeTimeSeriesQuery({ ...query.timeSeriesQuery!, projectName: projectName })}\n templateVariableOptions={variableOptionGroup.options}\n projectName={query.timeSeriesQuery.projectName!}\n />\n onChangeTimeSeriesQuery({ ...query.timeSeriesQuery!, query: q })}\n onRunQuery={onRunQuery}\n query={query.timeSeriesQuery.query}\n >\n onChangeTimeSeriesQuery({ ...query.timeSeriesQuery!, graphPeriod })}\n graphPeriod={query.timeSeriesQuery.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 menuPlacement=\"top\"\n />\n );\n}\n","import React, { 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, PreprocessorType, TimeSeriesList, ValueTypes } from '../types';\n\nconst NONE_OPTION = { label: 'None', value: PreprocessorType.None };\n\nexport interface Props {\n metricDescriptor?: MetricDescriptor;\n onChange: (query: TimeSeriesList) => void;\n query: TimeSeriesList;\n}\n\nexport const Preprocessor = ({ query, metricDescriptor, onChange }: Props) => {\n const options = useOptions(metricDescriptor);\n\n return (\n \n {\n const { perSeriesAligner: psa } = query;\n const { valueType, metricKind } = metricDescriptor ?? {};\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, { 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 {\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 { EditorHeader, FlexItem, InlineSelect } from '@grafana/experimental';\n\nimport { QUERY_TYPES } from '../constants';\nimport { CloudMonitoringQuery } from '../types';\n\nexport interface QueryEditorHeaderProps {\n query: CloudMonitoringQuery;\n onChange: (value: CloudMonitoringQuery) => void;\n onRunQuery: () => void;\n}\n\nexport const QueryHeader = (props: QueryEditorHeaderProps) => {\n const { query, onChange, onRunQuery } = props;\n const { queryType } = query;\n\n return (\n \n {\n onChange({ ...query, queryType: value! });\n onRunQuery();\n }}\n />\n \n \n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { QueryEditorProps, toOption } from '@grafana/data';\nimport { EditorRows } from '@grafana/experimental';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { CloudMonitoringQuery, QueryType, SLOQuery, CloudMonitoringOptions } from '../types';\n\nimport { QueryHeader } from './QueryHeader';\nimport { defaultQuery as defaultSLOQuery } from './SLOQueryEditor';\n\nimport { MetricQueryEditor, SLOQueryEditor } from './';\n\nexport type Props = QueryEditorProps;\n\nexport const QueryEditor = (props: Props) => {\n const { datasource, query: oldQ, onRunQuery, onChange } = props;\n // Migrate query if needed\n const [migrated, setMigrated] = useState(false);\n const query = useMemo(() => {\n if (!migrated) {\n setMigrated(true);\n const migratedQuery = datasource.migrateQuery(oldQ);\n // Update the query once the migrations have been completed.\n onChange({ ...migratedQuery });\n return migratedQuery;\n }\n return oldQ;\n }, [oldQ, datasource, onChange, migrated]);\n\n const sloQuery = { ...defaultSLOQuery(datasource), ...query.sloQuery };\n const onSLOQueryChange = (q: SLOQuery) => {\n onChange({ ...query, sloQuery: q });\n onRunQuery();\n };\n\n const meta = props.data?.series.length ? 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 // Use a known query type\n useEffect(() => {\n if (!Object.values(QueryType).includes(query.queryType)) {\n onChange({ ...query, queryType: QueryType.TIME_SERIES_LIST });\n }\n });\n const queryType = query.queryType;\n\n return (\n \n \n {queryType !== QueryType.SLO && (\n \n )}\n\n {queryType === QueryType.SLO && (\n onChange({ ...query, aliasBy })}\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 { LOOKBACK_PERIODS } from '../constants';\n\nexport interface Props {\n refId: string;\n onChange: (lookbackPeriod: string) => void;\n templateVariableOptions: Array>;\n current?: string;\n}\n\nexport const LookbackPeriodSelect = ({ refId, current, templateVariableOptions, onChange }: Props) => {\n const options = LOOKBACK_PERIODS.map((lp) => ({\n ...lp,\n label: lp.text,\n }));\n if (current && !options.find((op) => op.value === current)) {\n options.push({ label: current, text: current, value: current, hidden: false });\n }\n const visibleOptions = options.filter((lp) => !lp.hidden);\n\n return (\n \n s.value === current)}\n options={[\n {\n label: 'Template Variables',\n options: templateVariableOptions,\n },\n {\n label: 'Predefined periods',\n expanded: true,\n options: visibleOptions,\n },\n ]}\n onChange={({ value }) => onChange(value!)}\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 = ({ refId, query, templateVariableOptions, onChange, datasource }: Props) => {\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 = ({ refId, query, templateVariableOptions, onChange, datasource }: Props) => {\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 = ({ refId, query, templateVariableOptions, onChange, datasource }: Props) => {\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, SLO_BURN_RATE_SELECTOR_NAME } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { alignmentPeriodLabel } from '../functions';\nimport { AlignmentTypes, CustomMetaData, SLOQuery } from '../types';\n\nimport { AliasBy } from './AliasBy';\nimport { LookbackPeriodSelect } from './LookbackPeriodSelect';\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 aliasBy?: string;\n onChangeAliasBy: (aliasBy: string) => void;\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 lookbackPeriod: '',\n});\n\nexport function SLOQueryEditor({\n refId,\n query,\n datasource,\n onChange,\n variableOptionGroup,\n customMetaData,\n aliasBy,\n onChangeAliasBy,\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 {query.selectorName === SLO_BURN_RATE_SELECTOR_NAME && (\n onChange({ ...query, lookbackPeriod: lookbackPeriod })}\n current={query.lookbackPeriod}\n templateVariableOptions={variableOptionGroup.options}\n />\n )}\n\n \n \n onChange({ ...query, alignmentPeriod: period })}\n aligmentPeriods={ALIGNMENT_PERIODS}\n />\n \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, TimeRange } from '@grafana/data';\nimport { EditorField, EditorFieldGroup, EditorRow } from '@grafana/experimental';\nimport { getSelectStyles, Select, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { getAlignmentPickerData, getMetricType, setMetricType } from '../functions';\nimport { CustomMetaData, MetricDescriptor, MetricKind, PreprocessorType, TimeSeriesList, ValueTypes } from '../types';\n\nimport { AliasBy } from './AliasBy';\nimport { Alignment } from './Alignment';\nimport { GroupBy } from './GroupBy';\nimport { LabelFilter } from './LabelFilter';\nimport { defaultTimeSeriesList } from './MetricQueryEditor';\nimport { Preprocessor } from './Preprocessor';\nimport { Project } from './Project';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n onChange: (query: TimeSeriesList) => void;\n datasource: CloudMonitoringDatasource;\n query: TimeSeriesList;\n variableOptionGroup: SelectableValue;\n aliasBy?: string;\n onChangeAliasBy: (aliasBy: string) => void;\n}\n\nexport function Editor({\n refId,\n onChange,\n datasource,\n query,\n variableOptionGroup,\n customMetaData,\n aliasBy,\n onChangeAliasBy,\n}: React.PropsWithChildren) {\n const [labels, setLabels] = useState<{ [k: string]: any }>({});\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 const [timeRange, setTimeRange] = useState({ ...datasource.timeSrv.timeRange() });\n\n const useTime = (time: TimeRange) => {\n if (\n timeRange !== null &&\n (timeRange.raw.from.toString() !== time.raw.from.toString() ||\n timeRange.raw.to.toString() !== time.raw.to.toString())\n ) {\n setTimeRange({ ...time });\n }\n };\n\n useTime(datasource.timeSrv.timeRange());\n\n const theme = useTheme2();\n const selectStyles = getSelectStyles(theme);\n\n const customStyle = useStyles2(getStyles);\n\n const { projectName, groupBys, crossSeriesReducer } = query;\n const metricType = getMetricType(query);\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 if (projectName && metricType) {\n datasource\n .getLabels(metricType, refId, projectName, { groupBys, crossSeriesReducer }, timeRange)\n .then((labels) => setLabels(labels));\n }\n }, [datasource, groupBys, metricType, projectName, refId, crossSeriesReducer, timeRange]);\n\n useEffect(() => {\n const loadMetricDescriptors = async () => {\n if (projectName) {\n const metricDescriptors = await datasource.getMetricTypes(projectName);\n const services = getServicesList(metricDescriptors);\n setMetricDescriptors(metricDescriptors);\n setServices(services);\n }\n };\n loadMetricDescriptors();\n }, [datasource, projectName, customStyle, selectStyles.optionDescription]);\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 metrics = getMetricsList(metricDescriptors);\n const service = metrics.length > 0 ? metrics[0].service : '';\n const metricDescriptor = getSelectedMetricDescriptor(metricDescriptors, metricType);\n setMetricDescriptor(metricDescriptor);\n setMetrics(metrics);\n setService(service);\n }, [metricDescriptors, getSelectedMetricDescriptor, metricType, customStyle, selectStyles.optionDescription]);\n\n const onServiceChange = ({ value: service }: SelectableValue) => {\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 // On service change reset all query values except the project name\n query.filters = [];\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 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 const onMetricTypeChange = ({ value }: SelectableValue) => {\n const metricDescriptor = getSelectedMetricDescriptor(metricDescriptors, value!);\n setMetricDescriptor(metricDescriptor);\n const { metricKind, valueType } = metricDescriptor;\n const preprocessor =\n metricKind === MetricKind.GAUGE || valueType === ValueTypes.DISTRIBUTION\n ? PreprocessorType.None\n : PreprocessorType.Rate;\n const { perSeriesAligner } = getAlignmentPickerData(valueType, metricKind, query.perSeriesAligner, preprocessor);\n\n // On metric name change reset query to defaults except project name and filters\n Object.assign(query, {\n ...defaultTimeSeriesList(datasource),\n projectName: query.projectName,\n filters: query.filters,\n });\n onChange({\n ...setMetricType(\n {\n ...query,\n perSeriesAligner,\n },\n value!\n ),\n preprocessor,\n });\n };\n\n return (\n <>\n \n \n {\n onChange({ ...query, projectName });\n }}\n />\n\n \n s.value === service)}\n options={[\n {\n label: 'Template Variables',\n options: variableOptionGroup.options,\n },\n ...services,\n ]}\n placeholder=\"Select Services\"\n inputId={`${refId}-service`}\n />\n \n \n s.value === metricType)}\n options={[\n {\n label: 'Template Variables',\n options: variableOptionGroup.options,\n },\n ...metrics,\n ]}\n placeholder=\"Select Metric\"\n inputId={`${refId}-select-metric`}\n />\n \n \n \n\n <>\n onChange({ ...query, filters })}\n variableOptionGroup={variableOptionGroup}\n />\n \n \n \n \n \n \n \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\nexport const VisualMetricQueryEditor = React.memo(Editor);\n","import React from 'react';\n\nexport const AnnotationsHelp = () => {\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 Patterns:\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 from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { InlineField, Select } from '@grafana/ui';\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 = ({\n label,\n onChange,\n value,\n options,\n allowCustomValue = false,\n}: VariableQueryFieldProps) => {\n return (\n \n onChange(value!)}\n options={options}\n />\n \n );\n};\n","import { 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;\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\n// Usable units: ns, us, ms, s, m, h\n// ref. https://cloud.google.com/stackdriver/docs/solutions/slo-monitoring/api/timeseries-selectors#tss-names-args\nexport const LOOKBACK_PERIODS: periodOption[] = [\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: '24h', value: '24h' },\n { text: '72h', value: '72h' },\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 SLO_BURN_RATE_SELECTOR_NAME = 'select_slo_burn_rate';\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 { label: 'SLO Burn Rate', value: SLO_BURN_RATE_SELECTOR_NAME },\n];\n\nexport const QUERY_TYPES = [\n { label: 'Builder', value: QueryType.TIME_SERIES_LIST },\n { label: 'MQL', value: QueryType.TIME_SERIES_QUERY },\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 {\n AlignmentTypes,\n CustomMetaData,\n MetricDescriptor,\n MetricKind,\n PreprocessorType,\n TimeSeriesList,\n ValueTypes,\n} from './types';\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 templateSrv: TemplateSrv = getTemplateSrv();\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\nexport const getMetricType = (query?: TimeSeriesList) => {\n const metricTypeKey = query?.filters?.findIndex((f) => f === 'metric.type')!;\n // filters are in the format [key, operator, value] so we need to add 2 to get the value\n const metricType = query?.filters?.[metricTypeKey + 2];\n return metricType || '';\n};\n\nexport const setMetricType = (query: TimeSeriesList, metricType: string) => {\n if (!query.filters) {\n query.filters = ['metric.type', '=', metricType];\n return query;\n }\n const metricTypeKey = query?.filters?.findIndex((f) => f === 'metric.type')!;\n if (metricTypeKey === -1) {\n query.filters.push('metric.type', '=', metricType);\n } else {\n // filters are in the format [key, operator, value] so we need to add 2 to get the value\n query.filters![metricTypeKey + 2] = metricType;\n }\n return query;\n};\n","import { DataQuery, SelectableValue } from '@grafana/data';\nimport { DataSourceOptions, DataSourceSecureJsonData } from '@grafana/google-sdk';\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 TIME_SERIES_LIST = 'timeSeriesList',\n TIME_SERIES_QUERY = 'timeSeriesQuery',\n SLO = 'slo',\n ANNOTATION = 'annotation',\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\n// deprecated: use TimeSeriesList instead\n// left here for migration purposes\nexport interface MetricQuery {\n projectName: string;\n perSeriesAligner?: string;\n alignmentPeriod?: string;\n aliasBy?: string;\n editorMode: string;\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 TimeSeriesList {\n projectName: string;\n crossSeriesReducer: string;\n alignmentPeriod?: string;\n perSeriesAligner?: string;\n groupBys?: string[];\n filters?: string[];\n view?: string;\n secondaryCrossSeriesReducer?: string;\n secondaryAlignmentPeriod?: string;\n secondaryPerSeriesAligner?: string;\n secondaryGroupBys?: string[];\n // preprocessor is not part of the API, but is used to store the preprocessor\n // and not affect the UI for the rest of parameters\n preprocessor?: PreprocessorType;\n}\n\nexport interface TimeSeriesQuery {\n projectName: string;\n query: string;\n // To disable the graphPeriod, it should explictly be set to 'disabled'\n graphPeriod?: 'disabled' | string;\n}\n\nexport interface AnnotationQuery extends TimeSeriesList {\n title?: string;\n text?: string;\n}\n\nexport interface SLOQuery {\n projectName: string;\n perSeriesAligner?: string;\n alignmentPeriod?: string;\n selectorName: string;\n serviceId: string;\n serviceName: string;\n sloId: string;\n sloName: string;\n goal?: number;\n lookbackPeriod?: string;\n}\n\nexport interface CloudMonitoringQuery extends DataQuery {\n aliasBy?: string;\n datasourceId?: number; // Should not be necessary anymore\n queryType: QueryType;\n timeSeriesList?: TimeSeriesList | AnnotationQuery;\n timeSeriesQuery?: TimeSeriesQuery;\n sloQuery?: SLOQuery;\n intervalMs: number;\n}\n\nexport interface CloudMonitoringOptions extends DataSourceOptions {\n gceDefaultProject?: string;\n}\n\nexport interface CloudMonitoringSecureJsonData extends DataSourceSecureJsonData {}\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"],"names":["Aggregation","props","aggOptions","useAggregationOptionsByMetric","selected","useSelectedFromOptions","value","metricDescriptor","valueType","metricKind","a","s","AliasBy","refId","onChange","alias","setAlias","propagateOnChange","e","Alignment","templateVariableOptions","query","customMetaData","datasource","preprocessor","alignmentLabel","q","period","AlignmentFunction","inputId","psa","perSeriesAligner","alignOptions","GroupBy","groupBys","variableOptionGroup","options","o","crossSeriesReducer","DEFAULT_OPERATOR","DEFAULT_CONDITION","filtersToStringArray","filters","key","operator","condition","operators","protectedFilterKeys","LabelFilter","labels","filterArray","_onChange","rawFilters","protectedFilters","getOptions","op","opp","valueOptions","items","renderItem","item","onChangeItem","onDeleteItem","v","MQLQueryEditor","onRunQuery","onKeyDown","event","GraphPeriod","graphPeriod","Switch","defaultTimeSeriesList","dataSource","defaultTimeSeriesQuery","Editor","onQueryChange","onChangeTimeSeriesList","timeSeriesList","onChangeTimeSeriesQuery","timeSeriesQuery","VisualMetricQueryEditor","aliasBy","Project","projectName","MetricQueryEditor","PeriodSelect","current","disabled","aligmentPeriods","ap","visibleOptions","NONE_OPTION","Preprocessor","useOptions","projects","setProjects","projectsWithTemplateVariables","QueryHeader","queryType","QueryEditor","oldQ","migrated","setMigrated","migratedQuery","sloQuery","onSLOQueryChange","LookbackPeriodSelect","lp","Select","SLO","slos","setSLOs","serviceId","sloIds","sloId","sloName","slo","Selector","selectorName","Service","services","setServices","serviceName","defaultQuery","SLOQueryEditor","onChangeAliasBy","lookbackPeriod","setLabels","metricDescriptors","setMetricDescriptors","setMetricDescriptor","metrics","setMetrics","service","setService","timeRange","setTimeRange","time","theme","selectStyles","customStyle","getStyles","metricType","templateSrv","getSelectedMetricDescriptor","md","getServicesList","selectedMetricDescriptor","m","onServiceChange","onMetricTypeChange","AnnotationsHelp","VariableQueryField","label","allowCustomValue","InlineField","INPUT_WIDTH","LABEL_WIDTH","INNER_LABEL_WIDTH","SELECT_WIDTH","ALIGNMENTS","AGGREGATIONS","ALIGNMENT_PERIODS","GRAPH_PERIODS","LOOKBACK_PERIODS","SYSTEM_LABELS","SLO_BURN_RATE_SELECTOR_NAME","SELECTORS","QUERY_TYPES","extractServicesFromMetricDescriptors","getMetricTypesByService","getMetricTypes","interpolatedMetricType","selectedService","metricTypes","metricTypeExistInArray","metricTypeByService","getAlignmentOptionsByMetric","metricValueType","i","getAggregationOptionsByMetric","getLabelKeys","selectedMetricType","getAlignmentPickerData","option","labelsToGroupedOptions","groups","acc","curr","arr","group","stringArrayToFilters","alignmentPeriodLabel","alignmentPeriod","alignment","seconds","getMetricType","metricTypeKey","f","setMetricType","MetricFindQueryTypes","QueryType","PreprocessorType","MetricKind","ValueTypes","AlignmentTypes"],"sourceRoot":""}