diff --git a/public/app/plugins/datasource/cloud-monitoring/components/Experimental/SLO.tsx b/public/app/plugins/datasource/cloud-monitoring/components/Experimental/SLO.tsx new file mode 100644 index 00000000000..bdf16170ba5 --- /dev/null +++ b/public/app/plugins/datasource/cloud-monitoring/components/Experimental/SLO.tsx @@ -0,0 +1,56 @@ +import React, { useEffect, useState } from 'react'; + +import { SelectableValue } from '@grafana/data'; +import { Select } from '@grafana/ui'; + +import { QueryEditorRow } from '..'; +import { SELECT_WIDTH } from '../../constants'; +import CloudMonitoringDatasource from '../../datasource'; +import { SLOQuery } from '../../types'; + +export interface Props { + refId: string; + onChange: (query: SLOQuery) => void; + query: SLOQuery; + templateVariableOptions: Array>; + datasource: CloudMonitoringDatasource; +} + +export const SLO: React.FC = ({ refId, query, templateVariableOptions, onChange, datasource }) => { + const [slos, setSLOs] = useState>>([]); + const { projectName, serviceId } = query; + + useEffect(() => { + if (!projectName || !serviceId) { + return; + } + + datasource.getServiceLevelObjectives(projectName, serviceId).then((sloIds: Array>) => { + setSLOs([ + { + label: 'Template Variables', + options: templateVariableOptions, + }, + ...sloIds, + ]); + }); + }, [datasource, projectName, serviceId, templateVariableOptions]); + + return ( + + s.value === query?.selectorName ?? '')} + options={[ + { + label: 'Template Variables', + options: templateVariableOptions, + }, + ...SELECTORS, + ]} + onChange={({ value: selectorName }) => onChange({ ...query, selectorName: selectorName ?? '' })} + /> + + ); +}; diff --git a/public/app/plugins/datasource/cloud-monitoring/components/Experimental/Service.tsx b/public/app/plugins/datasource/cloud-monitoring/components/Experimental/Service.tsx new file mode 100644 index 00000000000..a759874da2e --- /dev/null +++ b/public/app/plugins/datasource/cloud-monitoring/components/Experimental/Service.tsx @@ -0,0 +1,54 @@ +import React, { useEffect, useState } from 'react'; + +import { SelectableValue } from '@grafana/data'; +import { Select } from '@grafana/ui'; + +import { QueryEditorRow } from '..'; +import { SELECT_WIDTH } from '../../constants'; +import CloudMonitoringDatasource from '../../datasource'; +import { SLOQuery } from '../../types'; + +export interface Props { + refId: string; + onChange: (query: SLOQuery) => void; + query: SLOQuery; + templateVariableOptions: Array>; + datasource: CloudMonitoringDatasource; +} + +export const Service: React.FC = ({ refId, query, templateVariableOptions, onChange, datasource }) => { + const [services, setServices] = useState>>([]); + const { projectName } = query; + + useEffect(() => { + if (!projectName) { + return; + } + + datasource.getSLOServices(projectName).then((services: Array>) => { + setServices([ + { + label: 'Template Variables', + options: templateVariableOptions, + }, + ...services, + ]); + }); + }, [datasource, projectName, templateVariableOptions]); + + return ( + +