@@ -31,7 +31,6 @@ import (
31
31
"github.com/prometheus/common/version"
32
32
"github.com/rs/cors"
33
33
34
- "github.com/prometheus/alertmanager/api/metrics"
35
34
open_api_models "github.com/prometheus/alertmanager/api/v2/models"
36
35
"github.com/prometheus/alertmanager/api/v2/restapi"
37
36
"github.com/prometheus/alertmanager/api/v2/restapi/operations"
@@ -40,9 +39,12 @@ import (
40
39
general_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/general"
41
40
receiver_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/receiver"
42
41
silence_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/silence"
42
+
43
+ "github.com/prometheus/alertmanager/api/metrics"
43
44
"github.com/prometheus/alertmanager/cluster"
44
45
"github.com/prometheus/alertmanager/config"
45
46
"github.com/prometheus/alertmanager/dispatch"
47
+ "github.com/prometheus/alertmanager/notify"
46
48
"github.com/prometheus/alertmanager/pkg/labels"
47
49
"github.com/prometheus/alertmanager/provider"
48
50
"github.com/prometheus/alertmanager/silence"
@@ -70,7 +72,8 @@ type API struct {
70
72
logger log.Logger
71
73
m * metrics.Alerts
72
74
73
- Handler http.Handler
75
+ Handler http.Handler
76
+ receivers []* notify.Receiver
74
77
}
75
78
76
79
type (
@@ -137,13 +140,14 @@ func (api *API) requestLogger(req *http.Request) log.Logger {
137
140
}
138
141
139
142
// Update sets the API struct members that may change between reloads of alertmanager.
140
- func (api * API ) Update (cfg * config.Config , setAlertStatus setAlertStatusFn ) {
143
+ func (api * API ) Update (cfg * config.Config , setAlertStatus setAlertStatusFn , receivers [] * notify. Receiver ) {
141
144
api .mtx .Lock ()
142
145
defer api .mtx .Unlock ()
143
146
144
147
api .alertmanagerConfig = cfg
145
148
api .route = dispatch .NewRoute (cfg .Route , nil )
146
149
api .setAlertStatus = setAlertStatus
150
+ api .receivers = receivers
147
151
}
148
152
149
153
func (api * API ) getStatusHandler (params general_ops.GetStatusParams ) middleware.Responder {
@@ -204,11 +208,38 @@ func (api *API) getStatusHandler(params general_ops.GetStatusParams) middleware.
204
208
205
209
func (api * API ) getReceiversHandler (params receiver_ops.GetReceiversParams ) middleware.Responder {
206
210
api .mtx .RLock ()
207
- defer api .mtx .RUnlock ()
211
+ configReceivers := api .receivers
212
+ api .mtx .RUnlock ()
213
+
214
+ receivers := make ([]* open_api_models.Receiver , 0 , len (configReceivers ))
215
+ for _ , r := range configReceivers {
216
+ integrations := make ([]* open_api_models.Integration , 0 , len (r .Integrations ()))
217
+
218
+ for _ , integration := range r .Integrations () {
219
+ notify , duration , err := integration .GetReport ()
220
+ iname := integration .Name ()
221
+ integrations = append (integrations , & open_api_models.Integration {
222
+ Name : & iname ,
223
+ SendResolve : integration .SendResolved (),
224
+ LastNotify : notify .UTC ().String (),
225
+ LastNotifyDuration : duration .String (),
226
+ //TODO: Last error should be optional.
227
+ LastError : func () string {
228
+ if err != nil {
229
+ return err .Error ()
230
+ }
231
+ return ""
232
+ }(),
233
+ })
234
+ }
235
+
236
+ model := & open_api_models.Receiver {
237
+ Name : r .Name (),
238
+ Active : r .Active (),
239
+ Integrations : integrations ,
240
+ }
208
241
209
- receivers := make ([]* open_api_models.Receiver , 0 , len (api .alertmanagerConfig .Receivers ))
210
- for _ , r := range api .alertmanagerConfig .Receivers {
211
- receivers = append (receivers , & open_api_models.Receiver {Name : & r .Name })
242
+ receivers = append (receivers , model )
212
243
}
213
244
214
245
return receiver_ops .NewGetReceiversOK ().WithPayload (receivers )
@@ -390,7 +421,7 @@ func (api *API) getAlertGroupsHandler(params alertgroup_ops.GetAlertGroupsParams
390
421
391
422
for _ , alertGroup := range alertGroups {
392
423
ag := & open_api_models.AlertGroup {
393
- Receiver : & open_api_models.Receiver {Name : & alertGroup .Receiver },
424
+ Receiver : & open_api_models.Receiver {Name : alertGroup .Receiver },
394
425
Labels : ModelLabelSetToAPILabelSet (alertGroup .Labels ),
395
426
Alerts : make ([]* open_api_models.GettableAlert , 0 , len (alertGroup .Alerts )),
396
427
}
0 commit comments