Files
ppgo_job/models/task_log.go
2019-08-13 23:19:38 +08:00

119 lines
2.4 KiB
Go

/*
* @Author: haodaquan
* @Date: 2017-06-21 12:23:22
* @Last Modified by: haodaquan
* @Last Modified time: 2017-06-22 14:57:13
*/
package models
import (
"encoding/json"
"github.com/astaxie/beego/cache"
"github.com/astaxie/beego/logs"
"github.com/astaxie/beego/orm"
"time"
)
type TaskLog struct {
Id int
TaskId int
ServerId int
ServerName string
Output string
Error string
Status int
ProcessTime int
CreateTime int64
}
var RunNumCache, _ = cache.NewCache("memory", `{"interval":60}`)
func (t *TaskLog) TableName() string {
return TableName("task_log")
}
func TaskLogAdd(t *TaskLog) (int64, error) {
return orm.NewOrm().Insert(t)
}
func TaskLogGetList(page, pageSize int, filters ...interface{}) ([]*TaskLog, int64) {
offset := (page - 1) * pageSize
logs := make([]*TaskLog, 0)
query := orm.NewOrm().QueryTable(TableName("task_log"))
if len(filters) > 0 {
l := len(filters)
for k := 0; k < l; k += 2 {
query = query.Filter(filters[k].(string), filters[k+1])
}
}
total, _ := query.Count()
query.OrderBy("-id").Limit(pageSize, offset).All(&logs)
return logs, total
}
func TaskLogGetById(id int) (*TaskLog, error) {
obj := &TaskLog{
Id: id,
}
err := orm.NewOrm().Read(obj)
if err != nil {
return nil, err
}
return obj, nil
}
func TaskLogDelById(id int) error {
_, err := orm.NewOrm().Delete(&TaskLog{Id: id})
return err
}
func TaskLogDelByTaskId(taskId int) (int64, error) {
return orm.NewOrm().QueryTable(TableName("task_log")).Filter("task_id", taskId).Delete()
}
func GetLogNum(status int) (int64, error) {
return orm.NewOrm().QueryTable(TableName("task_log")).Filter("status", status).Count()
}
type SumDays struct {
Day string
Sum int
}
func SumByDays(limit int, status string) orm.Params {
var m = map[string]string{
"0": "okNum",
"-1": "errNum",
"-2": "expiredRun"}
res := make(orm.Params)
key := m[status]
if RunNumCache.IsExist(key) {
json.Unmarshal(RunNumCache.Get(key).([]byte), &res)
logs.Info("cache")
return res
}
_, err := orm.NewOrm().Raw("SELECT FROM_UNIXTIME(create_time,'%Y-%m-%d') days,COUNT(id) count FROM pp_task_log WHERE status in(?) GROUP BY days ORDER BY days DESC limit ?;",
status, limit).RowsToMap(&res, "days", "count")
if err != nil {
return nil
}
data, err := json.Marshal(res)
if err != nil {
return nil
}
RunNumCache.Put(key, data, 2*time.Hour)
return res
}