This repository has been archived on 2026-03-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
sentrysetup/setup.go
T
2024-03-24 00:42:17 +01:00

56 lines
1.5 KiB
Go

package sentrysetup
import (
"fmt"
"log/slog"
"github.com/getsentry/sentry-go"
)
type SentryConfig struct {
DSN string `name:"sentry-dsn" env:"SENTRY_DSN" help:"Sentry dsn" default:""`
Environment string `name:"sentry-environment" env:"SENTRY_ENVIRONMENT" help:"Sentry environment" default:"development"`
Disabled bool `name:"sentry-disabled" env:"SENTRY_DISABLED" help:"Disable Sentry" default:"false"`
}
var sentryInit = sentry.Init
func SetupSentry(logger *slog.Logger, releaseName string, args SentryConfig) error {
if args.Disabled {
logger.Info("Sentry disabled, setup using empty options")
return sentryInit(sentry.ClientOptions{})
}
if args.Environment == "" {
return fmt.Errorf("no Sentry environment supplied, exiting")
}
cfg := sentry.ClientOptions{
Dsn: args.DSN,
Environment: args.Environment,
Release: releaseName,
}
switch args.Environment {
case "development":
cfg.Debug = true
cfg.EnableTracing = false
cfg.TracesSampleRate = 0.0
case "staging", "production":
if args.DSN == "" {
return fmt.Errorf("no DSN supplied for non-dev environment, exiting")
}
cfg.Debug = false
cfg.EnableTracing = true
cfg.TracesSampleRate = 1.0
default:
return fmt.Errorf("illegal environment %s", args.Environment)
}
if err := sentryInit(cfg); err != nil {
return fmt.Errorf("sentry setup: %w", err)
}
logger.Info(fmt.Sprintf("configured Sentry for env: %s", args.Environment))
if cfg.Debug {
sentry.Logger = slog.NewLogLogger(logger.With("part", "sentry").Handler(), slog.LevelDebug)
}
return nil
}