From a005eaf14aee0a1dcd9b7c380e5b678eebceb9fb Mon Sep 17 00:00:00 2001 From: Doflatango Date: Tue, 14 Feb 2017 10:06:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/files/base.json.sample | 3 +- models/job_log.go | 17 +++++- web/job_log.go | 107 ++++++++++++++++++++++++------------ 3 files changed, 88 insertions(+), 39 deletions(-) diff --git a/conf/files/base.json.sample b/conf/files/base.json.sample index f8ab1a8..bf3f8f1 100644 --- a/conf/files/base.json.sample +++ b/conf/files/base.json.sample @@ -6,5 +6,6 @@ "Ttl": 10, "ReqTimeout": 2, "Log": "@extend:log.json", - "Etcd": "@extend:etcd.json" + "Etcd": "@extend:etcd.json", + "Mgo": "@extend:db.json" } diff --git a/models/job_log.go b/models/job_log.go index a44adbb..a51d980 100644 --- a/models/job_log.go +++ b/models/job_log.go @@ -3,6 +3,7 @@ package models import ( "time" + mgo "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" "sunteng/commons/log" @@ -26,11 +27,21 @@ type JobLog struct { EndTime time.Time `bson:"endTime" json:"endTime"` // 任务执行完毕时间,精确到毫秒 } -func GetJobLogById(id bson.ObjectId) (*JobLog, error) { - return nil, nil +func GetJobLogById(id bson.ObjectId) (l *JobLog, err error) { + err = mgoDB.FindId(Coll_JobLog, id, &l) + return } -func GetJobLogList(query interface{}, skip, limit int) (list []*JobLog, err error) { +var projection = bson.M{"command": -1, "output": -1} + +func GetJobLogList(query bson.M, page, size int, sort string) (list []*JobLog, total int, err error) { + err = mgoDB.WithC(Coll_JobLog, func(c *mgo.Collection) error { + total, err = c.Find(query).Count() + if err != nil { + return err + } + return c.Find(query).Select(projection).Sort(sort).Skip((page - 1) * size).Limit(size).All(&list) + }) return } diff --git a/web/job_log.go b/web/job_log.go index c65f6ab..bb6ee0f 100644 --- a/web/job_log.go +++ b/web/job_log.go @@ -2,14 +2,15 @@ package web import ( "net/http" + "strconv" "strings" - "time" "github.com/gorilla/mux" "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" "sunteng/cronsun/models" + "time" ) type JobLog struct{} @@ -37,41 +38,52 @@ func (jl *JobLog) GetDetail(w http.ResponseWriter, r *http.Request) { } func (jl *JobLog) GetList(w http.ResponseWriter, r *http.Request) { - // nodes := GetStringArrayFromQuery("nodes", ",", r) - // names := GetStringArrayFromQuery("names", ",", r) - // begin := r.FormValue("begin") - // end := r.FormValue("end") - - list := []*models.JobLog{ - &models.JobLog{ - Id: bson.NewObjectId(), - Name: "test1", - JobId: "test1", - Node: "192.168.1.2", - ExitCode: 0, - BeginTime: time.Now(), - EndTime: time.Now().Add(time.Duration(time.Minute)), - }, - &models.JobLog{ - Id: bson.NewObjectId(), - Name: "test2", - JobId: "test2", - Node: "192.168.1.2", - ExitCode: 1, - BeginTime: time.Now(), - EndTime: time.Now().Add(time.Duration(350 * time.Millisecond)), - }, - &models.JobLog{ - Id: bson.NewObjectId(), - Name: "test3", - JobId: "test3", - Node: "192.168.1.3", - ExitCode: 0, - BeginTime: time.Now(), - EndTime: time.Now().Add(time.Duration(time.Hour * 12)), - }, + nodes := GetStringArrayFromQuery("nodes", ",", r) + names := GetStringArrayFromQuery("names", ",", r) + begin := getTime(r.FormValue("begin")) + end := getTime(r.FormValue("end")) + page := getPage(r.FormValue("page")) + pageSize := getPageSize(r.FormValue("pageSize")) + sort := "-beginTime" + if r.FormValue("sort") == "1" { + sort = "beginTime" } - outJSON(w, list) + + query := bson.M{} + if len(nodes) > 0 { + query["node"] = bson.M{"$in": nodes} + } + if len(names) > 0 { + var search []bson.M + for _, k := range names { + k = strings.TrimSpace(k) + if len(k) == 0 { + continue + } + search = append(search, bson.M{"name": bson.M{"$regex": bson.RegEx{Pattern: k, Options: "i"}}}) + } + query["$or"] = search + } + + if !begin.IsZero() { + query["beginTime"] = bson.M{"$gte": begin} + } + if !end.IsZero() { + query["endTime"] = bson.M{"$lte": end} + } + + var pager struct { + Total int `json:"total"` + List []*models.JobLog `json:"list"` + } + var err error + pager.List, pager.Total, err = models.GetJobLogList(query, page, pageSize, sort) + if err != nil { + outJSONError(w, http.StatusInternalServerError, err.Error()) + return + } + + outJSON(w, pager) } func GetStringArrayFromQuery(name, sep string, r *http.Request) (arr []string) { @@ -82,3 +94,28 @@ func GetStringArrayFromQuery(name, sep string, r *http.Request) (arr []string) { return strings.Split(val, sep) } + +func getPage(page string) int { + p, err := strconv.Atoi(page) + if err != nil || p < 1 { + p = 1 + } + + return p +} + +func getPageSize(ps string) int { + p, err := strconv.Atoi(ps) + if err != nil || p < 1 { + p = 50 + } else if p > 200 { + p = 200 + } + return p +} + +func getTime(t string) time.Time { + t = strings.TrimSpace(t) + time, _ := time.Parse("2006-01-02", t) + return time +}