log.go 2.15 KB
Newer Older
brent's avatar
brent committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
package controllers

import (
	"aon_app_server/models"
	"aon_app_server/utils/mongo"
	"encoding/json"
	"github.com/beego/beego/v2/core/logs"
	"net/http"
)

type LogController struct {
	MainController
}

func (server *LogController) Report() {
	body := server.Ctx.Input.RequestBody
	log := models.Log{}
	err := json.Unmarshal(body, &log) //解析body中数据
	logs.Debug("appRequest", log, string(body))
	if err != nil {
		server.respond(models.NoRequestBody, err.Error())
		return
	}

	header := server.Ctx.Request.Header
	platform := header.Get("Sec-Ch-Ua-Platform")
	if log.Platform == "" && platform != "" {
		log.Platform = platform
	}
	userAgent := header.Get("User-Agent")
	if log.UserAgent == "" && userAgent != "" {
		log.UserAgent = userAgent
	}
	isMobile := header.Get("Sec-Ch-Ua-Mobile")
	if log.IsMobile == "" && isMobile != "" {
		log.IsMobile = isMobile
	}
	secUa := header.Get("Sec-Ch-Ua")
	if log.SecUa == "" && secUa != "" {
		log.SecUa = secUa
	}
	_, err = mongo.Insert(&log)
	if err != nil {
		server.respond(models.BusinessFailed, err.Error())
		return
	}
	server.respond(http.StatusOK, "")
}

func (server *LogController) BatchReport() {
	body := server.Ctx.Input.RequestBody
	var data []models.Log
	err := json.Unmarshal(body, &data) //解析body中数据
	logs.Debug("appRequest", data)
	if err != nil {
		server.respond(models.NoRequestBody, err.Error())
		return
	}

	header := server.Ctx.Request.Header
	for _, log := range data {
		platform := header.Get("Sec-Ch-Ua-Platform")
		if log.Platform == "" && platform != "" {
			log.Platform = platform
		}
		userAgent := header.Get("User-Agent")
		if log.UserAgent == "" && userAgent != "" {
			log.UserAgent = userAgent
		}
		isMobile := header.Get("Sec-Ch-Ua-Mobile")
		if log.IsMobile == "" && isMobile != "" {
			log.IsMobile = isMobile
		}
		secUa := header.Get("Sec-Ch-Ua")
		if log.SecUa == "" && secUa != "" {
			log.SecUa = secUa
		}
	}

	var interfaceSlice []interface{} = make([]interface{}, len(data))
	for i, v := range data {
		interfaceSlice[i] = v
	}

	_, err = mongo.InsertMany(interfaceSlice)
	if err != nil {
		server.respond(models.BusinessFailed, err.Error())
		return
	}
	server.respond(http.StatusOK, "")
}