{"version":3,"file":"9467.c601ad5ab55cbeb3fb20.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/Metrics.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","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 React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, 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 { debounce } from 'lodash';\nimport React, { FunctionComponent, useState } from 'react';\n\nimport { EditorField, Input } from '@grafana/ui';\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 { EditorField, EditorFieldGroup } from '@grafana/ui';\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 { 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, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorFieldGroup, 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, EditorField, EditorList, EditorRow, 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 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 { EditorField, EditorRow, 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: 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, { useCallback, useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorRows } from '@grafana/ui';\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';\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 { css } from '@emotion/css';\nimport { startCase, uniqBy } from 'lodash';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { EditorField, EditorFieldGroup, EditorRow, 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 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 }: 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, { 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, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, 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, { useEffect, useMemo, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, 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 { EditorHeader, FlexItem, InlineSelect, 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, { PureComponent } from 'react';\n\nimport { QueryEditorProps, toOption } from '@grafana/data';\nimport { EditorRows } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { CloudMonitoringQuery, MetricQuery, QueryType, SLOQuery, CloudMonitoringOptions } from '../types';\n\nimport { defaultQuery } from './MetricQueryEditor';\nimport { QueryHeader } from './QueryHeader';\nimport { defaultQuery as defaultSLOQuery } from './SLOQueryEditor';\n\nimport { MetricQueryEditor, 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 (![QueryType.METRICS, QueryType.SLO].includes(this.props.query.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 (\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 from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, 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 { Select, EditorField } 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, 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, 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/ui';\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}\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}: 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 onChange({ ...query, aliasBy })} />\n \n \n );\n}\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorRow } from '@grafana/ui';\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, { 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 { 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 { 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\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: '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\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","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 lookbackPeriod?: string;\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":["Aggregation","props","aggOptions","useAggregationOptionsByMetric","selected","useSelectedFromOptions","label","width","onChange","value","options","templateVariableOptions","expanded","placeholder","inputId","refId","metricDescriptor","valueType","metricKind","useMemo","getAggregationOptionsByMetric","map","a","text","find","s","crossSeriesReducer","AliasBy","alias","setAlias","useState","propagateOnChange","debounce","e","target","I","id","Alignment","query","customMetaData","datasource","alignmentLabel","alignmentPeriodLabel","tooltip","current","alignmentPeriod","period","aligmentPeriods","ALIGNMENT_PERIODS","AlignmentFunction","perSeriesAligner","psa","preprocessor","alignOptions","getAlignmentPickerData","GroupBy","labels","groupBys","variableOptionGroup","labelsToGroupedOptions","SYSTEM_LABELS","o","DEFAULT_OPERATOR","DEFAULT_CONDITION","operators","toOption","LabelFilter","filters","filterArray","_onChange","stringArrayToFilters","Object","keys","getOptions","key","some","op","opp","push","valueOptions","hasOwnProperty","items","renderItem","item","onChangeItem","onDeleteItem","operator","condition","spacing","formatCreateLabel","v","allowCustomValue","icon","variant","onClick","type","flatMap","slice","filtersToStringArray","MQLQueryEditor","onRunQuery","name","className","rows","onBlur","currentTarget","onKeyDown","event","shiftKey","ctrlKey","preventDefault","GraphPeriod","graphPeriod","EditorRow","EditorField","htmlFor","Switch","checked","disabled","GRAPH_PERIODS","defaultState","defaultQuery","dataSource","editorMode","EditorMode","projectName","getDefaultProject","metricType","MetricKind","AlignmentTypes","aliasBy","PreprocessorType","Editor","onQueryChange","state","setState","useEffect","getLabels","then","prevState","useCallback","metricQuery","onMetricTypeChange","ValueTypes","EditorRows","VisualMetricQueryEditor","q","MetricQueryEditor","React","Metrics","metricDescriptors","setMetricDescriptors","setMetricDescriptor","metrics","setMetrics","services","setServices","service","setService","theme","useTheme2","selectStyles","getSelectStyles","customStyle","useStyles2","getStyles","onProjectChange","children","templateSrv","getSelectedMetricDescriptor","md","replace","async","getMetricTypes","getServicesList","loadMetricDescriptors","optionDescription","selectedMetricDescriptor","filter","m","displayName","component","description","getMetricsList","length","startCase","serviceShortName","uniqBy","css","colors","secondary","PeriodSelect","ap","visibleOptions","hidden","NONE_OPTION","Preprocessor","useOptions","Project","projects","setProjects","getProjects","projectsWithTemplateVariables","EDITOR_MODES","QueryHeader","sloQuery","queryType","EditorHeader","InlineSelect","QUERY_TYPES","FlexItem","grow","QueryType","RadioButtonGroup","size","QueryEditor","PureComponent","this","includes","ensureGCEDefaultProject","prop","render","defaultSLOQuery","meta","data","series","custom","getVariables","LookbackPeriodSelect","LOOKBACK_PERIODS","lp","Select","SLO","slos","setSLOs","serviceId","getServiceLevelObjectives","sloIds","sloId","sloName","slo","goal","Selector","SELECTORS","selectorName","Service","getSLOServices","serviceName","lookbackPeriod","SLOQueryEditor","SLO_BURN_RATE_SELECTOR_NAME","EditorFieldGroup","metric","AnnotationsHelp","VariableQueryField","InlineField","labelWidth","GoogleAuthType","ALIGNMENTS","valueTypes","metricKinds","AGGREGATIONS","extractServicesFromMetricDescriptors","getMetricTypesByService","interpolatedMetricType","selectedService","metricTypes","metricTypeExistInArray","metricTypeByService","selectedMetricType","getAlignmentOptionsByMetric","metricValueType","i","indexOf","getLabelKeys","getTemplateSrv","option","groups","reduce","acc","curr","arr","split","group","initial","join","entries","chunk","alignment","seconds","parseInt","rangeUtil","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","TextArea","autoFocus","Button","color","primary","isObject","T","onReset","Input","defaultProject","readOnly","addonAfter","Tooltip","content","exports","JWT","GCE","k","ariaLabel","ConnectionConfig","onOptionsChange","jsonData","secureJsonFields","d","secureJsonData","authenticationType","f","FieldSet","onUpdateDatasourceJsonDataOption","marginTop","rel","href","Alert","title","severity","module"],"sourceRoot":""}