From: Patrick Seidensal Date: Tue, 19 Nov 2019 15:45:52 +0000 (+0100) Subject: mgr/dashboard: return Prometheus alert groups, too X-Git-Tag: v15.1.0~650^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4917279f9f5ed321cada297706a96e7ce16f01eb;p=ceph.git mgr/dashboard: return Prometheus alert groups, too Fixes: https://tracker.ceph.com/issues/42877 Signed-off-by: Patrick Seidensal --- diff --git a/src/pybind/mgr/dashboard/controllers/prometheus.py b/src/pybind/mgr/dashboard/controllers/prometheus.py index 4145fbdfd8c..40333541d1a 100644 --- a/src/pybind/mgr/dashboard/controllers/prometheus.py +++ b/src/pybind/mgr/dashboard/controllers/prometheus.py @@ -56,12 +56,7 @@ class Prometheus(PrometheusRESTController): @RESTController.Collection(method='GET') def rules(self, **params): - data = self.prometheus_proxy('GET', '/rules', params) - configs = data['groups'] - rules = [] - for config in configs: - rules += config['rules'] - return rules + return self.prometheus_proxy('GET', '/rules', params) @RESTController.Collection(method='GET', path='/silences') def get_silences(self, **params): diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.spec.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.spec.ts index 216c10bef22..cd338b4355d 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.spec.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.spec.ts @@ -108,11 +108,22 @@ describe('SilenceFormComponent', () => { ); ifPrometheusSpy = spyOn(prometheusService, 'ifPrometheusConfigured').and.callFake((fn) => fn()); rulesSpy = spyOn(prometheusService, 'getRules').and.callFake(() => - of([ - prometheus.createRule('alert0', 'someSeverity', [prometheus.createAlert('alert0')]), - prometheus.createRule('alert1', 'someSeverity', []), - prometheus.createRule('alert2', 'someOtherSeverity', [prometheus.createAlert('alert2')]) - ]) + of({ + groups: [ + { + file: '', + interval: 0, + name: '', + rules: [ + prometheus.createRule('alert0', 'someSeverity', [prometheus.createAlert('alert0')]), + prometheus.createRule('alert1', 'someSeverity', []), + prometheus.createRule('alert2', 'someOtherSeverity', [ + prometheus.createAlert('alert2') + ]) + ] + } + ] + }) ); router = TestBed.get(Router); diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.ts index a9eb0aed0d8..8e984e90758 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.ts @@ -186,7 +186,12 @@ export class SilenceFormComponent { this.prometheusService.ifPrometheusConfigured( () => this.prometheusService.getRules().subscribe( - (rules) => (this.rules = rules), + (groups) => { + this.rules = groups['groups'].reduce( + (acc, group) => _.concat(acc, group.rules), + [] + ); + }, () => { this.prometheusService.disablePrometheusConfig(); this.rules = []; diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/api/prometheus.service.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/api/prometheus.service.ts index bdcd7fd35f5..81488bbf045 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/shared/api/prometheus.service.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/api/prometheus.service.ts @@ -7,7 +7,7 @@ import { AlertmanagerSilence } from '../models/alertmanager-silence'; import { AlertmanagerAlert, AlertmanagerNotification, - PrometheusRule + PrometheusRuleGroup } from '../models/prometheus-alerts'; import { ApiModule } from './api.module'; import { SettingsService } from './settings.service'; @@ -48,8 +48,8 @@ export class PrometheusService { return this.http.get(`${this.baseURL}/silences`, { params }); } - getRules(params = {}): Observable { - return this.http.get(`${this.baseURL}/rules`, { params }); + getRules(params = {}): Observable<{ groups: PrometheusRuleGroup[] }> { + return this.http.get<{ groups: PrometheusRuleGroup[] }>(`${this.baseURL}/rules`, { params }); } setSilence(silence: AlertmanagerSilence) { diff --git a/src/pybind/mgr/dashboard/frontend/src/app/shared/models/prometheus-alerts.ts b/src/pybind/mgr/dashboard/frontend/src/app/shared/models/prometheus-alerts.ts index 56a0eb7f605..222581b1cda 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/shared/models/prometheus-alerts.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/shared/models/prometheus-alerts.ts @@ -26,6 +26,12 @@ class PrometheusAlert { value: number; } +export interface PrometheusRuleGroup { + name: string; + file: string; + rules: PrometheusRule[]; +} + export class PrometheusRule { name: string; // => PrometheusAlertLabels.alertname query: string;