|
@@ -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))
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|