package controllers
|
|
import (
|
"basic.com/valib/bhomeclient.git"
|
"encoding/json"
|
"strings"
|
"time"
|
"vamicro/log-service/models"
|
)
|
|
type LogServiceController struct {
|
bk bhomeclient.Broker
|
}
|
|
func (ac LogServiceController) FindAllMap(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
|
var module models.Modules
|
allmap := module.FindAllMap()
|
|
return &bhomeclient.Reply{Success: true, Data: allmap}
|
}
|
|
func (ac LogServiceController) SetModules(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
|
var params []models.Modules
|
if err := c.BindJSON(¶ms); err != nil {
|
return &bhomeclient.Reply{Success: false, Msg: "参数格式错误,非法的json格式"}
|
}
|
for _, item := range params {
|
item.Insert()
|
}
|
return &bhomeclient.Reply{Success: true, Data: params}
|
}
|
|
func (ac LogServiceController) SetOperations(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
|
var params []models.Operations
|
if err := c.BindJSON(¶ms); err != nil {
|
return &bhomeclient.Reply{Success: false, Msg: "参数格式错误,非法的json格式"}
|
}
|
for _, item := range params {
|
item.Insert()
|
}
|
return &bhomeclient.Reply{Success: true, Data: params}
|
}
|
|
func (ac LogServiceController) Modules(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
|
var moduleMod models.Modules
|
modules, err := moduleMod.FindAll()
|
if nil == err {
|
return &bhomeclient.Reply{Success: true, Data: modules}
|
} else {
|
return &bhomeclient.Reply{Success: true, Data: make([]interface{}, 0)}
|
}
|
}
|
|
func (ac LogServiceController) Operations(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
|
var opModel models.Operations
|
module := c.Query("module")
|
opers, err := opModel.FindAll(module)
|
if nil == err {
|
return &bhomeclient.Reply{Success: true, Data: opers}
|
} else {
|
return &bhomeclient.Reply{Success: false, Msg: err.Error()}
|
}
|
}
|
|
func (ac LogServiceController) OperationLog(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
|
var params models.OperationQuery
|
if err := c.BindJSON(¶ms); err != nil {
|
return &bhomeclient.Reply{Success: false, Msg: "参数格式错误,非法的json格式"}
|
}
|
|
var tsStart, tsEnd time.Time
|
if params.TimeStart == "" && params.TimeEnd == "" {
|
tsEnd = time.Now()
|
tsStart = tsEnd.Add(-time.Hour * 24)
|
} else if params.TimeStart == "" && params.TimeEnd != "" {
|
ts, ok := checkTime(params.TimeEnd)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
tsEnd = ts
|
tsStart = tsEnd.Add(-time.Hour * 24 * 365)
|
} else if params.TimeStart != "" && params.TimeEnd == "" {
|
ts, ok := checkTime(params.TimeStart)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
|
tsStart = ts
|
tsEnd = time.Now()
|
} else {
|
var ok bool
|
tsStart, ok = checkTime(params.TimeStart)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
|
tsEnd, ok = checkTime(params.TimeEnd)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
|
if tsStart.After(tsEnd) {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误, 开始时间大于结束时间"}
|
}
|
}
|
|
db := models.GetDB()
|
db = db.Where("timestamp >= ? AND timestamp <= ?", tsStart.Unix(), tsEnd.Unix())
|
if params.Module != "" {
|
db = db.Where("module = ?", params.Module)
|
}
|
|
if params.Function != "" {
|
db = db.Where("function = ?", params.Function)
|
}
|
|
if params.Result != "" {
|
db = db.Where("result = ?", params.Result)
|
}
|
|
if params.FuzzySearch != "" {
|
db = db.Where("para like ? or userName like ? or function like ?",
|
"%"+params.FuzzySearch+"%",
|
"%"+params.FuzzySearch+"%",
|
"%"+params.FuzzySearch+"%")
|
}
|
|
if params.Page <= 0 {
|
params.Page = 1
|
}
|
var count int64 = 0
|
err := db.Table("t_op_log").Count(&count).Error
|
if nil != err {
|
return &bhomeclient.Reply{Success: false, Msg: "内部错误" + err.Error()}
|
}
|
var logs []*models.OperationLog
|
if result := db.Table("t_op_log").Limit(params.PageSize).Offset((params.Page - 1) * params.PageSize).Order("timestamp DESC").Find(&logs); nil != result.Error {
|
return &bhomeclient.Reply{Success: false, Msg: "内部错误" + result.Error.Error()}
|
}
|
|
return &bhomeclient.Reply{Success: true, Data: map[string]interface{}{"logs": logs, "total": count}}
|
}
|
|
func (ac LogServiceController) ScheduleLog(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
|
var params models.ScheduleQuery
|
if err := c.BindJSON(¶ms); err != nil {
|
return &bhomeclient.Reply{Success: false, Msg: "参数格式错误,非法的json格式"}
|
}
|
|
var tsStart, tsEnd time.Time
|
if params.TimeStart == "" && params.TimeEnd == "" {
|
tsEnd = time.Now()
|
tsStart = tsEnd.Add(-time.Hour * 24)
|
} else if params.TimeStart == "" && params.TimeEnd != "" {
|
ts, ok := checkTime(params.TimeEnd)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
tsEnd = ts
|
tsStart = tsEnd.Add(-time.Hour * 24)
|
} else if params.TimeStart != "" && params.TimeEnd == "" {
|
ts, ok := checkTime(params.TimeStart)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
|
tsStart = ts
|
tsEnd = tsStart.Add(time.Hour * 24)
|
} else {
|
var ok bool
|
tsStart, ok = checkTime(params.TimeStart)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
|
tsEnd, ok = checkTime(params.TimeEnd)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
|
if tsStart.After(tsEnd) {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误, 开始时间大于结束时间"}
|
}
|
}
|
|
db := models.GetDB()
|
db = db.Where("timestamp >= ? AND timestamp <= ?", tsStart.Unix(), tsEnd.Unix())
|
if params.ProcID != "" {
|
procIds := strings.Split(params.ProcID, ",")
|
db = db.Where("procID in (?)", procIds)
|
}
|
|
if params.ProcName != "" {
|
db = db.Where("procName like ?", params.ProcName)
|
}
|
|
if params.FuzzySearch != "" {
|
db = db.Where("info like ?", "%"+params.FuzzySearch+"%")
|
}
|
|
if params.Page <= 0 {
|
params.Page = 1
|
}
|
var count int64 = 0
|
err := db.Table("t_schedule_log").Count(&count).Error
|
if nil != err {
|
return &bhomeclient.Reply{Success: false, Msg: "内部错误" + err.Error()}
|
}
|
var logs []*models.ScheduleLog
|
if result := db.Table("t_schedule_log").Limit(params.PageSize).Offset((params.Page - 1) * params.PageSize).Find(&logs); nil != result.Error {
|
return &bhomeclient.Reply{Success: false, Msg: "内部错误" + result.Error.Error()}
|
}
|
|
data := make([]map[string]interface{}, 0)
|
|
if len(logs) > 0 {
|
for _, item := range logs {
|
dd := make(map[string]interface{}, 0)
|
l, _ := json.Marshal(item)
|
json.Unmarshal(l, &dd)
|
dd["addTime"] = time.Unix(item.Timestamp, 0).Format("2006-01-02 15:04:05")
|
dd["minute"] = 0
|
t, err := time.ParseInLocation("2006-01-02 15:04:05", item.ScheduleStartTime, time.Local)
|
if nil == err {
|
t2, err := time.ParseInLocation("2006-01-02 15:04:05", item.ScheduleEndTime, time.Local)
|
if err == nil {
|
dd["minute"] = (t2.Unix() - t.Unix()) / 60
|
}
|
}
|
|
data = append(data, dd)
|
}
|
}
|
return &bhomeclient.Reply{Success: true, Data: map[string]interface{}{"logs": data, "total": count}}
|
}
|
|
func (ac LogServiceController) RuleServerLog(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
|
var params models.RuleServerLogQuery
|
if err := c.BindJSON(¶ms); err != nil {
|
return &bhomeclient.Reply{Success: false, Msg: "参数格式错误,非法的json格式"}
|
}
|
|
db := models.GetDB()
|
if params.TimeStart != "" {
|
db = db.Where("lastSendDate >= ?", params.TimeStart)
|
}
|
if params.TimeEnd != "" {
|
db = db.Where("lastSendDate <= ?", params.TimeEnd)
|
}
|
if params.TaskName != "" {
|
db = db.Where("name like ?", params.TaskName)
|
}
|
|
if params.State != "" {
|
db = db.Where("state like ?", params.State)
|
}
|
|
if params.FuzzySearch != "" {
|
db = db.Where("name like ? ", "%"+params.FuzzySearch+"%")
|
}
|
|
if params.Page <= 0 {
|
params.Page = 1
|
}
|
var count int64 = 0
|
err := db.Table("t_rule_server_log").Count(&count).Error
|
if nil != err {
|
return &bhomeclient.Reply{Success: false, Msg: "内部错误" + err.Error()}
|
}
|
var logs []*models.RuleServerLog
|
if result := db.Table("t_rule_server_log").Limit(params.PageSize).Offset((params.Page - 1) * params.PageSize).Find(&logs); nil != result.Error {
|
return &bhomeclient.Reply{Success: false, Msg: "内部错误" + result.Error.Error()}
|
}
|
|
return &bhomeclient.Reply{Success: true, Data: map[string]interface{}{"logs": logs, "total": count}}
|
}
|
|
func (ac LogServiceController) VaSystemLog(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
|
var params models.VaSystemQuery
|
if err := c.BindJSON(¶ms); err != nil {
|
return &bhomeclient.Reply{Success: false, Msg: "参数格式错误,非法的json格式"}
|
}
|
|
var tsStart, tsEnd time.Time
|
if params.TimeStart == "" && params.TimeEnd == "" {
|
tsEnd = time.Now()
|
tsStart = tsEnd.Add(-time.Hour * 24)
|
} else if params.TimeStart == "" && params.TimeEnd != "" {
|
ts, ok := checkTime(params.TimeEnd)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
tsEnd = ts
|
tsStart = tsEnd.Add(-time.Hour * 24)
|
} else if params.TimeStart != "" && params.TimeEnd == "" {
|
ts, ok := checkTime(params.TimeStart)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
|
tsStart = ts
|
tsEnd = tsStart.Add(time.Hour * 24)
|
} else {
|
var ok bool
|
tsStart, ok = checkTime(params.TimeStart)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
|
tsEnd, ok = checkTime(params.TimeEnd)
|
if !ok {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误,时间解析错误"}
|
}
|
|
if tsStart.After(tsEnd) {
|
return &bhomeclient.Reply{Success: false, Msg: "参数有误, 开始时间大于结束时间"}
|
}
|
}
|
|
db := models.GetDB()
|
db = db.Where("timestamp >= ? AND timestamp <= ?", tsStart.Unix(), tsEnd.Unix())
|
if len(params.ProcName) > 0 {
|
db = db.Where("procName in (?)", params.ProcName)
|
}
|
|
if params.Level != 0 {
|
db = db.Where("level = (?)", params.Level)
|
}
|
|
if params.FuzzySearch != "" {
|
db = db.Where("address like ? or info like ? or procName like ?",
|
"%"+params.FuzzySearch+"%",
|
"%"+params.FuzzySearch+"%",
|
"%"+params.FuzzySearch+"%")
|
}
|
|
if params.Page <= 0 {
|
params.Page = 1
|
}
|
|
var count int64 = 0
|
tableName := models.VaSystemLog{}.TableName()
|
|
err := db.Table(tableName).Count(&count).Error
|
if nil != err {
|
return &bhomeclient.Reply{Success: false, Msg: "内部错误" + err.Error()}
|
}
|
|
var logs []*models.VaSystemLog
|
if result := db.Table(tableName).Limit(params.PageSize).Offset((params.Page - 1) * params.PageSize).Order("timestamp DESC").Find(&logs); nil != result.Error {
|
return &bhomeclient.Reply{Success: false, Msg: "内部错误" + result.Error.Error()}
|
}
|
|
return &bhomeclient.Reply{Success: true, Data: map[string]interface{}{"logs": logs, "total": count}}
|
}
|
|
func (ac LogServiceController) GetProcNames(h *bhomeclient.WrapperHandler, c *bhomeclient.Request) *bhomeclient.Reply {
|
logs := []models.VaSystemLog{}
|
procs := []string{}
|
|
tableName := models.VaSystemLog{}.TableName()
|
models.GetDB().Table(tableName).Group("procName").Select("procName").Find(&logs).Pluck("procName", &procs)
|
|
return &bhomeclient.Reply{Success: true, Data: procs}
|
}
|
|
func checkTime(dateTime string) (time.Time, bool) {
|
ts, err := time.ParseInLocation("2006-01-02 15:04:05", dateTime, time.Local)
|
if err != nil {
|
return ts, false
|
}
|
|
return ts, true
|
}
|