bilibili-backup/app/admin/main/aegis/server/http/report.go

128 lines
2.6 KiB
Go
Raw Normal View History

2019-04-22 10:59:20 +08:00
package http
import (
"net/http"
"time"
"go-common/app/admin/main/aegis/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func commonPre(c *bm.Context) (res map[string][]*model.ReportFlowItem, form map[string][24]*model.ReportFlowItem, err error) {
opt := new(model.OptReport)
if err = c.Bind(opt); err != nil {
return
}
if opt.UName == "debug" {
opt.Type = model.TypeTotal
opt.UName = "total"
}
return srv.ReportTaskflow(c, opt)
}
func taskflow(c *bm.Context) {
res, form, err := commonPre(c)
c.JSONMap(map[string]interface{}{
"data": res,
"form": form,
}, err)
}
func taskflowCSV(c *bm.Context) {
opt := new(model.OptReport)
if err := c.Bind(opt); err != nil {
return
}
res, _, err := commonPre(c)
if err != nil || len(res) == 0 {
c.JSON(nil, err)
}
csv, err := formatReport(res)
if err != nil {
log.Error("formatReport error(%v)", err)
c.JSON(nil, err)
return
}
c.Render(http.StatusOK, CSV{
Content: FormatCSV(csv),
Title: "任务吞吐量报表",
})
}
func tasksubmitpre(c *bm.Context, pager bool) (res *model.ReportSubmitRes, p *model.DayPager, err error) {
pm := new(model.OptReportSubmit)
if err = c.Bind(pm); err != nil {
return
}
if pm.FlowID <= 0 || pm.Bt > pm.Et || (pager && (pm.Pn > pm.Et || pm.Pn < pm.Bt)) {
err = ecode.RequestErr
return
}
//默认展示近期7天内的数据
yesterday := time.Now().Add(-24 * time.Hour).Format("2006-01-02")
if pm.Bt == "" && pm.Et == "" {
pm.Bt = time.Now().Add(-8 * 24 * time.Hour).Format("2006-01-02")
pm.Et = yesterday
} else if pm.Et == "" { //最近日期
pm.Et = yesterday
} else if pm.Bt == "" { //最远日期
pm.Bt = "2019-01-01"
}
//分页的话,默认获取第一页内容(按照日期降序排列,则为最后一日的内容)
bt := pm.Bt
et := pm.Et
if pager {
if pm.Pn == "" {
pm.Pn = et
}
pm.Et = pm.Pn
pm.Bt = pm.Pn
}
if res, err = srv.ReportTaskSubmit(c, pm); err != nil || res == nil {
return
}
//按照日期降序排列
if pager {
p = &model.DayPager{
Pn: pm.Pn,
IsLast: bt == pm.Pn,
IsFirst: et == pm.Pn,
}
}
return
}
func taskSubmit(c *bm.Context) {
res, pager, err := tasksubmitpre(c, true)
c.JSONMap(map[string]interface{}{
"data": res,
"pager": pager,
}, err)
}
func taskSubmitCSV(c *bm.Context) {
res, _, err := tasksubmitpre(c, false)
if err != nil {
c.JSON(nil, err)
return
}
csv, err := formatReportTaskSubmit(res)
if err != nil {
c.JSON(nil, err)
return
}
c.Render(http.StatusOK, CSV{
Content: FormatCSV(csv),
Title: "任务操作报表",
})
}