v2版本正式上线测试版
This commit is contained in:
215
controllers/admin.go
Normal file
215
controllers/admin.go
Normal file
@@ -0,0 +1,215 @@
|
||||
/**********************************************
|
||||
** @Des: 管理员
|
||||
** @Author: haodaquan
|
||||
** @Date: 2017-09-16 14:17:37
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2017-09-17 11:14:07
|
||||
***********************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/george518/PPGo_Job/libs"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
)
|
||||
|
||||
type AdminController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (self *AdminController) List() {
|
||||
self.Data["pageTitle"] = "管理员管理"
|
||||
self.display()
|
||||
//self.TplName = "admin/list.html"
|
||||
}
|
||||
|
||||
func (self *AdminController) Add() {
|
||||
self.Data["pageTitle"] = "新增管理员"
|
||||
|
||||
// 角色
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 1)
|
||||
result, _ := models.RoleGetList(1, 1000, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["role_name"] = v.RoleName
|
||||
list[k] = row
|
||||
}
|
||||
|
||||
self.Data["role"] = list
|
||||
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *AdminController) Edit() {
|
||||
self.Data["pageTitle"] = "编辑管理员"
|
||||
|
||||
id, _ := self.GetInt("id", 0)
|
||||
Admin, _ := models.AdminGetById(id)
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = Admin.Id
|
||||
row["login_name"] = Admin.LoginName
|
||||
row["real_name"] = Admin.RealName
|
||||
row["phone"] = Admin.Phone
|
||||
row["email"] = Admin.Email
|
||||
row["role_ids"] = Admin.RoleIds
|
||||
self.Data["admin"] = row
|
||||
|
||||
role_ids := strings.Split(Admin.RoleIds, ",")
|
||||
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 1)
|
||||
result, _ := models.RoleGetList(1, 1000, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["checked"] = 0
|
||||
for i := 0; i < len(role_ids); i++ {
|
||||
role_id, _ := strconv.Atoi(role_ids[i])
|
||||
if role_id == v.Id {
|
||||
row["checked"] = 1
|
||||
}
|
||||
fmt.Println(role_ids[i])
|
||||
}
|
||||
row["id"] = v.Id
|
||||
row["role_name"] = v.RoleName
|
||||
list[k] = row
|
||||
}
|
||||
self.Data["role"] = list
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *AdminController) AjaxSave() {
|
||||
Admin_id, _ := self.GetInt("id")
|
||||
if Admin_id == 0 {
|
||||
Admin := new(models.Admin)
|
||||
Admin.LoginName = strings.TrimSpace(self.GetString("login_name"))
|
||||
Admin.RealName = strings.TrimSpace(self.GetString("real_name"))
|
||||
Admin.Phone = strings.TrimSpace(self.GetString("phone"))
|
||||
Admin.Email = strings.TrimSpace(self.GetString("email"))
|
||||
Admin.RoleIds = strings.TrimSpace(self.GetString("roleids"))
|
||||
Admin.UpdateTime = time.Now().Unix()
|
||||
Admin.UpdateId = self.userId
|
||||
Admin.Status = 1
|
||||
|
||||
// 检查登录名是否已经存在
|
||||
_, err := models.AdminGetByName(Admin.LoginName)
|
||||
|
||||
if err == nil {
|
||||
self.ajaxMsg("登录名已经存在", MSG_ERR)
|
||||
}
|
||||
//新增
|
||||
pwd, salt := libs.Password(4, "")
|
||||
Admin.Password = pwd
|
||||
Admin.Salt = salt
|
||||
Admin.CreateTime = time.Now().Unix()
|
||||
Admin.CreateId = self.userId
|
||||
if _, err := models.AdminAdd(Admin); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
Admin, _ := models.AdminGetById(Admin_id)
|
||||
//修改
|
||||
Admin.Id = Admin_id
|
||||
Admin.UpdateTime = time.Now().Unix()
|
||||
Admin.UpdateId = self.userId
|
||||
Admin.LoginName = strings.TrimSpace(self.GetString("login_name"))
|
||||
Admin.RealName = strings.TrimSpace(self.GetString("real_name"))
|
||||
Admin.Phone = strings.TrimSpace(self.GetString("phone"))
|
||||
Admin.Email = strings.TrimSpace(self.GetString("email"))
|
||||
Admin.RoleIds = strings.TrimSpace(self.GetString("roleids"))
|
||||
Admin.UpdateTime = time.Now().Unix()
|
||||
Admin.UpdateId = self.userId
|
||||
Admin.Status = 1
|
||||
|
||||
resetPwd, _ := self.GetInt("reset_pwd")
|
||||
if resetPwd == 1 {
|
||||
pwd, salt := libs.Password(4, "")
|
||||
Admin.Password = pwd
|
||||
Admin.Salt = salt
|
||||
}
|
||||
|
||||
//普通管理员不可修改超级管理员资料
|
||||
if self.userId != 1 && Admin.Id == 1 {
|
||||
self.ajaxMsg("不可修改超级管理员资料", MSG_ERR)
|
||||
}
|
||||
if err := Admin.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg(strconv.Itoa(resetPwd), MSG_OK)
|
||||
}
|
||||
|
||||
func (self *AdminController) AjaxDel() {
|
||||
|
||||
Admin_id, _ := self.GetInt("id")
|
||||
status := strings.TrimSpace(self.GetString("status"))
|
||||
if Admin_id == 1 {
|
||||
self.ajaxMsg("超级管理员不允许操作", MSG_ERR)
|
||||
}
|
||||
|
||||
Admin_status := 0
|
||||
if status == "enable" {
|
||||
Admin_status = 1
|
||||
}
|
||||
Admin, _ := models.AdminGetById(Admin_id)
|
||||
Admin.UpdateTime = time.Now().Unix()
|
||||
Admin.Status = Admin_status
|
||||
Admin.Id = Admin_id
|
||||
|
||||
if err := Admin.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("操作成功", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *AdminController) Table() {
|
||||
//列表
|
||||
page, err := self.GetInt("page")
|
||||
if err != nil {
|
||||
page = 1
|
||||
}
|
||||
limit, err := self.GetInt("limit")
|
||||
if err != nil {
|
||||
limit = 30
|
||||
}
|
||||
|
||||
realName := strings.TrimSpace(self.GetString("realName"))
|
||||
|
||||
StatusText := make(map[int]string)
|
||||
StatusText[0] = "<font color='red'>禁用</font>"
|
||||
StatusText[1] = "正常"
|
||||
|
||||
self.pageSize = limit
|
||||
//查询条件
|
||||
filters := make([]interface{}, 0)
|
||||
//
|
||||
if realName != "" {
|
||||
filters = append(filters, "real_name__icontains", realName)
|
||||
}
|
||||
result, count := models.AdminGetList(page, self.pageSize, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["login_name"] = v.LoginName
|
||||
row["real_name"] = v.RealName
|
||||
row["phone"] = v.Phone
|
||||
row["email"] = v.Email
|
||||
row["role_ids"] = v.RoleIds
|
||||
row["create_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
row["update_time"] = beego.Date(time.Unix(v.UpdateTime, 0), "Y-m-d H:i:s")
|
||||
row["status"] = v.Status
|
||||
row["status_text"] = StatusText[v.Status]
|
||||
list[k] = row
|
||||
}
|
||||
self.ajaxList("成功", MSG_OK, count, list)
|
||||
}
|
||||
118
controllers/auth.go
Normal file
118
controllers/auth.go
Normal file
@@ -0,0 +1,118 @@
|
||||
/**********************************************
|
||||
** @Des: 权限因子
|
||||
** @Author: haodaquan
|
||||
** @Date: 2017-09-09 16:14:31
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2017-09-17 11:23:40
|
||||
***********************************************/
|
||||
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
)
|
||||
|
||||
type AuthController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (self *AuthController) Index() {
|
||||
|
||||
self.Data["pageTitle"] = "权限因子"
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *AuthController) List() {
|
||||
self.Data["zTree"] = true //引入ztreecss
|
||||
self.Data["pageTitle"] = "权限因子"
|
||||
self.display()
|
||||
}
|
||||
|
||||
//获取全部节点
|
||||
func (self *AuthController) GetNodes() {
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 1)
|
||||
result, count := models.AuthGetList(1, 1000, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["pId"] = v.Pid
|
||||
row["name"] = v.AuthName
|
||||
row["open"] = true
|
||||
list[k] = row
|
||||
}
|
||||
|
||||
self.ajaxList("成功", MSG_OK, count, list)
|
||||
}
|
||||
|
||||
//获取一个节点
|
||||
func (self *AuthController) GetNode() {
|
||||
id, _ := self.GetInt("id")
|
||||
result, _ := models.AuthGetById(id)
|
||||
// if err == nil {
|
||||
// self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
// }
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = result.Id
|
||||
row["pid"] = result.Pid
|
||||
row["auth_name"] = result.AuthName
|
||||
row["auth_url"] = result.AuthUrl
|
||||
row["sort"] = result.Sort
|
||||
row["is_show"] = result.IsShow
|
||||
row["icon"] = result.Icon
|
||||
|
||||
fmt.Println(row)
|
||||
|
||||
self.ajaxList("成功", MSG_OK, 0, row)
|
||||
}
|
||||
|
||||
//新增或修改
|
||||
func (self *AuthController) AjaxSave() {
|
||||
auth := new(models.Auth)
|
||||
auth.UserId = self.userId
|
||||
auth.Pid, _ = self.GetInt("pid")
|
||||
auth.AuthName = strings.TrimSpace(self.GetString("auth_name"))
|
||||
auth.AuthUrl = strings.TrimSpace(self.GetString("auth_url"))
|
||||
auth.Sort, _ = self.GetInt("sort")
|
||||
auth.IsShow, _ = self.GetInt("is_show")
|
||||
auth.Icon = strings.TrimSpace(self.GetString("icon"))
|
||||
auth.UpdateTime = time.Now().Unix()
|
||||
|
||||
auth.Status = 1
|
||||
|
||||
id, _ := self.GetInt("id")
|
||||
if id == 0 {
|
||||
//新增
|
||||
auth.CreateTime = time.Now().Unix()
|
||||
auth.CreateId = self.userId
|
||||
auth.UpdateId = self.userId
|
||||
if _, err := models.AuthAdd(auth); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
} else {
|
||||
auth.Id = id
|
||||
auth.UpdateId = self.userId
|
||||
if err := auth.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
}
|
||||
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
//删除
|
||||
func (self *AuthController) AjaxDel() {
|
||||
id, _ := self.GetInt("id")
|
||||
auth, _ := models.AuthGetById(id)
|
||||
auth.Id = id
|
||||
auth.Status = 0
|
||||
if err := auth.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
126
controllers/ban.go
Normal file
126
controllers/ban.go
Normal file
@@ -0,0 +1,126 @@
|
||||
/************************************************************
|
||||
** @Description: controllers
|
||||
** @Author: haodaquan
|
||||
** @Date: 2018-06-10 19:50
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2018-06-10 19:50
|
||||
*************************************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
)
|
||||
|
||||
type BanController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (self *BanController) List() {
|
||||
self.Data["pageTitle"] = "禁用命令管理"
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *BanController) Add() {
|
||||
self.Data["pageTitle"] = "新增禁用命令"
|
||||
|
||||
// 角色
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 1)
|
||||
result, _ := models.RoleGetList(1, 1000, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["role_name"] = v.RoleName
|
||||
list[k] = row
|
||||
}
|
||||
|
||||
self.Data["role"] = list
|
||||
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *BanController) Edit() {
|
||||
self.Data["pageTitle"] = "编辑禁用命令"
|
||||
|
||||
id, _ := self.GetInt("id", 0)
|
||||
ban, _ := models.BanGetById(id)
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = ban.Id
|
||||
row["code"] = ban.Code
|
||||
self.Data["ban"] = row
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *BanController) AjaxSave() {
|
||||
id, _ := self.GetInt("id")
|
||||
if id == 0 {
|
||||
ban := new(models.Ban)
|
||||
ban.Code = strings.TrimSpace(self.GetString("code"))
|
||||
ban.CreateTime = time.Now().Unix()
|
||||
|
||||
if _, err := models.BanAdd(ban); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
ban, _ := models.BanGetById(id)
|
||||
//修改
|
||||
ban.Id = id
|
||||
ban.UpdateTime = time.Now().Unix()
|
||||
ban.Code = strings.TrimSpace(self.GetString("code"))
|
||||
|
||||
if err := ban.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *BanController) AjaxDel() {
|
||||
id, _ := self.GetInt("id")
|
||||
ban, _ := models.BanGetById(id)
|
||||
ban.UpdateTime = time.Now().Unix()
|
||||
ban.Status = 1
|
||||
|
||||
if err := ban.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("操作成功", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *BanController) Table() {
|
||||
//列表
|
||||
page, err := self.GetInt("page")
|
||||
if err != nil {
|
||||
page = 1
|
||||
}
|
||||
limit, err := self.GetInt("limit")
|
||||
if err != nil {
|
||||
limit = 30
|
||||
}
|
||||
|
||||
code := strings.TrimSpace(self.GetString("code"))
|
||||
|
||||
self.pageSize = limit
|
||||
//查询条件
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 0)
|
||||
if code != "" {
|
||||
filters = append(filters, "code__icontains", code)
|
||||
}
|
||||
result, count := models.BanGetList(page, self.pageSize, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["code"] = v.Code
|
||||
row["create_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
list[k] = row
|
||||
}
|
||||
self.ajaxList("成功", MSG_OK, count, list)
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
/*
|
||||
* @Author: haodaquan
|
||||
* @Date: 2017-06-19 22:27:09
|
||||
* @Last Modified by: haodaquan
|
||||
* @Last Modified time: 2017-06-22 11:15:33
|
||||
*/
|
||||
/**********************************************
|
||||
** @Des: base controller
|
||||
** @Author: haodaquan
|
||||
** @Date: 2017-09-07 16:54:40
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2017-09-18 10:28:01
|
||||
***********************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
@@ -23,106 +24,291 @@ type BaseController struct {
|
||||
beego.Controller
|
||||
controllerName string
|
||||
actionName string
|
||||
user *models.User
|
||||
user *models.Admin
|
||||
userId int
|
||||
userName string
|
||||
loginName string
|
||||
pageSize int
|
||||
allowUrl string
|
||||
serverGroups string
|
||||
taskGroups string
|
||||
}
|
||||
|
||||
func (this *BaseController) Prepare() {
|
||||
this.pageSize = 20
|
||||
controllerName, actionName := this.GetControllerAndAction()
|
||||
this.controllerName = strings.ToLower(controllerName[0 : len(controllerName)-10])
|
||||
this.actionName = strings.ToLower(actionName)
|
||||
this.auth()
|
||||
//前期准备
|
||||
func (self *BaseController) Prepare() {
|
||||
self.pageSize = 20
|
||||
controllerName, actionName := self.GetControllerAndAction()
|
||||
self.controllerName = strings.ToLower(controllerName[0 : len(controllerName)-10])
|
||||
self.actionName = strings.ToLower(actionName)
|
||||
self.Data["version"] = beego.AppConfig.String("version")
|
||||
self.Data["siteName"] = beego.AppConfig.String("site.name")
|
||||
self.Data["curRoute"] = self.controllerName + "." + self.actionName
|
||||
self.Data["curController"] = self.controllerName
|
||||
self.Data["curAction"] = self.actionName
|
||||
// noAuth := "ajaxsave/ajaxdel/table/loginin/loginout/getnodes/start"
|
||||
// isNoAuth := strings.Contains(noAuth, self.actionName)
|
||||
//fmt.Println(self.controllerName)
|
||||
//if (strings.Compare(self.controllerName, "apidoc")) != 0 {
|
||||
//
|
||||
//}
|
||||
|
||||
this.Data["version"] = beego.AppConfig.String("version")
|
||||
this.Data["siteName"] = beego.AppConfig.String("site.name")
|
||||
this.Data["curRoute"] = this.controllerName + "." + this.actionName
|
||||
this.Data["curController"] = this.controllerName
|
||||
this.Data["curAction"] = this.actionName
|
||||
this.Data["loginUserId"] = this.userId
|
||||
this.Data["loginUserName"] = this.userName
|
||||
this.Data["menuTag"] = this.controllerName
|
||||
self.Auth()
|
||||
self.Data["loginUserId"] = self.userId
|
||||
self.Data["loginUserName"] = self.userName
|
||||
}
|
||||
|
||||
//登录状态验证
|
||||
func (this *BaseController) auth() {
|
||||
arr := strings.Split(this.Ctx.GetCookie("auth"), "|")
|
||||
//登录权限验证
|
||||
func (self *BaseController) Auth() {
|
||||
arr := strings.Split(self.Ctx.GetCookie("auth"), "|")
|
||||
self.userId = 0
|
||||
if len(arr) == 2 {
|
||||
idstr, password := arr[0], arr[1]
|
||||
userId, _ := strconv.Atoi(idstr)
|
||||
if userId > 0 {
|
||||
user, err := models.UserGetById(userId)
|
||||
if err == nil && password == libs.Md5([]byte(this.getClientIp()+"|"+user.Password+user.Salt)) {
|
||||
this.userId = user.Id
|
||||
this.userName = user.UserName
|
||||
this.user = user
|
||||
user, err := models.AdminGetById(userId)
|
||||
|
||||
if err == nil && password == libs.Md5([]byte(self.getClientIp()+"|"+user.Password+user.Salt)) {
|
||||
self.userId = user.Id
|
||||
self.loginName = user.LoginName
|
||||
self.userName = user.RealName
|
||||
self.user = user
|
||||
self.AdminAuth()
|
||||
self.dataAuth(user)
|
||||
}
|
||||
|
||||
isHasAuth := strings.Contains(self.allowUrl, self.controllerName+"/"+self.actionName)
|
||||
noAuth := "ajaxsave/table/loginin/loginout/getnodes/start"
|
||||
isNoAuth := strings.Contains(noAuth, self.actionName)
|
||||
|
||||
if isHasAuth == false && isNoAuth == false {
|
||||
if strings.Contains(self.actionName, "ajax") {
|
||||
self.ajaxMsg("没有权限", MSG_ERR)
|
||||
return
|
||||
}
|
||||
|
||||
flash := beego.NewFlash()
|
||||
flash.Error("没有权限")
|
||||
flash.Store(&self.Controller)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if this.userId == 0 && (this.controllerName != "main" ||
|
||||
(this.controllerName == "main" && this.actionName != "logout" && this.actionName != "login")) {
|
||||
this.redirect(beego.URLFor("MainController.Login"))
|
||||
if self.userId == 0 && (self.controllerName != "login" && self.actionName != "loginin") {
|
||||
self.redirect(beego.URLFor("LoginController.Login"))
|
||||
}
|
||||
}
|
||||
|
||||
//渲染模版
|
||||
func (this *BaseController) display(tpl ...string) {
|
||||
var tplname string
|
||||
if len(tpl) > 0 {
|
||||
tplname = tpl[0] + ".html"
|
||||
} else {
|
||||
tplname = this.controllerName + "/" + this.actionName + ".html"
|
||||
func (self *BaseController) dataAuth(user *models.Admin) {
|
||||
if user.RoleIds == "0" || user.Id == 1 {
|
||||
return
|
||||
}
|
||||
this.Layout = "public/layout.html"
|
||||
this.TplName = tplname
|
||||
|
||||
Filters := make([]interface{}, 0)
|
||||
Filters = append(Filters, "status", 1)
|
||||
|
||||
RoleIdsArr := strings.Split(user.RoleIds, ",")
|
||||
|
||||
RoleIds := make([]int, 0)
|
||||
for _, v := range RoleIdsArr {
|
||||
id, _ := strconv.Atoi(v)
|
||||
RoleIds = append(RoleIds, id)
|
||||
}
|
||||
|
||||
Filters = append(Filters, "id__in", RoleIds)
|
||||
|
||||
Result, _ := models.RoleGetList(1, 1000, Filters...)
|
||||
serverGroups := ""
|
||||
taskGroups := ""
|
||||
for _, v := range Result {
|
||||
serverGroups += v.ServerGroupIds + ","
|
||||
taskGroups += v.TaskGroupIds + ","
|
||||
}
|
||||
|
||||
self.serverGroups = strings.Trim(serverGroups, ",")
|
||||
self.taskGroups = strings.Trim(taskGroups, ",")
|
||||
}
|
||||
|
||||
// 重定向
|
||||
func (this *BaseController) redirect(url string) {
|
||||
this.Redirect(url, 302)
|
||||
this.StopRun()
|
||||
func (self *BaseController) AdminAuth() {
|
||||
// 左侧导航栏
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 1)
|
||||
if self.userId != 1 {
|
||||
//普通管理员
|
||||
adminAuthIds, _ := models.RoleAuthGetByIds(self.user.RoleIds)
|
||||
adminAuthIdArr := strings.Split(adminAuthIds, ",")
|
||||
filters = append(filters, "id__in", adminAuthIdArr)
|
||||
}
|
||||
result, _ := models.AuthGetList(1, 1000, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
list2 := make([]map[string]interface{}, len(result))
|
||||
allow_url := ""
|
||||
i, j := 0, 0
|
||||
for _, v := range result {
|
||||
if v.AuthUrl != " " || v.AuthUrl != "/" {
|
||||
allow_url += v.AuthUrl
|
||||
}
|
||||
row := make(map[string]interface{})
|
||||
if v.Pid == 1 && v.IsShow == 1 {
|
||||
row["Id"] = int(v.Id)
|
||||
row["Sort"] = v.Sort
|
||||
row["AuthName"] = v.AuthName
|
||||
row["AuthUrl"] = v.AuthUrl
|
||||
row["Icon"] = v.Icon
|
||||
row["Pid"] = int(v.Pid)
|
||||
list[i] = row
|
||||
i++
|
||||
}
|
||||
if v.Pid != 1 && v.IsShow == 1 {
|
||||
row["Id"] = int(v.Id)
|
||||
row["Sort"] = v.Sort
|
||||
row["AuthName"] = v.AuthName
|
||||
row["AuthUrl"] = v.AuthUrl
|
||||
row["Icon"] = v.Icon
|
||||
row["Pid"] = int(v.Pid)
|
||||
list2[j] = row
|
||||
j++
|
||||
}
|
||||
}
|
||||
|
||||
self.Data["SideMenu1"] = list[:i] //一级菜单
|
||||
self.Data["SideMenu2"] = list2[:j] //二级菜单
|
||||
|
||||
self.allowUrl = allow_url + "/home/index"
|
||||
}
|
||||
|
||||
// 是否POST提交
|
||||
func (this *BaseController) isPost() bool {
|
||||
return this.Ctx.Request.Method == "POST"
|
||||
}
|
||||
|
||||
// 显示错误信息
|
||||
func (this *BaseController) showMsg(args ...string) {
|
||||
this.Data["message"] = args[0]
|
||||
redirect := this.Ctx.Request.Referer()
|
||||
if len(args) > 1 {
|
||||
redirect = args[1]
|
||||
}
|
||||
|
||||
this.Data["redirect"] = redirect
|
||||
this.Data["pageTitle"] = "系统提示"
|
||||
this.display("error/message")
|
||||
this.Render()
|
||||
this.StopRun()
|
||||
}
|
||||
|
||||
// 输出json
|
||||
func (this *BaseController) jsonResult(out interface{}) {
|
||||
this.Data["json"] = out
|
||||
this.ServeJSON()
|
||||
this.StopRun()
|
||||
}
|
||||
|
||||
func (this *BaseController) ajaxMsg(msg interface{}, msgno int) {
|
||||
out := make(map[string]interface{})
|
||||
out["status"] = msgno
|
||||
out["msg"] = msg
|
||||
|
||||
this.jsonResult(out)
|
||||
func (self *BaseController) isPost() bool {
|
||||
return self.Ctx.Request.Method == "POST"
|
||||
}
|
||||
|
||||
//获取用户IP地址
|
||||
func (this *BaseController) getClientIp() string {
|
||||
s := strings.Split(this.Ctx.Request.RemoteAddr, ":")
|
||||
func (self *BaseController) getClientIp() string {
|
||||
s := strings.Split(self.Ctx.Request.RemoteAddr, ":")
|
||||
return s[0]
|
||||
}
|
||||
|
||||
// 重定向
|
||||
func (self *BaseController) redirect(url string) {
|
||||
self.Redirect(url, 302)
|
||||
self.StopRun()
|
||||
}
|
||||
|
||||
//加载模板
|
||||
func (self *BaseController) display(tpl ...string) {
|
||||
var tplname string
|
||||
if len(tpl) > 0 {
|
||||
tplname = strings.Join([]string{tpl[0], "html"}, ".")
|
||||
} else {
|
||||
tplname = self.controllerName + "/" + self.actionName + ".html"
|
||||
}
|
||||
self.Layout = "public/layout.html"
|
||||
self.TplName = tplname
|
||||
}
|
||||
|
||||
//ajax返回
|
||||
func (self *BaseController) ajaxMsg(msg interface{}, msgno int) {
|
||||
out := make(map[string]interface{})
|
||||
out["status"] = msgno
|
||||
out["message"] = msg
|
||||
self.Data["json"] = out
|
||||
self.ServeJSON()
|
||||
self.StopRun()
|
||||
}
|
||||
|
||||
//ajax返回 列表
|
||||
func (self *BaseController) ajaxList(msg interface{}, msgno int, count int64, data interface{}) {
|
||||
out := make(map[string]interface{})
|
||||
out["code"] = msgno
|
||||
out["msg"] = msg
|
||||
out["count"] = count
|
||||
out["data"] = data
|
||||
self.Data["json"] = out
|
||||
self.ServeJSON()
|
||||
self.StopRun()
|
||||
}
|
||||
|
||||
//资源分组信息
|
||||
func serverGroupLists(authStr string, adminId int) (sgl map[int]string) {
|
||||
Filters := make([]interface{}, 0)
|
||||
Filters = append(Filters, "status", 1)
|
||||
if authStr != "0" && adminId != 1 {
|
||||
serverGroupIdsArr := strings.Split(authStr, ",")
|
||||
serverGroupIds := make([]int, 0)
|
||||
for _, v := range serverGroupIdsArr {
|
||||
id, _ := strconv.Atoi(v)
|
||||
serverGroupIds = append(serverGroupIds, id)
|
||||
}
|
||||
Filters = append(Filters, "id__in", serverGroupIds)
|
||||
}
|
||||
|
||||
groupResult, n := models.ServerGroupGetList(1, 1000, Filters...)
|
||||
sgl = make(map[int]string, n)
|
||||
for _, gv := range groupResult {
|
||||
sgl[gv.Id] = gv.GroupName
|
||||
}
|
||||
//sgl[0] = "默认分组"
|
||||
return sgl
|
||||
}
|
||||
|
||||
func taskGroupLists(authStr string, adminId int) (gl map[int]string) {
|
||||
groupFilters := make([]interface{}, 0)
|
||||
groupFilters = append(groupFilters, "status", 1)
|
||||
if authStr != "0" && adminId != 1 {
|
||||
taskGroupIdsArr := strings.Split(authStr, ",")
|
||||
taskGroupIds := make([]int, 0)
|
||||
for _, v := range taskGroupIdsArr {
|
||||
id, _ := strconv.Atoi(v)
|
||||
taskGroupIds = append(taskGroupIds, id)
|
||||
}
|
||||
groupFilters = append(groupFilters, "id__in", taskGroupIds)
|
||||
}
|
||||
groupResult, n := models.GroupGetList(1, 1000, groupFilters...)
|
||||
gl = make(map[int]string, n)
|
||||
for _, gv := range groupResult {
|
||||
gl[gv.Id] = gv.GroupName
|
||||
}
|
||||
return gl
|
||||
}
|
||||
|
||||
func serverListByGroupId(groupId int) []string {
|
||||
Filters := make([]interface{}, 0)
|
||||
Filters = append(Filters, "status", 1)
|
||||
Filters = append(Filters, "group_id", groupId)
|
||||
Result, _ := models.TaskServerGetList(1, 1000, Filters...)
|
||||
|
||||
servers := make([]string, 0)
|
||||
for _, v := range Result {
|
||||
servers = append(servers, strconv.Itoa(v.Id), v.ServerName)
|
||||
}
|
||||
|
||||
return servers
|
||||
}
|
||||
|
||||
type serverList struct {
|
||||
GroupId int
|
||||
GroupName string
|
||||
Servers map[int]string
|
||||
}
|
||||
|
||||
func serverLists(authStr string, adminId int) (sls []serverList) {
|
||||
serverGroup := serverGroupLists(authStr, adminId)
|
||||
Filters := make([]interface{}, 0)
|
||||
Filters = append(Filters, "status", 0)
|
||||
|
||||
Result, _ := models.TaskServerGetList(1, 1000, Filters...)
|
||||
for k, v := range serverGroup {
|
||||
sl := serverList{}
|
||||
sl.GroupId = k
|
||||
sl.GroupName = v
|
||||
servers := make(map[int]string)
|
||||
for _, sv := range Result {
|
||||
if sv.GroupId == k {
|
||||
servers[sv.Id] = sv.ServerName
|
||||
}
|
||||
}
|
||||
sl.Servers = servers
|
||||
sls = append(sls, sl)
|
||||
}
|
||||
return sls
|
||||
}
|
||||
|
||||
@@ -1,99 +0,0 @@
|
||||
/*
|
||||
* @Author: haodaquan
|
||||
* @Date: 2017-06-21 10:27:40
|
||||
* @Last Modified by: haodaquan
|
||||
* @Last Modified time: 2017-06-22 09:17:22
|
||||
*/
|
||||
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/george518/PPGo_Job/libs"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type GroupController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (this *GroupController) List() {
|
||||
page, _ := this.GetInt("page")
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
|
||||
list, count := models.TaskGroupGetList(page, this.pageSize)
|
||||
|
||||
this.Data["pageTitle"] = "分组列表"
|
||||
this.Data["list"] = list
|
||||
this.Data["pageBar"] = libs.NewPager(page, int(count), this.pageSize, beego.URLFor("GroupController.List"), true).ToString()
|
||||
this.display()
|
||||
}
|
||||
|
||||
func (this *GroupController) Add() {
|
||||
if this.isPost() {
|
||||
group := new(models.TaskGroup)
|
||||
group.GroupName = strings.TrimSpace(this.GetString("group_name"))
|
||||
group.UserId = this.userId
|
||||
group.Description = strings.TrimSpace(this.GetString("description"))
|
||||
group.CreateTime = time.Now().Unix()
|
||||
|
||||
_, err := models.TaskGroupAdd(group)
|
||||
if err != nil {
|
||||
this.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
this.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
this.Data["pageTitle"] = "添加分组"
|
||||
this.display()
|
||||
}
|
||||
|
||||
func (this *GroupController) Edit() {
|
||||
id, _ := this.GetInt("id")
|
||||
|
||||
group, err := models.TaskGroupGetById(id)
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
}
|
||||
|
||||
if this.isPost() {
|
||||
group.GroupName = strings.TrimSpace(this.GetString("group_name"))
|
||||
group.Description = strings.TrimSpace(this.GetString("description"))
|
||||
err := group.Update()
|
||||
if err != nil {
|
||||
this.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
this.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
this.Data["pageTitle"] = "编辑分组"
|
||||
this.Data["group"] = group
|
||||
this.display()
|
||||
}
|
||||
|
||||
func (this *GroupController) Batch() {
|
||||
action := this.GetString("action")
|
||||
ids := this.GetStrings("ids")
|
||||
if len(ids) < 1 {
|
||||
this.ajaxMsg("请选择要操作的项目", MSG_ERR)
|
||||
}
|
||||
|
||||
for _, v := range ids {
|
||||
id, _ := strconv.Atoi(v)
|
||||
if id < 1 {
|
||||
continue
|
||||
}
|
||||
switch action {
|
||||
case "delete":
|
||||
models.TaskGroupDelById(id)
|
||||
models.TaskResetGroupId(id)
|
||||
}
|
||||
}
|
||||
|
||||
this.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
/*
|
||||
* @Author: haodaquan
|
||||
* @Date: 2017-06-21 10:29:55
|
||||
* @Last Modified by: haodaquan
|
||||
* @Last Modified time: 2017-06-21 10:30:07
|
||||
*/
|
||||
|
||||
package controllers
|
||||
|
||||
type HelpController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (this *HelpController) Index() {
|
||||
|
||||
this.Data["pageTitle"] = "使用帮助"
|
||||
this.display()
|
||||
}
|
||||
112
controllers/home.go
Normal file
112
controllers/home.go
Normal file
@@ -0,0 +1,112 @@
|
||||
/**********************************************
|
||||
** @Des: This file ...
|
||||
** @Author: haodaquan
|
||||
** @Date: 2017-09-08 10:21:13
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2017-09-09 18:04:41
|
||||
***********************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/george518/PPGo_Job/jobs"
|
||||
"github.com/george518/PPGo_Job/libs"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
"runtime"
|
||||
"time"
|
||||
)
|
||||
|
||||
type HomeController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (self *HomeController) Index() {
|
||||
self.Data["pageTitle"] = "系统首页"
|
||||
//self.display()
|
||||
self.TplName = "public/main.html"
|
||||
}
|
||||
|
||||
func (self *HomeController) Start() {
|
||||
groups_map := serverGroupLists(self.serverGroups, self.userId)
|
||||
//计算总任务数量
|
||||
_, count := models.TaskGetList(1, 200)
|
||||
// 即将执行的任务
|
||||
entries := jobs.GetEntries(30)
|
||||
jobList := make([]map[string]interface{}, len(entries))
|
||||
startJob := 0 //即将执行的任务
|
||||
for k, v := range entries {
|
||||
row := make(map[string]interface{})
|
||||
job := v.Job.(*jobs.Job)
|
||||
task, _ := models.TaskGetById(job.GetId())
|
||||
row["task_id"] = job.GetId()
|
||||
row["task_name"] = job.GetName()
|
||||
row["task_group"] = groups_map[task.GroupId]
|
||||
row["next_time"] = beego.Date(v.Next, "Y-m-d H:i:s")
|
||||
jobList[k] = row
|
||||
startJob++
|
||||
}
|
||||
|
||||
// 最近执行的日志
|
||||
logs, _ := models.TaskLogGetList(1, 20)
|
||||
recentLogs := make([]map[string]interface{}, len(logs))
|
||||
failJob := 0 //最近失败的数量
|
||||
okJob := 0 //最近成功的数量
|
||||
for k, v := range logs {
|
||||
task, err := models.TaskGetById(v.TaskId)
|
||||
taskName := ""
|
||||
if err == nil {
|
||||
taskName = task.TaskName
|
||||
}
|
||||
row := make(map[string]interface{})
|
||||
row["task_name"] = taskName
|
||||
row["id"] = v.Id
|
||||
row["start_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
row["process_time"] = float64(v.ProcessTime) / 1000
|
||||
row["ouput_size"] = libs.SizeFormat(float64(len(v.Output)))
|
||||
row["output"] = beego.Substr(v.Output, 0, 100)
|
||||
row["status"] = v.Status
|
||||
recentLogs[k] = row
|
||||
if v.Status != 0 {
|
||||
failJob++
|
||||
} else {
|
||||
okJob++
|
||||
}
|
||||
}
|
||||
|
||||
// 最近执行失败的日志
|
||||
logs, _ = models.TaskLogGetList(1, 20, "status__lt", 0)
|
||||
errLogs := make([]map[string]interface{}, len(logs))
|
||||
|
||||
for k, v := range logs {
|
||||
task, err := models.TaskGetById(v.TaskId)
|
||||
taskName := ""
|
||||
if err == nil {
|
||||
taskName = task.TaskName
|
||||
}
|
||||
|
||||
row := make(map[string]interface{})
|
||||
row["task_name"] = taskName
|
||||
row["id"] = v.Id
|
||||
row["start_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
row["process_time"] = float64(v.ProcessTime) / 1000
|
||||
row["ouput_size"] = libs.SizeFormat(float64(len(v.Output)))
|
||||
row["error"] = beego.Substr(v.Error, 0, 100)
|
||||
row["status"] = v.Status
|
||||
errLogs[k] = row
|
||||
|
||||
}
|
||||
|
||||
self.Data["startJob"] = startJob
|
||||
self.Data["okJob"] = okJob
|
||||
self.Data["failJob"] = failJob
|
||||
self.Data["totalJob"] = count
|
||||
|
||||
self.Data["recentLogs"] = recentLogs
|
||||
// this.Data["errLogs"] = errLogs
|
||||
self.Data["jobs"] = jobList
|
||||
self.Data["cpuNum"] = runtime.NumCPU()
|
||||
self.display()
|
||||
|
||||
self.Data["pageTitle"] = "系统概况"
|
||||
self.display()
|
||||
}
|
||||
73
controllers/login.go
Normal file
73
controllers/login.go
Normal file
@@ -0,0 +1,73 @@
|
||||
/**********************************************
|
||||
** @Des: login
|
||||
** @Author: haodaquan
|
||||
** @Date: 2017-09-07 16:30:10
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2017-09-17 11:55:21
|
||||
***********************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
"strings"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/george518/PPGo_Job/libs"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
)
|
||||
|
||||
type LoginController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (self *LoginController) Login() {
|
||||
//if self.userId > 0 {
|
||||
// self.redirect(beego.URLFor("HomeController.Index"))
|
||||
//}
|
||||
self.TplName = "login/login.html"
|
||||
}
|
||||
|
||||
//登录 TODO:XSRF过滤
|
||||
func (self *LoginController) LoginIn() {
|
||||
|
||||
//self.ajaxMsg("登录成功", MSG_OK)
|
||||
if self.userId > 0 {
|
||||
self.ajaxMsg("登录成功", MSG_OK)
|
||||
}
|
||||
|
||||
if self.isPost() {
|
||||
username := strings.TrimSpace(self.GetString("username"))
|
||||
password := strings.TrimSpace(self.GetString("password"))
|
||||
if username != "" && password != "" {
|
||||
user, err := models.AdminGetByName(username)
|
||||
fmt.Println(user)
|
||||
if err != nil || user.Password != libs.Md5([]byte(password+user.Salt)) {
|
||||
self.ajaxMsg("帐号或密码错误", MSG_ERR)
|
||||
} else if user.Status == -1 {
|
||||
self.ajaxMsg("该帐号已禁用", MSG_ERR)
|
||||
} else {
|
||||
user.LastIp = self.getClientIp()
|
||||
user.LastLogin = time.Now().Unix()
|
||||
user.Update()
|
||||
authkey := libs.Md5([]byte(self.getClientIp() + "|" + user.Password + user.Salt))
|
||||
self.Ctx.SetCookie("auth", strconv.Itoa(user.Id)+"|"+authkey, 7*86400)
|
||||
|
||||
self.ajaxMsg("登录成功", MSG_OK)
|
||||
}
|
||||
}
|
||||
}
|
||||
self.ajaxMsg("请求方式错误", MSG_ERR)
|
||||
}
|
||||
|
||||
//登出
|
||||
func (self *LoginController) LoginOut() {
|
||||
self.Ctx.SetCookie("auth", "")
|
||||
self.redirect(beego.URLFor("LoginController.Login"))
|
||||
}
|
||||
|
||||
func (self *LoginController) NoAuth() {
|
||||
self.Ctx.WriteString("没有权限")
|
||||
}
|
||||
@@ -1,195 +0,0 @@
|
||||
/*
|
||||
* @Author: haodaquan
|
||||
* @Date: 2017-06-19 18:03:25
|
||||
* @Last Modified by: haodaquan
|
||||
* @Last Modified time: 2017-06-22 17:39:31
|
||||
*/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/astaxie/beego/utils"
|
||||
"github.com/george518/PPGo_Job/jobs"
|
||||
"github.com/george518/PPGo_Job/libs"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
"runtime"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type MainController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
// 首页
|
||||
func (this *MainController) Index() {
|
||||
this.Data["pageTitle"] = "系统概况"
|
||||
// 分组列表
|
||||
groups, _ := models.TaskGroupGetList(1, 100)
|
||||
groups_map := make(map[int]string)
|
||||
for _,gname := range groups {
|
||||
groups_map[gname.Id] = gname.GroupName
|
||||
}
|
||||
//计算总任务数量
|
||||
_, count := models.TaskGetList(1, 200)
|
||||
// 即将执行的任务
|
||||
entries := jobs.GetEntries(30)
|
||||
jobList := make([]map[string]interface{}, len(entries))
|
||||
startJob := 0 //即将执行的任务
|
||||
for k, v := range entries {
|
||||
row := make(map[string]interface{})
|
||||
job := v.Job.(*jobs.Job)
|
||||
task, _ := models.TaskGetById(job.GetId())
|
||||
row["task_id"] = job.GetId()
|
||||
row["task_name"] = job.GetName()
|
||||
row["task_group"] = groups_map[task.GroupId]
|
||||
row["next_time"] = beego.Date(v.Next, "Y-m-d H:i:s")
|
||||
jobList[k] = row
|
||||
startJob++
|
||||
}
|
||||
|
||||
// 最近执行的日志
|
||||
logs, _ := models.TaskLogGetList(1, 20)
|
||||
recentLogs := make([]map[string]interface{}, len(logs))
|
||||
failJob := 0 //最近失败的数量
|
||||
okJob:=0 //最近成功的数量
|
||||
for k, v := range logs {
|
||||
task, err := models.TaskGetById(v.TaskId)
|
||||
taskName := ""
|
||||
if err == nil {
|
||||
taskName = task.TaskName
|
||||
}
|
||||
row := make(map[string]interface{})
|
||||
row["task_name"] = taskName
|
||||
row["id"] = v.Id
|
||||
row["start_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
row["process_time"] = float64(v.ProcessTime) / 1000
|
||||
row["ouput_size"] = libs.SizeFormat(float64(len(v.Output)))
|
||||
row["output"] = beego.Substr(v.Output, 0, 100)
|
||||
row["status"] = v.Status
|
||||
recentLogs[k] = row
|
||||
if v.Status!=0 {
|
||||
failJob++
|
||||
}else {
|
||||
okJob++
|
||||
}
|
||||
}
|
||||
|
||||
// 最近执行失败的日志
|
||||
logs, _ = models.TaskLogGetList(1, 20, "status__lt", 0)
|
||||
errLogs := make([]map[string]interface{}, len(logs))
|
||||
|
||||
for k, v := range logs {
|
||||
task, err := models.TaskGetById(v.TaskId)
|
||||
taskName := ""
|
||||
if err == nil {
|
||||
taskName = task.TaskName
|
||||
}
|
||||
|
||||
row := make(map[string]interface{})
|
||||
row["task_name"] = taskName
|
||||
row["id"] = v.Id
|
||||
row["start_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
row["process_time"] = float64(v.ProcessTime) / 1000
|
||||
row["ouput_size"] = libs.SizeFormat(float64(len(v.Output)))
|
||||
row["error"] = beego.Substr(v.Error, 0, 100)
|
||||
row["status"] = v.Status
|
||||
errLogs[k] = row
|
||||
|
||||
}
|
||||
|
||||
this.Data["startJob"] = startJob
|
||||
this.Data["okJob"] = okJob
|
||||
this.Data["failJob"] = failJob
|
||||
this.Data["totalJob"] = count
|
||||
|
||||
this.Data["recentLogs"] = recentLogs
|
||||
// this.Data["errLogs"] = errLogs
|
||||
this.Data["jobs"] = jobList
|
||||
this.Data["cpuNum"] = runtime.NumCPU()
|
||||
this.display()
|
||||
}
|
||||
|
||||
//个人信息
|
||||
func (this *MainController) Profile() {
|
||||
beego.ReadFromRequest(&this.Controller)
|
||||
user, _ := models.UserGetById(this.userId)
|
||||
|
||||
if this.isPost() {
|
||||
user.Email = this.GetString("email")
|
||||
user.Update()
|
||||
password1 := this.GetString("password1")
|
||||
password2 := this.GetString("password2")
|
||||
if password1 != "" {
|
||||
if len(password1) < 6 {
|
||||
this.ajaxMsg("密码长度必须大于6位", MSG_ERR)
|
||||
} else if password2 != password1 {
|
||||
this.ajaxMsg("两次输入的密码不一致", MSG_ERR)
|
||||
} else {
|
||||
user.Salt = string(utils.RandomCreateBytes(10))
|
||||
user.Password = libs.Md5([]byte(password1 + user.Salt))
|
||||
user.Update()
|
||||
}
|
||||
}
|
||||
this.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
this.Data["pageTitle"] = "资料修改"
|
||||
this.Data["user"] = user
|
||||
this.display()
|
||||
}
|
||||
|
||||
// 登录
|
||||
func (this *MainController) Login() {
|
||||
if this.userId > 0 {
|
||||
this.redirect("/")
|
||||
}
|
||||
beego.ReadFromRequest(&this.Controller)
|
||||
if this.isPost() {
|
||||
|
||||
username := strings.TrimSpace(this.GetString("username"))
|
||||
password := strings.TrimSpace(this.GetString("password"))
|
||||
remember := this.GetString("remember")
|
||||
|
||||
if username != "" && password != "" {
|
||||
user, err := models.UserGetByName(username)
|
||||
flash := beego.NewFlash()
|
||||
errorMsg := ""
|
||||
if err != nil || user.Password != libs.Md5([]byte(password+user.Salt)) {
|
||||
errorMsg = "帐号或密码错误"
|
||||
} else if user.Status == -1 {
|
||||
errorMsg = "该帐号已禁用"
|
||||
} else {
|
||||
user.LastIp = this.getClientIp()
|
||||
user.LastLogin = time.Now().Unix()
|
||||
models.UserUpdate(user)
|
||||
|
||||
authkey := libs.Md5([]byte(this.getClientIp() + "|" + user.Password + user.Salt))
|
||||
if remember == "yes" {
|
||||
this.Ctx.SetCookie("auth", strconv.Itoa(user.Id)+"|"+authkey, 7*86400)
|
||||
} else {
|
||||
this.Ctx.SetCookie("auth", strconv.Itoa(user.Id)+"|"+authkey,86400)
|
||||
}
|
||||
this.redirect(beego.URLFor("TaskController.List"))
|
||||
}
|
||||
flash.Error(errorMsg)
|
||||
flash.Store(&this.Controller)
|
||||
this.redirect(beego.URLFor("MainController.Login"))
|
||||
}
|
||||
}
|
||||
this.TplName = "public/login.html"
|
||||
}
|
||||
|
||||
// 退出登录
|
||||
func (this *MainController) Logout() {
|
||||
this.Ctx.SetCookie("auth", "")
|
||||
this.redirect(beego.URLFor("MainController.Login"))
|
||||
}
|
||||
|
||||
// 获取系统时间
|
||||
func (this *MainController) GetTime() {
|
||||
out := make(map[string]interface{})
|
||||
out["time"] = time.Now().UnixNano() / int64(time.Millisecond)
|
||||
this.jsonResult(out)
|
||||
}
|
||||
184
controllers/role.go
Normal file
184
controllers/role.go
Normal file
@@ -0,0 +1,184 @@
|
||||
/**********************************************
|
||||
** @Des: This file ...
|
||||
** @Author: haodaquan
|
||||
** @Date: 2017-09-14 14:23:32
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2017-09-17 11:31:13
|
||||
***********************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"fmt"
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
)
|
||||
|
||||
type RoleController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (self *RoleController) List() {
|
||||
self.Data["pageTitle"] = "角色管理"
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *RoleController) Add() {
|
||||
self.Data["zTree"] = true //引入ztreecss
|
||||
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
|
||||
self.Data["serverGroup"] = serverLists(self.serverGroups, self.userId)
|
||||
self.Data["pageTitle"] = "新增角色"
|
||||
self.display()
|
||||
}
|
||||
func (self *RoleController) Edit() {
|
||||
self.Data["zTree"] = true //引入ztreecss
|
||||
self.Data["pageTitle"] = "编辑角色"
|
||||
|
||||
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
|
||||
self.Data["serverGroup"] = serverLists(self.serverGroups, self.userId)
|
||||
|
||||
id, _ := self.GetInt("id", 0)
|
||||
role, _ := models.RoleGetById(id)
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = role.Id
|
||||
row["role_name"] = role.RoleName
|
||||
row["detail"] = role.Detail
|
||||
row["detail"] = role.Detail
|
||||
row["task_group_ids"] = role.TaskGroupIds
|
||||
row["server_group_ids"] = role.ServerGroupIds
|
||||
self.Data["role"] = row
|
||||
|
||||
//获取选择的树节点
|
||||
roleAuth, _ := models.RoleAuthGetById(id)
|
||||
authId := make([]int, 0)
|
||||
for _, v := range roleAuth {
|
||||
authId = append(authId, v.AuthId)
|
||||
}
|
||||
|
||||
taskGroupIdsArr := strings.Split(role.TaskGroupIds, ",")
|
||||
taskGroupIds := make([]int, 0)
|
||||
for _, v := range taskGroupIdsArr {
|
||||
id, _ := strconv.Atoi(v)
|
||||
taskGroupIds = append(taskGroupIds, id)
|
||||
}
|
||||
|
||||
serverGroupIdsArr := strings.Split(role.ServerGroupIds, ",")
|
||||
serverGroupIds := make([]int, 0)
|
||||
for _, v := range serverGroupIdsArr {
|
||||
id, _ := strconv.Atoi(v)
|
||||
serverGroupIds = append(serverGroupIds, id)
|
||||
}
|
||||
|
||||
self.Data["server_group_ids"] = serverGroupIds
|
||||
self.Data["task_group_ids"] = taskGroupIds
|
||||
|
||||
self.Data["auth"] = authId
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *RoleController) AjaxSave() {
|
||||
role := new(models.Role)
|
||||
role.RoleName = strings.TrimSpace(self.GetString("role_name"))
|
||||
role.Detail = strings.TrimSpace(self.GetString("detail"))
|
||||
role.ServerGroupIds = strings.TrimSpace(self.GetString("server_group_ids"))
|
||||
role.TaskGroupIds = strings.TrimSpace(self.GetString("task_group_ids"))
|
||||
role.CreateTime = time.Now().Unix()
|
||||
role.UpdateTime = time.Now().Unix()
|
||||
role.Status = 1
|
||||
|
||||
fmt.Println("=========", role)
|
||||
auths := strings.TrimSpace(self.GetString("nodes_data"))
|
||||
role_id, _ := self.GetInt("id")
|
||||
if role_id == 0 {
|
||||
//新增
|
||||
role.CreateTime = time.Now().Unix()
|
||||
role.UpdateTime = time.Now().Unix()
|
||||
role.CreateId = self.userId
|
||||
role.UpdateId = self.userId
|
||||
if id, err := models.RoleAdd(role); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
} else {
|
||||
ra := new(models.RoleAuth)
|
||||
authsSlice := strings.Split(auths, ",")
|
||||
for _, v := range authsSlice {
|
||||
aid, _ := strconv.Atoi(v)
|
||||
ra.AuthId = aid
|
||||
ra.RoleId = id
|
||||
models.RoleAuthAdd(ra)
|
||||
}
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
//修改
|
||||
role.Id = role_id
|
||||
role.UpdateTime = time.Now().Unix()
|
||||
role.UpdateId = self.userId
|
||||
if err := role.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
} else {
|
||||
// 删除该角色权限
|
||||
models.RoleAuthDelete(role_id)
|
||||
ra := new(models.RoleAuth)
|
||||
authsSlice := strings.Split(auths, ",")
|
||||
for _, v := range authsSlice {
|
||||
aid, _ := strconv.Atoi(v)
|
||||
ra.AuthId = aid
|
||||
ra.RoleId = int64(role_id)
|
||||
models.RoleAuthAdd(ra)
|
||||
}
|
||||
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *RoleController) AjaxDel() {
|
||||
|
||||
role_id, _ := self.GetInt("id")
|
||||
role, _ := models.RoleGetById(role_id)
|
||||
role.Status = 0
|
||||
role.Id = role_id
|
||||
role.UpdateTime = time.Now().Unix()
|
||||
|
||||
if err := role.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
// 删除该角色权限
|
||||
//models.RoleAuthDelete(role_id)
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *RoleController) Table() {
|
||||
//列表
|
||||
page, err := self.GetInt("page")
|
||||
if err != nil {
|
||||
page = 1
|
||||
}
|
||||
limit, err := self.GetInt("limit")
|
||||
if err != nil {
|
||||
limit = 30
|
||||
}
|
||||
|
||||
roleName := strings.TrimSpace(self.GetString("roleName"))
|
||||
self.pageSize = limit
|
||||
//查询条件
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 1)
|
||||
if roleName != "" {
|
||||
filters = append(filters, "role_name__icontains", roleName)
|
||||
}
|
||||
result, count := models.RoleGetList(page, self.pageSize, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["role_name"] = v.RoleName
|
||||
row["detail"] = v.Detail
|
||||
row["create_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
row["update_time"] = beego.Date(time.Unix(v.UpdateTime, 0), "Y-m-d H:i:s")
|
||||
list[k] = row
|
||||
}
|
||||
self.ajaxList("成功", MSG_OK, count, list)
|
||||
}
|
||||
@@ -1,16 +1,18 @@
|
||||
/*
|
||||
* @Author: haodaquan
|
||||
* @Date: 2017-08-16 10:27:40
|
||||
* @Last Modified by: haodaquan
|
||||
* @Last Modified time: 2017-08-16 09:17:22
|
||||
*/
|
||||
|
||||
/************************************************************
|
||||
** @Description: controllers
|
||||
** @Author: haodaquan
|
||||
** @Date: 2018-06-09 16:11
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2018-06-09 16:11
|
||||
*************************************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/george518/PPGo_Job/libs"
|
||||
"fmt"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
"golang.org/x/crypto/ssh"
|
||||
"io/ioutil"
|
||||
"net"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -20,118 +22,329 @@ type ServerController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (this *ServerController) List() {
|
||||
page, _ := this.GetInt("page")
|
||||
if page < 1 {
|
||||
page = 1
|
||||
func (self *ServerController) List() {
|
||||
self.Data["pageTitle"] = "资源管理"
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *ServerController) Add() {
|
||||
self.Data["pageTitle"] = "新增服务器资源"
|
||||
self.Data["serverGroup"] = serverGroupLists(self.serverGroups, self.userId)
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *ServerController) GetServerByGroupId() {
|
||||
gid, _ := self.GetInt("gid", 0)
|
||||
if gid == 0 {
|
||||
self.ajaxMsg("groupId is not exist", MSG_ERR)
|
||||
}
|
||||
|
||||
result, count := models.TaskServerGetList(page, this.pageSize)
|
||||
//列表
|
||||
page, err := self.GetInt("page")
|
||||
if err != nil {
|
||||
page = 1
|
||||
}
|
||||
limit, err := self.GetInt("limit")
|
||||
if err != nil {
|
||||
limit = 30
|
||||
}
|
||||
//serverName := strings.TrimSpace(self.GetString("serverName"))
|
||||
StatusText := []string{
|
||||
"正常",
|
||||
"<font color='red'>禁用</font>",
|
||||
}
|
||||
|
||||
loginType := [2]string{
|
||||
"密码",
|
||||
"密钥",
|
||||
}
|
||||
|
||||
serverGroup := serverGroupLists(self.serverGroups, self.userId)
|
||||
|
||||
self.pageSize = limit
|
||||
//查询条件
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 0)
|
||||
filters = append(filters, "group_id", gid)
|
||||
|
||||
result, count := models.TaskServerGetList(page, self.pageSize, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
if(v.Type==0){
|
||||
row["type"] = "密码"
|
||||
}else {
|
||||
row["type"] = "密钥"
|
||||
}
|
||||
row["server_name"] = v.ServerName
|
||||
row["server_ip"] = v.ServerIp
|
||||
row["detail"] = v.Detail
|
||||
row["port"] = v.Port
|
||||
row["create_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
if serverGroup[v.GroupId] == "" {
|
||||
v.GroupId = 0
|
||||
}
|
||||
row["group_name"] = serverGroup[v.GroupId]
|
||||
row["type"] = loginType[v.Type]
|
||||
row["status"] = v.Status
|
||||
row["status_text"] = StatusText[v.Status]
|
||||
list[k] = row
|
||||
}
|
||||
this.Data["pageTitle"] = "服务器列表"
|
||||
this.Data["list"] = list
|
||||
this.Data["pageBar"] = libs.NewPager(page, int(count), this.pageSize, beego.URLFor("ServerController.List"), true).ToString()
|
||||
this.display()
|
||||
|
||||
self.ajaxList("成功", MSG_OK, count, list)
|
||||
}
|
||||
|
||||
func (this *ServerController) Add() {
|
||||
if this.isPost() {
|
||||
func (self *ServerController) Edit() {
|
||||
self.Data["pageTitle"] = "编辑服务器资源"
|
||||
|
||||
id, _ := self.GetInt("id", 0)
|
||||
server, _ := models.TaskServerGetById(id)
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = server.Id
|
||||
row["server_name"] = server.ServerName
|
||||
row["group_id"] = server.GroupId
|
||||
row["server_ip"] = server.ServerIp
|
||||
row["server_account"] = server.ServerAccount
|
||||
row["server_outer_ip"] = server.ServerOuterIp
|
||||
row["port"] = server.Port
|
||||
row["type"] = server.Type
|
||||
row["password"] = server.Password
|
||||
row["public_key_src"] = server.PublicKeySrc
|
||||
row["private_key_src"] = server.PrivateKeySrc
|
||||
row["detail"] = server.Detail
|
||||
self.Data["server"] = row
|
||||
self.Data["serverGroup"] = serverGroupLists(self.serverGroups, self.userId)
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *ServerController) AjaxTestServer() {
|
||||
|
||||
server := new(models.TaskServer)
|
||||
server.ServerName = strings.TrimSpace(self.GetString("server_name"))
|
||||
server.ServerAccount = strings.TrimSpace(self.GetString("server_account"))
|
||||
server.ServerOuterIp = strings.TrimSpace(self.GetString("server_outer_ip"))
|
||||
server.ServerIp = strings.TrimSpace(self.GetString("server_ip"))
|
||||
server.PrivateKeySrc = strings.TrimSpace(self.GetString("private_key_src"))
|
||||
server.PublicKeySrc = strings.TrimSpace(self.GetString("public_key_src"))
|
||||
server.Password = strings.TrimSpace(self.GetString("password"))
|
||||
server.Detail = strings.TrimSpace(self.GetString("detail"))
|
||||
server.Type, _ = self.GetInt("type")
|
||||
server.Port, _ = self.GetInt("port")
|
||||
server.GroupId, _ = self.GetInt("group_id")
|
||||
|
||||
var err error
|
||||
if server.Type == 0 {
|
||||
//密码登录
|
||||
err = RemoteCommandByPassword(server)
|
||||
}
|
||||
|
||||
if server.Type == 1 {
|
||||
//密钥登录
|
||||
err = RemoteCommandByKey(server)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("Success", MSG_OK)
|
||||
|
||||
}
|
||||
|
||||
func RemoteCommandByPassword(servers *models.TaskServer) error {
|
||||
var (
|
||||
auth []ssh.AuthMethod
|
||||
addr string
|
||||
clientConfig *ssh.ClientConfig
|
||||
)
|
||||
|
||||
auth = make([]ssh.AuthMethod, 0)
|
||||
auth = append(auth, ssh.Password(servers.Password))
|
||||
|
||||
clientConfig = &ssh.ClientConfig{
|
||||
User: servers.ServerAccount,
|
||||
Auth: auth,
|
||||
HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
|
||||
return nil
|
||||
},
|
||||
Timeout: 5 * time.Second,
|
||||
}
|
||||
|
||||
addr = fmt.Sprintf("%s:%d", servers.ServerIp, servers.Port)
|
||||
client, err := ssh.Dial("tcp", addr, clientConfig)
|
||||
if err == nil {
|
||||
defer client.Close()
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func RemoteCommandByKey(servers *models.TaskServer) error {
|
||||
key, err := ioutil.ReadFile(servers.PrivateKeySrc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
signer, err := ssh.ParsePrivateKey(key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
addr := fmt.Sprintf("%s:%d", servers.ServerIp, servers.Port)
|
||||
config := &ssh.ClientConfig{
|
||||
User: servers.ServerAccount,
|
||||
Auth: []ssh.AuthMethod{
|
||||
// Use the PublicKeys method for remote authentication.
|
||||
ssh.PublicKeys(signer),
|
||||
},
|
||||
//HostKeyCallback: ssh.FixedHostKey(hostKey),
|
||||
HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
|
||||
return nil
|
||||
},
|
||||
Timeout: 5 * time.Second,
|
||||
}
|
||||
|
||||
client, err := ssh.Dial("tcp", addr, config)
|
||||
if err == nil {
|
||||
client.Close()
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (self *ServerController) Copy() {
|
||||
self.Data["pageTitle"] = "复制服务器资源"
|
||||
|
||||
id, _ := self.GetInt("id", 0)
|
||||
server, _ := models.TaskServerGetById(id)
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = server.Id
|
||||
row["server_name"] = server.ServerName
|
||||
row["group_id"] = server.GroupId
|
||||
row["server_ip"] = server.ServerIp
|
||||
row["server_account"] = server.ServerAccount
|
||||
row["server_outer_ip"] = server.ServerOuterIp
|
||||
row["port"] = server.Port
|
||||
row["type"] = server.Type
|
||||
row["password"] = server.Password
|
||||
row["public_key_src"] = server.PublicKeySrc
|
||||
row["private_key_src"] = server.PrivateKeySrc
|
||||
row["detail"] = server.Detail
|
||||
self.Data["server"] = row
|
||||
self.Data["serverGroup"] = serverGroupLists(self.serverGroups, self.userId)
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *ServerController) AjaxSave() {
|
||||
server_id, _ := self.GetInt("id")
|
||||
if server_id == 0 {
|
||||
server := new(models.TaskServer)
|
||||
server.ServerName = strings.TrimSpace(this.GetString("server_name"))
|
||||
server.ServerAccount = strings.TrimSpace(this.GetString("server_account"))
|
||||
server.ServerIp = strings.TrimSpace(this.GetString("server_ip"))
|
||||
server.Port,_= strconv.Atoi(this.GetString("port"))
|
||||
server.Type,_ = strconv.Atoi(this.GetString("type"))
|
||||
server.PrivateKeySrc = strings.TrimSpace(this.GetString("private_key_src"))
|
||||
server.PublicKeySrc = strings.TrimSpace(this.GetString("public_key_src"))
|
||||
server.Password = strings.TrimSpace(this.GetString("password"))
|
||||
server.Detail = strings.TrimSpace(this.GetString("detail"))
|
||||
server.ServerName = strings.TrimSpace(self.GetString("server_name"))
|
||||
server.ServerAccount = strings.TrimSpace(self.GetString("server_account"))
|
||||
server.ServerOuterIp = strings.TrimSpace(self.GetString("server_outer_ip"))
|
||||
server.ServerIp = strings.TrimSpace(self.GetString("server_ip"))
|
||||
server.PrivateKeySrc = strings.TrimSpace(self.GetString("private_key_src"))
|
||||
server.PublicKeySrc = strings.TrimSpace(self.GetString("public_key_src"))
|
||||
server.Password = strings.TrimSpace(self.GetString("password"))
|
||||
|
||||
server.Detail = strings.TrimSpace(self.GetString("detail"))
|
||||
server.Type, _ = self.GetInt("type")
|
||||
server.Port, _ = self.GetInt("port")
|
||||
server.GroupId, _ = self.GetInt("group_id")
|
||||
|
||||
server.CreateTime = time.Now().Unix()
|
||||
server.UpdateTime = time.Now().Unix()
|
||||
server.Status = 0
|
||||
_, err := models.TaskServerAdd(server)
|
||||
if err != nil {
|
||||
this.ajaxMsg(err.Error(), MSG_ERR)
|
||||
|
||||
if _, err := models.TaskServerAdd(server); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
this.ajaxMsg("", MSG_OK)
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
this.Data["pageTitle"] = "添加服务器"
|
||||
this.display()
|
||||
|
||||
server, _ := models.TaskServerGetById(server_id)
|
||||
//修改
|
||||
server.Id = server_id
|
||||
server.UpdateTime = time.Now().Unix()
|
||||
|
||||
server.ServerName = strings.TrimSpace(self.GetString("server_name"))
|
||||
server.ServerAccount = strings.TrimSpace(self.GetString("server_account"))
|
||||
server.ServerOuterIp = strings.TrimSpace(self.GetString("server_outer_ip"))
|
||||
server.ServerIp = strings.TrimSpace(self.GetString("server_ip"))
|
||||
server.PrivateKeySrc = strings.TrimSpace(self.GetString("private_key_src"))
|
||||
server.PublicKeySrc = strings.TrimSpace(self.GetString("public_key_src"))
|
||||
server.Detail = strings.TrimSpace(self.GetString("detail"))
|
||||
server.Password = strings.TrimSpace(self.GetString("password"))
|
||||
|
||||
server.Type, _ = self.GetInt("type")
|
||||
server.Port, _ = self.GetInt("port")
|
||||
server.GroupId, _ = self.GetInt("group_id")
|
||||
|
||||
if err := server.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (this *ServerController) Edit() {
|
||||
id, _ := this.GetInt("id")
|
||||
server, err := models.TaskServerGetById(id)
|
||||
func (self *ServerController) AjaxDel() {
|
||||
id, _ := self.GetInt("id")
|
||||
server, _ := models.TaskServerGetById(id)
|
||||
server.UpdateTime = time.Now().Unix()
|
||||
server.Status = 1
|
||||
server.Id = id
|
||||
|
||||
//TODO 查询服务器是否用于定时任务
|
||||
if err := server.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("操作成功", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *ServerController) Table() {
|
||||
//列表
|
||||
page, err := self.GetInt("page")
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
page = 1
|
||||
}
|
||||
limit, err := self.GetInt("limit")
|
||||
if err != nil {
|
||||
limit = 30
|
||||
}
|
||||
serverName := strings.TrimSpace(self.GetString("serverName"))
|
||||
StatusText := []string{
|
||||
"正常",
|
||||
"<font color='red'>禁用</font>",
|
||||
}
|
||||
|
||||
if this.isPost() {
|
||||
server.ServerName = strings.TrimSpace(this.GetString("server_name"))
|
||||
server.ServerAccount = strings.TrimSpace(this.GetString("server_account"))
|
||||
server.ServerIp = strings.TrimSpace(this.GetString("server_ip"))
|
||||
server.Port,_ = strconv.Atoi(this.GetString("port"))
|
||||
server.Type,_ = strconv.Atoi(this.GetString("type"))
|
||||
server.Id,_ = strconv.Atoi(this.GetString("id"))
|
||||
server.PrivateKeySrc = strings.TrimSpace(this.GetString("private_key_src"))
|
||||
server.PublicKeySrc = strings.TrimSpace(this.GetString("public_key_src"))
|
||||
server.Password = strings.TrimSpace(this.GetString("password"))
|
||||
server.Detail = strings.TrimSpace(this.GetString("detail"))
|
||||
server.UpdateTime = time.Now().Unix()
|
||||
server.Status = 0
|
||||
err := server.Update()
|
||||
if err != nil {
|
||||
this.ajaxMsg(err.Error(), MSG_ERR)
|
||||
loginType := [2]string{
|
||||
"密码",
|
||||
"密钥",
|
||||
}
|
||||
|
||||
serverGroup := serverGroupLists(self.serverGroups, self.userId)
|
||||
|
||||
self.pageSize = limit
|
||||
//查询条件
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 0)
|
||||
if self.userId != 1 {
|
||||
groups := strings.Split(self.serverGroups, ",")
|
||||
|
||||
groupsIds := make([]int, 0)
|
||||
for _, v := range groups {
|
||||
id, _ := strconv.Atoi(v)
|
||||
groupsIds = append(groupsIds, id)
|
||||
}
|
||||
this.ajaxMsg("", MSG_OK)
|
||||
filters = append(filters, "group_id__in", groupsIds)
|
||||
}
|
||||
if serverName != "" {
|
||||
filters = append(filters, "server_name__icontains", serverName)
|
||||
}
|
||||
result, count := models.TaskServerGetList(page, self.pageSize, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["server_name"] = v.ServerName
|
||||
row["detail"] = v.Detail
|
||||
if serverGroup[v.GroupId] == "" {
|
||||
v.GroupId = 0
|
||||
}
|
||||
row["group_name"] = serverGroup[v.GroupId]
|
||||
row["type"] = loginType[v.Type]
|
||||
row["status"] = v.Status
|
||||
row["status_text"] = StatusText[v.Status]
|
||||
list[k] = row
|
||||
}
|
||||
|
||||
this.Data["pageTitle"] = "编辑服务器"
|
||||
this.Data["server"] = server
|
||||
this.display()
|
||||
}
|
||||
|
||||
//TODO删除更新
|
||||
func (this *ServerController) Batch() {
|
||||
action := this.GetString("action")
|
||||
ids := this.GetStrings("ids")
|
||||
if len(ids) < 1 {
|
||||
this.ajaxMsg("请选择要操作的项目", MSG_ERR)
|
||||
}
|
||||
|
||||
for _, v := range ids {
|
||||
id, _ := strconv.Atoi(v)
|
||||
if id < 1 {
|
||||
continue
|
||||
}
|
||||
switch action {
|
||||
case "delete":
|
||||
//查询服务器是否被占用
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "server_id", id)
|
||||
_, count := models.TaskGetList(1, 1000, filters...)
|
||||
if count > 0 {
|
||||
this.ajaxMsg("请先解除该服务器的任务占用", MSG_ERR)
|
||||
}else{
|
||||
models.TaskServerDelById(id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.ajaxMsg("", MSG_OK)
|
||||
self.ajaxList("成功", MSG_OK, count, list)
|
||||
}
|
||||
|
||||
140
controllers/server_group.go
Normal file
140
controllers/server_group.go
Normal file
@@ -0,0 +1,140 @@
|
||||
/************************************************************
|
||||
** @Description: controllers
|
||||
** @Author: haodaquan
|
||||
** @Date: 2018-06-08 21:57
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2018-06-08 21:57
|
||||
*************************************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"fmt"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type ServerGroupController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (self *ServerGroupController) List() {
|
||||
self.Data["pageTitle"] = "资源分组管理"
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *ServerGroupController) Add() {
|
||||
self.Data["pageTitle"] = "新增分组"
|
||||
self.display()
|
||||
}
|
||||
func (self *ServerGroupController) Edit() {
|
||||
self.Data["pageTitle"] = "编辑分组"
|
||||
|
||||
id, _ := self.GetInt("id", 0)
|
||||
group, _ := models.TaskGroupGetById(id)
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = group.Id
|
||||
row["group_name"] = group.GroupName
|
||||
row["description"] = group.Description
|
||||
self.Data["group"] = row
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *ServerGroupController) AjaxSave() {
|
||||
servergroup := new(models.ServerGroup)
|
||||
servergroup.GroupName = strings.TrimSpace(self.GetString("group_name"))
|
||||
servergroup.Description = strings.TrimSpace(self.GetString("description"))
|
||||
servergroup.Status = 1
|
||||
|
||||
servergroup_id, _ := self.GetInt("id")
|
||||
|
||||
fmt.Println(servergroup_id)
|
||||
if servergroup_id == 0 {
|
||||
//新增
|
||||
servergroup.CreateTime = time.Now().Unix()
|
||||
servergroup.UpdateTime = time.Now().Unix()
|
||||
servergroup.CreateId = self.userId
|
||||
servergroup.UpdateId = self.userId
|
||||
if _, err := models.ServerGroupAdd(servergroup); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
//修改
|
||||
servergroup.Id = servergroup_id
|
||||
servergroup.UpdateTime = time.Now().Unix()
|
||||
servergroup.UpdateId = self.userId
|
||||
if err := servergroup.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *ServerGroupController) AjaxDel() {
|
||||
|
||||
group_id, _ := self.GetInt("id")
|
||||
group, _ := models.TaskGroupGetById(group_id)
|
||||
group.Status = 0
|
||||
group.Id = group_id
|
||||
group.UpdateTime = time.Now().Unix()
|
||||
//TODO 如果分组下有服务器 需要处理
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "group_id", group_id)
|
||||
filters = append(filters, "status", 0)
|
||||
_, n := models.TaskServerGetList(1, 1, filters...)
|
||||
if n > 0 {
|
||||
self.ajaxMsg("分组下有服务器资源,请先处理", MSG_ERR)
|
||||
}
|
||||
if err := group.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *ServerGroupController) Table() {
|
||||
//列表
|
||||
page, err := self.GetInt("page")
|
||||
if err != nil {
|
||||
page = 1
|
||||
}
|
||||
limit, err := self.GetInt("limit")
|
||||
if err != nil {
|
||||
limit = 30
|
||||
}
|
||||
|
||||
groupName := strings.TrimSpace(self.GetString("groupName"))
|
||||
self.pageSize = limit
|
||||
//查询条件
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 1)
|
||||
|
||||
if self.userId != 1 {
|
||||
groups := strings.Split(self.serverGroups, ",")
|
||||
|
||||
groupsIds := make([]int, 0)
|
||||
for _, v := range groups {
|
||||
id, _ := strconv.Atoi(v)
|
||||
groupsIds = append(groupsIds, id)
|
||||
}
|
||||
filters = append(filters, "id__in", groupsIds)
|
||||
}
|
||||
if groupName != "" {
|
||||
filters = append(filters, "group_name__contains", groupName)
|
||||
}
|
||||
result, count := models.ServerGroupGetList(page, self.pageSize, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["group_name"] = v.GroupName
|
||||
row["description"] = v.Description
|
||||
row["create_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
row["update_time"] = beego.Date(time.Unix(v.UpdateTime, 0), "Y-m-d H:i:s")
|
||||
list[k] = row
|
||||
}
|
||||
self.ajaxList("成功", MSG_OK, count, list)
|
||||
}
|
||||
@@ -1,76 +1,477 @@
|
||||
/*
|
||||
* @Author: haodaquan
|
||||
* @Date: 2017-06-21 10:22:29
|
||||
* @Last Modified by: haodaquan
|
||||
* @Last Modified time: 2017-06-23 11:04:54
|
||||
*/
|
||||
|
||||
/************************************************************
|
||||
** @Description: controllers
|
||||
** @Author: haodaquan
|
||||
** @Date: 2018-06-11 21:11
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2018-06-11 21:11
|
||||
*************************************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/george518/PPGo_Job/jobs"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
"github.com/robfig/cron"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
crons "github.com/george518/PPGo_Job/crons"
|
||||
"github.com/george518/PPGo_Job/jobs"
|
||||
"github.com/george518/PPGo_Job/libs"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
)
|
||||
|
||||
type TaskController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
// 任务列表
|
||||
func (this *TaskController) List() {
|
||||
page, _ := this.GetInt("page")
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
groupId, _ := this.GetInt("groupid")
|
||||
if groupId > 0 {
|
||||
this.Ctx.SetCookie("groupid", strconv.Itoa(groupId)+"|job")
|
||||
} else {
|
||||
arr := strings.Split(this.Ctx.GetCookie("groupid"), "|")
|
||||
groupId, _ = strconv.Atoi(arr[0])
|
||||
func (self *TaskController) List() {
|
||||
self.Data["pageTitle"] = "任务管理"
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *TaskController) AuditList() {
|
||||
self.Data["pageTitle"] = "任务审核"
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *TaskController) Add() {
|
||||
self.Data["pageTitle"] = "新增任务"
|
||||
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
|
||||
self.Data["serverGroup"] = serverLists(self.serverGroups, self.userId)
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *TaskController) Edit() {
|
||||
self.Data["pageTitle"] = "编辑任务"
|
||||
|
||||
id, _ := self.GetInt("id")
|
||||
task, err := models.TaskGetById(id)
|
||||
if err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
|
||||
filters := make([]interface{}, 0)
|
||||
if groupId > 0 && groupId != 99 {
|
||||
filters = append(filters, "group_id", groupId)
|
||||
if task.Status == 1 {
|
||||
self.ajaxMsg("运行状态无法编辑任务,请先暂停任务", MSG_ERR)
|
||||
}
|
||||
result, count := models.TaskGetList(page, this.pageSize, filters...)
|
||||
self.Data["task"] = task
|
||||
|
||||
// 分组列表
|
||||
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
|
||||
self.Data["serverGroup"] = serverLists(self.serverGroups, self.userId)
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *TaskController) Copy() {
|
||||
self.Data["pageTitle"] = "复制任务"
|
||||
|
||||
id, _ := self.GetInt("id")
|
||||
task, err := models.TaskGetById(id)
|
||||
if err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.Data["task"] = task
|
||||
|
||||
// 分组列表
|
||||
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
|
||||
self.Data["serverGroup"] = serverLists(self.serverGroups, self.userId)
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *TaskController) Detail() {
|
||||
self.Data["pageTitle"] = "任务详细"
|
||||
|
||||
id, _ := self.GetInt("id")
|
||||
task, err := models.TaskGetById(id)
|
||||
if err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
|
||||
TextStatus := []string{
|
||||
"<font color='red'><i class='fa fa-minus-square'></i> 暂停</font>",
|
||||
"<font color='green'><i class='fa fa-check-square'></i> 运行中</font>",
|
||||
"<font color='orange'><i class='fa fa-question-circle'></i> 待审核</font>",
|
||||
"<font color='red'><i class='fa fa-times-circle'></i> 审核失败</font>",
|
||||
}
|
||||
|
||||
self.Data["TextStatus"] = TextStatus[task.Status]
|
||||
self.Data["CreateTime"] = beego.Date(time.Unix(task.CreateTime, 0), "Y-m-d H:i:s")
|
||||
self.Data["UpdateTime"] = beego.Date(time.Unix(task.UpdateTime, 0), "Y-m-d H:i:s")
|
||||
self.Data["task"] = task
|
||||
// 分组列表
|
||||
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
|
||||
|
||||
serverName := "本地服务器"
|
||||
if task.ServerId == 0 {
|
||||
serverName = "本地服务器"
|
||||
} else {
|
||||
server, err := models.TaskServerGetById(task.ServerId)
|
||||
if err == nil {
|
||||
serverName = server.ServerName
|
||||
}
|
||||
}
|
||||
self.Data["serverName"] = serverName
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *TaskController) AjaxSave() {
|
||||
task_id, _ := self.GetInt("id")
|
||||
if task_id == 0 {
|
||||
task := new(models.Task)
|
||||
task.CreateId = self.userId
|
||||
task.GroupId, _ = self.GetInt("group_id")
|
||||
task.TaskName = strings.TrimSpace(self.GetString("task_name"))
|
||||
task.Description = strings.TrimSpace(self.GetString("description"))
|
||||
task.Concurrent, _ = self.GetInt("concurrent")
|
||||
task.ServerId, _ = self.GetInt("server_id")
|
||||
task.CronSpec = strings.TrimSpace(self.GetString("cron_spec"))
|
||||
task.Command = strings.TrimSpace(self.GetString("command"))
|
||||
task.Timeout, _ = self.GetInt("timeout")
|
||||
|
||||
msg, isBan := checkCommand(task.Command)
|
||||
if !isBan {
|
||||
self.ajaxMsg("含有禁止命令:"+msg, MSG_ERR)
|
||||
}
|
||||
|
||||
task.CreateTime = time.Now().Unix()
|
||||
task.UpdateTime = time.Now().Unix()
|
||||
task.Status = 2 //审核中
|
||||
|
||||
if task.TaskName == "" || task.CronSpec == "" || task.Command == "" {
|
||||
self.ajaxMsg("请填写完整信息", MSG_ERR)
|
||||
}
|
||||
if _, err := cron.Parse(task.CronSpec); err != nil {
|
||||
self.ajaxMsg("cron表达式无效", MSG_ERR)
|
||||
}
|
||||
if _, err := models.TaskAdd(task); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
task, _ := models.TaskGetById(task_id)
|
||||
//修改
|
||||
task.Id = task_id
|
||||
task.UpdateTime = time.Now().Unix()
|
||||
task.TaskName = strings.TrimSpace(self.GetString("task_name"))
|
||||
task.Description = strings.TrimSpace(self.GetString("description"))
|
||||
task.GroupId, _ = self.GetInt("group_id")
|
||||
task.Concurrent, _ = self.GetInt("concurrent")
|
||||
task.ServerId, _ = self.GetInt("server_id")
|
||||
task.CronSpec = strings.TrimSpace(self.GetString("cron_spec"))
|
||||
task.Command = strings.TrimSpace(self.GetString("command"))
|
||||
task.Timeout, _ = self.GetInt("timeout")
|
||||
task.UpdateId = self.userId
|
||||
task.Status = 2 //审核中
|
||||
|
||||
msg, isBan := checkCommand(task.Command)
|
||||
if !isBan {
|
||||
self.ajaxMsg("含有禁止命令:"+msg, MSG_ERR)
|
||||
}
|
||||
|
||||
if err := task.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
//检查是否含有禁用命令
|
||||
func checkCommand(command string) (string, bool) {
|
||||
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 0)
|
||||
ban, _ := models.BanGetList(1, 1000, filters...)
|
||||
for _, v := range ban {
|
||||
if strings.Contains(command, v.Code) {
|
||||
return v.Code, false
|
||||
}
|
||||
}
|
||||
return "", true
|
||||
}
|
||||
|
||||
func (self *TaskController) AjaxAudit() {
|
||||
|
||||
taskId, _ := self.GetInt("id")
|
||||
if taskId == 0 {
|
||||
self.ajaxMsg("任务不存在", MSG_ERR)
|
||||
}
|
||||
res := changeStatus(taskId, 0, self.userId)
|
||||
if !res {
|
||||
self.ajaxMsg("审核失败", MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *TaskController) AjaxNopass() {
|
||||
taskId, _ := self.GetInt("id")
|
||||
if taskId == 0 {
|
||||
self.ajaxMsg("任务不存在", MSG_ERR)
|
||||
}
|
||||
res := changeStatus(taskId, 3, self.userId)
|
||||
if !res {
|
||||
self.ajaxMsg("操作失败", MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *TaskController) AjaxStart() {
|
||||
taskId, _ := self.GetInt("id")
|
||||
if taskId == 0 {
|
||||
self.ajaxMsg("任务不存在", MSG_ERR)
|
||||
}
|
||||
|
||||
task, err := models.TaskGetById(taskId)
|
||||
if err != nil {
|
||||
self.ajaxMsg("查不到该任务", MSG_ERR)
|
||||
}
|
||||
|
||||
if task.Status != 0 {
|
||||
self.ajaxMsg("任务状态有误", MSG_ERR)
|
||||
}
|
||||
|
||||
job, err := jobs.NewJobFromTask(task)
|
||||
if err != nil {
|
||||
self.ajaxMsg("创建任务失败", MSG_ERR)
|
||||
}
|
||||
|
||||
if jobs.AddJob(task.CronSpec, job) {
|
||||
task.Status = 1
|
||||
task.Update()
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *TaskController) AjaxPause() {
|
||||
taskId, _ := self.GetInt("id")
|
||||
if taskId == 0 {
|
||||
self.ajaxMsg("任务不存在", MSG_ERR)
|
||||
}
|
||||
|
||||
task, err := models.TaskGetById(taskId)
|
||||
if err != nil {
|
||||
self.ajaxMsg("查不到该任务", MSG_ERR)
|
||||
}
|
||||
|
||||
jobs.RemoveJob(taskId)
|
||||
task.Status = 0
|
||||
task.Update()
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
|
||||
}
|
||||
|
||||
// 立即执行
|
||||
func (self *TaskController) AjaxRun() {
|
||||
id, _ := self.GetInt("id")
|
||||
task, err := models.TaskGetById(id)
|
||||
if err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
|
||||
job, err := jobs.NewJobFromTask(task)
|
||||
if err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
job.Run()
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *TaskController) AjaxBatchStart() {
|
||||
idArr := self.GetStrings("ids")
|
||||
ids := strings.Split(idArr[0], ",")
|
||||
if len(ids) < 1 {
|
||||
self.ajaxMsg("请选择要操作的任务", MSG_ERR)
|
||||
}
|
||||
for _, v := range ids {
|
||||
id, _ := strconv.Atoi(v)
|
||||
if id < 1 {
|
||||
continue
|
||||
}
|
||||
|
||||
if task, err := models.TaskGetById(id); err == nil {
|
||||
job, err := jobs.NewJobFromTask(task)
|
||||
if err == nil {
|
||||
jobs.AddJob(task.CronSpec, job)
|
||||
task.Status = 1
|
||||
task.Update()
|
||||
}
|
||||
}
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *TaskController) AjaxBatchPause() {
|
||||
idArr := self.GetStrings("ids")
|
||||
ids := strings.Split(idArr[0], ",")
|
||||
if len(ids) < 1 {
|
||||
self.ajaxMsg("请选择要操作的任务", MSG_ERR)
|
||||
}
|
||||
for _, v := range ids {
|
||||
id, _ := strconv.Atoi(v)
|
||||
if id < 1 {
|
||||
continue
|
||||
}
|
||||
jobs.RemoveJob(id)
|
||||
|
||||
if task, err := models.TaskGetById(id); err == nil {
|
||||
task.Status = 0
|
||||
task.Update()
|
||||
}
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *TaskController) AjaxBatchDel() {
|
||||
idArr := self.GetStrings("ids")
|
||||
ids := strings.Split(idArr[0], ",")
|
||||
if len(ids) < 1 {
|
||||
self.ajaxMsg("请选择要操作的任务", MSG_ERR)
|
||||
}
|
||||
for _, v := range ids {
|
||||
id, _ := strconv.Atoi(v)
|
||||
if id < 1 {
|
||||
continue
|
||||
}
|
||||
models.TaskDel(id)
|
||||
models.TaskLogDelByTaskId(id)
|
||||
jobs.RemoveJob(id)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *TaskController) AjaxBatchAudit() {
|
||||
idArr := self.GetStrings("ids")
|
||||
ids := strings.Split(idArr[0], ",")
|
||||
if len(ids) < 1 {
|
||||
self.ajaxMsg("请选择要操作的任务", MSG_ERR)
|
||||
}
|
||||
for _, v := range ids {
|
||||
id, _ := strconv.Atoi(v)
|
||||
if id < 1 {
|
||||
continue
|
||||
}
|
||||
changeStatus(id, 0, self.userId)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *TaskController) AjaxBatchNoPass() {
|
||||
idArr := self.GetStrings("ids")
|
||||
ids := strings.Split(idArr[0], ",")
|
||||
if len(ids) < 1 {
|
||||
self.ajaxMsg("请选择要操作的任务", MSG_ERR)
|
||||
}
|
||||
for _, v := range ids {
|
||||
id, _ := strconv.Atoi(v)
|
||||
if id < 1 {
|
||||
continue
|
||||
}
|
||||
changeStatus(id, 3, self.userId)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func changeStatus(taskId, status, userId int) bool {
|
||||
|
||||
if taskId == 0 {
|
||||
return false
|
||||
}
|
||||
task, _ := models.TaskGetById(taskId)
|
||||
//修改
|
||||
task.Id = taskId
|
||||
task.UpdateTime = time.Now().Unix()
|
||||
task.UpdateId = userId
|
||||
task.Status = status //0,1,2,3,9
|
||||
|
||||
if err := task.Update(); err != nil {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func (self *TaskController) AjaxDel() {
|
||||
id, _ := self.GetInt("id")
|
||||
task, _ := models.TaskGetById(id)
|
||||
|
||||
task.UpdateTime = time.Now().Unix()
|
||||
task.UpdateId = self.userId
|
||||
task.Status = -1
|
||||
task.Id = id
|
||||
|
||||
//TODO 查询服务器是否用于定时任务
|
||||
if err := task.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("操作成功", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *TaskController) Table() {
|
||||
//列表
|
||||
page, err := self.GetInt("page")
|
||||
if err != nil {
|
||||
page = 1
|
||||
}
|
||||
limit, err := self.GetInt("limit")
|
||||
if err != nil {
|
||||
limit = 30
|
||||
}
|
||||
|
||||
status, _ := self.GetInt("status")
|
||||
|
||||
taskName := strings.TrimSpace(self.GetString("taskName"))
|
||||
StatusText := []string{
|
||||
"<font color='red'><i class='fa fa-minus-square'></i></font>",
|
||||
"<font color='green'><i class='fa fa-check-square'></i></font>",
|
||||
"<font color='orange'><i class='fa fa-question-circle'></i></font>",
|
||||
"<font color='red'><i class='fa fa-times-circle'></i></font>",
|
||||
}
|
||||
|
||||
taskGroup := taskGroupLists(self.taskGroups, self.userId)
|
||||
self.pageSize = limit
|
||||
//查询条件
|
||||
filters := make([]interface{}, 0)
|
||||
|
||||
if status == 2 {
|
||||
//审核中,审核失败
|
||||
ids := []int{2, 3}
|
||||
filters = append(filters, "status__in", ids)
|
||||
} else {
|
||||
ids := []int{0, 1}
|
||||
filters = append(filters, "status__in", ids)
|
||||
}
|
||||
|
||||
if self.userId != 1 {
|
||||
groups := strings.Split(self.taskGroups, ",")
|
||||
|
||||
groupsIds := make([]int, 0)
|
||||
for _, v := range groups {
|
||||
id, _ := strconv.Atoi(v)
|
||||
groupsIds = append(groupsIds, id)
|
||||
}
|
||||
filters = append(filters, "group_id__in", groupsIds)
|
||||
}
|
||||
|
||||
if taskName != "" {
|
||||
filters = append(filters, "task_name__icontains", taskName)
|
||||
}
|
||||
result, count := models.TaskGetList(page, self.pageSize, filters...)
|
||||
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
|
||||
// 分组列表
|
||||
groups, _ := models.TaskGroupGetList(1, 100)
|
||||
groups_map := make(map[int]string)
|
||||
for _, gname := range groups {
|
||||
groups_map[gname.Id] = gname.GroupName
|
||||
}
|
||||
|
||||
//服务器列表
|
||||
servers, _ := models.TaskServerGetList(1, 100)
|
||||
|
||||
server_map := make(map[int]string)
|
||||
for _, sname := range servers {
|
||||
server_map[sname.Id] = sname.ServerName
|
||||
}
|
||||
server_map[0] = "本地"
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["name"] = v.TaskName
|
||||
row["cron_spec"] = v.CronSpec
|
||||
row["status"] = v.Status
|
||||
|
||||
groupName := "默认分组"
|
||||
|
||||
if name, ok := taskGroup[v.GroupId]; ok {
|
||||
groupName = name
|
||||
}
|
||||
|
||||
row["group_name"] = groupName
|
||||
row["task_name"] = StatusText[v.Status] + " " + groupName + "-" + " " + v.TaskName
|
||||
row["description"] = v.Description
|
||||
row["group_id"] = v.GroupId
|
||||
row["group_name"] = groups_map[v.GroupId]
|
||||
row["server_name"] = server_map[v.ServerId]
|
||||
row["is_odd"] = k % 2
|
||||
|
||||
//row["status_text"] = StatusText[v.Status]
|
||||
row["status"] = v.Status
|
||||
row["pre_time"] = beego.Date(time.Unix(v.PrevTime, 0), "Y-m-d H:i:s")
|
||||
row["execute_times"] = v.ExecuteTimes
|
||||
|
||||
e := jobs.GetEntryById(v.Id)
|
||||
if e != nil {
|
||||
@@ -91,305 +492,9 @@ func (this *TaskController) List() {
|
||||
}
|
||||
row["running"] = 0
|
||||
}
|
||||
|
||||
list[k] = row
|
||||
}
|
||||
|
||||
this.Data["pageTitle"] = "任务列表"
|
||||
this.Data["list"] = list
|
||||
this.Data["groups"] = groups
|
||||
this.Data["groupid"] = groupId
|
||||
this.Data["pageBar"] = libs.NewPager(page, int(count), this.pageSize, beego.URLFor("TaskController.List", "groupid", groupId), true).ToString()
|
||||
this.display()
|
||||
}
|
||||
|
||||
// 添加任务
|
||||
func (this *TaskController) Add() {
|
||||
|
||||
if this.isPost() {
|
||||
task := new(models.Task)
|
||||
task.UserId = this.userId
|
||||
task.GroupId, _ = this.GetInt("group_id")
|
||||
task.TaskName = strings.TrimSpace(this.GetString("task_name"))
|
||||
task.Description = strings.TrimSpace(this.GetString("description"))
|
||||
task.Concurrent, _ = this.GetInt("concurrent")
|
||||
task.ServerId, _ = this.GetInt("server_id")
|
||||
task.CronSpec = strings.TrimSpace(this.GetString("cron_spec"))
|
||||
task.Command = strings.TrimSpace(this.GetString("command"))
|
||||
task.Timeout, _ = this.GetInt("timeout")
|
||||
|
||||
if task.TaskName == "" || task.CronSpec == "" || task.Command == "" {
|
||||
this.ajaxMsg("请填写完整信息", MSG_ERR)
|
||||
}
|
||||
if _, err := crons.Parse(task.CronSpec); err != nil {
|
||||
this.ajaxMsg("cron表达式无效", MSG_ERR)
|
||||
}
|
||||
if _, err := models.TaskAdd(task); err != nil {
|
||||
this.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
|
||||
this.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
// 分组列表
|
||||
groups, _ := models.TaskGroupGetList(1, 100)
|
||||
this.Data["groups"] = groups
|
||||
//服务器分组
|
||||
servers, _ := models.TaskServerGetList(1, 100)
|
||||
this.Data["servers"] = servers
|
||||
this.Data["pageTitle"] = "添加任务"
|
||||
this.display()
|
||||
}
|
||||
|
||||
// 编辑任务
|
||||
func (this *TaskController) Edit() {
|
||||
id, _ := this.GetInt("id")
|
||||
|
||||
task, err := models.TaskGetById(id)
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
}
|
||||
|
||||
if task.Status != 0 {
|
||||
this.ajaxMsg("激活状态无法编辑任务,请先暂停任务", MSG_ERR)
|
||||
}
|
||||
|
||||
if this.isPost() {
|
||||
task.TaskName = strings.TrimSpace(this.GetString("task_name"))
|
||||
task.Description = strings.TrimSpace(this.GetString("description"))
|
||||
task.GroupId, _ = this.GetInt("group_id")
|
||||
task.Concurrent, _ = this.GetInt("concurrent")
|
||||
task.ServerId, _ = this.GetInt("server_id")
|
||||
task.CronSpec = strings.TrimSpace(this.GetString("cron_spec"))
|
||||
task.Command = strings.TrimSpace(this.GetString("command"))
|
||||
task.Timeout, _ = this.GetInt("timeout")
|
||||
if task.TaskName == "" || task.CronSpec == "" || task.Command == "" {
|
||||
this.ajaxMsg("请填写完整信息", MSG_ERR)
|
||||
}
|
||||
if _, err := crons.Parse(task.CronSpec); err != nil {
|
||||
this.ajaxMsg("cron表达式无效", MSG_ERR)
|
||||
}
|
||||
if err := task.Update(); err != nil {
|
||||
this.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
|
||||
this.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
// 分组列表
|
||||
groups, _ := models.TaskGroupGetList(1, 100)
|
||||
this.Data["groups"] = groups
|
||||
//服务器分组
|
||||
servers, _ := models.TaskServerGetList(1, 100)
|
||||
this.Data["servers"] = servers
|
||||
|
||||
this.Data["task"] = task
|
||||
this.Data["pageTitle"] = "编辑任务"
|
||||
this.display()
|
||||
}
|
||||
|
||||
//复制任务
|
||||
func (this *TaskController) Copy() {
|
||||
|
||||
id, _ := this.GetInt("id")
|
||||
task, err := models.TaskGetById(id)
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
}
|
||||
// 分组列表
|
||||
groups, _ := models.TaskGroupGetList(1, 100)
|
||||
this.Data["groups"] = groups
|
||||
//服务器分组
|
||||
servers, _ := models.TaskServerGetList(1, 100)
|
||||
this.Data["servers"] = servers
|
||||
|
||||
this.Data["task"] = task
|
||||
this.Data["pageTitle"] = "复制任务"
|
||||
this.display()
|
||||
}
|
||||
|
||||
// 任务执行日志列表
|
||||
func (this *TaskController) Logs() {
|
||||
taskId, _ := this.GetInt("id")
|
||||
page, _ := this.GetInt("page")
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
|
||||
task, err := models.TaskGetById(taskId)
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
}
|
||||
|
||||
result, count := models.TaskLogGetList(page, this.pageSize, "task_id", task.Id)
|
||||
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["start_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
row["process_time"] = float64(v.ProcessTime) / 1000
|
||||
row["ouput_size"] = libs.SizeFormat(float64(len(v.Output)))
|
||||
row["status"] = v.Status
|
||||
list[k] = row
|
||||
}
|
||||
|
||||
this.Data["pageTitle"] = "任务执行日志"
|
||||
this.Data["list"] = list
|
||||
this.Data["task"] = task
|
||||
this.Data["pageBar"] = libs.NewPager(page, int(count), this.pageSize, beego.URLFor("TaskController.Logs", "id", taskId), true).ToString()
|
||||
this.display()
|
||||
}
|
||||
|
||||
// 查看日志详情
|
||||
func (this *TaskController) ViewLog() {
|
||||
id, _ := this.GetInt("id")
|
||||
|
||||
taskLog, err := models.TaskLogGetById(id)
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
}
|
||||
|
||||
task, err := models.TaskGetById(taskLog.TaskId)
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
}
|
||||
|
||||
data := make(map[string]interface{})
|
||||
data["id"] = taskLog.Id
|
||||
data["output"] = taskLog.Output
|
||||
data["error"] = taskLog.Error
|
||||
data["start_time"] = beego.Date(time.Unix(taskLog.CreateTime, 0), "Y-m-d H:i:s")
|
||||
data["process_time"] = float64(taskLog.ProcessTime) / 1000
|
||||
data["ouput_size"] = libs.SizeFormat(float64(len(taskLog.Output)))
|
||||
data["status"] = taskLog.Status
|
||||
|
||||
this.Data["task"] = task
|
||||
this.Data["data"] = data
|
||||
this.Data["pageTitle"] = "查看日志"
|
||||
this.display()
|
||||
}
|
||||
|
||||
// 批量操作日志
|
||||
func (this *TaskController) LogBatch() {
|
||||
action := this.GetString("action")
|
||||
ids := this.GetStrings("ids")
|
||||
if len(ids) < 1 {
|
||||
this.ajaxMsg("请选择要操作的项目", MSG_ERR)
|
||||
}
|
||||
for _, v := range ids {
|
||||
id, _ := strconv.Atoi(v)
|
||||
if id < 1 {
|
||||
continue
|
||||
}
|
||||
switch action {
|
||||
case "delete":
|
||||
models.TaskLogDelById(id)
|
||||
}
|
||||
}
|
||||
|
||||
this.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
// 批量操作
|
||||
func (this *TaskController) Batch() {
|
||||
action := this.GetString("action")
|
||||
ids := this.GetStrings("ids")
|
||||
if len(ids) < 1 {
|
||||
this.ajaxMsg("请选择要操作的项目", MSG_ERR)
|
||||
}
|
||||
|
||||
for _, v := range ids {
|
||||
id, _ := strconv.Atoi(v)
|
||||
if id < 1 {
|
||||
continue
|
||||
}
|
||||
switch action {
|
||||
case "active":
|
||||
if task, err := models.TaskGetById(id); err == nil {
|
||||
job, err := jobs.NewJobFromTask(task)
|
||||
if err == nil {
|
||||
jobs.AddJob(task.CronSpec, job)
|
||||
task.Status = 1
|
||||
task.Update()
|
||||
}
|
||||
}
|
||||
case "pause":
|
||||
jobs.RemoveJob(id)
|
||||
|
||||
if task, err := models.TaskGetById(id); err == nil {
|
||||
task.Status = 0
|
||||
task.Update()
|
||||
}
|
||||
|
||||
case "delete":
|
||||
models.TaskDel(id)
|
||||
models.TaskLogDelByTaskId(id)
|
||||
jobs.RemoveJob(id)
|
||||
}
|
||||
}
|
||||
|
||||
this.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
// 启动任务
|
||||
func (this *TaskController) Start() {
|
||||
id, _ := this.GetInt("id")
|
||||
|
||||
task, err := models.TaskGetById(id)
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
}
|
||||
|
||||
job, err := jobs.NewJobFromTask(task)
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
}
|
||||
|
||||
if jobs.AddJob(task.CronSpec, job) {
|
||||
task.Status = 1
|
||||
task.Update()
|
||||
}
|
||||
|
||||
refer := this.Ctx.Request.Referer()
|
||||
if refer == "" {
|
||||
refer = beego.URLFor("TaskController.List")
|
||||
}
|
||||
this.redirect(refer)
|
||||
}
|
||||
|
||||
// 暂停任务
|
||||
func (this *TaskController) Pause() {
|
||||
id, _ := this.GetInt("id")
|
||||
|
||||
task, err := models.TaskGetById(id)
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
}
|
||||
|
||||
jobs.RemoveJob(id)
|
||||
task.Status = 0
|
||||
task.Update()
|
||||
|
||||
refer := this.Ctx.Request.Referer()
|
||||
if refer == "" {
|
||||
refer = beego.URLFor("TaskController.List")
|
||||
}
|
||||
this.redirect(refer)
|
||||
}
|
||||
|
||||
// 立即执行
|
||||
func (this *TaskController) Run() {
|
||||
id, _ := this.GetInt("id")
|
||||
|
||||
task, err := models.TaskGetById(id)
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
}
|
||||
|
||||
job, err := jobs.NewJobFromTask(task)
|
||||
if err != nil {
|
||||
this.showMsg(err.Error())
|
||||
}
|
||||
job.Run()
|
||||
this.redirect(beego.URLFor("TaskController.ViewLog", "id", job.GetLogId()))
|
||||
self.ajaxList("成功", MSG_OK, count, list)
|
||||
}
|
||||
|
||||
140
controllers/task_group.go
Normal file
140
controllers/task_group.go
Normal file
@@ -0,0 +1,140 @@
|
||||
/************************************************************
|
||||
** @Description: controllers
|
||||
** @Author: haodaquan
|
||||
** @Date: 2018-06-10 22:24
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2018-06-10 22:24
|
||||
*************************************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"fmt"
|
||||
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type GroupController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (self *GroupController) List() {
|
||||
self.Data["pageTitle"] = "任务分组管理"
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *GroupController) Add() {
|
||||
self.Data["pageTitle"] = "新增分组"
|
||||
self.display()
|
||||
}
|
||||
func (self *GroupController) Edit() {
|
||||
self.Data["pageTitle"] = "编辑分组"
|
||||
|
||||
id, _ := self.GetInt("id", 0)
|
||||
group, _ := models.GroupGetById(id)
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = group.Id
|
||||
row["group_name"] = group.GroupName
|
||||
row["description"] = group.Description
|
||||
self.Data["group"] = row
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *GroupController) AjaxSave() {
|
||||
group := new(models.Group)
|
||||
group.GroupName = strings.TrimSpace(self.GetString("group_name"))
|
||||
group.Description = strings.TrimSpace(self.GetString("description"))
|
||||
group.Status = 1
|
||||
|
||||
group_id, _ := self.GetInt("id")
|
||||
|
||||
fmt.Println(group_id)
|
||||
if group_id == 0 {
|
||||
//新增
|
||||
group.CreateTime = time.Now().Unix()
|
||||
group.UpdateTime = time.Now().Unix()
|
||||
group.CreateId = self.userId
|
||||
group.UpdateId = self.userId
|
||||
if _, err := models.GroupAdd(group); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
//修改
|
||||
group.Id = group_id
|
||||
group.UpdateTime = time.Now().Unix()
|
||||
group.UpdateId = self.userId
|
||||
if err := group.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *GroupController) AjaxDel() {
|
||||
|
||||
group_id, _ := self.GetInt("id")
|
||||
group, _ := models.GroupGetById(group_id)
|
||||
group.Status = 0
|
||||
group.Id = group_id
|
||||
group.UpdateTime = time.Now().Unix()
|
||||
//TODO 如果分组下有任务 不处理
|
||||
//filters := make([]interface{}, 0)
|
||||
//filters = append(filters, "group_id", group_id)
|
||||
//filters = append(filters, "status", 0)
|
||||
//_, n := models.TaskServerGetList(1, 1, filters...)
|
||||
//if n > 0 {
|
||||
// self.ajaxMsg("分组下有服务器资源,请先处理", MSG_ERR)
|
||||
//}
|
||||
if err := group.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
|
||||
func (self *GroupController) Table() {
|
||||
//列表
|
||||
page, err := self.GetInt("page")
|
||||
if err != nil {
|
||||
page = 1
|
||||
}
|
||||
limit, err := self.GetInt("limit")
|
||||
if err != nil {
|
||||
limit = 30
|
||||
}
|
||||
|
||||
groupName := strings.TrimSpace(self.GetString("groupName"))
|
||||
self.pageSize = limit
|
||||
//查询条件
|
||||
filters := make([]interface{}, 0)
|
||||
filters = append(filters, "status", 1)
|
||||
|
||||
if self.userId != 1 {
|
||||
groups := strings.Split(self.taskGroups, ",")
|
||||
|
||||
groupsIds := make([]int, 0)
|
||||
for _, v := range groups {
|
||||
id, _ := strconv.Atoi(v)
|
||||
groupsIds = append(groupsIds, id)
|
||||
}
|
||||
filters = append(filters, "id__in", groupsIds)
|
||||
}
|
||||
if groupName != "" {
|
||||
filters = append(filters, "group_name__contains", groupName)
|
||||
}
|
||||
result, count := models.GroupGetList(page, self.pageSize, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["group_name"] = v.GroupName
|
||||
row["description"] = v.Description
|
||||
row["create_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
row["update_time"] = beego.Date(time.Unix(v.UpdateTime, 0), "Y-m-d H:i:s")
|
||||
list[k] = row
|
||||
}
|
||||
self.ajaxList("成功", MSG_OK, count, list)
|
||||
}
|
||||
168
controllers/task_log.go
Normal file
168
controllers/task_log.go
Normal file
@@ -0,0 +1,168 @@
|
||||
/************************************************************
|
||||
** @Description: controllers
|
||||
** @Author: george hao
|
||||
** @Date: 2018-07-05 16:43
|
||||
** @Last Modified by: george hao
|
||||
** @Last Modified time: 2018-07-05 16:43
|
||||
*************************************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"github.com/astaxie/beego"
|
||||
"github.com/george518/PPGo_Job/libs"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
"strconv"
|
||||
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
type TaskLogController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (self *TaskLogController) List() {
|
||||
taskId, err := self.GetInt("task_id")
|
||||
if err != nil {
|
||||
taskId = 1
|
||||
}
|
||||
|
||||
task, err := models.TaskGetById(taskId)
|
||||
if err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.Data["pageTitle"] = "日志管理 - " + task.TaskName + "(#" + strconv.Itoa(task.Id) + ")"
|
||||
self.Data["task_id"] = task.Id
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *TaskLogController) Table() {
|
||||
//列表
|
||||
page, err := self.GetInt("page")
|
||||
if err != nil {
|
||||
page = 1
|
||||
}
|
||||
limit, err := self.GetInt("limit")
|
||||
if err != nil {
|
||||
limit = 30
|
||||
}
|
||||
|
||||
self.pageSize = limit
|
||||
//查询条件
|
||||
filters := make([]interface{}, 0)
|
||||
taskId, err := self.GetInt("task_id")
|
||||
if err != nil {
|
||||
taskId = 1
|
||||
}
|
||||
|
||||
TextStatus := []string{
|
||||
"<font color='red'><i class='fa fa-times-circle'></i> 错误</font>",
|
||||
"<font color='green'><i class='fa fa-check-square'></i> 正常</font>",
|
||||
}
|
||||
|
||||
Status, err := self.GetInt("status")
|
||||
|
||||
if err == nil && Status != 9 {
|
||||
status := Status + 1
|
||||
filters = append(filters, "status", status)
|
||||
}
|
||||
filters = append(filters, "task_id", taskId)
|
||||
|
||||
result, count := models.TaskLogGetList(page, self.pageSize, filters...)
|
||||
list := make([]map[string]interface{}, len(result))
|
||||
|
||||
for k, v := range result {
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = v.Id
|
||||
row["task_id"] = v.TaskId
|
||||
row["start_time"] = beego.Date(time.Unix(v.CreateTime, 0), "Y-m-d H:i:s")
|
||||
row["process_time"] = float64(v.ProcessTime) / 1000
|
||||
row["ouput_size"] = libs.SizeFormat(float64(len(v.Output)))
|
||||
index := v.Status + 1
|
||||
row["status"] = TextStatus[index]
|
||||
|
||||
list[k] = row
|
||||
}
|
||||
|
||||
self.ajaxList("成功", MSG_OK, count, list)
|
||||
}
|
||||
|
||||
func (self *TaskLogController) Detail() {
|
||||
|
||||
//日志内容
|
||||
id, _ := self.GetInt("id")
|
||||
tasklog, err := models.TaskLogGetById(id)
|
||||
if err != nil {
|
||||
self.Ctx.WriteString("日志不存在")
|
||||
return
|
||||
}
|
||||
LogTextStatus := []string{
|
||||
"<font color='red'><i class='fa fa-times-circle'></i> 错误</font>",
|
||||
"<font color='green'><i class='fa fa-check-square'></i> 正常</font>",
|
||||
}
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = tasklog.Id
|
||||
row["task_id"] = tasklog.TaskId
|
||||
row["start_time"] = beego.Date(time.Unix(tasklog.CreateTime, 0), "Y-m-d H:i:s")
|
||||
row["process_time"] = float64(tasklog.ProcessTime) / 1000
|
||||
row["ouput_size"] = libs.SizeFormat(float64(len(tasklog.Output)))
|
||||
row["ouput"] = tasklog.Output
|
||||
row["error"] = tasklog.Error
|
||||
|
||||
index := tasklog.Status + 1
|
||||
row["status"] = LogTextStatus[index]
|
||||
|
||||
self.Data["taskLog"] = row
|
||||
|
||||
//任务详情
|
||||
task, err := models.TaskGetById(tasklog.TaskId)
|
||||
if err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
TextStatus := []string{
|
||||
"<font color='red'><i class='fa fa-minus-square'></i> 暂停</font>",
|
||||
"<font color='green'><i class='fa fa-check-square'></i> 运行中</font>",
|
||||
"<font color='orange'><i class='fa fa-check-square'></i> 待审核</font>",
|
||||
"<font color='blue'><i class='fa fa-times-circle'></i> 审核失败</font>",
|
||||
}
|
||||
|
||||
self.Data["TextStatus"] = TextStatus[task.Status]
|
||||
self.Data["CreateTime"] = beego.Date(time.Unix(task.CreateTime, 0), "Y-m-d H:i:s")
|
||||
self.Data["UpdateTime"] = beego.Date(time.Unix(task.UpdateTime, 0), "Y-m-d H:i:s")
|
||||
self.Data["task"] = task
|
||||
// 分组列表
|
||||
self.Data["taskGroup"] = taskGroupLists(self.taskGroups, self.userId)
|
||||
|
||||
serverName := "本地服务器"
|
||||
if task.ServerId == 0 {
|
||||
serverName = "本地服务器"
|
||||
} else {
|
||||
server, err := models.TaskServerGetById(task.ServerId)
|
||||
if err == nil {
|
||||
serverName = server.ServerName
|
||||
}
|
||||
}
|
||||
self.Data["serverName"] = serverName
|
||||
self.Data["pageTitle"] = "日志详细" + "(#" + strconv.Itoa(id) + ")"
|
||||
self.display()
|
||||
}
|
||||
|
||||
// 批量操作日志
|
||||
func (self *TaskLogController) AjaxDel() {
|
||||
ids := self.GetStrings("ids")
|
||||
idArr := strings.Split(ids[0], ",")
|
||||
|
||||
if len(idArr) < 1 {
|
||||
self.ajaxMsg("请选择要操作的项目", MSG_ERR)
|
||||
}
|
||||
|
||||
for _, v := range idArr {
|
||||
id, _ := strconv.Atoi(v)
|
||||
if id < 1 {
|
||||
continue
|
||||
}
|
||||
models.TaskLogDelById(id)
|
||||
}
|
||||
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
78
controllers/user.go
Normal file
78
controllers/user.go
Normal file
@@ -0,0 +1,78 @@
|
||||
/**********************************************
|
||||
** @Des: 用户
|
||||
** @Author: haodaquan
|
||||
** @Date: 2017-09-16 14:17:37
|
||||
** @Last Modified by: haodaquan
|
||||
** @Last Modified time: 2017-09-17 11:14:07
|
||||
***********************************************/
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/george518/PPGo_Job/libs"
|
||||
"github.com/george518/PPGo_Job/models"
|
||||
)
|
||||
|
||||
type UserController struct {
|
||||
BaseController
|
||||
}
|
||||
|
||||
func (self *UserController) Edit() {
|
||||
self.Data["pageTitle"] = "资料修改"
|
||||
id := self.userId
|
||||
Admin, _ := models.AdminGetById(id)
|
||||
row := make(map[string]interface{})
|
||||
row["id"] = Admin.Id
|
||||
row["login_name"] = Admin.LoginName
|
||||
row["real_name"] = Admin.RealName
|
||||
row["phone"] = Admin.Phone
|
||||
row["email"] = Admin.Email
|
||||
self.Data["admin"] = row
|
||||
self.display()
|
||||
}
|
||||
|
||||
func (self *UserController) AjaxSave() {
|
||||
Admin_id, _ := self.GetInt("id")
|
||||
Admin, _ := models.AdminGetById(Admin_id)
|
||||
//修改
|
||||
Admin.Id = Admin_id
|
||||
Admin.UpdateTime = time.Now().Unix()
|
||||
Admin.UpdateId = self.userId
|
||||
Admin.LoginName = strings.TrimSpace(self.GetString("login_name"))
|
||||
Admin.RealName = strings.TrimSpace(self.GetString("real_name"))
|
||||
Admin.Phone = strings.TrimSpace(self.GetString("phone"))
|
||||
Admin.Email = strings.TrimSpace(self.GetString("email"))
|
||||
|
||||
resetPwd := self.GetString("reset_pwd")
|
||||
if resetPwd == "1" {
|
||||
pwdOld := strings.TrimSpace(self.GetString("password_old"))
|
||||
pwdOldMd5 := libs.Md5([]byte(pwdOld + Admin.Salt))
|
||||
if Admin.Password != pwdOldMd5 {
|
||||
self.ajaxMsg("旧密码错误", MSG_ERR)
|
||||
}
|
||||
|
||||
pwdNew1 := strings.TrimSpace(self.GetString("password_new1"))
|
||||
pwdNew2 := strings.TrimSpace(self.GetString("password_new2"))
|
||||
|
||||
if len(pwdNew1) < 6 {
|
||||
self.ajaxMsg("密码长度需要六位以上", MSG_ERR)
|
||||
}
|
||||
if pwdNew1 != pwdNew2 {
|
||||
self.ajaxMsg("两次密码不一致", MSG_ERR)
|
||||
}
|
||||
|
||||
pwd, salt := libs.Password(4, pwdNew1)
|
||||
Admin.Password = pwd
|
||||
Admin.Salt = salt
|
||||
}
|
||||
Admin.UpdateTime = time.Now().Unix()
|
||||
Admin.UpdateId = self.userId
|
||||
Admin.Status = 1
|
||||
|
||||
if err := Admin.Update(); err != nil {
|
||||
self.ajaxMsg(err.Error(), MSG_ERR)
|
||||
}
|
||||
self.ajaxMsg("", MSG_OK)
|
||||
}
|
||||
Reference in New Issue
Block a user