定时任务管理
This commit is contained in:
郝大全
2017-06-23 12:24:42 +08:00
commit 34bfe3d354
77 changed files with 16609 additions and 0 deletions

44
models/init.go Normal file
View File

@@ -0,0 +1,44 @@
/*
* @Author: haodaquan
* @Date: 2017-06-20 09:44:44
* @Last Modified by: haodaquan
* @Last Modified time: 2017-06-21 12:21:37
*/
package models
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/orm"
_ "github.com/go-sql-driver/mysql"
"net/url"
)
func Init() {
dbhost := beego.AppConfig.String("db.host")
dbport := beego.AppConfig.String("db.port")
dbuser := beego.AppConfig.String("db.user")
dbpassword := beego.AppConfig.String("db.password")
dbname := beego.AppConfig.String("db.name")
timezone := beego.AppConfig.String("db.timezone")
if dbport == "" {
dbport = "3306"
}
dsn := dbuser + ":" + dbpassword + "@tcp(" + dbhost + ":" + dbport + ")/" + dbname + "?charset=utf8"
if timezone != "" {
dsn = dsn + "&loc=" + url.QueryEscape(timezone)
}
orm.RegisterDataBase("default", "mysql", dsn)
// orm.RegisterModel(new(User), new(Task), new(TaskGroup), new(TaskLog))
orm.RegisterModel(new(User), new(Task), new(TaskGroup), new(TaskLog))
if beego.AppConfig.String("runmode") == "dev" {
orm.Debug = true
}
}
func TableName(name string) string {
return beego.AppConfig.String("db.prefix") + name
}

107
models/task.go Normal file
View File

@@ -0,0 +1,107 @@
/*
* @Author: haodaquan
* @Date: 2017-06-21 12:22:00
* @Last Modified by: haodaquan
* @Last Modified time: 2017-06-21 12:22:10
*/
package models
import (
"fmt"
"github.com/astaxie/beego/orm"
"time"
)
const (
TASK_SUCCESS = 0 // 任务执行成功
TASK_ERROR = -1 // 任务执行出错
TASK_TIMEOUT = -2 // 任务执行超时
)
type Task struct {
Id int
UserId int
GroupId int
TaskName string
TaskType int
Description string
CronSpec string
Concurrent int
Command string
Status int
Notify int
NotifyEmail string
Timeout int
ExecuteTimes int
PrevTime int64
CreateTime int64
}
func (t *Task) TableName() string {
return TableName("task")
}
func (t *Task) Update(fields ...string) error {
if _, err := orm.NewOrm().Update(t, fields...); err != nil {
return err
}
return nil
}
func TaskAdd(task *Task) (int64, error) {
if task.TaskName == "" {
return 0, fmt.Errorf("TaskName字段不能为空")
}
if task.CronSpec == "" {
return 0, fmt.Errorf("CronSpec字段不能为空")
}
if task.Command == "" {
return 0, fmt.Errorf("Command字段不能为空")
}
if task.CreateTime == 0 {
task.CreateTime = time.Now().Unix()
}
return orm.NewOrm().Insert(task)
}
func TaskGetList(page, pageSize int, filters ...interface{}) ([]*Task, int64) {
offset := (page - 1) * pageSize
tasks := make([]*Task, 0)
query := orm.NewOrm().QueryTable(TableName("task"))
if len(filters) > 0 {
l := len(filters)
for k := 0; k < l; k += 2 {
query = query.Filter(filters[k].(string), filters[k+1])
}
}
total, _ := query.Count()
query.OrderBy("-id").Limit(pageSize, offset).All(&tasks)
return tasks, total
}
func TaskResetGroupId(groupId int) (int64, error) {
return orm.NewOrm().QueryTable(TableName("task")).Filter("group_id", groupId).Update(orm.Params{
"group_id": 0,
})
}
func TaskGetById(id int) (*Task, error) {
task := &Task{
Id: id,
}
err := orm.NewOrm().Read(task)
if err != nil {
return nil, err
}
return task, nil
}
func TaskDel(id int) error {
_, err := orm.NewOrm().QueryTable(TableName("task")).Filter("id", id).Delete()
return err
}

71
models/task_group.go Normal file
View File

@@ -0,0 +1,71 @@
/*
* @Author: haodaquan
* @Date: 2017-06-21 12:22:37
* @Last Modified by: haodaquan
* @Last Modified time: 2017-06-21 12:22:55
*/
package models
import (
"fmt"
"github.com/astaxie/beego/orm"
)
type TaskGroup struct {
Id int
UserId int
GroupName string
Description string
CreateTime int64
}
func (t *TaskGroup) TableName() string {
return TableName("task_group")
}
func (t *TaskGroup) Update(fields ...string) error {
if t.GroupName == "" {
return fmt.Errorf("组名不能为空")
}
if _, err := orm.NewOrm().Update(t, fields...); err != nil {
return err
}
return nil
}
func TaskGroupAdd(obj *TaskGroup) (int64, error) {
if obj.GroupName == "" {
return 0, fmt.Errorf("组名不能为空")
}
return orm.NewOrm().Insert(obj)
}
func TaskGroupGetById(id int) (*TaskGroup, error) {
obj := &TaskGroup{
Id: id,
}
err := orm.NewOrm().Read(obj)
if err != nil {
return nil, err
}
return obj, nil
}
func TaskGroupDelById(id int) error {
_, err := orm.NewOrm().QueryTable(TableName("task_group")).Filter("id", id).Delete()
return err
}
func TaskGroupGetList(page, pageSize int) ([]*TaskGroup, int64) {
offset := (page - 1) * pageSize
list := make([]*TaskGroup, 0)
query := orm.NewOrm().QueryTable(TableName("task_group"))
total, _ := query.Count()
query.OrderBy("-id").Limit(pageSize, offset).All(&list)
return list, total
}

76
models/task_log.go Normal file
View File

@@ -0,0 +1,76 @@
/*
* @Author: haodaquan
* @Date: 2017-06-21 12:23:22
* @Last Modified by: haodaquan
* @Last Modified time: 2017-06-22 14:57:13
*/
package models
import (
"github.com/astaxie/beego/orm"
)
type TaskLog struct {
Id int
TaskId int
Output string
Error string
Status int
ProcessTime int
CreateTime int64
}
func (t *TaskLog) TableName() string {
return TableName("task_log")
}
func TaskLogAdd(t *TaskLog) (int64, error) {
return orm.NewOrm().Insert(t)
}
func TaskLogGetList(page, pageSize int, filters ...interface{}) ([]*TaskLog, int64) {
offset := (page - 1) * pageSize
logs := make([]*TaskLog, 0)
query := orm.NewOrm().QueryTable(TableName("task_log"))
if len(filters) > 0 {
l := len(filters)
for k := 0; k < l; k += 2 {
query = query.Filter(filters[k].(string), filters[k+1])
}
}
total, _ := query.Count()
query.OrderBy("-id").Limit(pageSize, offset).All(&logs)
return logs, total
}
func TaskLogGetById(id int) (*TaskLog, error) {
obj := &TaskLog{
Id: id,
}
err := orm.NewOrm().Read(obj)
if err != nil {
return nil, err
}
return obj, nil
}
func TaskLogDelById(id int) error {
_, err := orm.NewOrm().QueryTable(TableName("task_log")).Filter("id", id).Delete()
return err
}
func TaskLogDelByTaskId(taskId int) (int64, error) {
return orm.NewOrm().QueryTable(TableName("task_log")).Filter("task_id", taskId).Delete()
}
// func GetTodaySuccessNum() (num, error) {
// o := orm.NewOrm()
// var r RawSeter
// r = o.Raw("SELECT COUNT(*) AS num WHERE create_time>=? AND status<0", "")
// }

63
models/user.go Normal file
View File

@@ -0,0 +1,63 @@
/*
* @Author: haodaquan
* @Date: 2017-06-20 09:35:45
* @Last Modified by: haodaquan
* @Last Modified time: 2017-06-20 09:37:34
*/
package models
import (
"github.com/astaxie/beego/orm"
)
type User struct {
Id int
UserName string
Password string
Salt string
Email string
LastLogin int64
LastIp string
Status int
}
func (u *User) TableName() string {
return TableName("user")
}
func (u *User) Update(fields ...string) error {
if _, err := orm.NewOrm().Update(u, fields...); err != nil {
return err
}
return nil
}
func UserAdd(user *User) (int64, error) {
return orm.NewOrm().Insert(user)
}
func UserGetById(id int) (*User, error) {
u := new(User)
err := orm.NewOrm().QueryTable(TableName("user")).Filter("id", id).One(u)
if err != nil {
return nil, err
}
return u, nil
}
func UserGetByName(userName string) (*User, error) {
u := new(User)
err := orm.NewOrm().QueryTable(TableName("user")).Filter("user_name", userName).One(u)
if err != nil {
return nil, err
}
return u, nil
}
func UserUpdate(user *User, fields ...string) error {
_, err := orm.NewOrm().Update(user, fields...)
return err
}