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