Skip to content

Commit aa63ea1

Browse files
committed
Send metrics to cloudwatch
1 parent e513ab2 commit aa63ea1

File tree

7 files changed

+141
-75
lines changed

7 files changed

+141
-75
lines changed

archives/archives.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import (
1414
"path/filepath"
1515
"time"
1616

17+
"github.com/aws/aws-sdk-go-v2/aws"
18+
"github.com/aws/aws-sdk-go-v2/service/cloudwatch/types"
1719
"github.com/jmoiron/sqlx"
1820
"github.com/lib/pq"
1921
"github.com/nyaruka/gocommon/analytics"
@@ -965,7 +967,21 @@ func ArchiveActiveOrgs(rt *runtime.Runtime) error {
965967

966968
timeTaken := dates.Now().Sub(start)
967969
slog.Info("archiving of active orgs complete", "time_taken", timeTaken, "num_orgs", len(orgs))
968-
970+
if rt.Config.DeploymentID != "dev" {
971+
972+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("ArchiveElapsed"), Value: aws.Float64(float64(len(orgs)))})
973+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("OrgsArchived"), Value: aws.Float64(float64(len(orgs)))})
974+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("MsgsRecordsArchived"), Value: aws.Float64(float64(totalMsgsRecordsArchived))})
975+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("MsgsArchivedsCreated"), Value: aws.Float64(float64(totalMsgsArchivesCreated))})
976+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("MsgsArchivedsFailed"), Value: aws.Float64(float64(totalMsgsArchivesFailed))})
977+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("MsgsRollupsCreated"), Value: aws.Float64(float64(totalMsgsRollupsCreated))})
978+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("MsgsRollupsFailed"), Value: aws.Float64(float64(totalMsgsRollupsFailed))})
979+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("RunsRecordsArchived"), Value: aws.Float64(float64(totalRunsRecordsArchived))})
980+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("RunsArchivedsCreated"), Value: aws.Float64(float64(totalRunsArchivesCreated))})
981+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("RunsArchivedsFailed"), Value: aws.Float64(float64(totalRunsArchivesFailed))})
982+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("RunsRollupsCreated"), Value: aws.Float64(float64(totalRunsRollupsCreated))})
983+
rt.CW.Queue(types.MetricDatum{MetricName: aws.String("RunsRollupsFailed"), Value: aws.Float64(float64(totalRunsRollupsFailed))})
984+
}
969985
analytics.Gauge("archiver.archive_elapsed", timeTaken.Seconds())
970986
analytics.Gauge("archiver.orgs_archived", float64(len(orgs)))
971987
analytics.Gauge("archiver.msgs_records_archived", float64(totalMsgsRecordsArchived))

archives/archives_test.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/jmoiron/sqlx"
1313
_ "github.com/lib/pq"
1414
"github.com/nyaruka/gocommon/analytics"
15+
"github.com/nyaruka/gocommon/aws/cwatch"
1516
"github.com/nyaruka/gocommon/dates"
1617
"github.com/nyaruka/rp-archiver/runtime"
1718
"github.com/stretchr/testify/assert"
@@ -43,7 +44,10 @@ func setup(t *testing.T) (context.Context, *runtime.Runtime) {
4344

4445
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: slog.LevelDebug})))
4546

46-
return ctx, &runtime.Runtime{Config: config, DB: db, S3: s3Client}
47+
CW, err := cwatch.NewService("root", "key", "us-east-1", "Foo", "testing")
48+
require.NoError(t, err)
49+
50+
return ctx, &runtime.Runtime{Config: config, DB: db, S3: s3Client, CW: CW}
4751
}
4852

4953
func TestGetMissingDayArchives(t *testing.T) {
@@ -519,4 +523,5 @@ func TestArchiveActiveOrgs(t *testing.T) {
519523
}, mockAnalytics.Gauges)
520524

521525
analytics.Stop()
526+
522527
}

cmd/rp-archiver/main.go

+12
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
_ "github.com/lib/pq"
1414
"github.com/nyaruka/ezconf"
1515
"github.com/nyaruka/gocommon/analytics"
16+
"github.com/nyaruka/gocommon/aws/cwatch"
1617
"github.com/nyaruka/gocommon/dates"
1718
"github.com/nyaruka/rp-archiver/archives"
1819
"github.com/nyaruka/rp-archiver/runtime"
@@ -126,7 +127,17 @@ func main() {
126127
analytics.RegisterBackend(analytics.NewLibrato(config.LibratoUsername, config.LibratoToken, config.InstanceName, time.Second, wg))
127128
}
128129

130+
if rt.Config.DeploymentID != "dev" {
131+
rt.CW, err = cwatch.NewService(config.AWSAccessKeyID, config.AWSSecretAccessKey, config.AWSRegion, "Temba", config.DeploymentID)
132+
if err != nil {
133+
logger.Error("unable to create cloudwatch service", "error", err)
134+
} else {
135+
logger.Info("cloudwatch service ok", "state", "starting")
136+
}
137+
}
138+
129139
analytics.Start()
140+
rt.CW.StartQueue(wg)
130141

131142
if config.Once {
132143
doArchival(rt)
@@ -143,6 +154,7 @@ func main() {
143154
}
144155

145156
analytics.Stop()
157+
rt.CW.StopQueue()
146158
wg.Wait()
147159
}
148160

go.mod

+30-25
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,56 @@
11
module github.com/nyaruka/rp-archiver
22

3-
go 1.22
3+
go 1.23
4+
5+
toolchain go1.23.1
46

57
require (
6-
github.com/aws/aws-sdk-go-v2 v1.30.4
8+
github.com/aws/aws-sdk-go-v2 v1.32.6
79
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.12
8-
github.com/aws/aws-sdk-go-v2/service/s3 v1.60.0
9-
github.com/aws/smithy-go v1.20.4
10+
github.com/aws/aws-sdk-go-v2/service/s3 v1.69.0
11+
github.com/aws/smithy-go v1.22.1
1012
github.com/getsentry/sentry-go v0.28.1
1113
github.com/jmoiron/sqlx v1.4.0
1214
github.com/lib/pq v1.10.9
1315
github.com/nyaruka/ezconf v0.3.0
14-
github.com/nyaruka/gocommon v1.58.0
16+
github.com/nyaruka/gocommon v1.60.1
1517
github.com/samber/slog-multi v1.2.0
1618
github.com/samber/slog-sentry v1.2.2
17-
github.com/stretchr/testify v1.9.0
19+
github.com/stretchr/testify v1.10.0
1820
)
1921

2022
require (
21-
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.4 // indirect
22-
github.com/aws/aws-sdk-go-v2/config v1.27.28 // indirect
23-
github.com/aws/aws-sdk-go-v2/credentials v1.17.28 // indirect
24-
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.12 // indirect
25-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.16 // indirect
26-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.16 // indirect
23+
github.com/aws/aws-sdk-go v1.55.5
24+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect
25+
github.com/aws/aws-sdk-go-v2/config v1.28.5 // indirect
26+
github.com/aws/aws-sdk-go-v2/credentials v1.17.46 // indirect
27+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20 // indirect
28+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.25 // indirect
29+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.25 // indirect
2730
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect
28-
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.16 // indirect
29-
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.4 // indirect
30-
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.18 // indirect
31-
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.18 // indirect
32-
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.16 // indirect
33-
github.com/aws/aws-sdk-go-v2/service/sso v1.22.5 // indirect
34-
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.26.5 // indirect
35-
github.com/aws/aws-sdk-go-v2/service/sts v1.30.4 // indirect
31+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.24 // indirect
32+
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.43.3 // indirect
33+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect
34+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.5 // indirect
35+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 // indirect
36+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.5 // indirect
37+
github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 // indirect
38+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 // indirect
39+
github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 // indirect
3640
github.com/davecgh/go-spew v1.1.1 // indirect
3741
github.com/fatih/structs v1.1.0 // indirect
42+
github.com/jmespath/go-jmespath v0.4.0 // indirect
3843
github.com/kylelemons/godebug v1.1.0 // indirect
3944
github.com/naoina/go-stringutil v0.1.0 // indirect
4045
github.com/naoina/toml v0.1.1 // indirect
4146
github.com/nyaruka/librato v1.1.1 // indirect
4247
github.com/nyaruka/null/v2 v2.0.3 // indirect
43-
github.com/nyaruka/phonenumbers v1.4.0 // indirect
48+
github.com/nyaruka/phonenumbers v1.4.3 // indirect
4449
github.com/pmezard/go-difflib v1.0.0 // indirect
4550
github.com/samber/lo v1.46.0 // indirect
46-
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
47-
golang.org/x/sys v0.22.0 // indirect
48-
golang.org/x/text v0.16.0 // indirect
49-
google.golang.org/protobuf v1.34.2 // indirect
51+
golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f // indirect
52+
golang.org/x/sys v0.27.0 // indirect
53+
golang.org/x/text v0.20.0 // indirect
54+
google.golang.org/protobuf v1.35.2 // indirect
5055
gopkg.in/yaml.v3 v3.0.1 // indirect
5156
)

0 commit comments

Comments
 (0)