{"version":3,"file":"7796.9249106eca8b87f2f6d2.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.4-b5e2659701-f8a1abfba7.zip/node_modules/@grafana/google-sdk/dist/index.production.js","webpack://grafana/../../opt/drone/yarncache/@grafana-google-sdk-npm-0.0.4-b5e2659701-f8a1abfba7.zip/node_modules/@grafana/google-sdk/index.js"],"sourcesContent":["import React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { Select } from '@grafana/ui';\n\nimport { getAggregationOptionsByMetric } from '../functions';\nimport { MetricDescriptor, MetricKind, ValueTypes } from '../types';\n\nexport interface Props {\n  refId: string;\n  onChange: (metricDescriptor: string) => void;\n  metricDescriptor?: MetricDescriptor;\n  crossSeriesReducer: string;\n  groupBys: string[];\n  templateVariableOptions: Array<SelectableValue<string>>;\n}\n\nexport const Aggregation: FC<Props> = (props) => {\n  const aggOptions = useAggregationOptionsByMetric(props);\n  const selected = useSelectedFromOptions(aggOptions, props);\n\n  return (\n    <EditorField label=\"Group by function\" data-testid=\"cloud-monitoring-aggregation\">\n      <Select\n        width=\"auto\"\n        onChange={({ value }) => 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    </EditorField>\n  );\n};\n\nconst useAggregationOptionsByMetric = ({ metricDescriptor }: Props): Array<SelectableValue<string>> => {\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<SelectableValue<string>>, 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 } 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: FunctionComponent<Props> = ({ 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    <EditorField label=\"Alias by\">\n      <Input id={`${refId}-alias-by`} value={alias} onChange={onChange} />\n    </EditorField>\n  );\n};\n","import React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorFieldGroup } from '@grafana/experimental';\n\nimport { ALIGNMENT_PERIODS } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { alignmentPeriodLabel } from '../functions';\nimport { CustomMetaData, MetricQuery, SLOQuery } from '../types';\n\nimport { AlignmentFunction } from './AlignmentFunction';\nimport { PeriodSelect } from './PeriodSelect';\n\nexport interface Props {\n  refId: string;\n  onChange: (query: MetricQuery | SLOQuery) => void;\n  query: MetricQuery;\n  templateVariableOptions: Array<SelectableValue<string>>;\n  customMetaData: CustomMetaData;\n  datasource: CloudMonitoringDatasource;\n}\n\nexport const Alignment: FC<Props> = ({\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    <EditorFieldGroup>\n      <EditorField\n        label=\"Alignment function\"\n        tooltip=\"The process of alignment consists of collecting all data points received in a fixed length of time, applying a function to combine those data points, and assigning a timestamp to the result.\"\n      >\n        <AlignmentFunction\n          inputId={`${refId}-alignment-function`}\n          templateVariableOptions={templateVariableOptions}\n          query={query}\n          onChange={onChange}\n        />\n      </EditorField>\n      <EditorField label=\"Alignment period\" tooltip={alignmentLabel}>\n        <PeriodSelect\n          inputId={`${refId}-alignment-period`}\n          templateVariableOptions={templateVariableOptions}\n          current={query.alignmentPeriod}\n          onChange={(period) => onChange({ ...query, alignmentPeriod: period })}\n          aligmentPeriods={ALIGNMENT_PERIODS}\n        />\n      </EditorField>\n    </EditorFieldGroup>\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<SelectableValue<string>>;\n}\n\nexport const AlignmentFunction: FC<Props> = ({ 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    <Select\n      onChange={({ value }) => 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, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField, EditorFieldGroup } from '@grafana/experimental';\nimport { MultiSelect } from '@grafana/ui';\n\nimport { SYSTEM_LABELS } from '../constants';\nimport { labelsToGroupedOptions } from '../functions';\nimport { MetricDescriptor, MetricQuery } from '../types';\n\nimport { Aggregation } from './Aggregation';\n\nexport interface Props {\n  refId: string;\n  variableOptionGroup: SelectableValue<string>;\n  labels: string[];\n  metricDescriptor?: MetricDescriptor;\n  onChange: (query: MetricQuery) => void;\n  query: MetricQuery;\n}\n\nexport const GroupBy: FunctionComponent<Props> = ({\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    <EditorFieldGroup>\n      <EditorField\n        label=\"Group by\"\n        tooltip=\"You can reduce the amount of data returned for a metric by combining different time series. To combine multiple time series, you can specify a grouping and a function. Grouping is done on the basis of labels. The grouping function is used to combine the time series in the group into a single time series.\"\n      >\n        <MultiSelect\n          inputId={`${refId}-group-by`}\n          width=\"auto\"\n          placeholder=\"Choose label\"\n          options={options}\n          value={query.groupBys ?? []}\n          onChange={(options) => {\n            onChange({ ...query, groupBys: options.map((o) => o.value!) });\n          }}\n          menuPlacement=\"top\"\n        />\n      </EditorField>\n      <Aggregation\n        metricDescriptor={metricDescriptor}\n        templateVariableOptions={variableOptionGroup.options}\n        crossSeriesReducer={query.crossSeriesReducer}\n        groupBys={query.groupBys ?? []}\n        onChange={(crossSeriesReducer) => onChange({ ...query, crossSeriesReducer })}\n        refId={refId}\n      />\n    </EditorFieldGroup>\n  );\n};\n","import React, { FunctionComponent, 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<string>;\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<Props> = ({\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<Filter>) => {\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<Partial<Filter>>) => {\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<Filter>, 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      <HorizontalGroup spacing=\"xs\" width=\"auto\">\n        <Select\n          aria-label=\"Filter label key\"\n          formatCreateLabel={(v) => `Use label key: ${v}`}\n          allowCustomValue\n          value={key}\n          options={options}\n          onChange={({ value: key = '' }) => onChangeItem({ key, operator, value, condition })}\n        />\n        <Select\n          value={operator}\n          options={operators}\n          onChange={({ value: operator = DEFAULT_OPERATOR }) => onChangeItem({ key, operator, value, condition })}\n        />\n        <Select\n          aria-label=\"Filter label value\"\n          placeholder=\"add filter value\"\n          formatCreateLabel={(v) => `Use label value: ${v}`}\n          allowCustomValue\n          value={value}\n          options={valueOptions}\n          onChange={({ value = '' }) => onChangeItem({ key, operator, value, condition })}\n        />\n        <AccessoryButton aria-label=\"Remove\" icon=\"times\" variant=\"secondary\" onClick={onDeleteItem} type=\"button\" />\n      </HorizontalGroup>\n    );\n  };\n\n  return (\n    <EditorRow>\n      <EditorField\n        label=\"Filter\"\n        tooltip=\"To reduce the amount of data charted, apply a filter. A filter has three components: a label, a comparison, and a value. The comparison can be an equality, inequality, or regular expression.\"\n      >\n        <EditorList items={filters} renderItem={renderItem} onChange={onChange} />\n      </EditorField>\n    </EditorRow>\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<Props>) {\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      <TextArea\n        name=\"Query\"\n        className=\"slate-query-field\"\n        value={query}\n        rows={10}\n        placeholder=\"Enter a Cloud Monitoring MQL query (Run with Shift+Enter)\"\n        onBlur={onRunQuery}\n        onChange={(e) => 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 } 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<string>;\n  graphPeriod?: string;\n}\n\nexport const GraphPeriod: FunctionComponent<Props> = ({ refId, onChange, graphPeriod, variableOptionGroup }) => {\n  return (\n    <EditorRow>\n      <EditorField\n        label=\"Graph period\"\n        htmlFor={`${refId}-graph-period`}\n        tooltip={\n          <>\n            Set <code>graph_period</code> which forces a preferred period between points. Automatically set to the\n            current interval if left blank.\n          </>\n        }\n      >\n        <HorizontalGroup>\n          <Switch\n            data-testid={`${refId}-switch-graph-period`}\n            value={graphPeriod !== 'disabled'}\n            onChange={(e) => onChange(e.currentTarget.checked ? '' : 'disabled')}\n          />\n          <PeriodSelect\n            inputId={`${refId}-graph-period`}\n            templateVariableOptions={variableOptionGroup.options}\n            current={graphPeriod}\n            onChange={onChange}\n            disabled={graphPeriod === 'disabled'}\n            aligmentPeriods={GRAPH_PERIODS}\n          />\n        </HorizontalGroup>\n      </EditorField>\n    </EditorRow>\n  );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorRows } from '@grafana/experimental';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { getAlignmentPickerData } from '../functions';\nimport {\n  AlignmentTypes,\n  CustomMetaData,\n  EditorMode,\n  MetricDescriptor,\n  MetricKind,\n  MetricQuery,\n  PreprocessorType,\n  SLOQuery,\n  ValueTypes,\n} from '../types';\n\nimport { GraphPeriod } from './GraphPeriod';\nimport { MQLQueryEditor } from './MQLQueryEditor';\nimport { VisualMetricQueryEditor } from './VisualMetricQueryEditor';\n\nexport interface Props {\n  refId: string;\n  customMetaData: CustomMetaData;\n  variableOptionGroup: SelectableValue<string>;\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_NONE',\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<Props>) {\n  const [state, setState] = useState<State>(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    <EditorRows>\n      {editorMode === EditorMode.Visual && (\n        <VisualMetricQueryEditor\n          refId={refId}\n          labels={state.labels}\n          variableOptionGroup={variableOptionGroup}\n          customMetaData={customMetaData}\n          onMetricTypeChange={onMetricTypeChange}\n          onChange={onChange}\n          datasource={datasource}\n          query={query}\n        />\n      )}\n\n      {editorMode === EditorMode.MQL && (\n        <>\n          <MQLQueryEditor\n            onChange={(q: string) => onQueryChange({ ...query, query: q })}\n            onRunQuery={onRunQuery}\n            query={query.query}\n          ></MQLQueryEditor>\n          <GraphPeriod\n            onChange={(graphPeriod: string) => onQueryChange({ ...query, graphPeriod })}\n            graphPeriod={query.graphPeriod}\n            refId={refId}\n            variableOptionGroup={variableOptionGroup}\n          />\n        </>\n      )}\n    </EditorRows>\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 } from '@grafana/experimental';\nimport { getSelectStyles, Select, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { MetricDescriptor, MetricQuery } from '../types';\n\nimport { Project } from './Project';\n\nexport interface Props {\n  refId: string;\n  onChange: (metricDescriptor: MetricDescriptor) => void;\n  templateVariableOptions: Array<SelectableValue<string>>;\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<MetricDescriptor[]>([]);\n  const [metricDescriptor, setMetricDescriptor] = useState<MetricDescriptor>();\n  const [metrics, setMetrics] = useState<Array<SelectableValue<string>>>([]);\n  const [services, setServices] = useState<Array<SelectableValue<string>>>([]);\n  const [service, setService] = useState<string>('');\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              <div>\n                <div className={customStyle}>{m.type}</div>\n                <div className={selectStyles.optionDescription}>{m.description}</div>\n              </div>\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<string>) => {\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      <EditorRow>\n        <EditorFieldGroup>\n          <Project\n            refId={refId}\n            templateVariableOptions={templateVariableOptions}\n            projectName={projectName}\n            datasource={datasource}\n            onChange={(projectName) => {\n              onProjectChange({ ...query, projectName });\n            }}\n          />\n\n          <EditorField label=\"Service\" width=\"auto\">\n            <Select\n              width=\"auto\"\n              onChange={onServiceChange}\n              value={[...services, ...templateVariableOptions].find((s) => 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          </EditorField>\n          <EditorField label=\"Metric name\" width=\"auto\">\n            <Select\n              width=\"auto\"\n              onChange={onMetricTypeChange}\n              value={[...metrics, ...templateVariableOptions].find((s) => 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          </EditorField>\n        </EditorFieldGroup>\n      </EditorRow>\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<SelectableValue<string>>;\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    <Select\n      width=\"auto\"\n      onChange={({ value }) => 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, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorField } from '@grafana/experimental';\nimport { RadioButtonGroup } from '@grafana/ui';\n\nimport { getAlignmentPickerData } from '../functions';\nimport { MetricDescriptor, MetricKind, MetricQuery, PreprocessorType, ValueTypes } from '../types';\n\nconst NONE_OPTION = { label: 'None', value: PreprocessorType.None };\n\nexport interface Props {\n  metricDescriptor?: MetricDescriptor;\n  onChange: (query: MetricQuery) => void;\n  query: MetricQuery;\n}\n\nexport const Preprocessor: FunctionComponent<Props> = ({ query, metricDescriptor, onChange }) => {\n  const options = useOptions(metricDescriptor);\n  return (\n    <EditorField\n      label=\"Pre-processing\"\n      tooltip=\"Preprocessing options are displayed when the selected metric has a metric kind of delta or cumulative. The specific options available are determined by the metric's value type. If you select 'Rate', data points are aligned and converted to a rate per time series. If you select 'Delta', data points are aligned by their delta (difference) per time series\"\n    >\n      <RadioButtonGroup\n        onChange={(value: PreprocessorType) => {\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    </EditorField>\n  );\n};\n\nconst useOptions = (metricDescriptor?: MetricDescriptor): Array<SelectableValue<PreprocessorType>> => {\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<SelectableValue<string>>;\n  projectName: string;\n}\n\nexport function Project({ refId, projectName, datasource, onChange, templateVariableOptions }: Props) {\n  const [projects, setProjects] = useState<Array<SelectableValue<string>>>([]);\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    <EditorField label=\"Project\">\n      <Select\n        width=\"auto\"\n        allowCustomValue\n        formatCreateLabel={(v) => `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    </EditorField>\n  );\n}\n","import React from 'react';\n\nimport { EditorHeader, FlexItem, InlineSelect } from '@grafana/experimental';\nimport { RadioButtonGroup } from '@grafana/ui';\n\nimport { QUERY_TYPES } from '../constants';\nimport { EditorMode, CloudMonitoringQuery, QueryType, SLOQuery, MetricQuery } from '../types';\n\nexport interface QueryEditorHeaderProps {\n  query: CloudMonitoringQuery;\n  metricQuery: MetricQuery;\n  sloQuery: SLOQuery;\n  onChange: (value: CloudMonitoringQuery) => void;\n  onRunQuery: () => void;\n}\n\nconst EDITOR_MODES = [\n  { label: 'Builder', value: EditorMode.Visual },\n  { label: 'MQL', value: EditorMode.MQL },\n];\n\nexport const QueryHeader = (props: QueryEditorHeaderProps) => {\n  const { query, metricQuery, sloQuery, onChange, onRunQuery } = props;\n  const { queryType } = query;\n  const { editorMode } = metricQuery;\n\n  return (\n    <EditorHeader>\n      <InlineSelect\n        label=\"Query type\"\n        options={QUERY_TYPES}\n        value={queryType}\n        onChange={({ value }) => {\n          onChange({ ...query, sloQuery, queryType: value! });\n          onRunQuery();\n        }}\n      />\n      <FlexItem grow={1} />\n      {queryType !== QueryType.SLO && (\n        <RadioButtonGroup\n          size=\"sm\"\n          options={EDITOR_MODES}\n          value={editorMode || EditorMode.Visual}\n          onChange={(value) => {\n            onChange({\n              ...query,\n              metricQuery: {\n                ...metricQuery,\n                editorMode: value,\n              },\n            });\n          }}\n        />\n      )}\n    </EditorHeader>\n  );\n};\n","import React, { PureComponent } from 'react';\n\nimport { QueryEditorProps, toOption } from '@grafana/data';\nimport { EditorRows } from '@grafana/experimental';\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<CloudMonitoringDatasource, CloudMonitoringQuery, CloudMonitoringOptions>;\n\nexport class QueryEditor extends PureComponent<Props> {\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      <EditorRows>\n        <QueryHeader\n          query={query}\n          metricQuery={metricQuery}\n          sloQuery={sloQuery}\n          onChange={onChange}\n          onRunQuery={onRunQuery}\n        />\n        {queryType === QueryType.METRICS && (\n          <MetricQueryEditor\n            refId={query.refId}\n            variableOptionGroup={variableOptionGroup}\n            customMetaData={customMetaData}\n            onChange={(metricQuery: MetricQuery) => {\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          <SLOQueryEditor\n            refId={query.refId}\n            variableOptionGroup={variableOptionGroup}\n            customMetaData={customMetaData}\n            onChange={(query: SLOQuery) => this.onQueryChange('sloQuery', query)}\n            onRunQuery={onRunQuery}\n            datasource={datasource}\n            query={sloQuery}\n          />\n        )}\n      </EditorRows>\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<SelectableValue<string>>;\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    <EditorField label=\"Lookback period\" htmlFor={`${refId}-lookback-period`}>\n      <Select\n        inputId={`${refId}-lookback-period`}\n        width=\"auto\"\n        allowCustomValue\n        value={[...options, ...templateVariableOptions].find((s) => 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    </EditorField>\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<SelectableValue<string>>;\n  datasource: CloudMonitoringDatasource;\n}\n\nexport const SLO = ({ refId, query, templateVariableOptions, onChange, datasource }: Props) => {\n  const [slos, setSLOs] = useState<Array<SelectableValue<string>>>([]);\n  const { projectName, serviceId } = query;\n\n  useEffect(() => {\n    if (!projectName || !serviceId) {\n      return;\n    }\n\n    datasource.getServiceLevelObjectives(projectName, serviceId).then((sloIds: Array<SelectableValue<string>>) => {\n      setSLOs([\n        {\n          label: 'Template Variables',\n          options: templateVariableOptions,\n        },\n        ...sloIds,\n      ]);\n    });\n  }, [datasource, projectName, serviceId, templateVariableOptions]);\n\n  return (\n    <EditorField label=\"SLO\">\n      <Select\n        inputId={`${refId}-slo`}\n        width=\"auto\"\n        allowCustomValue\n        value={query?.sloId && { value: query?.sloId, label: query?.sloName || query?.sloId }}\n        placeholder=\"Select SLO\"\n        options={slos}\n        onChange={async ({ value: sloId = '', label: sloName = '' }) => {\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    </EditorField>\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<SelectableValue<string>>;\n  datasource: CloudMonitoringDatasource;\n}\n\nexport const Selector = ({ refId, query, templateVariableOptions, onChange, datasource }: Props) => {\n  return (\n    <EditorField label=\"Selector\" htmlFor={`${refId}-slo-selector`}>\n      <Select\n        inputId={`${refId}-slo-selector`}\n        width=\"auto\"\n        allowCustomValue\n        value={[...SELECTORS, ...templateVariableOptions].find((s) => 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    </EditorField>\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<SelectableValue<string>>;\n  datasource: CloudMonitoringDatasource;\n}\n\nexport const Service = ({ refId, query, templateVariableOptions, onChange, datasource }: Props) => {\n  const [services, setServices] = useState<Array<SelectableValue<string>>>([]);\n  const { projectName } = query;\n\n  useEffect(() => {\n    if (!projectName) {\n      return;\n    }\n\n    datasource.getSLOServices(projectName).then((services: Array<SelectableValue<string>>) => {\n      setServices([\n        {\n          label: 'Template Variables',\n          options: templateVariableOptions,\n        },\n        ...services,\n      ]);\n    });\n  }, [datasource, projectName, templateVariableOptions]);\n\n  return (\n    <EditorField label=\"Service\">\n      <Select\n        inputId={`${refId}-slo-service`}\n        width=\"auto\"\n        allowCustomValue\n        value={query?.serviceId && { value: query?.serviceId, label: query?.serviceName || query?.serviceId }}\n        placeholder=\"Select service\"\n        options={services}\n        onChange={({ value: serviceId = '', label: serviceName = '' }) =>\n          onChange({ ...query, serviceId, serviceName, sloId: '' })\n        }\n      />\n    </EditorField>\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<string>;\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<Props>) {\n  const alignmentLabel = useMemo(() => alignmentPeriodLabel(customMetaData, datasource), [customMetaData, datasource]);\n  return (\n    <>\n      <EditorRow>\n        <Project\n          refId={refId}\n          templateVariableOptions={variableOptionGroup.options}\n          projectName={query.projectName}\n          datasource={datasource}\n          onChange={(projectName) => onChange({ ...query, projectName })}\n        />\n        <Service\n          refId={refId}\n          datasource={datasource}\n          templateVariableOptions={variableOptionGroup.options}\n          query={query}\n          onChange={onChange}\n        />\n        <SLO\n          refId={refId}\n          datasource={datasource}\n          templateVariableOptions={variableOptionGroup.options}\n          query={query}\n          onChange={onChange}\n        />\n        <Selector\n          refId={refId}\n          datasource={datasource}\n          templateVariableOptions={variableOptionGroup.options}\n          query={query}\n          onChange={onChange}\n        />\n        {query.selectorName === SLO_BURN_RATE_SELECTOR_NAME && (\n          <LookbackPeriodSelect\n            refId={refId}\n            onChange={(lookbackPeriod) => onChange({ ...query, lookbackPeriod: lookbackPeriod })}\n            current={query.lookbackPeriod}\n            templateVariableOptions={variableOptionGroup.options}\n          />\n        )}\n\n        <EditorFieldGroup>\n          <EditorField label=\"Alignment period\" tooltip={alignmentLabel}>\n            <PeriodSelect\n              inputId={`${refId}-alignment-period`}\n              templateVariableOptions={variableOptionGroup.options}\n              current={query.alignmentPeriod}\n              onChange={(period) => onChange({ ...query, alignmentPeriod: period })}\n              aligmentPeriods={ALIGNMENT_PERIODS}\n            />\n          </EditorField>\n        </EditorFieldGroup>\n\n        <AliasBy refId={refId} value={query.aliasBy} onChange={(aliasBy) => onChange({ ...query, aliasBy })} />\n      </EditorRow>\n    </>\n  );\n}\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { EditorRow } from '@grafana/experimental';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { CustomMetaData, MetricDescriptor, MetricQuery, SLOQuery } from '../types';\n\nimport { AliasBy } from './AliasBy';\nimport { Alignment } from './Alignment';\nimport { GroupBy } from './GroupBy';\nimport { LabelFilter } from './LabelFilter';\nimport { Metrics } from './Metrics';\nimport { Preprocessor } from './Preprocessor';\n\nexport interface Props {\n  refId: string;\n  customMetaData: CustomMetaData;\n  variableOptionGroup: SelectableValue<string>;\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<Props>) {\n  return (\n    <Metrics\n      refId={refId}\n      projectName={query.projectName}\n      metricType={query.metricType}\n      templateVariableOptions={variableOptionGroup.options}\n      datasource={datasource}\n      onChange={onMetricTypeChange}\n      onProjectChange={onChange}\n      query={query}\n    >\n      {(metric) => (\n        <>\n          <LabelFilter\n            labels={labels}\n            filters={query.filters!}\n            onChange={(filters: string[]) => onChange({ ...query, filters })}\n            variableOptionGroup={variableOptionGroup}\n          />\n          <EditorRow>\n            <Preprocessor metricDescriptor={metric} query={query} onChange={onChange} />\n            <GroupBy\n              refId={refId}\n              labels={Object.keys(labels)}\n              query={query}\n              onChange={onChange}\n              variableOptionGroup={variableOptionGroup}\n              metricDescriptor={metric}\n            />\n            <Alignment\n              refId={refId}\n              datasource={datasource}\n              templateVariableOptions={variableOptionGroup.options}\n              query={query}\n              customMetaData={customMetaData}\n              onChange={onChange}\n            />\n            <AliasBy\n              refId={refId}\n              value={query.aliasBy}\n              onChange={(aliasBy) => {\n                onChange({ ...query, aliasBy });\n              }}\n            />\n          </EditorRow>\n        </>\n      )}\n    </Metrics>\n  );\n}\n\nexport const VisualMetricQueryEditor = React.memo(Editor);\n","import React from 'react';\n\nexport const AnnotationsHelp = () => {\n  return (\n    <div className=\"gf-form grafana-info-box alert-info\">\n      <div>\n        <h5>Annotation Query Format</h5>\n        <p>\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        </p>\n        <p>\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        </p>\n        <code>\n          {`${'{{metric.type}}'}`} has value: {`${'{{metric.value}}'}`}\n        </code>\n        <p>\n          Example Result: <code>monitoring.googleapis.com/uptime_check/http_status has this value: 502</code>\n        </p>\n        <span>Patterns:</span>\n        <p>\n          <code>{`${'{{metric.value}}'}`}</code> = value of the metric/point\n        </p>\n        <p>\n          <code>{`${'{{metric.type}}'}`}</code> = metric type e.g. compute.googleapis.com/instance/cpu/usage_time\n        </p>\n        <p>\n          <code>{`${'{{metric.name}}'}`}</code> = name part of metric e.g. instance/cpu/usage_time\n        </p>\n        <p>\n          <code>{`${'{{metric.service}}'}`}</code> = service part of metric e.g. compute\n        </p>\n        <p>\n          <code>{`${'{{metric.label.label_name}}'}`}</code> = Metric label metadata e.g. metric.label.instance_name\n        </p>\n        <p>\n          <code>{`${'{{resource.label.label_name}}'}`}</code> = Resource label metadata e.g. resource.label.zone\n        </p>\n      </div>\n    </div>\n  );\n};\n","import React, { FC } 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: FC<VariableQueryFieldProps> = ({\n  label,\n  onChange,\n  value,\n  options,\n  allowCustomValue = false,\n}) => {\n  return (\n    <InlineField label={label} labelWidth={20}>\n      <Select\n        width={25}\n        allowCustomValue={allowCustomValue}\n        value={value}\n        onChange={({ value }) => onChange(value!)}\n        options={options}\n      />\n    </InlineField>\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<SelectableValue<string>> = [\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  ANNOTATION = 'annotation',\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}\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<string, any>;\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;a<n;a++)for(var l in t=arguments[a])Object.prototype.hasOwnProperty.call(t,l)&&(e[l]=t[l]);return e},r.apply(this,arguments)};\n/*! *****************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */function i(e,t){var a=\"function\"==typeof Symbol&&e[Symbol.iterator];if(!a)return e;var n,l,o=a.call(e),r=[];try{for(;(void 0===t||t-- >0)&&!(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.Button,{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","EditorField","label","width","onChange","value","options","templateVariableOptions","expanded","placeholder","inputId","refId","menuPlacement","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","EditorFieldGroup","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","EditorRow","EditorList","items","renderItem","item","onChangeItem","onDeleteItem","operator","condition","spacing","formatCreateLabel","v","allowCustomValue","AccessoryButton","icon","variant","onClick","type","flatMap","slice","filtersToStringArray","MQLQueryEditor","onRunQuery","name","className","rows","onBlur","currentTarget","onKeyDown","event","shiftKey","ctrlKey","preventDefault","GraphPeriod","graphPeriod","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","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","Button","fill","TextArea","autoFocus","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":""}