feat: server.Server 的 HTTP 请求支持慢消息检测

This commit is contained in:
kercylan98 2023-08-17 12:54:15 +08:00
parent b87df072fc
commit 36a333379e
2 changed files with 11 additions and 2 deletions

View File

@ -3,6 +3,7 @@ package server
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"net/http" "net/http"
"time"
) )
type HandlerFunc[Context any] func(ctx Context) type HandlerFunc[Context any] func(ctx Context)
@ -24,7 +25,9 @@ func (slf *HttpRouter[Context]) handlesConvert(handlers []HandlerFunc[Context])
slf.srv.messageCounter.Add(-1) slf.srv.messageCounter.Add(-1)
}() }()
hc := slf.packer(ctx) hc := slf.packer(ctx)
var now = time.Now()
handler(hc) handler(hc)
slf.srv.low(nil, now, time.Second, "HTTP ["+ctx.Request.Method+"] "+ctx.Request.RequestURI)
}) })
} }
return handles return handles

View File

@ -568,10 +568,16 @@ func (slf *Server) pushMessage(message *Message) {
slf.messageChannel <- message slf.messageChannel <- message
} }
func (slf *Server) low(message *Message, present time.Time, expect time.Duration) { func (slf *Server) low(message *Message, present time.Time, expect time.Duration, messageReplace ...string) {
cost := time.Since(present) cost := time.Since(present)
if cost > expect { if cost > expect {
log.Warn("Server", log.String("type", "low-message"), log.String("cost", cost.String()), log.String("message", message.String()), log.Stack("stack")) var m = "unknown"
if message != nil {
m = message.String()
} else if len(messageReplace) > 0 {
m = messageReplace[0]
}
log.Warn("Server", log.String("type", "low-message"), log.String("cost", cost.String()), log.String("message", m), log.Stack("stack"))
slf.OnMessageLowExecEvent(message, cost) slf.OnMessageLowExecEvent(message, cost)
} }
} }