Skip to content

Commit 85f91a7

Browse files
authored
Remove SNS and telemetry sender infra (#4492)
Confirmed not used outside decommissioned Cloud
1 parent aa72725 commit 85f91a7

10 files changed

Lines changed: 6 additions & 303 deletions

File tree

codecov.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ ignore:
1515
- "flow/e2e/eventhub"
1616
- "flow/middleware"
1717
- "flow/shared/aws_common"
18-
- "flow/shared/telemetry/sns_message_sender.go"
1918

2019
component_management:
2120
individual_components:

flow/activities/maintenance_activity.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ import (
2525
"github.com/PeerDB-io/peerdb/flow/model"
2626
"github.com/PeerDB-io/peerdb/flow/otel_metrics"
2727
"github.com/PeerDB-io/peerdb/flow/shared"
28-
"github.com/PeerDB-io/peerdb/flow/shared/telemetry"
2928
)
3029

3130
const (
@@ -382,7 +381,6 @@ func (a *MaintenanceActivity) BackgroundAlerter(ctx context.Context) error {
382381
activity.RecordHeartbeat(ctx, "Maintenance Workflow is still running")
383382
case <-alertTicker.C:
384383
slog.WarnContext(ctx, "Maintenance Workflow is still running")
385-
a.Alerter.EmitNonFlowWarningTelemetryEvent(ctx, telemetry.MaintenanceWait, "Waiting", "Maintenance mode is still running")
386384
a.OtelManager.Metrics.MaintenanceStatusGauge.Record(ctx, 1, metric.WithAttributeSet(attribute.NewSet(
387385
attribute.String(otel_metrics.WorkflowTypeKey, activity.GetInfo(ctx).WorkflowType.Name),
388386
)))

flow/activities/snapshot_activity.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ func (a *SnapshotActivity) CloseSlotKeepAlive(ctx context.Context, flowJobName s
5454
s.connectorClose(ctx)
5555
delete(a.SlotSnapshotStates, flowJobName)
5656
}
57-
a.Alerter.EmitFlowInfoTelemetryEvent(ctx, flowJobName, "Ended Snapshot Flow Job")
5857

5958
return nil
6059
}
@@ -66,7 +65,6 @@ func (a *SnapshotActivity) SetupReplication(
6665
ctx = context.WithValue(ctx, shared.FlowNameKey, config.FlowJobName)
6766
logger := internal.LoggerFromCtx(ctx)
6867
a.Alerter.LogFlowInfo(ctx, config.FlowJobName, "Setting up replication slot and publication")
69-
a.Alerter.EmitFlowInfoTelemetryEvent(ctx, config.FlowJobName, "Started Snapshot Flow Job")
7068

7169
conn, connClose, err := connectors.GetByNameAs[connectors.CDCPullConnectorCore](ctx, nil, a.CatalogPool, config.PeerName)
7270
if err != nil {

flow/alerting/alerting.go

Lines changed: 6 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,25 @@ import (
55
"encoding/json"
66
"errors"
77
"fmt"
8-
"io"
98
"log/slog"
10-
"net"
119
"slices"
1210
"strings"
1311
"time"
1412

15-
"github.com/ClickHouse/clickhouse-go/v2"
16-
"github.com/go-mysql-org/go-mysql/mysql"
1713
"github.com/jackc/pgx/v5"
18-
"github.com/jackc/pgx/v5/pgconn"
19-
"go.mongodb.org/mongo-driver/v2/x/mongo/driver"
2014
"go.opentelemetry.io/otel/attribute"
2115
"go.opentelemetry.io/otel/metric"
22-
"golang.org/x/crypto/ssh"
2316

2417
"github.com/PeerDB-io/peerdb/flow/generated/protos"
2518
"github.com/PeerDB-io/peerdb/flow/internal"
2619
"github.com/PeerDB-io/peerdb/flow/otel_metrics"
2720
"github.com/PeerDB-io/peerdb/flow/shared"
28-
"github.com/PeerDB-io/peerdb/flow/shared/telemetry"
2921
)
3022

3123
// alerting service, no cool name :(
3224
type Alerter struct {
3325
shared.CatalogPool
34-
snsTelemetrySender telemetry.Sender
35-
otelManager *otel_metrics.OtelManager
26+
otelManager *otel_metrics.OtelManager
3627
}
3728

3829
type AlertSenderConfig struct {
@@ -48,27 +39,13 @@ type AlertKeys struct {
4839
}
4940

5041
// doesn't take care of closing pool, needs to be done externally.
51-
func NewAlerter(ctx context.Context, catalogPool shared.CatalogPool, otelManager *otel_metrics.OtelManager) *Alerter {
42+
func NewAlerter(_ context.Context, catalogPool shared.CatalogPool, otelManager *otel_metrics.OtelManager) *Alerter {
5243
if catalogPool.Pool == nil {
5344
panic("catalog pool is nil for Alerter")
5445
}
55-
snsTopic := internal.PeerDBTelemetryAWSSNSTopicArn()
56-
var snsMessageSender telemetry.Sender
57-
if snsTopic != "" {
58-
var err error
59-
snsMessageSender, err = telemetry.NewSNSMessageSenderWithNewClient(ctx, &telemetry.SNSMessageSenderConfig{
60-
Topic: snsTopic,
61-
})
62-
internal.LoggerFromCtx(ctx).Info("Successfully registered sns telemetry sender")
63-
if err != nil {
64-
panic(fmt.Sprintf("unable to setup telemetry is nil for Alerter %+v", err))
65-
}
66-
}
67-
6846
return &Alerter{
69-
CatalogPool: catalogPool,
70-
snsTelemetrySender: snsMessageSender,
71-
otelManager: otelManager,
47+
CatalogPool: catalogPool,
48+
otelManager: otelManager,
7249
}
7350
}
7451

@@ -350,71 +327,6 @@ func (a *Alerter) checkAndAddAlertToCatalog(ctx context.Context, alertConfigId i
350327
return false
351328
}
352329

353-
func (a *Alerter) sendTelemetryMessage(
354-
ctx context.Context,
355-
flowName string,
356-
more string,
357-
level telemetry.Level,
358-
additionalTags ...string,
359-
) {
360-
logger := internal.LoggerFromCtx(ctx)
361-
allTags := []string{flowName, internal.PeerDBDeploymentUID()}
362-
allTags = append(allTags, additionalTags...)
363-
364-
if flowTags, err := GetTags(ctx, a.CatalogPool, flowName); err != nil {
365-
logger.Warn("failed to get flow tags", slog.Any("error", err))
366-
} else {
367-
for key, value := range flowTags {
368-
allTags = append(allTags, fmt.Sprintf("%s:%s", key, value))
369-
}
370-
}
371-
372-
details := fmt.Sprintf("[%s] %s", flowName, more)
373-
attributes := telemetry.Attributes{
374-
Level: level,
375-
DeploymentUID: internal.PeerDBDeploymentUID(),
376-
Tags: allTags,
377-
Type: flowName,
378-
}
379-
380-
if a.snsTelemetrySender != nil {
381-
if response, err := a.snsTelemetrySender.SendMessage(ctx, details, details, attributes); err != nil {
382-
logger.Warn("failed to send message to snsTelemetrySender", slog.Any("error", err))
383-
} else {
384-
logger.Debug("received response from snsTelemetrySender", slog.String("response", response))
385-
}
386-
}
387-
}
388-
389-
func (a *Alerter) emitNonFlowTelemetryEvent(
390-
ctx context.Context, eventType telemetry.EventType, key string, message string, level telemetry.Level,
391-
) {
392-
a.sendTelemetryMessage(ctx, string(eventType)+":"+key, message, level)
393-
}
394-
395-
// Wrapper for different telemetry levels for non-flow events
396-
func (a *Alerter) EmitNonFlowInfoTelemetryEvent(ctx context.Context, eventType telemetry.EventType, key string, message string) {
397-
a.emitNonFlowTelemetryEvent(ctx, eventType, key, message, telemetry.INFO)
398-
}
399-
400-
func (a *Alerter) EmitNonFlowWarningTelemetryEvent(ctx context.Context, eventType telemetry.EventType, key string, message string) {
401-
a.emitNonFlowTelemetryEvent(ctx, eventType, key, message, telemetry.WARN)
402-
}
403-
404-
func (a *Alerter) EmitNonFlowErrorTelemetryEvent(ctx context.Context, eventType telemetry.EventType, key string, message string) {
405-
a.emitNonFlowTelemetryEvent(ctx, eventType, key, message, telemetry.ERROR)
406-
}
407-
408-
func (a *Alerter) EmitNonFlowCriticalTelemetryEvent(ctx context.Context, eventType telemetry.EventType, key string, message string) {
409-
a.emitNonFlowTelemetryEvent(ctx, eventType, key, message, telemetry.CRITICAL)
410-
}
411-
412-
func (a *Alerter) EmitFlowInfoTelemetryEvent(ctx context.Context, flowName string, info string) {
413-
logger := internal.LoggerFromCtx(ctx)
414-
logger.Info(info)
415-
a.sendTelemetryMessage(ctx, flowName, info, telemetry.INFO)
416-
}
417-
418330
type FlowErrorType string
419331

420332
func (f FlowErrorType) String() string {
@@ -427,7 +339,7 @@ const (
427339
FlowErrorTypeError FlowErrorType = "error"
428340
)
429341

430-
// recordFlowErrorInternal pushes the error to the errors table and emits a metric as well as a telemetry message.
342+
// recordFlowErrorInternal pushes the error to the errors table and emits a metric.
431343
func (a *Alerter) recordFlowErrorInternal(
432344
ctx context.Context,
433345
flowName string,
@@ -460,42 +372,7 @@ func (a *Alerter) recordFlowErrorInternal(
460372
logger.Error("failed to insert flow error", slog.Any("error", err))
461373
}
462374

463-
// 3. Only send alerts to telemetry sender if the env is enabled
464-
if internal.PeerDBTelemetrySenderSendErrorAlertsEnabled(ctx) {
465-
var tags []string
466-
if errors.Is(err, context.Canceled) {
467-
tags = append(tags, string(shared.ErrTypeCanceled))
468-
}
469-
if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {
470-
tags = append(tags, string(shared.ErrTypeEOF))
471-
}
472-
if errors.Is(err, net.ErrClosed) || strings.HasSuffix(err.Error(), "use of closed network connection") {
473-
tags = append(tags, string(shared.ErrTypeClosed))
474-
}
475-
if pgErr, ok := errors.AsType[*pgconn.PgError](err); ok {
476-
tags = append(tags, "pgcode:"+pgErr.Code)
477-
}
478-
if myErr, ok := errors.AsType[*mysql.MyError](err); ok {
479-
tags = append(tags, fmt.Sprintf("mycode:%d", myErr.Code), "mystate:"+myErr.State)
480-
}
481-
if mongoErr, ok := errors.AsType[*driver.Error](err); ok {
482-
tags = append(tags, fmt.Sprintf("mongocode:%d", mongoErr.Code))
483-
}
484-
if chErr, ok := errors.AsType[*clickhouse.Exception](err); ok {
485-
tags = append(tags, fmt.Sprintf("chcode:%d", chErr.Code))
486-
}
487-
if _, ok := errors.AsType[*net.OpError](err); ok {
488-
tags = append(tags, string(shared.ErrTypeNet))
489-
}
490-
// For SSH connection errors, we currently tag them as "err:Net"
491-
if _, ok := errors.AsType[*ssh.OpenChannelError](err); ok {
492-
tags = append(tags, string(shared.ErrTypeNet))
493-
}
494-
tags = append(tags, "errorClass:"+errClass.String(), "errorAction:"+errClass.ErrorAction().String())
495-
a.sendTelemetryMessage(ctx, flowName, errMessage, telemetry.ERROR, tags...)
496-
}
497-
498-
// 4. Record error metrics
375+
// 3. Record error metrics
499376
errorAttributes := []attribute.KeyValue{
500377
attribute.Stringer(otel_metrics.ErrorClassKey, errClass),
501378
attribute.Stringer(otel_metrics.ErrorActionKey, errClass.ErrorAction()),

flow/go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ require (
3030
github.com/aws/aws-sdk-go-v2/service/kms v1.52.0
3131
github.com/aws/aws-sdk-go-v2/service/s3 v1.101.0
3232
github.com/aws/aws-sdk-go-v2/service/ses v1.34.24
33-
github.com/aws/aws-sdk-go-v2/service/sns v1.39.17
3433
github.com/aws/aws-sdk-go-v2/service/sts v1.42.1
3534
github.com/aws/smithy-go v1.25.1
3635
github.com/cockroachdb/pebble/v2 v2.1.5

flow/go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,6 @@ github.com/aws/aws-sdk-go-v2/service/ses v1.34.24 h1:ZPCoU087iv2IWJKNQyN+MYOqZAM
163163
github.com/aws/aws-sdk-go-v2/service/ses v1.34.24/go.mod h1:4T8OWyQ9nkdUrcqHHJkyibP5TfcWDTe4kWL40tiCOcs=
164164
github.com/aws/aws-sdk-go-v2/service/signin v1.0.11 h1:TdJ+HdzOBhU8+iVAOGUTU63VXopcumCOF1paFulHWZc=
165165
github.com/aws/aws-sdk-go-v2/service/signin v1.0.11/go.mod h1:R82ZRExE/nheo0N+T8zHPcLRTcH8MGsnR3BiVGX0TwI=
166-
github.com/aws/aws-sdk-go-v2/service/sns v1.39.17 h1:synXIPC/L4Cc489P0XDcrVJzHSLj7krKRpFLalbGM2k=
167-
github.com/aws/aws-sdk-go-v2/service/sns v1.39.17/go.mod h1:4ABZnI23uNK37waIjGwkubnCwGhepIt9x1GvASfljJA=
168166
github.com/aws/aws-sdk-go-v2/service/sso v1.30.17 h1:7byT8HUWrgoRp6sXjxtZwgOKfhss5fW6SkLBtqzgRoE=
169167
github.com/aws/aws-sdk-go-v2/service/sso v1.30.17/go.mod h1:xNWknVi4Ezm1vg1QsB/5EWpAJURq22uqd38U8qKvOJc=
170168
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.36.0 h1:nDARhv/oF55bcxF7rCI/4PDxOKnVXVWwDuDwCs2I2SQ=

flow/internal/config.go

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -78,11 +78,6 @@ func PeerDBCatalogRequireTls() bool {
7878
return getEnvConvert("PEERDB_CATALOG_REQUIRE_TLS", false, strconv.ParseBool)
7979
}
8080

81-
// PEERDB_TELEMETRY_AWS_SNS_TOPIC_ARN
82-
func PeerDBTelemetryAWSSNSTopicArn() string {
83-
return GetEnvString("PEERDB_TELEMETRY_AWS_SNS_TOPIC_ARN", "")
84-
}
85-
8681
func PeerDBAlertingEmailSenderSourceEmail() string {
8782
return GetEnvString("PEERDB_ALERTING_EMAIL_SENDER_SOURCE_EMAIL", "")
8883
}
@@ -195,16 +190,6 @@ func PeerDBSetupFlowWorkflowTaskTimeoutSeconds() int {
195190
return getEnvConvert("PEERDB_SETUP_FLOW_WORKFLOW_TASK_TIMEOUT_SECONDS", 60, strconv.Atoi)
196191
}
197192

198-
// PEERDB_TELEMETRY_SENDER_SEND_ERROR_ALERTS_ENABLED is whether to send error alerts to the telemetry sender
199-
func PeerDBTelemetrySenderSendErrorAlertsEnabled(ctx context.Context) bool {
200-
enabled, err := strconv.ParseBool(GetEnvString("PEERDB_TELEMETRY_SENDER_SEND_ERROR_ALERTS_ENABLED", "false"))
201-
if err != nil {
202-
slog.ErrorContext(ctx, "failed to parse PEERDB_TELEMETRY_SENDER_SEND_ERROR_ALERTS_ENABLED to bool", slog.Any("error", err))
203-
return false
204-
}
205-
return enabled
206-
}
207-
208193
// PEERDB_SWITCHBOARD_ENABLED enables the Switchboard server
209194
func PeerDBSwitchboardEnabled() bool {
210195
return GetEnvBool("PEERDB_SWITCHBOARD_ENABLED", false)

flow/shared/telemetry/event_types.go

Lines changed: 0 additions & 13 deletions
This file was deleted.

flow/shared/telemetry/sender.go

Lines changed: 0 additions & 27 deletions
This file was deleted.

0 commit comments

Comments
 (0)