初版
定时任务管理
This commit is contained in:
44
models/init.go
Normal file
44
models/init.go
Normal 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
107
models/task.go
Normal 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
71
models/task_group.go
Normal 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
76
models/task_log.go
Normal 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
63
models/user.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user