初始化项目文件
This commit is contained in:
85
api_iris/service/admin/logsExport.go
Normal file
85
api_iris/service/admin/logsExport.go
Normal file
@ -0,0 +1,85 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"github.com/kataras/iris/v12"
|
||||
"github.com/sirupsen/logrus"
|
||||
"main/database"
|
||||
"main/jwtSet"
|
||||
"main/model"
|
||||
"main/utils"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Logs(party iris.Party) {
|
||||
party.Post("/", saveLogs)
|
||||
party.Get("/", jwtSet.Jwt.Serve, checkAdmin, getLogStats)
|
||||
party.Get("/detail", jwtSet.Jwt.Serve, checkAdmin, getLogDetail)
|
||||
party.Get("/sys", jwtSet.Jwt.Serve, checkAdmin, getSysLogs)
|
||||
party.Get("/log-container-list", jwtSet.Jwt.Serve, checkAdmin, getSysLogsContainerList)
|
||||
}
|
||||
|
||||
// FormatLog 对日志内容切分,格式化数据
|
||||
func FormatLog(logItem string, date string, c chan model.Logs) {
|
||||
var resLogItem model.Logs
|
||||
resLogItem.Ip = strings.Split(logItem, " ")[0]
|
||||
resLogItem.Location = GetIpLocation(resLogItem.Ip)
|
||||
//resLogItem.Location = getLocalIpAddr(resLogItem.Ip)
|
||||
//if resLogItem.Location == "" {
|
||||
// resLogItem.Location, _ = getIpAddr(resLogItem.Ip)
|
||||
//}
|
||||
resLogItem.Time = formatTime(date, strings.Split(strings.Split(logItem, "[")[1], "]")[0])
|
||||
if strings.Split(logItem, "\"")[1] != "" {
|
||||
if strings.Contains(strings.Split(logItem, "\"")[1], " /") {
|
||||
resLogItem.Method = strings.Split(strings.Split(logItem, "\"")[1], " ")[0]
|
||||
resLogItem.Path = strings.Split(strings.Split(logItem, "\"")[1], " ")[1]
|
||||
} else {
|
||||
resLogItem.Method = ""
|
||||
resLogItem.Path = strings.Split(logItem, "\"")[1]
|
||||
}
|
||||
resLogItem.Status = strings.Split(strings.Split(logItem, "\" ")[1], " ")[0]
|
||||
}
|
||||
resLogItem.UserAgent = strings.Split(logItem, "\"")[5]
|
||||
c <- resLogItem
|
||||
}
|
||||
|
||||
// GetIpLocation 获取IP对应的地址
|
||||
func GetIpLocation(ip string) string {
|
||||
if len(ipLocationList) == 0 {
|
||||
UpdateLocalIpList()
|
||||
}
|
||||
location := getLocalIpAddr(ip)
|
||||
if location == "" {
|
||||
location, _ = getIpAddr(ip)
|
||||
}
|
||||
return location
|
||||
}
|
||||
|
||||
func UpdateLocalIpList() {
|
||||
var nullDataList []nullData
|
||||
db := database.GetInstance().GetMysqlDb()
|
||||
if err := db.Model(&model.Logs{}).
|
||||
Distinct("logs.ip", "ips_locations.location").
|
||||
Where("ips_locations.location is null").
|
||||
Joins("left join ips_locations on logs.ip=ips_locations.ip").
|
||||
Scan(&nullDataList).Error; err != nil {
|
||||
logrus.Errorln("sql执行失败:", err)
|
||||
}
|
||||
if len(nullDataList) != 0 {
|
||||
for _, data := range nullDataList {
|
||||
location, err := utils.GetIpLocation(data.IP)
|
||||
if err != nil {
|
||||
logrus.Errorln(data.IP, "IP地址获取失败", err)
|
||||
}
|
||||
if err = db.Create(&model.IpsLocation{
|
||||
Ip: data.IP,
|
||||
Location: location,
|
||||
}).Error; err != nil {
|
||||
logrus.Errorln("sql执行失败:", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
if err := db.Distinct("ip, location").Find(&ipLocationList).Error; err != nil {
|
||||
logrus.Errorln("sql执行失败:", err)
|
||||
}
|
||||
logrus.Infoln("更新本地IP地址列表")
|
||||
}
|
Reference in New Issue
Block a user