Files

86 lines
1.8 KiB
Go

package alertmanager
import (
"encoding/json"
"net/http"
"net/url"
"time"
"github.com/grafana/e2e"
)
const (
defaultWebhookImage = "webhook-receiver"
webhookBinary = "/bin/main"
webhookHTTPPort = 8080
)
type WebhookService struct {
*e2e.HTTPService
}
func NewWebhookService(name string, flags, envVars map[string]string) *WebhookService {
svc := &WebhookService{
HTTPService: e2e.NewHTTPService(
name,
"webhook-receiver",
e2e.NewCommandWithoutEntrypoint(webhookBinary, e2e.BuildArgs(flags)...),
e2e.NewHTTPReadinessProbe(webhookHTTPPort, "/ready", 200, 299),
webhookHTTPPort),
}
svc.SetEnvVars(envVars)
return svc
}
type WebhookClient struct {
c http.Client
u *url.URL
}
func NewWebhookClient(u string) (*WebhookClient, error) {
pu, err := url.Parse(u)
if err != nil {
return nil, err
}
return &WebhookClient{
c: http.Client{},
u: pu,
}, nil
}
type GetNotificationsResponse struct {
Stats map[string]int `json:"stats"`
History []struct {
Status string `json:"status"`
TimeNow time.Time `json:"timeNow"`
StartsAt time.Time `json:"startsAt"`
Node string `json:"node"`
DeltaLastSeconds float64 `json:"deltaLastSeconds"`
DeltaStartSeconds float64 `json:"deltaStartSeconds"`
} `json:"history"`
}
// GetNotifications fetches notifications from the webhook server
func (c *WebhookClient) GetNotifications() (*GetNotificationsResponse, error) {
u := c.u.ResolveReference(&url.URL{Path: "/notifications"})
resp, err := c.c.Get(u.String())
if err != nil {
return nil, err
}
//nolint:errcheck
defer resp.Body.Close()
res := GetNotificationsResponse{}
err = json.NewDecoder(resp.Body).Decode(&res)
if err != nil {
return nil, err
}
return &res, nil
}