Browse Source

fix:系统超时退出/被其他客户端挤下来时,添加日志记录,避免数据丢失

Roc 3 weeks ago
parent
commit
d2d868c436
2 changed files with 30 additions and 1 deletions
  1. 20 0
      controllers/base_auth.go
  2. 10 1
      models/cloud_disk_resource.go

+ 20 - 0
controllers/base_auth.go

@@ -174,12 +174,32 @@ func (c *BaseAuthController) Prepare() {
 				loginKey := fmt.Sprint(utils.CACHE_ACCESS_TOKEN_LOGIN, session.Id)
 				loginInfo, _ := utils.Rc.RedisString(loginKey)
 				if loginInfo == `` {
+					// 超时退出的时候,也记录下当前请求日志,避免数据丢失
+					requestBody, err := url.QueryUnescape(string(c.Ctx.Input.RequestBody))
+					if err != nil {
+						requestBody = string(c.Ctx.Input.RequestBody)
+					}
+					if requestBody == "" {
+						requestBody = c.Ctx.Input.URI()
+					}
+					utils.ApiLog.Info("uri:%s, authorization:%s, requestBody:%s", c.Ctx.Input.URI(), authorization, requestBody)
+
 					c.JSON(models.BaseResponse{Ret: 408, Msg: "超时未操作,系统自动退出!", ErrMsg: "超时未操作,系统自动退出!"}, false, false)
 					c.StopRun()
 					return
 				}
 
 				if loginInfo != "1" {
+					// 超时退出的时候,也记录下当前请求日志,避免数据丢失
+					requestBody, err := url.QueryUnescape(string(c.Ctx.Input.RequestBody))
+					if err != nil {
+						requestBody = string(c.Ctx.Input.RequestBody)
+					}
+					if requestBody == "" {
+						requestBody = c.Ctx.Input.URI()
+					}
+					utils.ApiLog.Info("uri:%s, authorization:%s, requestBody:%s", c.Ctx.Input.URI(), authorization, requestBody)
+
 					msg := `该账号于` + admin.LastLoginTime + "在其他网络登录。此客户端已退出登录。"
 					c.JSON(models.BaseResponse{Ret: 408, Msg: msg, ErrMsg: msg}, false, false)
 					c.StopRun()

+ 10 - 1
models/cloud_disk_resource.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	sql2 "database/sql"
 	"eta/eta_api/global"
 	"eta/eta_api/utils"
 	"fmt"
@@ -169,8 +170,16 @@ func GetSizeTotalByMenuIds(menuIds []int) (sizeTotal int64, err error) {
 	if len(menuIds) == 0 {
 		return
 	}
+	var sizeTotalNull sql2.NullInt64
 	sql := `SELECT SUM(size) FROM cloud_disk_resource WHERE menu_id IN (` + utils.GetOrmInReplace(len(menuIds)) + `)`
-	err = global.DEFAULT_DB.Raw(sql, menuIds).Scan(&sizeTotal).Error
+	err = global.DEFAULT_DB.Raw(sql, menuIds).Scan(&sizeTotalNull).Error
+	if err != nil {
+		return
+	}
+	if sizeTotalNull.Valid {
+		sizeTotal = sizeTotalNull.Int64
+	}
+
 	return
 }