|
@ -0,0 +1,55 @@ |
|
|
|
|
|
package middleware |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
|
"gin-vue-admin/global" |
|
|
|
|
|
"gin-vue-admin/model" |
|
|
|
|
|
"gin-vue-admin/model/request" |
|
|
|
|
|
"gin-vue-admin/service" |
|
|
|
|
|
"gin-vue-admin/utils" |
|
|
|
|
|
"github.com/gin-gonic/gin" |
|
|
|
|
|
"go.uber.org/zap" |
|
|
|
|
|
"io/ioutil" |
|
|
|
|
|
"strconv" |
|
|
|
|
|
"time" |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
func ErrorToEmail() gin.HandlerFunc { |
|
|
|
|
|
return func(c *gin.Context) { |
|
|
|
|
|
var username string |
|
|
|
|
|
if claims, ok := c.Get("claims"); ok { |
|
|
|
|
|
waitUse := claims.(*request.CustomClaims) |
|
|
|
|
|
username = waitUse.Username |
|
|
|
|
|
}else { |
|
|
|
|
|
id, _ := strconv.Atoi(c.Request.Header.Get("x-user-id")) |
|
|
|
|
|
err, user := service.FindUserById(id) |
|
|
|
|
|
if err != nil{ |
|
|
|
|
|
username = "Unknown" |
|
|
|
|
|
} |
|
|
|
|
|
username = user.Username |
|
|
|
|
|
} |
|
|
|
|
|
body, _ := ioutil.ReadAll(c.Request.Body) |
|
|
|
|
|
record := model.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.Now().Sub(now) |
|
|
|
|
|
status := c.Writer.Status() |
|
|
|
|
|
record.ErrorMessage = c.Errors.ByType(gin.ErrorTypePrivate).String() |
|
|
|
|
|
str := "接收到的请求为" + record.Body + "\n" + "请求方式为" + record.Path + "\n" + "报错信息如下" + record.ErrorMessage + "\n" + "耗时" + latency.String() + "\n" |
|
|
|
|
|
if global.GVA_CONFIG.System.ErrorToEmail { |
|
|
|
|
|
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)) |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |