mirror of https://github.com/shunfei/cronsun
检查用作key的id和名称,添加获取活动节点的接口
parent
d3e88e39ba
commit
d191e00b79
|
@ -1,6 +1,6 @@
|
|||
# for vscode extension[editorconfig]
|
||||
root = true
|
||||
|
||||
[*.{js,json,html}]
|
||||
[*.{js,json,html,vue}]
|
||||
indent_style = space
|
||||
indent_size = 2
|
|
@ -3,3 +3,4 @@ conf/files/*.json
|
|||
.tags_sorted_by_file
|
||||
bin/*/*server
|
||||
.DS_Store
|
||||
web/ui/node_modules
|
|
@ -7,6 +7,7 @@ import (
|
|||
|
||||
client "github.com/coreos/etcd/clientv3"
|
||||
|
||||
"strings"
|
||||
"sunteng/cronsun/conf"
|
||||
)
|
||||
|
||||
|
@ -103,3 +104,7 @@ func (c *Client) Watch(key string, opts ...client.OpOption) client.WatchChan {
|
|||
defer cancel()
|
||||
return c.Client.Watch(ctx, key, opts...)
|
||||
}
|
||||
|
||||
func IsValidAsKeyPath(s string) bool {
|
||||
return strings.IndexByte(s, '/') == -1
|
||||
}
|
||||
|
|
|
@ -6,8 +6,11 @@ var (
|
|||
ErrNotFound = errors.New("Record not found.")
|
||||
ErrValueMayChanged = errors.New("The value has been changed by others on this time.")
|
||||
|
||||
ErrEmptyJobName = errors.New("Name of job is empty.")
|
||||
ErrEmptyJobCommand = errors.New("Command of job is empty.")
|
||||
ErrEmptyJobName = errors.New("Name of job is empty.")
|
||||
ErrEmptyJobCommand = errors.New("Command of job is empty.")
|
||||
ErrIllegalJobId = errors.New("Invalid id that includes illegal characters such as '/'.")
|
||||
ErrIllegalJobGroupName = errors.New("Invalid job group name that includes illegal characters such as '/'.")
|
||||
|
||||
ErrEmptyNodeGroupName = errors.New("Name of node group is empty.")
|
||||
ErrIllegalNodeGroupId = errors.New("Invalid node group id that includes illegal characters such as '/'.")
|
||||
)
|
||||
|
|
|
@ -77,6 +77,11 @@ func (g *Group) Put(rev int64) (*client.PutResponse, error) {
|
|||
}
|
||||
|
||||
func (g *Group) Check() error {
|
||||
g.ID = strings.TrimSpace(g.ID)
|
||||
if !IsValidAsKeyPath(g.ID) {
|
||||
return ErrIllegalNodeGroupId
|
||||
}
|
||||
|
||||
g.Name = strings.TrimSpace(g.Name)
|
||||
if len(g.Name) == 0 {
|
||||
return ErrEmptyNodeGroupName
|
||||
|
|
|
@ -135,6 +135,11 @@ func (j *Job) Key() string {
|
|||
}
|
||||
|
||||
func (j *Job) Check() error {
|
||||
j.ID = strings.TrimSpace(j.ID)
|
||||
if !IsValidAsKeyPath(j.ID) {
|
||||
return ErrIllegalJobId
|
||||
}
|
||||
|
||||
j.Name = strings.TrimSpace(j.Name)
|
||||
if len(j.Name) == 0 {
|
||||
return ErrEmptyJobName
|
||||
|
@ -145,6 +150,10 @@ func (j *Job) Check() error {
|
|||
j.Group = DefaultJobGroup
|
||||
}
|
||||
|
||||
if !IsValidAsKeyPath(j.Group) {
|
||||
return ErrIllegalJobGroupName
|
||||
}
|
||||
|
||||
// 不修改 Command 的内容,简单判断是否为空
|
||||
if len(strings.TrimSpace(j.Command)) == 0 {
|
||||
return ErrEmptyJobCommand
|
||||
|
|
|
@ -60,3 +60,18 @@ func (n *Node) Exist() (pid int, err error) {
|
|||
|
||||
return -1, nil
|
||||
}
|
||||
|
||||
var procKeyLen = len(conf.Config.Proc)
|
||||
|
||||
func GetActivityNodeList() (ids []string, err error) {
|
||||
resp, err := DefalutClient.Get(conf.Config.Proc, client.WithPrefix(), client.WithKeysOnly())
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for _, n := range resp.Kvs {
|
||||
ids = append(ids, string(n.Key[procKeyLen:]))
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
|
11
web/node.go
11
web/node.go
|
@ -32,8 +32,6 @@ func (n *Node) UpdateGroup(w http.ResponseWriter, r *http.Request) {
|
|||
if len(g.ID) == 0 {
|
||||
successCode = http.StatusCreated
|
||||
g.ID = models.NextID()
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
if err = g.Check(); err != nil {
|
||||
|
@ -98,3 +96,12 @@ func (n *Node) DeleteGroup(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
outJSONWithCode(w, http.StatusNoContent, nil)
|
||||
}
|
||||
|
||||
func (n *Node) GetActivityNodeList(w http.ResponseWriter, r *http.Request) {
|
||||
ids, err := models.GetActivityNodeList()
|
||||
if err != nil {
|
||||
outJSONError(w, http.StatusInternalServerError, err.Error())
|
||||
return
|
||||
}
|
||||
outJSONWithCode(w, http.StatusOK, ids)
|
||||
}
|
||||
|
|
|
@ -32,6 +32,8 @@ func InitRouters() (s *http.Server, err error) {
|
|||
h = BaseHandler{Handle: jobHandler.DeleteJob}
|
||||
subrouter.Handle("/job/{group}-{id}", h).Methods("DELETE")
|
||||
|
||||
h = BaseHandler{Handle: nodeHandler.GetActivityNodeList}
|
||||
subrouter.Handle("/node/activitys", h).Methods("GET")
|
||||
// get node group list
|
||||
h = BaseHandler{Handle: nodeHandler.GetGroups}
|
||||
subrouter.Handle("/node/groups", h).Methods("GET")
|
||||
|
|
Loading…
Reference in New Issue