import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
+import { map } from 'rxjs/operators';
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';
constructor(private http: HttpClient, private settingsService: SettingsService) {}
- ifAlertmanagerConfigured(fn, elseFn?): void {
+ ifAlertmanagerConfigured(fn: (value?: string) => void, elseFn?: () => void): void {
this.settingsService.ifSettingConfigured(this.settingsKey.alertmanager, fn, elseFn);
}
this.settingsService.disableSetting(this.settingsKey.alertmanager);
}
- ifPrometheusConfigured(fn, elseFn?): void {
+ ifPrometheusConfigured(fn: (value?: string) => void, elseFn?: () => void): void {
this.settingsService.ifSettingConfigured(this.settingsKey.prometheus, fn, elseFn);
}
return this.http.get<AlertmanagerSilence[]>(`${this.baseURL}/silences`, { params });
}
- getRules(params = {}): Observable<PrometheusRule[]> {
- return this.http.get<PrometheusRule[]>(`${this.baseURL}/rules`, { params });
+ getRules(
+ type: 'all' | 'alerting' | 'rewrites' = 'all'
+ ): Observable<{ groups: PrometheusRuleGroup[] }> {
+ return this.http.get<{ groups: PrometheusRuleGroup[] }>(`${this.baseURL}/rules`).pipe(
+ map((rules) => {
+ if (['alerting', 'rewrites'].includes(type)) {
+ rules.groups.map((group) => {
+ group.rules = group.rules.filter((rule) => rule.type === type);
+ });
+ }
+ return rules;
+ })
+ );
}
setSilence(silence: AlertmanagerSilence) {
- return this.http.post(`${this.baseURL}/silence`, silence, { observe: 'response' });
+ return this.http.post<object>(`${this.baseURL}/silence`, silence, { observe: 'response' });
}
expireSilence(silenceId: string) {