mirror of https://github.com/shunfei/cronsun
parent
413254b9d2
commit
28bc0af0c4
@ -0,0 +1,81 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
client "github.com/coreos/etcd/clientv3"
|
||||
|
||||
"sunteng/cronsun/conf"
|
||||
)
|
||||
|
||||
var (
|
||||
DefalutClient *Client
|
||||
|
||||
initialized bool
|
||||
)
|
||||
|
||||
func Init() (err error) {
|
||||
if initialized {
|
||||
return
|
||||
}
|
||||
|
||||
if err = initID(); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if err = conf.Init(); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if DefalutClient, err = NewClient(conf.Config); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
initialized = true
|
||||
return
|
||||
}
|
||||
|
||||
type Client struct {
|
||||
*client.Client
|
||||
|
||||
reqTimeout time.Duration
|
||||
}
|
||||
|
||||
func NewClient(cfg *conf.Conf) (c *Client, err error) {
|
||||
cli, err := client.New(cfg.Etcd)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
c = &Client{
|
||||
Client: cli,
|
||||
|
||||
reqTimeout: time.Duration(cfg.ReqTimeout) * time.Second,
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (c *Client) Put(key, val string, opts ...client.OpOption) (*client.PutResponse, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), c.reqTimeout)
|
||||
defer cancel()
|
||||
return c.Client.Put(ctx, key, val, opts...)
|
||||
}
|
||||
|
||||
func (c *Client) Get(key string, opts ...client.OpOption) (*client.GetResponse, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), c.reqTimeout)
|
||||
defer cancel()
|
||||
return c.Client.Get(ctx, key, opts...)
|
||||
}
|
||||
|
||||
func (c *Client) Del(key string, opts ...client.OpOption) (*client.DeleteResponse, error) {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), c.reqTimeout)
|
||||
defer cancel()
|
||||
return c.Client.Delete(ctx, key, opts...)
|
||||
}
|
||||
|
||||
func (c *Client) Watch(key string, opts ...client.OpOption) client.WatchChan {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), c.reqTimeout)
|
||||
defer cancel()
|
||||
return c.Client.Watch(ctx, key, opts...)
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package models
|
||||
|
||||
// 结点类型分组
|
||||
// 注册到 /cronsun/group/<id>
|
||||
type Group struct {
|
||||
ID string `json:"-"`
|
||||
Name string `json:"name"`
|
||||
|
||||
NodeIDs []string `json:"nids"`
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"encoding/hex"
|
||||
|
||||
"github.com/rogpeppe/fastuuid"
|
||||
)
|
||||
|
||||
var generator *fastuuid.Generator
|
||||
|
||||
func initID() (err error) {
|
||||
generator, err = fastuuid.NewGenerator()
|
||||
return
|
||||
}
|
||||
|
||||
func NextID() string {
|
||||
id := generator.Next()
|
||||
return hex.EncodeToString(id[:4])
|
||||
}
|
@ -1,16 +1,19 @@
|
||||
package models
|
||||
|
||||
// 需要执行的 cron cmd 命令
|
||||
// 注册到 /cronsun/cmd/<id>
|
||||
type Job struct {
|
||||
Id string `json:"id"`
|
||||
Group string `json:"group"`
|
||||
ID string `json:"-"`
|
||||
Name string `json:"name"`
|
||||
Command string `json:"command"`
|
||||
Group string `json:"group"`
|
||||
Command string `json:"cmd"`
|
||||
Rule *JobRule `json:"rule"`
|
||||
Status int `json:"status"`
|
||||
}
|
||||
|
||||
type JobRule struct {
|
||||
Timer []string `json:"timer"`
|
||||
Nodes []string `json:"nodes"`
|
||||
Groups []string `json:"groups"`
|
||||
ExcludeNodes []string `json:"excludeNodes"`
|
||||
Timer []string `json:"timer"`
|
||||
NodeIDs []string `json:"nids"`
|
||||
GroupIDs []string `json:"gids"`
|
||||
ExcludeNodeIDs []string `json:"exclude_bids"`
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
package models
|
||||
|
||||
// 执行 cron cmd 的进程
|
||||
// 注册到 /cronsun/proc/<id>
|
||||
type Node struct {
|
||||
Pid int `json:"pid"`
|
||||
IP string `json:"ip"`
|
||||
Port int `json:"port"`
|
||||
ID string `json:"-"` // ip
|
||||
PID string `json:"pid"` // 进程 pid
|
||||
}
|
||||
|
Loading…
Reference in new issue