mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-12 11:17:32 +00:00
feat: sentry integration (#1944)
* initial sentry variables and secrets * feat: sentry monitoring * fix typo * feat(sentry version): sentry capability * fix(sentry include): included sentry import 4 zitadel * usage flag for sentry * improve sentry flag * merge main * fix sentry config * add sentry dsn to secret env vars * fix test * log sentry start * add sentry grpc interceptor and recover * add sentry http interceptor to asset api * fix interceptor order * try improve sentry recover * fix i18n interception * panic Co-authored-by: Livio Amstutz <livio.a@gmail.com>
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/caos/logging"
|
||||
sentryhttp "github.com/getsentry/sentry-go/http"
|
||||
"github.com/gorilla/mux"
|
||||
|
||||
"github.com/caos/zitadel/internal/api/authz"
|
||||
@@ -84,6 +85,7 @@ func NewHandler(
|
||||
|
||||
verifier.RegisterServer("Management-API", "assets", AssetsService_AuthMethods) //TODO: separate api?
|
||||
router := mux.NewRouter()
|
||||
router.Use(sentryhttp.New(sentryhttp.Options{}).Handle)
|
||||
RegisterRoutes(router, h)
|
||||
router.PathPrefix("/{id}").Methods("GET").HandlerFunc(DownloadHandleFunc(h, h.GetFile()))
|
||||
return router
|
||||
|
26
internal/api/grpc/server/middleware/sentry_interceptor.go
Normal file
26
internal/api/grpc/server/middleware/sentry_interceptor.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/getsentry/sentry-go"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/codes"
|
||||
|
||||
"github.com/caos/zitadel/internal/api/grpc/errors"
|
||||
)
|
||||
|
||||
func SentryHandler() grpc.UnaryServerInterceptor {
|
||||
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
|
||||
return sendErrToSentry(ctx, req, handler)
|
||||
}
|
||||
}
|
||||
|
||||
func sendErrToSentry(ctx context.Context, req interface{}, handler grpc.UnaryHandler) (interface{}, error) {
|
||||
resp, err := handler(ctx, req)
|
||||
code, _, _, _ := errors.ExtractCaosError(err)
|
||||
if code == codes.Unknown || code == codes.Internal {
|
||||
sentry.CaptureException(err)
|
||||
}
|
||||
return resp, err
|
||||
}
|
@@ -3,12 +3,13 @@ package middleware
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
caos_errs "github.com/caos/zitadel/internal/errors"
|
||||
|
||||
"github.com/caos/logging"
|
||||
"github.com/caos/zitadel/internal/i18n"
|
||||
"github.com/rakyll/statik/fs"
|
||||
"golang.org/x/text/language"
|
||||
|
||||
caos_errs "github.com/caos/zitadel/internal/errors"
|
||||
"github.com/caos/zitadel/internal/i18n"
|
||||
)
|
||||
|
||||
type localizers interface {
|
||||
@@ -35,10 +36,8 @@ func translateError(ctx context.Context, err error, translator *i18n.Translator)
|
||||
caosErr := new(caos_errs.CaosError)
|
||||
if errors.As(err, &caosErr) {
|
||||
caosErr.SetMessage(translator.LocalizeFromCtx(ctx, caosErr.GetMessage(), nil))
|
||||
} else {
|
||||
return err
|
||||
}
|
||||
return caosErr
|
||||
return err
|
||||
}
|
||||
|
||||
func newZitadelTranslator(defaultLanguage language.Tag) *i18n.Translator {
|
||||
|
@@ -37,6 +37,7 @@ func CreateServer(verifier *authz.TokenVerifier, authConfig authz.Config, lang l
|
||||
middleware.MetricsHandler(metricTypes, grpc_api.Probes...),
|
||||
middleware.ErrorHandler(),
|
||||
middleware.AuthorizationInterceptor(verifier, authConfig),
|
||||
middleware.SentryHandler(),
|
||||
middleware.TranslationHandler(lang),
|
||||
middleware.ValidationHandler(),
|
||||
middleware.ServiceHandler(),
|
||||
|
Reference in New Issue
Block a user