1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-25 17:18:05 +08:00
icebergs/misc/trash/web/_label.go
2020-10-08 07:57:42 +08:00

189 lines
6.4 KiB
Go

package web
import (
"github.com/shylinux/icebergs"
"github.com/shylinux/toolkits"
"sync"
)
func _label_add(m *ice.Message, cmd string) {
if m.Option(cmd) != "" && m.Option(kit.SSH_GROUP) != "" && m.Option(kit.MDB_NAME) != "" {
m.Cmdy(cmd, m.Option(cmd), "add", m.Option(kit.SSH_GROUP), m.Option(kit.MDB_NAME))
m.Option(ice.FIELD_RELOAD, "true")
}
}
func _label_del(m *ice.Message, cmd string) {
if m.Option(cmd) != "" && m.Option(kit.SSH_GROUP) != "" && m.Option(kit.MDB_NAME) != "" {
m.Cmdy(cmd, m.Option(cmd), "del", m.Option(kit.SSH_GROUP), m.Option(kit.MDB_NAME))
m.Option(ice.FIELD_RELOAD, "true")
}
}
func _label_prune(m *ice.Message, cmd string) {
m.Richs(cmd, nil, m.Option(cmd), func(key string, value map[string]interface{}) {
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), kit.MDB_FOREACH, func(sub string, value map[string]interface{}) {
if value[kit.MDB_STATUS] != "busy" {
m.Cmdy(cmd, m.Option(cmd), "del", value[kit.SSH_GROUP], value[kit.MDB_NAME])
m.Option(ice.FIELD_RELOAD, "true")
}
})
})
}
func _label_clear(m *ice.Message, cmd string) {
m.Richs(cmd, nil, m.Option(cmd), func(key string, value map[string]interface{}) {
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), kit.MDB_FOREACH, func(sub string, value map[string]interface{}) {
if value[kit.MDB_STATUS] == "void" {
last := m.Conf(cmd, kit.Keys(kit.MDB_HASH, key, kit.MDB_HASH, sub))
m.Logs(ice.LOG_DELETE, cmd, m.Option(cmd), kit.MDB_NAME, value[kit.MDB_NAME], kit.MDB_VALUE, last)
m.Conf(cmd, kit.Keys(kit.MDB_HASH, key, kit.MDB_HASH, sub), "")
m.Option(ice.FIELD_RELOAD, "true")
m.Echo(last)
}
})
})
}
func _label_delete(m *ice.Message, cmd string) {
m.Richs(cmd, nil, m.Option(cmd), func(key string, value map[string]interface{}) {
m.Echo(m.Conf(cmd, kit.Keys(kit.MDB_HASH, key)))
m.Logs(ice.LOG_REMOVE, cmd, m.Option(cmd), kit.MDB_VALUE, m.Conf(cmd, kit.Keys(kit.MDB_HASH, key)))
m.Conf(cmd, kit.Keys(kit.MDB_HASH, key), "")
m.Option(ice.FIELD_RELOAD, "true")
})
}
func _label_select(m *ice.Message, cmd string, arg ...string) {
m.Richs(cmd, nil, kit.Select("*", arg, 0), func(key string, value map[string]interface{}) {
if len(arg) < 1 {
// 一级列表
m.Option(ice.FIELD_DETAIL, "清理", "清空", "删除")
value = value[kit.MDB_META].(map[string]interface{})
m.Push(key, value, []string{kit.MDB_TIME})
status := map[string]int{}
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
status[kit.Format(value[kit.MDB_STATUS])]++
})
m.Push("count", kit.Format("%d/%d/%d", status["busy"], status["free"], status["void"]))
m.Push(key, value, []string{cmd})
return
}
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), kit.Select("*", arg, 1), func(key string, value map[string]interface{}) {
if len(arg) < 2 {
// 二级列表
m.Option(ice.FIELD_DETAIL, "添加", "退还", "清理", "清空")
m.Push(key, value, []string{kit.MDB_TIME, kit.SSH_GROUP, kit.MDB_STATUS, kit.MDB_NAME})
return
}
// 分组详情
m.Option(ice.FIELD_DETAIL, "添加", "退还")
m.Push("detail", value)
})
})
if len(arg) < 1 {
m.Sort(cmd)
} else if len(arg) < 2 {
m.Sort(kit.MDB_NAME)
}
}
func _label_create(m *ice.Message, cmd string, key string, arg ...string) {
if pod := m.Cmdx(GROUP, arg[2], "get", arg[3:]); pod != "" {
if m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), pod, func(key string, value map[string]interface{}) {
if value[kit.MDB_STATUS] == "void" {
value[kit.MDB_STATUS] = "free"
m.Logs(ice.LOG_MODIFY, cmd, arg[0], kit.MDB_NAME, pod, kit.MDB_STATUS, value[kit.MDB_STATUS])
}
}) == nil {
m.Logs(ice.LOG_INSERT, cmd, arg[0], kit.MDB_NAME, pod)
m.Rich(cmd, kit.Keys(kit.MDB_HASH, key), kit.Dict(
kit.MDB_NAME, pod, kit.SSH_GROUP, arg[2], kit.MDB_STATUS, "free",
))
}
m.Echo(arg[0])
}
}
func _label_remove(m *ice.Message, cmd string, key string, arg ...string) {
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[3], func(sub string, value map[string]interface{}) {
if value[kit.MDB_STATUS] == "free" {
value[kit.MDB_STATUS] = "void"
m.Logs(ice.LOG_MODIFY, cmd, arg[0], kit.MDB_NAME, arg[3], kit.MDB_STATUS, "void")
m.Cmdx(GROUP, value[kit.SSH_GROUP], "put", arg[3])
m.Echo(arg[3])
}
})
}
func _label_remote(m *ice.Message, cmd string, key string, arg ...string) {
wg := &sync.WaitGroup{}
m.Option("_async", "true")
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[1], func(key string, value map[string]interface{}) {
wg.Add(1)
m.Option(ice.MSG_USERPOD, value[kit.MDB_NAME])
m.Cmd(SPACE, value[kit.MDB_NAME], arg[2:]).Call(false, func(res *ice.Message) *ice.Message {
if wg.Done(); res != nil && m != nil {
m.Copy(res)
}
return nil
})
})
wg.Wait()
}
const LABEL = "label"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
LABEL: {Name: "label", Help: "标签", Value: kit.Data(kit.MDB_SHORT, "label")},
},
Commands: map[string]*ice.Command{
LABEL: {Name: "label label=auto name=auto auto", Help: "标签", Meta: kit.Dict(
"exports", []string{"lab", "label"}, "detail", []string{"归还"},
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 1 && arg[0] == "action" {
switch arg[1] {
case "add", "添加":
_label_add(m, cmd)
case "del", "退还":
_label_del(m, cmd)
case "prune", "清理":
_label_prune(m, cmd)
case "clear", "清空":
_label_clear(m, cmd)
case "delete", "删除":
_label_delete(m, cmd)
}
return
}
if len(arg) < 3 {
// 查询分组
_label_select(m, cmd, arg...)
return
}
if m.Richs(cmd, nil, arg[0], nil) == nil {
// 添加分组
m.Logs(ice.LOG_CREATE, cmd, m.Rich(cmd, nil, kit.Data(
kit.MDB_SHORT, kit.MDB_NAME, cmd, arg[0],
)))
}
m.Richs(cmd, nil, arg[0], func(key string, value map[string]interface{}) {
switch arg[1] {
case "add": // 添加设备
_label_create(m, cmd, key, arg...)
case "del": // 删除设备
_label_remove(m, cmd, key, arg...)
default: // 远程命令
if arg[0] == "route" {
m.Cmd(ROUTE).Table(func(index int, value map[string]string, field []string) {
m.Rich(cmd, kit.Keys(kit.MDB_HASH, key), kit.Dict(
kit.MDB_NAME, value["name"], kit.SSH_GROUP, arg[0], kit.MDB_STATUS, "free",
))
})
}
_label_remote(m, cmd, key, arg...)
}
})
}},
}}, nil)
}