diff --git a/internal/cmd/serve.go b/internal/cmd/serve.go index 2400c55..9ebbbde 100644 --- a/internal/cmd/serve.go +++ b/internal/cmd/serve.go @@ -6,15 +6,17 @@ import ( "os" "os/signal" "syscall" + "time" "github.com/etherlabsio/healthcheck/v2" + "github.com/getsentry/sentry-go" sentrygin "github.com/getsentry/sentry-go/gin" "github.com/gin-gonic/gin" "go.uber.org/multierr" db "ely.by/accounts-profiles-endpoint/internal/db/mysql" "ely.by/accounts-profiles-endpoint/internal/http" - "ely.by/accounts-profiles-endpoint/internal/logging/sentry" + sentryLogging "ely.by/accounts-profiles-endpoint/internal/logging/sentry" "ely.by/accounts-profiles-endpoint/internal/services/chrly" "ely.by/accounts-profiles-endpoint/internal/services/signer" ) @@ -26,7 +28,7 @@ func Serve() error { ctx, _ = signal.NotifyContext(ctx, os.Interrupt, syscall.SIGTERM, os.Kill) var errors, err error - err = sentry.InitWithConfig(config) + err = sentryLogging.InitWithConfig(config) if err != nil { return fmt.Errorf("unable to initialize Sentry: %w", err) } @@ -52,7 +54,7 @@ func Serve() error { r := gin.Default() r.Use(sentrygin.New(sentrygin.Options{Repanic: true})) - r.Use(sentry.ErrorMiddleware()) + r.Use(sentryLogging.ErrorMiddleware()) r.Use(http.ErrorMiddleware()) r.GET("/healthcheck", gin.WrapH(healthcheck.Handler( @@ -72,5 +74,7 @@ func Serve() error { return fmt.Errorf("unable to start a server: %w", err) } + sentry.Flush(2 * time.Second) + return nil } diff --git a/internal/logging/sentry/sentry.go b/internal/logging/sentry/sentry.go index d68c3bc..6e81db0 100644 --- a/internal/logging/sentry/sentry.go +++ b/internal/logging/sentry/sentry.go @@ -1,6 +1,8 @@ package sentry import ( + "strings" + "github.com/getsentry/sentry-go" sentryGin "github.com/getsentry/sentry-go/gin" "github.com/gin-gonic/gin" @@ -12,6 +14,7 @@ import ( func InitWithConfig(config *viper.Viper) error { config.SetDefault("sentry.enable_tracing", false) config.SetDefault("sentry.traces_sample_rate", 1.0) + config.SetDefault("sentry.profiles_sample_rate", 1.0) sampleRate := config.GetFloat64("sentry.traces_sample_rate") @@ -19,14 +22,15 @@ func InitWithConfig(config *viper.Viper) error { Dsn: viper.GetString("sentry.dsn"), EnableTracing: viper.GetBool("sentry.enable_tracing"), TracesSampler: func(ctx sentry.SamplingContext) float64 { - if ctx.Span.Name == "GET /healthcheck" { + if !strings.Contains(ctx.Span.Name, "/api") { return 0 } return sampleRate }, - Release: version.Version(), - Environment: config.GetString("sentry.environment"), + ProfilesSampleRate: config.GetFloat64("sentry.profiles_sample_rate"), + Release: version.Version(), + Environment: config.GetString("sentry.environment"), Integrations: func(integrations []sentry.Integration) []sentry.Integration { nDeleted := 0 for i, integration := range integrations {