1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { AlertmanagerSilence } from '../models/alertmanager-silence';
import {
AlertmanagerAlert,
AlertmanagerNotification,
PrometheusRuleGroup
} from '../models/prometheus-alerts';
import { SettingsService } from './settings.service';
@Injectable({
providedIn: 'root'
})
export class PrometheusService {
private baseURL = 'api/prometheus';
private settingsKey = {
alertmanager: 'api/settings/alertmanager-api-host',
prometheus: 'api/settings/prometheus-api-host'
};
constructor(private http: HttpClient, private settingsService: SettingsService) {}
ifAlertmanagerConfigured(fn: (value?: string) => void, elseFn?: () => void): void {
this.settingsService.ifSettingConfigured(this.settingsKey.alertmanager, fn, elseFn);
}
disableAlertmanagerConfig(): void {
this.settingsService.disableSetting(this.settingsKey.alertmanager);
}
ifPrometheusConfigured(fn: (value?: string) => void, elseFn?: () => void): void {
this.settingsService.ifSettingConfigured(this.settingsKey.prometheus, fn, elseFn);
}
disablePrometheusConfig(): void {
this.settingsService.disableSetting(this.settingsKey.prometheus);
}
getAlerts(params = {}): Observable<AlertmanagerAlert[]> {
return this.http.get<AlertmanagerAlert[]>(this.baseURL, { params });
}
getSilences(params = {}): Observable<AlertmanagerSilence[]> {
return this.http.get<AlertmanagerSilence[]>(`${this.baseURL}/silences`, { 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<object>(`${this.baseURL}/silence`, silence, { observe: 'response' });
}
expireSilence(silenceId: string) {
return this.http.delete(`${this.baseURL}/silence/${silenceId}`, { observe: 'response' });
}
getNotifications(
notification?: AlertmanagerNotification
): Observable<AlertmanagerNotification[]> {
const url = `${this.baseURL}/notifications?from=${
notification && notification.id ? notification.id : 'last'
}`;
return this.http.get<AlertmanagerNotification[]>(url);
}
}
|