Skip to content

Commit c997f5b

Browse files
committed
check: merge each field of Alert.PagerDuty config
1 parent 06fa663 commit c997f5b

File tree

2 files changed

+58
-2
lines changed

2 files changed

+58
-2
lines changed

internal/check/checks.go

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func Setup(ctx context.Context, logger log.Logger, conf *config.Config) (*Instan
2727
"check_name": log.String(check.Name),
2828
})
2929

30-
client, err := provider.NewClient(checkLogger, cmp.Or(check.Alert, conf.Alert))
30+
client, err := provider.NewClient(checkLogger, mergeAlertConfigs(check.Alert, conf.Alert))
3131
if err != nil {
3232
return nil, fmt.Errorf("setting up check[%d] provider: %w", idx, err)
3333
}
@@ -67,7 +67,7 @@ func (xs *Instances) CheckIn(ctx context.Context, logger log.Logger, checkID str
6767
})
6868

6969
// Grab the provider client for the check
70-
client, err := provider.NewClient(logger, cmp.Or(found.Alert, xs.conf.Alert))
70+
client, err := provider.NewClient(logger, mergeAlertConfigs(found.Alert, xs.conf.Alert))
7171
if err != nil {
7272
return nil, fmt.Errorf("problem getting client for check-in: %w", err)
7373
}
@@ -82,3 +82,23 @@ func (xs *Instances) CheckIn(ctx context.Context, logger log.Logger, checkID str
8282
NextExpectedCheckIn: checkInExpected,
8383
}, nil
8484
}
85+
86+
func mergeAlertConfigs(local, global config.Alert) config.Alert {
87+
var out config.Alert
88+
89+
// PagerDuty config merging
90+
out.PagerDuty = cmp.Or(local.PagerDuty, global.PagerDuty)
91+
92+
if local.PagerDuty != nil && global.PagerDuty != nil {
93+
// Prefer the local config over the global config
94+
out.PagerDuty = &config.PagerDuty{
95+
ApiKey: cmp.Or(local.PagerDuty.ApiKey, global.PagerDuty.ApiKey),
96+
EscalationPolicy: cmp.Or(local.PagerDuty.EscalationPolicy, global.PagerDuty.EscalationPolicy),
97+
From: cmp.Or(local.PagerDuty.From, global.PagerDuty.From),
98+
RoutingKey: cmp.Or(local.PagerDuty.RoutingKey, global.PagerDuty.RoutingKey),
99+
Urgency: cmp.Or(local.PagerDuty.Urgency, global.PagerDuty.Urgency),
100+
}
101+
}
102+
103+
return out
104+
}

internal/check/checks_test.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package check
2+
3+
import (
4+
"testing"
5+
6+
"github.com/adamdecaf/deadcheck/internal/config"
7+
8+
"github.com/stretchr/testify/require"
9+
)
10+
11+
func TestMergeAlertConfigs(t *testing.T) {
12+
t.Run("pagerduty", func(t *testing.T) {
13+
var local config.Alert
14+
global := config.Alert{
15+
PagerDuty: &config.PagerDuty{
16+
ApiKey: "api-key",
17+
},
18+
}
19+
got := mergeAlertConfigs(local, global)
20+
require.Equal(t, "api-key", got.PagerDuty.ApiKey)
21+
22+
local.PagerDuty = &config.PagerDuty{
23+
ApiKey: "other-key",
24+
}
25+
got = mergeAlertConfigs(local, global)
26+
require.Equal(t, "other-key", got.PagerDuty.ApiKey)
27+
28+
global.PagerDuty.Urgency = "high"
29+
got = mergeAlertConfigs(local, global)
30+
require.Equal(t, "high", got.PagerDuty.Urgency)
31+
32+
local.PagerDuty.Urgency = "low"
33+
got = mergeAlertConfigs(local, global)
34+
require.Equal(t, "low", got.PagerDuty.Urgency)
35+
})
36+
}

0 commit comments

Comments
 (0)