1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import { DataQuery, DataSourceInstanceSettings } from '@grafana/data';
- import { LokiQuery } from 'app/plugins/datasource/loki/types';
- import { PromQuery } from 'app/plugins/datasource/prometheus/types';
- import { CombinedRule } from 'app/types/unified-alerting';
- import { AlertQuery } from 'app/types/unified-alerting-dto';
- import { isCloudRulesSource, isGrafanaRulesSource } from './datasource';
- import { isGrafanaRulerRule } from './rules';
- export function alertRuleToQueries(combinedRule: CombinedRule | undefined | null): AlertQuery[] {
- if (!combinedRule) {
- return [];
- }
- const { namespace, rulerRule } = combinedRule;
- const { rulesSource } = namespace;
- if (isGrafanaRulesSource(rulesSource)) {
- if (isGrafanaRulerRule(rulerRule)) {
- return rulerRule.grafana_alert.data;
- }
- }
- if (isCloudRulesSource(rulesSource)) {
- const model = cloudAlertRuleToModel(rulesSource, combinedRule);
- return [
- {
- refId: model.refId,
- datasourceUid: rulesSource.uid,
- queryType: '',
- model,
- relativeTimeRange: {
- from: 360,
- to: 0,
- },
- },
- ];
- }
- return [];
- }
- function cloudAlertRuleToModel(dsSettings: DataSourceInstanceSettings, rule: CombinedRule): DataQuery {
- const refId = 'A';
- switch (dsSettings.type) {
- case 'prometheus': {
- const query: PromQuery = {
- refId,
- expr: rule.query,
- };
- return query;
- }
- case 'loki': {
- const query: LokiQuery = {
- refId,
- expr: rule.query,
- };
- return query;
- }
- default:
- throw new Error(`Query for datasource type ${dsSettings.type} is currently not supported by cloud alert rules.`);
- }
- }
|