From c3575a09cab61b08b270c1466f63ff8f62fd88a3 Mon Sep 17 00:00:00 2001 From: Catherine Date: Mon, 29 Sep 2025 21:10:36 +0000 Subject: [PATCH] Add Sentry support. --- go.mod | 1 + go.sum | 6 ++++++ src/main.go | 1 + src/observe.go | 40 +++++++++++++++++++++++++++++++++++++++- 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index b859fcf..c21a21d 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/KimMachineGun/automemlimit v0.7.4 github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500 github.com/creasty/defaults v1.8.0 + github.com/getsentry/sentry-go v0.35.3 github.com/go-git/go-billy/v6 v6.0.0-20250627091229-31e2a16eef30 github.com/go-git/go-git/v6 v6.0.0-20250910120214-3a68d0404116 github.com/honeybadger-io/honeybadger-go v0.8.0 diff --git a/go.sum b/go.sum index 2ff4b8c..dbc26f2 100644 --- a/go.sum +++ b/go.sum @@ -31,8 +31,12 @@ github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/getsentry/sentry-go v0.35.3 h1:u5IJaEqZyPdWqe/hKlBKBBnMTSxB/HenCqF3QLabeds= +github.com/getsentry/sentry-go v0.35.3/go.mod h1:mdL49ixwT2yi57k5eh7mpnDyPybixPzlzEJFu0Z76QA= github.com/gliderlabs/ssh v0.3.8 h1:a4YXD1V7xMF9g5nTkdfnja3Sxy1PVDCj1Zg4Wb8vY6c= github.com/gliderlabs/ssh v0.3.8/go.mod h1:xYoytBv1sV0aL3CavoDuJIQNURXkkfPA/wxQ1pL1fAU= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-git/gcfg/v2 v2.0.2 h1:MY5SIIfTGGEMhdA7d7JePuVVxtKL7Hp+ApGDJAJ7dpo= github.com/go-git/gcfg/v2 v2.0.2/go.mod h1:/lv2NsxvhepuMrldsFilrgct6pxzpGdSRC13ydTLSLs= github.com/go-git/go-billy/v6 v6.0.0-20250627091229-31e2a16eef30 h1:4KqVJTL5eanN8Sgg3BV6f2/QzfZEFbCd+rTak1fGRRA= @@ -89,6 +93,8 @@ github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0 github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= github.com/philhofer/fwd v1.2.0 h1:e6DnBTl7vGY+Gz322/ASL4Gyp1FspeMvx1RNDoToZuM= github.com/philhofer/fwd v1.2.0/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0= github.com/pjbgf/sha1cd v0.5.0/go.mod h1:lhpGlyHLpQZoxMv8HcgXvZEhcGs0PG/vsZnEJ7H0iCM= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= diff --git a/src/main.go b/src/main.go index 277f933..c83d5dc 100644 --- a/src/main.go +++ b/src/main.go @@ -72,6 +72,7 @@ func serve(listener net.Listener, handler http.Handler) { func main() { InitObservability() + defer FiniObservability() printConfigEnvVars := flag.Bool("print-config-env-vars", false, "print every recognized configuration environment variable and exit") diff --git a/src/observe.go b/src/observe.go index c8167cb..3e778ab 100644 --- a/src/observe.go +++ b/src/observe.go @@ -1,27 +1,65 @@ package main import ( + "log" "net/http" "os" "runtime/debug" + "time" "github.com/honeybadger-io/honeybadger-go" + + "github.com/getsentry/sentry-go" + sentryhttp "github.com/getsentry/sentry-go/http" ) func hasHoneybadger() bool { return os.Getenv("HONEYBADGER_API_KEY") != "" } +func hasSentry() bool { + return os.Getenv("SENTRY_DSN") != "" +} + func InitObservability() { + environment := "development" + if value, ok := os.LookupEnv("ENVIRONMENT"); ok { + environment = value + } + if hasHoneybadger() { - honeybadger.Configure(honeybadger.Configuration{}) + honeybadger.Configure(honeybadger.Configuration{ + Env: environment, + }) debug.SetPanicOnFault(true) } + + if hasSentry() { + options := sentry.ClientOptions{} + options.Environment = environment + options.Dsn = os.Getenv("SENTRY_DSN") + if err := sentry.Init(options); err != nil { + log.Fatalf("sentry: %s\n", err) + } + } +} + +func FiniObservability() { + if hasSentry() { + sentry.Flush(2 * time.Second) + } } func ObserveHTTPHandler(handler http.Handler) http.Handler { if hasHoneybadger() { handler = honeybadger.Handler(handler) } + + if hasSentry() { + handler = sentryhttp.New(sentryhttp.Options{ + Repanic: true, + }).Handle(handler) + } + return handler }