|
@@ -1,8 +1,10 @@
|
|
package router
|
|
package router
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "bytes"
|
|
"context"
|
|
"context"
|
|
"errors"
|
|
"errors"
|
|
|
|
+ "io"
|
|
"net/http"
|
|
"net/http"
|
|
"time"
|
|
"time"
|
|
|
|
|
|
@@ -19,6 +21,7 @@ import (
|
|
"github.com/mhaya/game/game_cluster/internal/param"
|
|
"github.com/mhaya/game/game_cluster/internal/param"
|
|
rpcLogstash "github.com/mhaya/game/game_cluster/internal/rpc/logstash"
|
|
rpcLogstash "github.com/mhaya/game/game_cluster/internal/rpc/logstash"
|
|
"github.com/mhaya/game/game_cluster/nodes/webadmin/common"
|
|
"github.com/mhaya/game/game_cluster/nodes/webadmin/common"
|
|
|
|
+ "github.com/mhaya/game/game_cluster/nodes/webadmin/entity"
|
|
mhayaLogger "github.com/mhaya/logger"
|
|
mhayaLogger "github.com/mhaya/logger"
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/bson"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
"go.mongodb.org/mongo-driver/mongo"
|
|
@@ -127,12 +130,7 @@ func checkIPWhitelist(c *gin.Context) error {
|
|
}
|
|
}
|
|
|
|
|
|
func sendLogRecord(c *gin.Context, app cfacade.IApplication, tokenString, roleId string, startTime int64) {
|
|
func sendLogRecord(c *gin.Context, app cfacade.IApplication, tokenString, roleId string, startTime int64) {
|
|
- userName, err := mdb.RDB.Get(context.Background(), common.GetUserNameKey(tokenString)).Result()
|
|
|
|
- if err != nil {
|
|
|
|
- mhayaLogger.Warnf("sendLogRecord Get userName error: %s, token: %s", err.Error(), tokenString)
|
|
|
|
- return
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ userName, _ := mdb.RDB.Get(context.Background(), common.GetUserNameKey(tokenString)).Result()
|
|
nodeId := app.NodeId()
|
|
nodeId := app.NodeId()
|
|
req, err := packBackendOperationEventReq(nodeId, &eventmodels.BackendOperationEventContent{
|
|
req, err := packBackendOperationEventReq(nodeId, &eventmodels.BackendOperationEventContent{
|
|
UserBasic: eventmodels.UserBasic{
|
|
UserBasic: eventmodels.UserBasic{
|
|
@@ -174,3 +172,57 @@ func packBackendOperationEventReq(nodeId string, content *eventmodels.BackendOpe
|
|
JsonContent: string(bytes),
|
|
JsonContent: string(bytes),
|
|
}, nil
|
|
}, nil
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+func loginRecordMiddleware(app cfacade.IApplication) gin.HandlerFunc {
|
|
|
|
+ return func(c *gin.Context) {
|
|
|
|
+ // 请求开始时间
|
|
|
|
+ startTime := mhayaTime.Now().UnixMilli()
|
|
|
|
+
|
|
|
|
+ body, err := io.ReadAll(c.Request.Body)
|
|
|
|
+ if err != nil {
|
|
|
|
+ mhayaLogger.Warnf("loginRecordMiddleware ReadAll Request.Body error: %s", err.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ // 关闭body
|
|
|
|
+ defer c.Request.Body.Close()
|
|
|
|
+
|
|
|
|
+ var reqBody entity.AdminLoginReq
|
|
|
|
+ err = json.Unmarshal(body, &reqBody)
|
|
|
|
+ if err != nil {
|
|
|
|
+ mhayaLogger.Warnf("loginRecordMiddleware Unmarshal Request.Body error: %s", err.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // 写回请求体,以便其他中间件或路由可以正常读取
|
|
|
|
+ c.Request.Body = io.NopCloser(bytes.NewBuffer(body))
|
|
|
|
+
|
|
|
|
+ c.Next()
|
|
|
|
+
|
|
|
|
+ nodeId := app.NodeId()
|
|
|
|
+ req, err := packBackendOperationEventReq(nodeId, &eventmodels.BackendOperationEventContent{
|
|
|
|
+ UserBasic: eventmodels.UserBasic{
|
|
|
|
+ UserName: reqBody.Username,
|
|
|
|
+ IsRobot: false,
|
|
|
|
+ },
|
|
|
|
+ EventBasic: eventmodels.EventBasic{
|
|
|
|
+ ServerId: nodeId,
|
|
|
|
+ IsSuccess: func() bool {
|
|
|
|
+ return c.Writer.Status() == http.StatusOK
|
|
|
|
+ }(),
|
|
|
|
+ CreateAt: mhayaTime.Now().Unix(),
|
|
|
|
+ },
|
|
|
|
+ Path: c.Request.URL.Path,
|
|
|
|
+ Method: c.Request.Method,
|
|
|
|
+ StatusCode: c.Writer.Status(),
|
|
|
|
+ Dur: mhayaTime.Now().UnixMilli() - startTime,
|
|
|
|
+ ClientIP: c.ClientIP(),
|
|
|
|
+ ErrorMessage: c.Errors.ByType(gin.ErrorTypePrivate).String(),
|
|
|
|
+ })
|
|
|
|
+ if err != nil {
|
|
|
|
+ mhayaLogger.Warnf("loginRecordMiddleware packBackendOperationEventReq error: %s", err.Error())
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ rpcLogstash.HandleLogRecord(app, req)
|
|
|
|
+ }
|
|
|
|
+}
|