mirror of
https://github.com/retailcrm/mg-transport-core.git
synced 2024-11-22 05:06:04 +03:00
64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
package middleware
|
|
|
|
import (
|
|
"github.com/getsentry/sentry-go"
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
var ginContextSentryKey = "sentry"
|
|
|
|
type Sentry interface {
|
|
CaptureException(c *gin.Context, exception error)
|
|
CaptureMessage(c *gin.Context, message string)
|
|
CaptureEvent(c *gin.Context, event *sentry.Event)
|
|
}
|
|
|
|
func InjectSentry(sentry Sentry) gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
c.Set(ginContextSentryKey, sentry)
|
|
}
|
|
}
|
|
|
|
func GetSentry(c *gin.Context) (Sentry, bool) {
|
|
sentryValue, ok := c.Get(ginContextSentryKey)
|
|
if !ok {
|
|
return nil, false
|
|
}
|
|
obj, ok := sentryValue.(Sentry)
|
|
if !ok || obj == nil {
|
|
return nil, false
|
|
}
|
|
return obj, true
|
|
}
|
|
|
|
func MustGetSentry(c *gin.Context) Sentry {
|
|
if obj, ok := GetSentry(c); ok && obj != nil {
|
|
return obj
|
|
}
|
|
panic("obj not found in context")
|
|
}
|
|
|
|
func CaptureException(c *gin.Context, exception error) {
|
|
obj, found := GetSentry(c)
|
|
if !found {
|
|
return
|
|
}
|
|
obj.CaptureException(c, exception)
|
|
}
|
|
|
|
func CaptureEvent(c *gin.Context, event *sentry.Event) {
|
|
obj, found := GetSentry(c)
|
|
if !found {
|
|
return
|
|
}
|
|
obj.CaptureEvent(c, event)
|
|
}
|
|
|
|
func CaptureMessage(c *gin.Context, message string) {
|
|
obj, found := GetSentry(c)
|
|
if !found {
|
|
return
|
|
}
|
|
obj.CaptureMessage(c, message)
|
|
}
|