diff --git a/notification/notification.go b/notification/notification.go index bad3fa8f2..21c513d88 100644 --- a/notification/notification.go +++ b/notification/notification.go @@ -16,7 +16,6 @@ package notification import ( "bytes" "encoding/json" - "flag" "io" "io/ioutil" "net/http" @@ -42,10 +41,6 @@ const ( subsystem = "notifications" ) -var ( - deadline = flag.Duration("alertmanager.http-deadline", 10*time.Second, "Alert manager HTTP API timeout.") -) - // NotificationReq is a request for sending a notification to the alert manager // for a single alert vector element. type NotificationReq struct { @@ -93,13 +88,20 @@ type NotificationHandler struct { stopped chan struct{} } +// NotificationHandlerOptions are the configurable parameters of a NotificationHandler. +type NotificationHandlerOptions struct { + AlertmanagerURL string + QueueCapacity int + Deadline time.Duration +} + // NewNotificationHandler constructs a new NotificationHandler. -func NewNotificationHandler(alertmanagerURL string, notificationQueueCapacity int) *NotificationHandler { +func NewNotificationHandler(o *NotificationHandlerOptions) *NotificationHandler { return &NotificationHandler{ - alertmanagerURL: strings.TrimRight(alertmanagerURL, "/"), - pendingNotifications: make(chan NotificationReqs, notificationQueueCapacity), + alertmanagerURL: strings.TrimRight(o.AlertmanagerURL, "/"), + pendingNotifications: make(chan NotificationReqs, o.QueueCapacity), - httpClient: httputil.NewDeadlineClient(*deadline), + httpClient: httputil.NewDeadlineClient(o.Deadline), notificationLatency: prometheus.NewSummary(prometheus.SummaryOpts{ Namespace: namespace, @@ -132,7 +134,7 @@ func NewNotificationHandler(alertmanagerURL string, notificationQueueCapacity in nil, nil, ), prometheus.GaugeValue, - float64(notificationQueueCapacity), + float64(o.QueueCapacity), ), stopped: make(chan struct{}), } diff --git a/notification/notification_test.go b/notification/notification_test.go index b13038729..f188c806d 100644 --- a/notification/notification_test.go +++ b/notification/notification_test.go @@ -46,7 +46,11 @@ type testNotificationScenario struct { } func (s *testNotificationScenario) test(i int, t *testing.T) { - h := NewNotificationHandler("alertmanager_url", 0) + h := NewNotificationHandler(&NotificationHandlerOptions{ + AlertmanagerURL: "alertmanager_url", + QueueCapacity: 0, + Deadline: 10 * time.Second, + }) defer h.Stop() receivedPost := make(chan bool, 1)