Skip to content
This repository has been archived by the owner on Jul 22, 2020. It is now read-only.

Commit

Permalink
Refactor NewAlertmanager() to not register new instance by default
Browse files Browse the repository at this point in the history
This makes it easier to test code
  • Loading branch information
prymitive committed Jan 8, 2018
1 parent efda91f commit 983c7f5
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 27 deletions.
3 changes: 2 additions & 1 deletion internal/alertmanager/dedup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ func init() {
log.SetLevel(log.ErrorLevel)
for i, uri := range mock.ListAllMockURIs() {
name := fmt.Sprintf("dedup-mock-%d", i)
alertmanager.NewAlertmanager(name, uri, alertmanager.WithRequestTimeout(time.Second))
am := alertmanager.NewAlertmanager(name, uri, alertmanager.WithRequestTimeout(time.Second))
alertmanager.RegisterAlertmanager(am)
}
}

Expand Down
29 changes: 16 additions & 13 deletions internal/alertmanager/upstream.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,7 @@ var (
)

// NewAlertmanager creates a new Alertmanager instance
func NewAlertmanager(name, uri string, opts ...Option) error {
if _, found := upstreams[name]; found {
return fmt.Errorf("Alertmanager upstream '%s' already exist", name)
}

for _, am := range upstreams {
if am.URI == uri {
return fmt.Errorf("Alertmanager upstream '%s' already collects from '%s'", am.Name, am.URI)
}
}

func NewAlertmanager(name, uri string, opts ...Option) *Alertmanager {
am := &Alertmanager{
URI: uri,
RequestTimeout: time.Second * 10,
Expand All @@ -50,10 +40,23 @@ func NewAlertmanager(name, uri string, opts ...Option) error {
opt(am)
}

upstreams[name] = am
return am
}

log.Infof("[%s] Configured Alertmanager source at %s", name, uri)
// RegisterAlertmanager will add an Alertmanager instance to the list of
// instances used when pulling alerts from upstreams
func RegisterAlertmanager(am *Alertmanager) error {
if _, found := upstreams[am.Name]; found {
return fmt.Errorf("Alertmanager upstream '%s' already exist", am.Name)
}

for _, existingAM := range upstreams {
if existingAM.URI == am.URI {
return fmt.Errorf("Alertmanager upstream '%s' already collects from '%s'", existingAM.Name, existingAM.URI)
}
}
upstreams[am.Name] = am
log.Infof("[%s] Configured Alertmanager source at %s (proxied: %v)", am.Name, am.URI, am.ProxyRequests)
return nil
}

Expand Down
6 changes: 1 addition & 5 deletions internal/filters/filter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -485,11 +485,7 @@ var tests = []filterTest{
func TestFilters(t *testing.T) {
log.SetLevel(log.ErrorLevel)

err := alertmanager.NewAlertmanager("test", "http://localhost", alertmanager.WithRequestTimeout(time.Second))
am := alertmanager.GetAlertmanagerByName("test")
if err != nil {
t.Error(err)
}
am := alertmanager.NewAlertmanager("test", "http://localhost", alertmanager.WithRequestTimeout(time.Second))
for _, ft := range tests {
alert := models.Alert(ft.Alert)
if &ft.Silence != nil {
Expand Down
4 changes: 2 additions & 2 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,8 @@ func setupRouter(router *gin.Engine) {

func setupUpstreams() {
for _, s := range config.Config.Alertmanager.Servers {
var err error
err = alertmanager.NewAlertmanager(s.Name, s.URI, alertmanager.WithRequestTimeout(s.Timeout), alertmanager.WithProxy(s.Proxy))
am := alertmanager.NewAlertmanager(s.Name, s.URI, alertmanager.WithRequestTimeout(s.Timeout), alertmanager.WithProxy(s.Proxy))
err := alertmanager.RegisterAlertmanager(am)
if err != nil {
log.Fatalf("Failed to configure Alertmanager '%s' with URI '%s': %s", s.Name, s.URI, err)
}
Expand Down
13 changes: 7 additions & 6 deletions proxy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,12 +90,13 @@ var proxyTests = []proxyTest{

func TestProxy(t *testing.T) {
r := ginTestEngine()
setupRouterProxyHandlers(r, &alertmanager.Alertmanager{
URI: "http://localhost:9093",
RequestTimeout: time.Second * 5,
Name: "dummy",
ProxyRequests: true,
})
am := alertmanager.NewAlertmanager(
"dummy",
"http://localhost:9093",
alertmanager.WithRequestTimeout(time.Second*5),
alertmanager.WithProxy(true),
)
setupRouterProxyHandlers(r, am)

httpmock.Activate()
defer httpmock.DeactivateAndReset()
Expand Down

0 comments on commit 983c7f5

Please sign in to comment.