You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.7 KiB
56 lines
1.7 KiB
package middleware
|
|
|
|
import (
|
|
"github.com/flipped-aurora/gin-vue-admin/server/plugin/email/utils"
|
|
utils2 "github.com/flipped-aurora/gin-vue-admin/server/utils"
|
|
"io/ioutil"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/flipped-aurora/gin-vue-admin/server/global"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/model/system"
|
|
"github.com/flipped-aurora/gin-vue-admin/server/service"
|
|
"github.com/gin-gonic/gin"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
var userService = service.ServiceGroupApp.SystemServiceGroup.UserService
|
|
|
|
func ErrorToEmail() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
var username string
|
|
claims, _ := utils2.GetClaims(c)
|
|
if claims.Username != "" {
|
|
username = claims.Username
|
|
} else {
|
|
id, _ := strconv.Atoi(c.Request.Header.Get("x-user-id"))
|
|
err, user := userService.FindUserById(id)
|
|
if err != nil {
|
|
username = "Unknown"
|
|
}
|
|
username = user.Username
|
|
}
|
|
body, _ := ioutil.ReadAll(c.Request.Body)
|
|
record := system.SysOperationRecord{
|
|
Ip: c.ClientIP(),
|
|
Method: c.Request.Method,
|
|
Path: c.Request.URL.Path,
|
|
Agent: c.Request.UserAgent(),
|
|
Body: string(body),
|
|
}
|
|
now := time.Now()
|
|
|
|
c.Next()
|
|
|
|
latency := time.Since(now)
|
|
status := c.Writer.Status()
|
|
record.ErrorMessage = c.Errors.ByType(gin.ErrorTypePrivate).String()
|
|
str := "接收到的请求为" + record.Body + "\n" + "请求方式为" + record.Method + "\n" + "报错信息如下" + record.ErrorMessage + "\n" + "耗时" + latency.String() + "\n"
|
|
if status != 200 {
|
|
subject := username + "" + record.Ip + "调用了" + record.Path + "报错了"
|
|
if err := utils.ErrorToEmail(subject, str); err != nil {
|
|
global.GVA_LOG.Error("ErrorToEmail Failed, err:", zap.Any("err", err))
|
|
}
|
|
}
|
|
}
|
|
}
|