@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):
);
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);
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 = [];
import {
AlertmanagerAlert,
AlertmanagerNotification,
- PrometheusRule
+ PrometheusRuleGroup
} from '../models/prometheus-alerts';
import { ApiModule } from './api.module';
import { SettingsService } from './settings.service';
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) {
value: number;
}
+export interface PrometheusRuleGroup {
+ name: string;
+ file: string;
+ rules: PrometheusRule[];
+}
+
export class PrometheusRule {
name: string; // => PrometheusAlertLabels.alertname
query: string;