]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: return Prometheus alert groups, too
authorPatrick Seidensal <pseidensal@suse.com>
Tue, 19 Nov 2019 15:45:52 +0000 (16:45 +0100)
committerPatrick Seidensal <pseidensal@suse.com>
Tue, 3 Dec 2019 15:54:24 +0000 (16:54 +0100)
Fixes: https://tracker.ceph.com/issues/42877
Signed-off-by: Patrick Seidensal <pseidensal@suse.com>
src/pybind/mgr/dashboard/controllers/prometheus.py
src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.spec.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/silence-form/silence-form.component.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/api/prometheus.service.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/models/prometheus-alerts.ts

index 4145fbdfd8ca0518e7559276efa9469e90c47364..40333541d1aa6da28edc0bfb092faf8a796a7d67 100644 (file)
@@ -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):
index 216c10bef228f05f7b9c3ea9e618d3064bd17b50..cd338b4355d7bc6948f62354eb70ee5fefef7479 100644 (file)
@@ -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);
index a9eb0aed0d89fbf84b2b5c343697f25de94f6f07..8e984e907584e3d1e04529ba370fd2e169cd446c 100644 (file)
@@ -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<PrometheusRule>(acc, group.rules),
+              []
+            );
+          },
           () => {
             this.prometheusService.disablePrometheusConfig();
             this.rules = [];
index bdcd7fd35f526e109c9741d20ccdee872ac54b41..81488bbf0453e5660356f63d0c158d65442395ce 100644 (file)
@@ -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<AlertmanagerSilence[]>(`${this.baseURL}/silences`, { params });
   }
 
-  getRules(params = {}): Observable<PrometheusRule[]> {
-    return this.http.get<PrometheusRule[]>(`${this.baseURL}/rules`, { params });
+  getRules(params = {}): Observable<{ groups: PrometheusRuleGroup[] }> {
+    return this.http.get<{ groups: PrometheusRuleGroup[] }>(`${this.baseURL}/rules`, { params });
   }
 
   setSilence(silence: AlertmanagerSilence) {
index 56a0eb7f605d35d6a2f55f820cf8f55284eba2f4..222581b1cda686415520783a991540d7dce00b3f 100644 (file)
@@ -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;