feat(BRIDGE-236): added SMTP observability metrics

This commit is contained in:
Atanas Janeshliev
2024-10-21 11:45:02 +02:00
parent fb523e5573
commit e3d0334b6f
9 changed files with 165 additions and 1 deletions

View File

@ -35,4 +35,15 @@ Feature: Bridge send remote notification observability metrics
And the user with username "[user:user1]" sends all possible sync message building success observability metrics
Then it succeeds
Scenario: Test all possible SMTP error observability metrics
When the user logs in with username "[user:user1]" and password "password"
And the user with username "[user:user1]" sends all possible SMTP error observability metrics
Then it succeeds
Scenario: Test SMTP send success observability metrics
When the user logs in with username "[user:user1]" and password "password"
And the user with username "[user:user1]" sends SMTP send success observability metric
Then it succeeds

View File

@ -25,6 +25,7 @@ import (
"github.com/ProtonMail/proton-bridge/v3/internal/services/imapservice/observabilitymetrics/evtloopmsgevents"
"github.com/ProtonMail/proton-bridge/v3/internal/services/imapservice/observabilitymetrics/syncmsgevents"
"github.com/ProtonMail/proton-bridge/v3/internal/services/observability"
smtpMetrics "github.com/ProtonMail/proton-bridge/v3/internal/services/smtp/observabilitymetrics"
"github.com/ProtonMail/proton-bridge/v3/internal/services/syncservice/observabilitymetrics"
)
@ -57,6 +58,7 @@ func (s *scenario) userHeartbeatPermutationsObservability(username string) error
// - bridge_gluon_message_errors_users_total_v1.schema.json
// - bridge_gluon_other_errors_users_total_v1.schema.json
// - bridge_event_loop_events_errors_users_total_v1.schema.json.
// - bridge_smtp_errors_users_total_v1.schema.json
func (s *scenario) userDistinctionMetricsPermutationsObservability(username string) error {
batch := proton.ObservabilityBatch{
Metrics: observability.GenerateAllUsedDistinctionMetricPermutations()}
@ -148,3 +150,37 @@ func (s *scenario) testGluonErrorObservabilityMetrics(username string) error {
return err
})
}
// SMTPErrorObservabilityMetrics corresponds to bridge_smtp_errors_total_v1.schema.json.
func (s *scenario) SMTPErrorObservabilityMetrics(username string) error {
batch := proton.ObservabilityBatch{
Metrics: []proton.ObservabilityMetric{
smtpMetrics.GenerateFailedGetParentID(),
smtpMetrics.GenerateUnsupportedMIMEType(),
smtpMetrics.GenerateFailedCreateDraft(),
smtpMetrics.GenerateFailedCreateAttachments(),
smtpMetrics.GenerateFailedCreatePackages(),
smtpMetrics.GenerateFailedToGetRecipients(),
smtpMetrics.GenerateFailedSendDraft(),
smtpMetrics.GenerateFailedDeleteFromDrafts(),
},
}
return s.t.withClientPass(context.Background(), username, s.t.getUserByName(username).userPass, func(ctx context.Context, c *proton.Client) error {
err := c.SendObservabilityBatch(ctx, batch)
return err
})
}
func (s *scenario) SMTPSendSuccessObservabilityMetric(username string) error {
batch := proton.ObservabilityBatch{
Metrics: []proton.ObservabilityMetric{
smtpMetrics.GenerateSMTPSendSuccess(),
},
}
return s.t.withClientPass(context.Background(), username, s.t.getUserByName(username).userPass, func(ctx context.Context, c *proton.Client) error {
err := c.SendObservabilityBatch(ctx, batch)
return err
})
}

View File

@ -234,6 +234,10 @@ func (s *scenario) steps(ctx *godog.ScenarioContext) {
ctx.Step(`^the user with username "([^"]*)" sends all possible event loop message events observability metrics$`, s.eventLoopFailureMessageEventsObservability)
ctx.Step(`^the user with username "([^"]*)" sends all possible sync message building failure observability metrics$`, s.syncFailureMessageBuiltObservability)
ctx.Step(`^the user with username "([^"]*)" sends all possible sync message building success observability metrics$`, s.syncSuccessMessageBuiltObservability)
// SMTP metrics
ctx.Step(`^the user with username "([^"]*)" sends all possible SMTP error observability metrics$`, s.SMTPErrorObservabilityMetrics)
ctx.Step(`^the user with username "([^"]*)" sends SMTP send success observability metric$`, s.SMTPSendSuccessObservabilityMetric)
// Gluon related metrics
ctx.Step(`^the user with username "([^"]*)" sends all possible gluon error observability metrics$`, s.testGluonErrorObservabilityMetrics)
}