Skip to content

Commit 313e52e

Browse files
committed
feat: add BetterStack uptime provider - split provider package in subpackages
1 parent 5513f62 commit 313e52e

File tree

9 files changed

+107
-82
lines changed

9 files changed

+107
-82
lines changed

cmd/main.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ import (
2222
"os"
2323

2424
"github.com/PDOK/uptime-operator/internal/service"
25-
"github.com/PDOK/uptime-operator/internal/service/providers"
25+
"github.com/PDOK/uptime-operator/internal/service/providers/betterstack"
26+
"github.com/PDOK/uptime-operator/internal/service/providers/pingdom"
2627
"github.com/PDOK/uptime-operator/internal/util"
2728
"github.com/peterbourgon/ff"
2829
"sigs.k8s.io/controller-runtime/pkg/cache"
@@ -144,13 +145,13 @@ func main() {
144145
setupLog.Error(err, "Unable to parse 'pingdom-alert-integration-ids' flag")
145146
os.Exit(1)
146147
}
147-
uptimeProviderSettings = providers.PingdomSettings{
148+
uptimeProviderSettings = pingdom.Settings{
148149
APIToken: pingdomAPIToken,
149150
UserIDs: alertUserIDs,
150151
IntegrationIDs: alertIntegrationIDs,
151152
}
152153
} else if uptimeProviderID == service.ProviderBetterStack {
153-
uptimeProviderSettings = providers.BetterStackSettings{
154+
uptimeProviderSettings = betterstack.Settings{
154155
APIToken: betterstackAPIToken,
155156
}
156157
}
Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package providers
1+
package betterstack
22

33
import (
44
"context"
@@ -9,53 +9,54 @@ import (
99
"time"
1010

1111
"github.com/PDOK/uptime-operator/internal/model"
12+
"github.com/PDOK/uptime-operator/internal/service/providers"
1213
"sigs.k8s.io/controller-runtime/pkg/log"
1314
)
1415

1516
const betterStackBaseURL = "https://uptime.betterstack.com"
1617

17-
type BetterStackSettings struct {
18+
type Settings struct {
1819
APIToken string
1920
}
2021

21-
type BetterStackUptimeProvider struct {
22-
settings BetterStackSettings
22+
type BetterStack struct {
23+
settings Settings
2324
httpClient *http.Client
2425
}
2526

26-
// NewBetterStackProvider creates a BetterStackUptimeProvider
27-
func NewBetterStackProvider(settings BetterStackSettings) *BetterStackUptimeProvider {
27+
// New creates a BetterStack
28+
func New(settings Settings) *BetterStack {
2829
if settings.APIToken == "" {
2930
classiclog.Fatal("Better Stack API token is not provided")
3031
}
31-
return &BetterStackUptimeProvider{
32+
return &BetterStack{
3233
settings: settings,
3334
httpClient: &http.Client{Timeout: time.Duration(5) * time.Minute},
3435
}
3536
}
3637

3738
// CreateOrUpdateCheck create the given check with Better Stack, or update an existing check. Needs to be idempotent!
38-
func (m *BetterStackUptimeProvider) CreateOrUpdateCheck(ctx context.Context, check model.UptimeCheck) (err error) {
39+
func (b *BetterStack) CreateOrUpdateCheck(_ context.Context, _ model.UptimeCheck) (err error) {
3940
// TODO
4041
return err
4142
}
4243

4344
// DeleteCheck deletes the given check from Better Stack
44-
func (m *BetterStackUptimeProvider) DeleteCheck(ctx context.Context, check model.UptimeCheck) error {
45+
func (b *BetterStack) DeleteCheck(ctx context.Context, check model.UptimeCheck) error {
4546
log.FromContext(ctx).Info("deleting check", "check", check)
4647
// TODO
4748
return nil
4849
}
4950

50-
func (m *BetterStackUptimeProvider) findCheck(ctx context.Context, check model.UptimeCheck) (int64, error) {
51-
result := checkNotFound
51+
func (b *BetterStack) findCheck(ctx context.Context, _ model.UptimeCheck) (int64, error) {
52+
result := providers.CheckNotFound
5253

53-
req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("%s/api/v3/metadata", betterStackBaseURL), nil)
54+
req, err := http.NewRequest(http.MethodGet, betterStackBaseURL+"/api/v3/metadata", nil)
5455
if err != nil {
5556
return result, err
5657
}
57-
req.Header.Add(headerAccept, "application/json")
58-
resp, err := m.execRequest(req)
58+
req.Header.Add(providers.HeaderAccept, "application/json")
59+
resp, err := b.execRequest(req)
5960
if err != nil {
6061
return result, err
6162
}
@@ -73,12 +74,12 @@ func (m *BetterStackUptimeProvider) findCheck(ctx context.Context, check model.U
7374
metadata := metadataResponse["data"].([]any)
7475
for _, metadataEntry := range metadata {
7576
// TODO find pointer to monitor
76-
println(metadataEntry)
77+
log.FromContext(ctx).Info("test", "metadataEntry", metadataEntry)
7778
}
7879
return result, nil
7980
}
8081

81-
func (m *BetterStackUptimeProvider) execRequest(req *http.Request) (*http.Response, error) {
82-
req.Header.Add(headerAuthorization, "Bearer "+m.settings.APIToken)
83-
return m.httpClient.Do(req)
82+
func (b *BetterStack) execRequest(req *http.Request) (*http.Response, error) {
83+
req.Header.Add(providers.HeaderAuthorization, "Bearer "+b.settings.APIToken)
84+
return b.httpClient.Do(req)
8485
}

internal/service/providers/betterstack_test.go renamed to internal/service/providers/betterstack/betterstack_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package providers
1+
package betterstack
22

33
import (
44
"context"
@@ -7,6 +7,7 @@ import (
77
"time"
88

99
"github.com/PDOK/uptime-operator/internal/model"
10+
"github.com/PDOK/uptime-operator/internal/service/providers"
1011
"github.com/stretchr/testify/assert"
1112
)
1213

@@ -75,10 +76,10 @@ func TestAgainstREALBetterStackAPI(t *testing.T) {
7576
"integration test against the REAL Better Stack API.")
7677
}
7778
t.Run(tt.name, func(t *testing.T) {
78-
settings := BetterStackSettings{APIToken: os.Getenv("BETTERSTACK_API_TOKEN")}
79+
settings := Settings{APIToken: os.Getenv("BETTERSTACK_API_TOKEN")}
7980

8081
// create/update/delete actual check with REAL Better Stack API.
81-
m := NewBetterStackProvider(settings)
82+
m := New(settings)
8283
check, err := model.NewUptimeCheck("foo", tt.annotations)
8384
assert.NoError(t, err)
8485
if tt.wantDelete {
@@ -90,7 +91,7 @@ func TestAgainstREALBetterStackAPI(t *testing.T) {
9091

9192
existingCheckID, err := m.findCheck(context.TODO(), *check)
9293
assert.NoError(t, err)
93-
assert.Equal(t, checkNotFound, existingCheckID)
94+
assert.Equal(t, providers.CheckNotFound, existingCheckID)
9495
} else {
9596
if err := m.CreateOrUpdateCheck(context.TODO(), *check); (err != nil) != tt.wantErr {
9697
t.Errorf("CreateOrUpdateCheck() error = %v, wantErr %v", err, tt.wantErr)
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package betterstack
2+
3+
type MetadataListRequest struct {
4+
}
5+
6+
type MetadataListResponse struct {
7+
}
8+
9+
type MetadataUpdateRequest struct {
10+
}
11+
12+
type MetadataUpdateResponse struct {
13+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package providers
2+
3+
const (
4+
CheckNotFound = int64(-1)
5+
6+
HeaderAuthorization = "Authorization"
7+
HeaderAccept = "Accept"
8+
HeaderContentType = "Content-Type"
9+
)
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package providers
1+
package mock
22

33
import (
44
"context"
@@ -9,17 +9,17 @@ import (
99
"sigs.k8s.io/controller-runtime/pkg/log"
1010
)
1111

12-
type MockUptimeProvider struct {
12+
type Mock struct {
1313
checks map[string]model.UptimeCheck
1414
}
1515

16-
func NewMockUptimeProvider() *MockUptimeProvider {
17-
return &MockUptimeProvider{
16+
func New() *Mock {
17+
return &Mock{
1818
checks: make(map[string]model.UptimeCheck),
1919
}
2020
}
2121

22-
func (m *MockUptimeProvider) CreateOrUpdateCheck(ctx context.Context, check model.UptimeCheck) error {
22+
func (m *Mock) CreateOrUpdateCheck(ctx context.Context, check model.UptimeCheck) error {
2323
m.checks[check.ID] = check
2424

2525
checkJSON, _ := json.Marshal(check)
@@ -28,7 +28,7 @@ func (m *MockUptimeProvider) CreateOrUpdateCheck(ctx context.Context, check mode
2828
return nil
2929
}
3030

31-
func (m *MockUptimeProvider) DeleteCheck(ctx context.Context, check model.UptimeCheck) error {
31+
func (m *Mock) DeleteCheck(ctx context.Context, check model.UptimeCheck) error {
3232
delete(m.checks, check.ID)
3333

3434
checkJSON, _ := json.Marshal(check)

0 commit comments

Comments
 (0)