Files
2019-08-08 17:13:34 +08:00

104 lines
2.7 KiB
Go

package controllers
import (
"anytunnel/at-admin/app/models"
"fmt"
"strconv"
"time"
"github.com/dustin/go-humanize"
"github.com/astaxie/beego"
)
type MainController struct {
BaseAdminController
}
func (this *MainController) Default() {
if this.Ctx.Input.IsGet() {
this.view("main/default")
} else {
data := map[string]interface{}{}
db := models.G.DB("base")
rs, err := db.Query(db.AR().Select("count(*) as total,cs_type").From("online").GroupBy("cs_type"))
if err != nil {
this.jsonError(err.Error())
}
d := rs.MapValues("cs_type", "total")
clients := "0"
servers := "0"
if v, ok := d["client"]; ok {
clients = v
}
if v, ok := d["server"]; ok {
servers = v
}
rs, err = db.Query(db.AR().Select("count(*) as total").From("cluster").Where(map[string]interface{}{
"update_time >": time.Now().Unix() - 60,
"is_disable": 0,
"is_delete": 0,
}))
if err != nil {
this.jsonError(err.Error())
}
clusters := rs.Value("total")
now := time.Now().Unix()
rs, err = db.Query(db.AR().Select("sum(bytes_total) as total").From("package").Where(map[string]interface{}{
"start_time <=": now,
"end_time >=": now,
}))
if err != nil {
this.jsonError(err.Error())
}
traffic := rs.Value("total")
if traffic == "" {
traffic = "0"
}
rs, err = db.Query(db.AR().Select("sum(bytes_left) as total").From("package").Where(map[string]interface{}{
"start_time <=": now,
"end_time >=": now,
}))
if err != nil {
this.jsonError(err.Error())
}
trafficLeft := rs.Value("total")
if trafficLeft == "" {
trafficLeft = "0"
}
data["online"] = map[string]interface{}{
"client": clients,
"server": servers,
"cluster": clusters,
}
_traffic, _ := strconv.Atoi(traffic)
_trafficLeft, _ := strconv.Atoi(trafficLeft)
_trafficUse := _traffic - _trafficLeft
data["traffic"] = map[string]interface{}{
"total": traffic,
"total_human": humanize.Bytes(uint64(_traffic)),
"total_left": _trafficLeft,
"total_left_human": humanize.Bytes(uint64(_trafficLeft)),
"total_use": _trafficUse,
"total_use_human": humanize.Bytes(uint64(_trafficUse)),
}
this.jsonSuccess("", data)
}
}
func (this *MainController) Index() {
this.Layout = "layout/main.html"
this.TplName = "main/index.html"
this.Data["title"] = fmt.Sprintf("%s - %s", beego.AppConfig.String("sys.name"), beego.AppConfig.String("sys.fullname"))
privilege := models.Privilege{}
navigators, menus, controllers, err := privilege.GetTypedPrivileges(this.loginUser["user_id"], "1")
if err != nil {
this.jsonError(err, "")
}
this.Data["navigators"] = navigators
this.Data["menus"] = menus
this.Data["controllers"] = controllers
this.Render()
}