Sfoglia il codice sorgente

update 完善后台操作记录:添加登录接口的操作日志

Alvin 8 mesi fa
parent
commit
9491075e39

+ 58 - 6
game/game_cluster/nodes/webadmin/router/middleware.go

@@ -1,8 +1,10 @@
 package router
 
 import (
+	"bytes"
 	"context"
 	"errors"
+	"io"
 	"net/http"
 	"time"
 
@@ -19,6 +21,7 @@ import (
 	"github.com/mhaya/game/game_cluster/internal/param"
 	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/entity"
 	mhayaLogger "github.com/mhaya/logger"
 	"go.mongodb.org/mongo-driver/bson"
 	"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) {
-	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()
 	req, err := packBackendOperationEventReq(nodeId, &eventmodels.BackendOperationEventContent{
 		UserBasic: eventmodels.UserBasic{
@@ -174,3 +172,57 @@ func packBackendOperationEventReq(nodeId string, content *eventmodels.BackendOpe
 		JsonContent: string(bytes),
 	}, 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)
+	}
+}

+ 3 - 1
game/game_cluster/nodes/webadmin/router/router.go

@@ -31,7 +31,9 @@ func (c *Controller) CreateActor(id string, handler cfacade.IActorHandler) {
 func (c *Controller) SetRouter() {
 	u := c.Group("/v1")
 	uu := u.Group("/admin")
-	uu.POST("/user/login", controller.NewAdmin().Login)
+	login := uu.Group("/user/login")
+	login.Use(loginRecordMiddleware(c.App))
+	login.POST("", controller.NewAdmin().Login)
 
 	c.InitApiRouter(uu)
 }