Fix log levels + Minimise 500s
This commit is contained in:
parent
644dcf0f3b
commit
6c41295476
@ -1,6 +1,7 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/TicketsBot/GoPanel/botcontext"
|
||||
"github.com/TicketsBot/GoPanel/database"
|
||||
"github.com/TicketsBot/GoPanel/rpc"
|
||||
@ -8,6 +9,7 @@ import (
|
||||
"github.com/TicketsBot/common/premium"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/rxdn/gdl/rest"
|
||||
"github.com/rxdn/gdl/rest/request"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
@ -64,8 +66,11 @@ func DeletePanel(ctx *gin.Context) {
|
||||
}
|
||||
|
||||
if err := rest.DeleteMessage(botContext.Token, botContext.RateLimiter, panel.ChannelId, panel.MessageId); err != nil {
|
||||
ctx.JSON(500, utils.ErrorJson(err))
|
||||
return
|
||||
var unwrapped request.RestError
|
||||
if !errors.As(err, &unwrapped) || unwrapped.StatusCode != 404 {
|
||||
ctx.JSON(500, utils.ErrorJson(err))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Get premium tier
|
||||
|
@ -9,19 +9,44 @@ import (
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func Logging(minLevel sentry.Level) gin.HandlerFunc {
|
||||
type Level uint8
|
||||
|
||||
const (
|
||||
LevelDebug Level = iota
|
||||
LevelInfo
|
||||
LevelWarning
|
||||
LevelError
|
||||
LevelFatal
|
||||
)
|
||||
|
||||
func (l Level) sentryLevel() sentry.Level {
|
||||
switch l {
|
||||
case LevelDebug:
|
||||
return sentry.LevelDebug
|
||||
case LevelInfo:
|
||||
return sentry.LevelInfo
|
||||
case LevelWarning:
|
||||
return sentry.LevelWarning
|
||||
case LevelError:
|
||||
return sentry.LevelError
|
||||
case LevelFatal:
|
||||
return sentry.LevelFatal
|
||||
default:
|
||||
return sentry.LevelDebug
|
||||
}
|
||||
}
|
||||
|
||||
func Logging(minLevel Level) gin.HandlerFunc {
|
||||
return func(ctx *gin.Context) {
|
||||
ctx.Next()
|
||||
|
||||
statusCode := ctx.Writer.Status()
|
||||
|
||||
var level sentry.Level
|
||||
level := LevelInfo
|
||||
if statusCode >= 500 {
|
||||
level = sentry.LevelError
|
||||
level = LevelError
|
||||
} else if statusCode >= 400 {
|
||||
level = sentry.LevelWarning
|
||||
} else {
|
||||
level = sentry.LevelInfo
|
||||
level = LevelWarning
|
||||
}
|
||||
|
||||
if level < minLevel {
|
||||
@ -49,7 +74,7 @@ func Logging(minLevel sentry.Level) gin.HandlerFunc {
|
||||
"response": string(responseBody),
|
||||
"stacktrace": string(debug.Stack()),
|
||||
},
|
||||
Level: level,
|
||||
Level: level.sentryLevel(),
|
||||
Message: fmt.Sprintf("HTTP %d on %s %s", statusCode, ctx.Request.Method, ctx.FullPath()),
|
||||
Tags: map[string]string{
|
||||
"status_code": strconv.Itoa(statusCode),
|
||||
|
@ -4,7 +4,6 @@ import (
|
||||
"fmt"
|
||||
"github.com/TicketsBot/GoPanel/redis"
|
||||
"github.com/TicketsBot/GoPanel/utils"
|
||||
"github.com/getsentry/sentry-go"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/go-redis/redis_rate/v9"
|
||||
"hash/fnv"
|
||||
@ -39,7 +38,7 @@ func CreateRateLimiter(rlType RateLimitType, max int, period time.Duration) gin.
|
||||
res, err := limiter.Allow(redis.DefaultContext(), name, limit)
|
||||
if err != nil {
|
||||
ctx.AbortWithStatusJSON(500, utils.ErrorJson(err))
|
||||
Logging(sentry.LevelError)(ctx)
|
||||
Logging(LevelError)(ctx)
|
||||
return
|
||||
}
|
||||
|
||||
@ -60,7 +59,6 @@ func CreateRateLimiter(rlType RateLimitType, max int, period time.Duration) gin.
|
||||
|
||||
if res.Allowed <= 0 {
|
||||
ctx.AbortWithStatusJSON(429, utils.ErrorStr("You are being ratelimited"))
|
||||
Logging(sentry.LevelWarning)(ctx)
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,6 @@ import (
|
||||
"github.com/TicketsBot/GoPanel/app/http/session"
|
||||
"github.com/TicketsBot/GoPanel/config"
|
||||
"github.com/TicketsBot/common/permission"
|
||||
"github.com/getsentry/sentry-go"
|
||||
sentrygin "github.com/getsentry/sentry-go/gin"
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/penglongli/gin-metrics/ginmetrics"
|
||||
@ -42,7 +41,7 @@ func StartServer() {
|
||||
|
||||
router.Use(gin.Recovery())
|
||||
router.Use(middleware.MultiReadBody, middleware.ReadResponse)
|
||||
router.Use(middleware.Logging(sentry.LevelError))
|
||||
router.Use(middleware.Logging(middleware.LevelError))
|
||||
router.Use(sentrygin.New(sentrygin.Options{})) // Defaults are ok
|
||||
|
||||
router.Use(rl(middleware.RateLimitTypeIp, 60, time.Minute))
|
||||
@ -108,7 +107,6 @@ func StartServer() {
|
||||
rl(middleware.RateLimitTypeGuild, 10, time.Second*30),
|
||||
rl(middleware.RateLimitTypeGuild, 75, time.Minute*30),
|
||||
api.SearchMembers,
|
||||
middleware.Logging(sentry.LevelError), // TODO: Remove?
|
||||
)
|
||||
|
||||
// Must be readable to load transcripts page
|
||||
@ -148,7 +146,6 @@ func StartServer() {
|
||||
rl(middleware.RateLimitTypeUser, 5, 5*time.Second),
|
||||
rl(middleware.RateLimitTypeUser, 20, time.Minute),
|
||||
api_transcripts.ListTranscripts,
|
||||
middleware.Logging(sentry.LevelError), // TODO: Remove?
|
||||
)
|
||||
|
||||
// Allow regular users to get their own transcripts, make sure you check perms inside
|
||||
|
Loading…
x
Reference in New Issue
Block a user