7379.40eb8461084ddb7791b3.js.map 120 KB

1
  1. {"version":3,"file":"7379.40eb8461084ddb7791b3.js","mappings":"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","sources":["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/QueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLO/Service.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLO/SLO.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLO/Selector.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/SLO/SLOQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Project.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Metrics.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/GroupBy.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Alignment.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/LabelFilter.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AnnotationsHelp.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AlignmentFunction.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AlignmentPeriodLabel.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/AliasBy.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Aggregation.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Fields.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/VisualMetricQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/PeriodSelect.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/components/Preprocessor.tsx","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/constants.ts","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/functions.ts","webpack://grafana/./public/app/plugins/datasource/cloud-monitoring/types.ts","webpack://grafana/../../opt/drone/yarncache/@grafana-google-sdk-npm-0.0.3-c91663433f-9eb5e043e0.zip/node_modules/@grafana/google-sdk/dist/index.production.js","webpack://grafana/../../opt/drone/yarncache/@grafana-google-sdk-npm-0.0.3-c91663433f-9eb5e043e0.zip/node_modules/@grafana/google-sdk/index.js"],"sourcesContent":["import 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 { Switch } from '@grafana/ui';\n\nimport { GRAPH_PERIODS, SELECT_WIDTH } from '../constants';\n\nimport { PeriodSelect, QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n onChange: (period: string) => void;\n variableOptionGroup: SelectableValue<string>;\n graphPeriod?: string;\n}\n\nexport const GraphPeriod: FunctionComponent<Props> = ({ refId, onChange, graphPeriod, variableOptionGroup }) => {\n return (\n <>\n <QueryEditorRow\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 <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 selectWidth={SELECT_WIDTH}\n disabled={graphPeriod === 'disabled'}\n aligmentPeriods={GRAPH_PERIODS}\n />\n </QueryEditorRow>\n </>\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { getAlignmentPickerData } from '../functions';\nimport {\n AlignmentTypes,\n CustomMetaData,\n EditorMode,\n MetricDescriptor,\n MetricKind,\n MetricQuery,\n PreprocessorType,\n SLOQuery,\n ValueTypes,\n} from '../types';\n\nimport { GraphPeriod } from './GraphPeriod';\nimport { MQLQueryEditor } from './MQLQueryEditor';\n\nimport { AliasBy, Project, VisualMetricQueryEditor } from '.';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue<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_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<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 <>\n <Project\n refId={refId}\n templateVariableOptions={variableOptionGroup.options}\n projectName={projectName}\n datasource={datasource}\n onChange={(projectName) => {\n onChange({ ...query, projectName });\n }}\n />\n\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\n <AliasBy\n refId={refId}\n value={query.aliasBy}\n onChange={(aliasBy) => {\n onChange({ ...query, aliasBy });\n }}\n />\n </>\n );\n}\n\nexport const MetricQueryEditor = React.memo(Editor);\n","import { css } from '@emotion/css';\nimport React, { PureComponent } from 'react';\n\nimport { QueryEditorProps, toOption } from '@grafana/data';\nimport { Button, Select } from '@grafana/ui';\n\nimport { QUERY_TYPES, SELECT_WIDTH } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { CloudMonitoringQuery, EditorMode, MetricQuery, QueryType, SLOQuery, CloudMonitoringOptions } from '../types';\n\nimport { defaultQuery } from './MetricQueryEditor';\nimport { defaultQuery as defaultSLOQuery } from './SLO/SLOQueryEditor';\n\nimport { MetricQueryEditor, QueryEditorRow, 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 (!this.props.query.hasOwnProperty('queryType')) {\n this.props.query.queryType = QueryType.METRICS;\n }\n\n await datasource.ensureGCEDefaultProject();\n if (!query.metricQuery.projectName) {\n this.props.query.metricQuery.projectName = datasource.getDefaultProject();\n }\n }\n\n onQueryChange(prop: string, value: MetricQuery | SLOQuery) {\n this.props.onChange({ ...this.props.query, [prop]: value });\n this.props.onRunQuery();\n }\n\n render() {\n const { datasource, query, onRunQuery, onChange } = this.props;\n const metricQuery = { ...defaultQuery(datasource), ...query.metricQuery };\n const sloQuery = { ...defaultSLOQuery(datasource), ...query.sloQuery };\n const queryType = query.queryType || QueryType.METRICS;\n const meta = this.props.data?.series.length ? this.props.data?.series[0].meta : {};\n const customMetaData = meta?.custom ?? {};\n const variableOptionGroup = {\n label: 'Template Variables',\n expanded: false,\n options: datasource.getVariables().map(toOption),\n };\n\n return (\n <>\n <QueryEditorRow\n label=\"Query type\"\n fillComponent={\n query.queryType !== QueryType.SLO && (\n <Button\n variant=\"secondary\"\n className={css`\n margin-left: auto;\n `}\n icon=\"edit\"\n onClick={() =>\n this.onQueryChange('metricQuery', {\n ...metricQuery,\n editorMode: metricQuery.editorMode === EditorMode.MQL ? EditorMode.Visual : EditorMode.MQL,\n })\n }\n >\n {metricQuery.editorMode === EditorMode.MQL ? 'Switch to builder' : 'Edit MQL'}\n </Button>\n )\n }\n htmlFor={`${query.refId}-query-type`}\n >\n <Select\n width={SELECT_WIDTH}\n value={queryType}\n options={QUERY_TYPES}\n onChange={({ value }) => {\n onChange({ ...query, sloQuery, queryType: value! });\n onRunQuery();\n }}\n inputId={`${query.refId}-query-type`}\n />\n </QueryEditorRow>\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 ></MetricQueryEditor>\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 ></SLOQueryEditor>\n )}\n </>\n );\n }\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { QueryEditorRow } from '..';\nimport { SELECT_WIDTH } from '../../constants';\nimport CloudMonitoringDatasource from '../../datasource';\nimport { SLOQuery } from '../../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array<SelectableValue<string>>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const Service: React.FC<Props> = ({ refId, query, templateVariableOptions, onChange, datasource }) => {\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 <QueryEditorRow label=\"Service\" htmlFor={`${refId}-slo-service`}>\n <Select\n inputId={`${refId}-slo-service`}\n width={SELECT_WIDTH}\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 </QueryEditorRow>\n );\n};\n","import React, { useEffect, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { QueryEditorRow } from '..';\nimport { SELECT_WIDTH } from '../../constants';\nimport CloudMonitoringDatasource from '../../datasource';\nimport { SLOQuery } from '../../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array<SelectableValue<string>>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const SLO: React.FC<Props> = ({ refId, query, templateVariableOptions, onChange, datasource }) => {\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 <QueryEditorRow label=\"SLO\" htmlFor={`${refId}-slo`}>\n <Select\n inputId={`${refId}-slo`}\n width={SELECT_WIDTH}\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 </QueryEditorRow>\n );\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { QueryEditorRow } from '..';\nimport { SELECT_WIDTH, SELECTORS } from '../../constants';\nimport CloudMonitoringDatasource from '../../datasource';\nimport { SLOQuery } from '../../types';\n\nexport interface Props {\n refId: string;\n onChange: (query: SLOQuery) => void;\n query: SLOQuery;\n templateVariableOptions: Array<SelectableValue<string>>;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const Selector: React.FC<Props> = ({ refId, query, templateVariableOptions, onChange, datasource }) => {\n return (\n <QueryEditorRow label=\"Selector\" htmlFor={`${refId}-slo-selector`}>\n <Select\n inputId={`${refId}-slo-selector`}\n width={SELECT_WIDTH}\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 </QueryEditorRow>\n );\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport { AliasBy, PeriodSelect, AlignmentPeriodLabel, Project, QueryEditorRow } from '..';\nimport { ALIGNMENT_PERIODS, SELECT_WIDTH } from '../../constants';\nimport CloudMonitoringDatasource from '../../datasource';\nimport { AlignmentTypes, CustomMetaData, SLOQuery } from '../../types';\n\nimport { Selector, Service, SLO } from '.';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue<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});\n\nexport function SLOQueryEditor({\n refId,\n query,\n datasource,\n onChange,\n variableOptionGroup,\n customMetaData,\n}: React.PropsWithChildren<Props>) {\n return (\n <>\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 ></Service>\n <SLO\n refId={refId}\n datasource={datasource}\n templateVariableOptions={variableOptionGroup.options}\n query={query}\n onChange={onChange}\n ></SLO>\n <Selector\n refId={refId}\n datasource={datasource}\n templateVariableOptions={variableOptionGroup.options}\n query={query}\n onChange={onChange}\n ></Selector>\n\n <QueryEditorRow label=\"Alignment period\" htmlFor={`${refId}-alignment-period`}>\n <PeriodSelect\n inputId={`${refId}-alignment-period`}\n templateVariableOptions={variableOptionGroup.options}\n selectWidth={SELECT_WIDTH}\n current={query.alignmentPeriod}\n onChange={(period) => onChange({ ...query, alignmentPeriod: period })}\n aligmentPeriods={ALIGNMENT_PERIODS}\n />\n <AlignmentPeriodLabel datasource={datasource} customMetaData={customMetaData} />\n </QueryEditorRow>\n\n <AliasBy refId={refId} value={query.aliasBy} onChange={(aliasBy) => onChange({ ...query, aliasBy })} />\n </>\n );\n}\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { SELECT_WIDTH } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\n\nimport { QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n datasource: CloudMonitoringDatasource;\n onChange: (projectName: string) => void;\n templateVariableOptions: Array<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 <QueryEditorRow label=\"Project\" htmlFor={`${refId}-project`}>\n <Select\n width={SELECT_WIDTH}\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 </QueryEditorRow>\n );\n}\n","import { css } from '@emotion/css';\nimport { startCase, uniqBy } from 'lodash';\nimport React, { useCallback, useEffect, useState } from 'react';\n\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { TemplateSrv } from '@grafana/runtime';\nimport { getSelectStyles, Select, useStyles2, useTheme2 } from '@grafana/ui';\n\nimport { INNER_LABEL_WIDTH, LABEL_WIDTH, SELECT_WIDTH } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { MetricDescriptor } from '../types';\n\nimport { QueryEditorField, QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n onChange: (metricDescriptor: MetricDescriptor) => void;\n templateSrv: TemplateSrv;\n templateVariableOptions: Array<SelectableValue<string>>;\n datasource: CloudMonitoringDatasource;\n projectName: string;\n metricType: string;\n children: (metricDescriptor?: MetricDescriptor) => JSX.Element;\n}\n\ninterface State {\n metricDescriptors: MetricDescriptor[];\n metrics: any[];\n services: any[];\n service: string;\n metric: string;\n metricDescriptor?: MetricDescriptor;\n projectName: string | null;\n}\n\nexport function Metrics(props: Props) {\n const [state, setState] = useState<State>({\n metricDescriptors: [],\n metrics: [],\n services: [],\n service: '',\n metric: '',\n projectName: null,\n });\n\n const theme = useTheme2();\n const selectStyles = getSelectStyles(theme);\n\n const customStyle = useStyles2(getStyles);\n\n const { services, service, metrics, metricDescriptors } = state;\n const { metricType, templateVariableOptions, projectName, templateSrv, datasource, onChange, children } = props;\n\n const getSelectedMetricDescriptor = useCallback(\n (metricDescriptors: MetricDescriptor[], metricType: string) => {\n return metricDescriptors.find((md) => md.type === templateSrv.replace(metricType))!;\n },\n [templateSrv]\n );\n\n useEffect(() => {\n const getMetricsList = (metricDescriptors: MetricDescriptor[]) => {\n const selectedMetricDescriptor = getSelectedMetricDescriptor(metricDescriptors, metricType);\n if (!selectedMetricDescriptor) {\n return [];\n }\n\n const metricsByService = metricDescriptors\n .filter((m) => m.service === selectedMetricDescriptor.service)\n .map((m) => ({\n service: m.service,\n value: m.type,\n label: m.displayName,\n component: function optionComponent() {\n return (\n <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 loadMetricDescriptors = async () => {\n if (projectName) {\n const metricDescriptors = await datasource.getMetricTypes(projectName);\n const services = getServicesList(metricDescriptors);\n const metrics = getMetricsList(metricDescriptors);\n const service = metrics.length > 0 ? metrics[0].service : '';\n const metricDescriptor = getSelectedMetricDescriptor(metricDescriptors, metricType);\n setState((prevState) => ({\n ...prevState,\n metricDescriptors,\n services,\n metrics,\n service: service,\n metricDescriptor,\n }));\n }\n };\n loadMetricDescriptors();\n }, [datasource, getSelectedMetricDescriptor, metricType, projectName, customStyle, selectStyles.optionDescription]);\n\n const onServiceChange = ({ value: service }: any) => {\n const metrics = metricDescriptors\n .filter((m: MetricDescriptor) => m.service === templateSrv.replace(service))\n .map((m: MetricDescriptor) => ({\n service: m.service,\n value: m.type,\n label: m.displayName,\n description: m.description,\n }));\n\n if (metrics.length > 0 && !metrics.some((m) => m.value === templateSrv.replace(metricType))) {\n onMetricTypeChange(metrics[0], { service, metrics });\n } else {\n setState({ ...state, service, metrics });\n }\n };\n\n const onMetricTypeChange = ({ value }: SelectableValue<string>, extra: any = {}) => {\n const metricDescriptor = getSelectedMetricDescriptor(state.metricDescriptors, value!);\n setState({ ...state, metricDescriptor, ...extra });\n onChange({ ...metricDescriptor, type: value! });\n };\n\n const getServicesList = (metricDescriptors: MetricDescriptor[]) => {\n const services = metricDescriptors.map((m) => ({\n value: m.service,\n label: startCase(m.serviceShortName),\n }));\n\n return services.length > 0 ? uniqBy(services, (s) => s.value) : [];\n };\n\n return (\n <>\n <QueryEditorRow>\n <QueryEditorField labelWidth={LABEL_WIDTH} label=\"Service\" htmlFor={`${props.refId}-service`}>\n <Select\n width={SELECT_WIDTH}\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 ></Select>\n </QueryEditorField>\n <QueryEditorField label=\"Metric name\" labelWidth={INNER_LABEL_WIDTH} htmlFor={`${props.refId}-select-metric`}>\n <Select\n width={SELECT_WIDTH}\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 ></Select>\n </QueryEditorField>\n </QueryEditorRow>\n\n {children(state.metricDescriptor)}\n </>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => css`\n label: grafana-select-option-description;\n font-weight: normal;\n font-style: italic;\n color: ${theme.colors.text.secondary};\n`;\n","import React, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { MultiSelect } from '@grafana/ui';\n\nimport { INPUT_WIDTH, SYSTEM_LABELS } from '../constants';\nimport { labelsToGroupedOptions } from '../functions';\nimport { MetricDescriptor, MetricQuery } from '../types';\n\nimport { Aggregation, QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n variableOptionGroup: SelectableValue<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 <QueryEditorRow\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 htmlFor={`${refId}-group-by`}\n >\n <MultiSelect\n inputId={`${refId}-group-by`}\n width={INPUT_WIDTH}\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 ></MultiSelect>\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 ></Aggregation>\n </QueryEditorRow>\n );\n};\n","import React, { FC } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport { ALIGNMENT_PERIODS, SELECT_WIDTH } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { CustomMetaData, MetricQuery, SLOQuery } from '../types';\n\nimport { AlignmentFunction, PeriodSelect, AlignmentPeriodLabel, QueryEditorField, QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n onChange: (query: MetricQuery | SLOQuery) => void;\n query: MetricQuery;\n templateVariableOptions: Array<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 return (\n <QueryEditorRow\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 fillComponent={<AlignmentPeriodLabel datasource={datasource} customMetaData={customMetaData} />}\n htmlFor={`${refId}-alignment-function`}\n >\n <AlignmentFunction\n inputId={`${refId}-alignment-function`}\n templateVariableOptions={templateVariableOptions}\n query={query}\n onChange={onChange}\n />\n <QueryEditorField label=\"Alignment period\" htmlFor={`${refId}-alignment-period`}>\n <PeriodSelect\n inputId={`${refId}-alignment-period`}\n selectWidth={SELECT_WIDTH}\n templateVariableOptions={templateVariableOptions}\n current={query.alignmentPeriod}\n onChange={(period) => onChange({ ...query, alignmentPeriod: period })}\n aligmentPeriods={ALIGNMENT_PERIODS}\n />\n </QueryEditorField>\n </QueryEditorRow>\n );\n};\n","import { flatten } from 'lodash';\nimport React, { FunctionComponent, useCallback, useMemo } from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { Button, HorizontalGroup, Select, VerticalGroup } from '@grafana/ui';\nimport { CustomControlProps } from '@grafana/ui/src/components/Select/types';\n\nimport { SELECT_WIDTH } from '../constants';\nimport { labelsToGroupedOptions, stringArrayToFilters } from '../functions';\nimport { Filter } from '../types';\n\nimport { QueryEditorRow } from '.';\n\nexport interface Props {\n labels: { [key: string]: string[] };\n filters: string[];\n onChange: (filters: string[]) => void;\n variableOptionGroup: SelectableValue<string>;\n}\n\nconst operators = ['=', '!=', '=~', '!=~'];\n\nconst FilterButton = React.forwardRef<HTMLButtonElement, CustomControlProps<string>>(\n ({ value, isOpen, invalid, ...rest }, ref) => {\n return <Button {...rest} ref={ref} variant=\"secondary\" icon=\"plus\" aria-label=\"Add filter\"></Button>;\n }\n);\nFilterButton.displayName = 'FilterButton';\n\nconst OperatorButton = React.forwardRef<HTMLButtonElement, CustomControlProps<string>>(({ value, ...rest }, ref) => {\n return (\n <Button {...rest} ref={ref} variant=\"secondary\">\n <span className=\"query-segment-operator\">{value?.label}</span>\n </Button>\n );\n});\nOperatorButton.displayName = 'OperatorButton';\n\nexport const LabelFilter: FunctionComponent<Props> = ({\n labels = {},\n filters: filterArray,\n onChange,\n variableOptionGroup,\n}) => {\n const filters = useMemo(() => stringArrayToFilters(filterArray), [filterArray]);\n const options = useMemo(\n () => [variableOptionGroup, ...labelsToGroupedOptions(Object.keys(labels))],\n [labels, variableOptionGroup]\n );\n\n const filtersToStringArray = useCallback((filters: Filter[]) => {\n const strArr = flatten(filters.map(({ key, operator, value, condition }) => [key, operator, value, condition!]));\n return strArr.slice(0, strArr.length - 1);\n }, []);\n\n const AddFilter = () => {\n return (\n <Select\n allowCustomValue\n options={[variableOptionGroup, ...labelsToGroupedOptions(Object.keys(labels))]}\n onChange={({ value: key = '' }) =>\n onChange(filtersToStringArray([...filters, { key, operator: '=', condition: 'AND', value: '' }]))\n }\n menuPlacement=\"bottom\"\n renderControl={FilterButton}\n />\n );\n };\n\n return (\n <QueryEditorRow\n label=\"Filter\"\n tooltip={\n '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 noFillEnd={filters.length > 1}\n >\n <VerticalGroup spacing=\"xs\" width=\"auto\">\n {filters.map(({ key, operator, value, condition }, index) => {\n // Add the current key and value as options if they are manually entered\n const keyPresent = options.some((op) => {\n if (op.options) {\n return options.some((opp) => opp.label === key);\n }\n return op.label === key;\n });\n if (!keyPresent) {\n options.push({ label: key, value: key });\n }\n\n const valueOptions = labels.hasOwnProperty(key)\n ? [variableOptionGroup, ...labels[key].map(toOption)]\n : [variableOptionGroup];\n const valuePresent = valueOptions.some((op) => {\n return op.label === value;\n });\n if (!valuePresent) {\n valueOptions.push({ label: value, value });\n }\n\n return (\n <HorizontalGroup key={index} spacing=\"xs\" width=\"auto\">\n <Select\n aria-label=\"Filter label key\"\n width={SELECT_WIDTH}\n allowCustomValue\n formatCreateLabel={(v) => `Use label key: ${v}`}\n value={key}\n options={options}\n onChange={({ value: key = '' }) => {\n onChange(\n filtersToStringArray(\n filters.map((f, i) => (i === index ? { key, operator, condition, value: '' } : f))\n )\n );\n }}\n />\n <Select\n value={operator}\n options={operators.map(toOption)}\n onChange={({ value: operator = '=' }) =>\n onChange(filtersToStringArray(filters.map((f, i) => (i === index ? { ...f, operator } : f))))\n }\n menuPlacement=\"bottom\"\n renderControl={OperatorButton}\n />\n <Select\n aria-label=\"Filter label value\"\n width={SELECT_WIDTH}\n formatCreateLabel={(v) => `Use label value: ${v}`}\n allowCustomValue\n value={value}\n placeholder=\"add filter value\"\n options={valueOptions}\n onChange={({ value = '' }) =>\n onChange(filtersToStringArray(filters.map((f, i) => (i === index ? { ...f, value } : f))))\n }\n />\n <Button\n variant=\"secondary\"\n size=\"md\"\n icon=\"trash-alt\"\n aria-label=\"Remove\"\n onClick={() => onChange(filtersToStringArray(filters.filter((_, i) => i !== index)))}\n ></Button>\n {index + 1 === filters.length && Object.values(filters).every(({ value }) => value) && <AddFilter />}\n </HorizontalGroup>\n );\n })}\n {!filters.length && <AddFilter />}\n </VerticalGroup>\n </QueryEditorRow>\n );\n};\n","import React, { FC } from 'react';\n\nexport const AnnotationsHelp: FC = () => {\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 <label>Patterns:</label>\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, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { SELECT_WIDTH } from '../constants';\nimport { getAlignmentPickerData } from '../functions';\nimport { MetricQuery } from '../types';\n\nexport interface Props {\n inputId: string;\n onChange: (query: MetricQuery) => void;\n query: MetricQuery;\n templateVariableOptions: Array<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 width={SELECT_WIDTH}\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 ></Select>\n );\n};\n","import React, { FC, useMemo } from 'react';\n\nimport { rangeUtil } from '@grafana/data';\n\nimport { ALIGNMENTS } from '../constants';\nimport CloudMonitoringDatasource from '../datasource';\nimport { CustomMetaData } from '../types';\n\nexport interface Props {\n customMetaData: CustomMetaData;\n datasource: CloudMonitoringDatasource;\n}\n\nexport const AlignmentPeriodLabel: FC<Props> = ({ customMetaData, datasource }) => {\n const { perSeriesAligner, alignmentPeriod } = customMetaData;\n const formatAlignmentText = useMemo(() => {\n if (!alignmentPeriod || !perSeriesAligner) {\n return '';\n }\n\n const alignment = ALIGNMENTS.find((ap) => ap.value === datasource.templateSrv.replace(perSeriesAligner));\n const seconds = parseInt(alignmentPeriod ?? ''.replace(/[^0-9]/g, ''), 10);\n const hms = rangeUtil.secondsToHms(seconds);\n return `${hms} interval (${alignment?.text ?? ''})`;\n }, [datasource, perSeriesAligner, alignmentPeriod]);\n\n return <label>{formatAlignmentText}</label>;\n};\n","import { debounce } from 'lodash';\nimport React, { FunctionComponent, useState } from 'react';\n\nimport { Input } from '@grafana/ui';\n\nimport { INPUT_WIDTH } from '../constants';\n\nimport { QueryEditorRow } from '.';\n\nexport interface Props {\n refId: string;\n onChange: (alias: any) => void;\n value?: string;\n}\n\nexport const AliasBy: FunctionComponent<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 <QueryEditorRow label=\"Alias by\" htmlFor={`${refId}-alias-by`}>\n <Input id={`${refId}-alias-by`} width={INPUT_WIDTH} value={alias} onChange={onChange} />\n </QueryEditorRow>\n );\n};\n","import React, { FC, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { getAggregationOptionsByMetric } from '../functions';\nimport { MetricDescriptor, MetricKind, ValueTypes } from '../types';\n\nimport { QueryEditorField } from '.';\n\nexport interface Props {\n refId: string;\n onChange: (metricDescriptor: string) => void;\n metricDescriptor?: MetricDescriptor;\n crossSeriesReducer: string;\n groupBys: string[];\n templateVariableOptions: Array<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 <QueryEditorField\n labelWidth={18}\n label=\"Group by function\"\n data-testid=\"cloud-monitoring-aggregation\"\n htmlFor={`${props.refId}-group-by-function`}\n >\n <Select\n width={16}\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 />\n </QueryEditorField>\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 { 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<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\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<Props> = ({\n children,\n label,\n tooltip,\n fillComponent,\n noFillEnd = false,\n labelWidth = LABEL_WIDTH,\n htmlFor,\n ...rest\n}) => {\n return (\n <div className=\"gf-form\" {...rest}>\n {label && (\n <InlineLabel width={labelWidth} tooltip={tooltip} htmlFor={htmlFor}>\n {label}\n </InlineLabel>\n )}\n <div\n className={css`\n margin-right: 4px;\n `}\n >\n <HorizontalGroup spacing=\"xs\" width=\"auto\">\n {children}\n </HorizontalGroup>\n </div>\n <div className={'gf-form--grow'}>\n {noFillEnd || <div className={'gf-form-label gf-form-label--grow'}>{fillComponent}</div>}\n </div>\n </div>\n );\n};\n\nexport const QueryEditorField: FC<Props> = ({ children, label, tooltip, labelWidth = INNER_LABEL_WIDTH, ...rest }) => {\n return (\n <>\n {label && (\n <InlineLabel width={labelWidth} tooltip={tooltip} {...rest}>\n {label}\n </InlineLabel>\n )}\n {children}\n </>\n );\n};\n","import React from 'react';\n\nimport { SelectableValue } from '@grafana/data';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { CustomMetaData, MetricDescriptor, MetricQuery, SLOQuery } from '../types';\n\nimport { Alignment, GroupBy, LabelFilter, Metrics, Preprocessor } from '.';\n\nexport interface Props {\n refId: string;\n customMetaData: CustomMetaData;\n variableOptionGroup: SelectableValue<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 templateSrv={datasource.templateSrv}\n projectName={query.projectName}\n metricType={query.metricType}\n templateVariableOptions={variableOptionGroup.options}\n datasource={datasource}\n onChange={onMetricTypeChange}\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 <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 </>\n )}\n </Metrics>\n );\n}\n\nexport const VisualMetricQueryEditor = React.memo(Editor);\n","import React, { useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\n\nimport { periodOption } from '../constants';\n\nexport interface Props {\n inputId: string;\n onChange: (period: string) => void;\n templateVariableOptions: Array<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 selectWidth,\n disabled,\n aligmentPeriods,\n}: Props) {\n const options = useMemo(\n () =>\n aligmentPeriods.map((ap) => ({\n ...ap,\n label: ap.text,\n })),\n [aligmentPeriods]\n );\n const visibleOptions = useMemo(() => options.filter((ap) => !ap.hidden), [options]);\n\n return (\n <Select\n width={selectWidth}\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 ></Select>\n );\n}\n","import React, { FunctionComponent, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { RadioButtonGroup } from '@grafana/ui';\n\nimport { getAlignmentPickerData } from '../functions';\nimport { MetricDescriptor, MetricKind, MetricQuery, PreprocessorType, ValueTypes } from '../types';\n\nimport { QueryEditorRow } from '.';\n\nconst NONE_OPTION = { label: 'None', value: PreprocessorType.None };\n\nexport interface Props {\n metricDescriptor?: MetricDescriptor;\n onChange: (query: MetricQuery) => void;\n query: MetricQuery;\n}\n\nexport const Preprocessor: FunctionComponent<Props> = ({ query, metricDescriptor, onChange }) => {\n const options = useOptions(metricDescriptor);\n return (\n <QueryEditorRow\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 metic'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 ></RadioButtonGroup>\n </QueryEditorRow>\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 { GoogleAuthType } from '@grafana/google-sdk';\n\nimport { MetricKind, QueryType, ValueTypes } from './types';\n\n// not super excited about using uneven numbers, but this makes it align perfectly with rows that has two fields\nexport const INPUT_WIDTH = 71;\nexport const LABEL_WIDTH = 19;\nexport const INNER_LABEL_WIDTH = 14;\nexport const SELECT_WIDTH = 28;\nexport const AUTH_TYPES = [\n { value: 'Google JWT File', key: GoogleAuthType.JWT },\n { value: 'GCE Default Service Account', key: GoogleAuthType.GCE },\n];\n\nexport const ALIGNMENTS = [\n {\n text: 'none',\n value: 'ALIGN_NONE',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.STRING,\n ValueTypes.VALUE_TYPE_UNSPECIFIED,\n ValueTypes.BOOL,\n ],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'delta',\n value: 'ALIGN_DELTA',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.CUMULATIVE, MetricKind.DELTA],\n },\n {\n text: 'rate',\n value: 'ALIGN_RATE',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.CUMULATIVE, MetricKind.DELTA],\n },\n {\n text: 'interpolate',\n value: 'ALIGN_INTERPOLATE',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'next older',\n value: 'ALIGN_NEXT_OLDER',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.STRING,\n ValueTypes.VALUE_TYPE_UNSPECIFIED,\n ValueTypes.BOOL,\n ],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'min',\n value: 'ALIGN_MIN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'max',\n value: 'ALIGN_MAX',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'mean',\n value: 'ALIGN_MEAN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'count',\n value: 'ALIGN_COUNT',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'sum',\n value: 'ALIGN_SUM',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'stddev',\n value: 'ALIGN_STDDEV',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'count true',\n value: 'ALIGN_COUNT_TRUE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'count false',\n value: 'ALIGN_COUNT_FALSE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'fraction true',\n value: 'ALIGN_FRACTION_TRUE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE],\n },\n {\n text: 'percentile 99',\n value: 'ALIGN_PERCENTILE_99',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percentile 95',\n value: 'ALIGN_PERCENTILE_95',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percentile 50',\n value: 'ALIGN_PERCENTILE_50',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percentile 05',\n value: 'ALIGN_PERCENTILE_05',\n valueTypes: [ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'percent change',\n value: 'ALIGN_PERCENT_CHANGE',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n];\n\nexport const AGGREGATIONS = [\n {\n text: 'none',\n value: 'REDUCE_NONE',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.BOOL,\n ValueTypes.STRING,\n ],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'mean',\n value: 'REDUCE_MEAN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: 'min',\n value: 'REDUCE_MIN',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'max',\n value: 'REDUCE_MAX',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'sum',\n value: 'REDUCE_SUM',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'std. dev.',\n value: 'REDUCE_STDDEV',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE, MetricKind.METRIC_KIND_UNSPECIFIED],\n },\n {\n text: 'count',\n value: 'REDUCE_COUNT',\n valueTypes: [\n ValueTypes.INT64,\n ValueTypes.DOUBLE,\n ValueTypes.MONEY,\n ValueTypes.DISTRIBUTION,\n ValueTypes.BOOL,\n ValueTypes.STRING,\n ],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: 'count true',\n value: 'REDUCE_COUNT_TRUE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: 'count false',\n value: 'REDUCE_COUNT_FALSE',\n valueTypes: [ValueTypes.BOOL],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA],\n },\n {\n text: '99th percentile',\n value: 'REDUCE_PERCENTILE_99',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: '95th percentile',\n value: 'REDUCE_PERCENTILE_95',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: '50th percentile',\n value: 'REDUCE_PERCENTILE_50',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n {\n text: '5th percentile',\n value: 'REDUCE_PERCENTILE_05',\n valueTypes: [ValueTypes.INT64, ValueTypes.DOUBLE, ValueTypes.MONEY, ValueTypes.DISTRIBUTION],\n metricKinds: [MetricKind.GAUGE, MetricKind.DELTA, MetricKind.CUMULATIVE],\n },\n];\n\nexport type periodOption = {\n text: string;\n value: string;\n hidden?: boolean;\n};\n\nexport const ALIGNMENT_PERIODS: periodOption[] = [\n { text: 'grafana auto', value: 'grafana-auto' },\n { text: 'stackdriver auto', value: 'stackdriver-auto', hidden: true },\n { text: 'cloud monitoring auto', value: 'cloud-monitoring-auto' },\n { text: '1m', value: '+60s' },\n { text: '2m', value: '+120s' },\n { text: '5m', value: '+300s' },\n { text: '10m', value: '+600s' },\n { text: '30m', value: '+1800s' },\n { text: '1h', value: '+3600s' },\n { text: '3h', value: '+7200s' },\n { text: '6h', value: '+21600s' },\n { text: '1d', value: '+86400s' },\n { text: '3d', value: '+259200s' },\n { text: '1w', value: '+604800s' },\n];\n\nexport const GRAPH_PERIODS: periodOption[] = [\n { text: 'auto', value: 'auto' },\n { text: '1m', value: '1m' },\n { text: '2m', value: '2m' },\n { text: '5m', value: '5m' },\n { text: '10m', value: '10m' },\n { text: '30m', value: '30m' },\n { text: '1h', value: '1h' },\n { text: '3h', value: '3h' },\n { text: '6h', value: '6h' },\n { text: '1d', value: '1d' },\n { text: '3d', value: '3d' },\n { text: '1w', value: '1w' },\n];\n\nexport const SYSTEM_LABELS = [\n 'metadata.system_labels.cloud_account',\n 'metadata.system_labels.name',\n 'metadata.system_labels.region',\n 'metadata.system_labels.state',\n 'metadata.system_labels.instance_group',\n 'metadata.system_labels.node_name',\n 'metadata.system_labels.service_name',\n 'metadata.system_labels.top_level_controller_type',\n 'metadata.system_labels.top_level_controller_name',\n 'metadata.system_labels.container_image',\n];\n\nexport const SELECTORS = [\n { label: 'SLI Value', value: 'select_slo_health' },\n { label: 'SLO Compliance', value: 'select_slo_compliance' },\n { label: 'SLO Error Budget Remaining', value: 'select_slo_budget_fraction' },\n];\n\nexport const QUERY_TYPES = [\n { label: 'Metrics', value: QueryType.METRICS },\n { label: 'Service Level Objectives (SLO)', value: QueryType.SLO },\n];\n","import { chunk, initial, startCase, uniqBy } from 'lodash';\n\nimport { getTemplateSrv, TemplateSrv } from '@grafana/runtime';\n\nimport { AGGREGATIONS, ALIGNMENTS, SYSTEM_LABELS } from './constants';\nimport CloudMonitoringDatasource from './datasource';\nimport { AlignmentTypes, MetricDescriptor, MetricKind, PreprocessorType, ValueTypes } from './types';\n\nconst templateSrv: TemplateSrv = getTemplateSrv();\n\nexport const extractServicesFromMetricDescriptors = (metricDescriptors: MetricDescriptor[]) =>\n uniqBy(metricDescriptors, 'service');\n\nexport const getMetricTypesByService = (metricDescriptors: MetricDescriptor[], service: string) =>\n metricDescriptors.filter((m: MetricDescriptor) => m.service === service);\n\nexport const getMetricTypes = (\n metricDescriptors: MetricDescriptor[],\n metricType: string,\n interpolatedMetricType: string,\n selectedService: string\n) => {\n const metricTypes = getMetricTypesByService(metricDescriptors, selectedService).map((m) => ({\n value: m.type,\n name: m.displayName,\n }));\n const metricTypeExistInArray = metricTypes.some(\n (m: { value: string; name: string }) => m.value === interpolatedMetricType\n );\n const metricTypeByService = metricTypes.length ? metricTypes[0].value : '';\n const selectedMetricType = metricTypeExistInArray ? metricType : metricTypeByService;\n return {\n metricTypes,\n selectedMetricType,\n };\n};\n\nexport const getAlignmentOptionsByMetric = (\n metricValueType: string,\n metricKind: string,\n preprocessor?: PreprocessorType\n) => {\n if (preprocessor && preprocessor === PreprocessorType.Rate) {\n metricKind = MetricKind.GAUGE;\n }\n\n return !metricValueType\n ? []\n : ALIGNMENTS.filter((i) => {\n return (\n i.valueTypes.indexOf(metricValueType as ValueTypes) !== -1 &&\n i.metricKinds.indexOf(metricKind as MetricKind) !== -1\n );\n });\n};\n\nexport const getAggregationOptionsByMetric = (valueType: ValueTypes, metricKind: MetricKind) => {\n return !metricKind\n ? []\n : AGGREGATIONS.filter((i) => {\n return i.valueTypes.indexOf(valueType) !== -1 && i.metricKinds.indexOf(metricKind) !== -1;\n });\n};\n\nexport const getLabelKeys = async (\n datasource: CloudMonitoringDatasource,\n selectedMetricType: string,\n projectName: string\n) => {\n const refId = 'handleLabelKeysQuery';\n const labels = await datasource.getLabels(selectedMetricType, refId, projectName);\n return [...Object.keys(labels), ...SYSTEM_LABELS];\n};\n\nexport const getAlignmentPickerData = (\n valueType: string | undefined = ValueTypes.DOUBLE,\n metricKind: string | undefined = MetricKind.GAUGE,\n perSeriesAligner: string | undefined = AlignmentTypes.ALIGN_MEAN,\n preprocessor?: PreprocessorType\n) => {\n const alignOptions = getAlignmentOptionsByMetric(valueType!, metricKind!, preprocessor!).map((option) => ({\n ...option,\n label: option.text,\n }));\n if (!alignOptions.some((o: { value: string }) => o.value === templateSrv.replace(perSeriesAligner))) {\n perSeriesAligner = alignOptions.length > 0 ? alignOptions[0].value : AlignmentTypes.ALIGN_MEAN;\n }\n return { alignOptions, perSeriesAligner };\n};\n\nexport const labelsToGroupedOptions = (groupBys: string[]) => {\n const groups = groupBys.reduce((acc: any, curr: string) => {\n const arr = curr.split('.').map(startCase);\n const group = (arr.length === 2 ? arr : initial(arr)).join(' ');\n const option = {\n value: curr,\n label: curr,\n };\n if (acc[group]) {\n acc[group] = [...acc[group], option];\n } else {\n acc[group] = [option];\n }\n return acc;\n }, {});\n return Object.entries(groups).map(([label, options]) => ({ label, options, expanded: true }), []);\n};\n\nexport const stringArrayToFilters = (filterArray: string[]) =>\n chunk(filterArray, 4).map(([key, operator, value, condition = 'AND']) => ({\n key,\n operator,\n value,\n condition,\n }));\n","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}\n\nexport enum EditorMode {\n Visual = 'visual',\n MQL = 'mql',\n}\n\nexport enum PreprocessorType {\n None = 'none',\n Rate = 'rate',\n Delta = 'delta',\n}\n\nexport enum MetricKind {\n METRIC_KIND_UNSPECIFIED = 'METRIC_KIND_UNSPECIFIED',\n GAUGE = 'GAUGE',\n DELTA = 'DELTA',\n CUMULATIVE = 'CUMULATIVE',\n}\n\nexport enum ValueTypes {\n VALUE_TYPE_UNSPECIFIED = 'VALUE_TYPE_UNSPECIFIED',\n BOOL = 'BOOL',\n INT64 = 'INT64',\n DOUBLE = 'DOUBLE',\n STRING = 'STRING',\n DISTRIBUTION = 'DISTRIBUTION',\n MONEY = 'MONEY',\n}\n\nexport enum AlignmentTypes {\n ALIGN_DELTA = 'ALIGN_DELTA',\n ALIGN_RATE = 'ALIGN_RATE',\n ALIGN_INTERPOLATE = 'ALIGN_INTERPOLATE',\n ALIGN_NEXT_OLDER = 'ALIGN_NEXT_OLDER',\n ALIGN_MIN = 'ALIGN_MIN',\n ALIGN_MAX = 'ALIGN_MAX',\n ALIGN_MEAN = 'ALIGN_MEAN',\n ALIGN_COUNT = 'ALIGN_COUNT',\n ALIGN_SUM = 'ALIGN_SUM',\n ALIGN_STDDEV = 'ALIGN_STDDEV',\n ALIGN_COUNT_TRUE = 'ALIGN_COUNT_TRUE',\n ALIGN_COUNT_FALSE = 'ALIGN_COUNT_FALSE',\n ALIGN_FRACTION_TRUE = 'ALIGN_FRACTION_TRUE',\n ALIGN_PERCENTILE_99 = 'ALIGN_PERCENTILE_99',\n ALIGN_PERCENTILE_95 = 'ALIGN_PERCENTILE_95',\n ALIGN_PERCENTILE_50 = 'ALIGN_PERCENTILE_50',\n ALIGN_PERCENTILE_05 = 'ALIGN_PERCENTILE_05',\n ALIGN_PERCENT_CHANGE = 'ALIGN_PERCENT_CHANGE',\n ALIGN_NONE = 'ALIGN_NONE',\n}\n\nexport interface BaseQuery {\n projectName: string;\n perSeriesAligner?: string;\n alignmentPeriod?: string;\n aliasBy?: string;\n}\n\nexport interface MetricQuery extends BaseQuery {\n editorMode: EditorMode;\n metricType: string;\n crossSeriesReducer: string;\n groupBys?: string[];\n filters?: string[];\n metricKind?: MetricKind;\n valueType?: string;\n view?: string;\n query: string;\n preprocessor?: PreprocessorType;\n // To disable the graphPeriod, it should explictly be set to 'disabled'\n graphPeriod?: 'disabled' | string;\n}\n\nexport interface AnnotationMetricQuery extends MetricQuery {\n title?: string;\n text?: string;\n}\n\nexport interface SLOQuery extends BaseQuery {\n selectorName: string;\n serviceId: string;\n serviceName: string;\n sloId: string;\n sloName: string;\n goal?: number;\n}\n\nexport interface CloudMonitoringQuery extends DataQuery {\n datasourceId?: number; // Should not be necessary anymore\n queryType: QueryType;\n metricQuery: MetricQuery | AnnotationMetricQuery;\n sloQuery?: SLOQuery;\n intervalMs: number;\n type: string;\n}\n\nexport interface CloudMonitoringOptions extends DataSourceJsonData {\n defaultProject?: string;\n gceDefaultProject?: string;\n authenticationType: GoogleAuthType;\n clientEmail?: string;\n tokenUri?: string;\n}\n\nexport interface CloudMonitoringSecureJsonData {\n privateKey?: string;\n}\n\nexport interface LegacyCloudMonitoringAnnotationQuery {\n projectName: string;\n metricType: string;\n refId: string;\n filters: string[];\n metricKind: MetricKind;\n valueType: string;\n title: string;\n text: string;\n}\n\nexport interface QueryMeta {\n alignmentPeriod: string;\n rawQuery: string;\n rawQueryString: string;\n metricLabels: { [key: string]: string[] };\n resourceLabels: { [key: string]: string[] };\n resourceTypes: string[];\n}\n\nexport interface MetricDescriptor {\n valueType: string;\n metricKind: MetricKind;\n type: string;\n unit: string;\n service: string;\n serviceShortName: string;\n displayName: string;\n description: string;\n}\n\nexport interface Segment {\n type: string;\n value: string;\n}\n\nexport interface Filter {\n key: string;\n operator: string;\n value: string;\n condition?: string;\n}\n\nexport interface CustomMetaData {\n perSeriesAligner?: string;\n alignmentPeriod?: string;\n}\n\nexport interface PostResponse {\n results: Record<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.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":["MQLQueryEditor","query","onChange","onRunQuery","TextArea","name","className","value","rows","placeholder","onBlur","e","currentTarget","onKeyDown","event","key","shiftKey","ctrlKey","preventDefault","GraphPeriod","refId","graphPeriod","variableOptionGroup","label","htmlFor","tooltip","Switch","checked","inputId","templateVariableOptions","options","current","selectWidth","SELECT_WIDTH","disabled","aligmentPeriods","GRAPH_PERIODS","defaultState","labels","defaultQuery","dataSource","editorMode","EditorMode","projectName","getDefaultProject","metricType","metricKind","MetricKind","valueType","crossSeriesReducer","alignmentPeriod","perSeriesAligner","AlignmentTypes","groupBys","filters","aliasBy","preprocessor","PreprocessorType","Editor","datasource","onQueryChange","customMetaData","state","setState","useState","useEffect","getLabels","then","prevState","useCallback","metricQuery","onMetricTypeChange","type","ValueTypes","getAlignmentPickerData","q","MetricQueryEditor","React","QueryEditor","PureComponent","this","props","hasOwnProperty","queryType","QueryType","ensureGCEDefaultProject","prop","render","sloQuery","defaultSLOQuery","meta","data","series","length","custom","expanded","getVariables","map","toOption","fillComponent","Button","variant","css","icon","onClick","Select","width","QUERY_TYPES","Service","services","setServices","getSLOServices","allowCustomValue","serviceId","serviceName","sloId","SLO","slos","setSLOs","getServiceLevelObjectives","sloIds","sloName","async","slo","find","templateSrv","replace","goal","Selector","SELECTORS","s","selectorName","SLOQueryEditor","period","ALIGNMENT_PERIODS","Project","projects","setProjects","getProjects","projectsWithTemplateVariables","useMemo","QueryEditorRow","formatCreateLabel","v","Metrics","metricDescriptors","metrics","service","metric","theme","useTheme2","selectStyles","getSelectStyles","customStyle","useStyles2","getStyles","children","getSelectedMetricDescriptor","md","getMetricTypes","getServicesList","selectedMetricDescriptor","filter","m","displayName","component","optionDescription","description","getMetricsList","metricDescriptor","loadMetricDescriptors","extra","startCase","serviceShortName","uniqBy","QueryEditorField","labelWidth","LABEL_WIDTH","some","INNER_LABEL_WIDTH","colors","text","secondary","GroupBy","labelsToGroupedOptions","SYSTEM_LABELS","MultiSelect","INPUT_WIDTH","o","Aggregation","Alignment","AlignmentPeriodLabel","AlignmentFunction","PeriodSelect","operators","FilterButton","ref","rest","OperatorButton","LabelFilter","filterArray","stringArrayToFilters","Object","keys","filtersToStringArray","strArr","flatten","operator","condition","slice","AddFilter","menuPlacement","renderControl","noFillEnd","VerticalGroup","spacing","index","op","opp","push","valueOptions","HorizontalGroup","f","i","size","_","values","every","AnnotationsHelp","psa","alignOptions","formatAlignmentText","alignment","ALIGNMENTS","ap","seconds","parseInt","rangeUtil","AliasBy","alias","setAlias","propagateOnChange","debounce","target","Input","id","aggOptions","useAggregationOptionsByMetric","selected","useSelectedFromOptions","getAggregationOptionsByMetric","a","VariableQueryField","InlineField","InlineLabel","Preprocessor","VisualMetricQueryEditor","visibleOptions","hidden","NONE_OPTION","useOptions","RadioButtonGroup","GoogleAuthType","valueTypes","metricKinds","AGGREGATIONS","getTemplateSrv","extractServicesFromMetricDescriptors","getMetricTypesByService","interpolatedMetricType","selectedService","metricTypes","metricTypeExistInArray","metricTypeByService","selectedMetricType","getAlignmentOptionsByMetric","metricValueType","indexOf","getLabelKeys","option","groups","reduce","acc","curr","arr","split","group","initial","join","entries","chunk","MetricFindQueryTypes","t","n","default","l","r","assign","arguments","prototype","call","apply","Symbol","iterator","next","done","error","return","u","g","c","p","y","h","trim","JSON","parse","E","isValid","privateKey","private_key","tokenUri","token_uri","clientEmail","client_email","projectId","project_id","createElement","Fragment","Field","invalid","Boolean","FileDropzone","multiple","accept","readAs","onLoad","style","margin","fontSize","typography","h4","textAlign","LinkButton","fill","autoFocus","color","primary","isObject","T","onReset","defaultProject","readOnly","addonAfter","Tooltip","content","exports","JWT","GCE","k","ariaLabel","ConnectionConfig","onOptionsChange","jsonData","secureJsonFields","d","secureJsonData","authenticationType","FieldSet","onUpdateDatasourceJsonDataOption","marginTop","rel","href","Alert","title","severity","module"],"sourceRoot":""}