1
0
forked from x/icebergs

opt web.group

This commit is contained in:
shaoying 2020-04-20 22:30:58 +08:00
parent 83acf51f5a
commit b1fff2bb15
6 changed files with 244 additions and 118 deletions

View File

@ -187,6 +187,7 @@ var Index = &ice.Context{Name: "nfs", Help: "存储模块",
m.Push("engine", "dir") m.Push("engine", "dir")
m.Push("favor", "file") m.Push("favor", "file")
m.Push("id", kit.FmtSize(s.Size())) m.Push("id", kit.FmtSize(s.Size()))
m.Push("time", s.ModTime().Format(ice.ICE_TIME))
m.Push("type", strings.TrimPrefix(path.Ext(name), ".")) m.Push("type", strings.TrimPrefix(path.Ext(name), "."))
m.Push("name", path.Base(name)) m.Push("name", path.Base(name))
m.Push("text", name) m.Push("text", name)

View File

@ -502,16 +502,9 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
m.Load() m.Load()
m.Cmd(ice.WEB_SPIDE, "add", "self", kit.Select("http://:9020", m.Conf(ice.CLI_RUNTIME, "conf.ctx_self"))) m.Cmd(ice.WEB_SPIDE, "add", "self", kit.Select("http://:9020", m.Conf(ice.CLI_RUNTIME, "conf.ctx_self")))
if m.Richs(ice.WEB_SPIDE, nil, "dev", nil) == nil { m.Cmd(ice.WEB_SPIDE, "add", "dev", kit.Select("http://:9020", m.Conf(ice.CLI_RUNTIME, "conf.ctx_dev")))
m.Cmd(ice.WEB_SPIDE, "add", "dev", kit.Select("http://:9020", m.Conf(ice.CLI_RUNTIME, "conf.ctx_dev"))) m.Cmd(ice.WEB_SPIDE, "add", "shy", kit.Select("https://shylinux.com:443", m.Conf(ice.CLI_RUNTIME, "conf.ctx_shy")))
}
if m.Richs(ice.WEB_SPIDE, nil, "shy", nil) == nil {
m.Cmd(ice.WEB_SPIDE, "add", "shy", kit.Select("https://shylinux.com:443", m.Conf(ice.CLI_RUNTIME, "conf.ctx_shy")))
}
m.Rich(ice.WEB_SPACE, nil, kit.Dict(
kit.MDB_TYPE, ice.WEB_BETTER, kit.MDB_NAME, "tmux",
kit.MDB_TEXT, m.Conf(ice.CLI_RUNTIME, "boot.username"),
))
m.Watch(ice.SYSTEM_INIT, "web.code.git.repos", "volcanos", m.Conf(ice.WEB_SERVE, "meta.volcanos.path"), m.Watch(ice.SYSTEM_INIT, "web.code.git.repos", "volcanos", m.Conf(ice.WEB_SERVE, "meta.volcanos.path"),
m.Conf(ice.WEB_SERVE, "meta.volcanos.repos"), m.Conf(ice.WEB_SERVE, "meta.volcanos.branch")) m.Conf(ice.WEB_SERVE, "meta.volcanos.repos"), m.Conf(ice.WEB_SERVE, "meta.volcanos.branch"))
m.Conf(ice.WEB_FAVOR, "meta.template", favor_template) m.Conf(ice.WEB_FAVOR, "meta.template", favor_template)
@ -538,7 +531,6 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
m.Richs(ice.WEB_FAVOR, nil, "*", func(key string, val map[string]interface{}) { m.Richs(ice.WEB_FAVOR, nil, "*", func(key string, val map[string]interface{}) {
favor := kit.Format(kit.Value(val, "meta.name")) favor := kit.Format(kit.Value(val, "meta.name"))
wg.Add(1) wg.Add(1)
m.Info("routine %v", favor)
m.Gos(m, func(m *ice.Message) { m.Gos(m, func(m *ice.Message) {
m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) { m.Grows(ice.WEB_FAVOR, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
if favor == arg[0] || value["type"] == arg[0] || if favor == arg[0] || value["type"] == arg[0] ||
@ -546,7 +538,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
m.Push("pod", m.Option(ice.MSG_USERPOD)) m.Push("pod", m.Option(ice.MSG_USERPOD))
m.Push("engine", "favor") m.Push("engine", "favor")
m.Push("favor", favor) m.Push("favor", favor)
m.Push("", value, []string{"id", "type", "name", "text"}) m.Push("", value, []string{"id", "time", "type", "name", "text"})
} }
}) })
wg.Done() wg.Done()
@ -569,6 +561,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
m.Push("favor", val["story"]) m.Push("favor", val["story"])
m.Push("id", val["list"]) m.Push("id", val["list"])
m.Push("time", val["time"])
m.Push("type", val["scene"]) m.Push("type", val["scene"])
m.Push("name", val["story"]) m.Push("name", val["story"])
m.Push("text", val["count"]) m.Push("text", val["count"])
@ -592,6 +585,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
m.Push("favor", value["type"]) m.Push("favor", value["type"])
m.Push("id", value["share"]) m.Push("id", value["share"])
m.Push("time", value["time"])
m.Push("type", value["type"]) m.Push("type", value["type"])
m.Push("name", value["name"]) m.Push("name", value["name"])
m.Push("text", value["text"]) m.Push("text", value["text"])
@ -601,8 +595,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
}}, }},
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save(ice.WEB_SPIDE, ice.WEB_SERVE, ice.WEB_GROUP, ice.WEB_LABEL, m.Save(ice.WEB_SPIDE, ice.WEB_SERVE, ice.WEB_GROUP, ice.WEB_LABEL,
ice.WEB_FAVOR, ice.WEB_CACHE, ice.WEB_STORY, ice.WEB_SHARE, ice.WEB_FAVOR, ice.WEB_CACHE, ice.WEB_STORY, ice.WEB_SHARE)
)
m.Done() m.Done()
m.Richs(ice.WEB_SPACE, nil, "*", func(key string, value map[string]interface{}) { m.Richs(ice.WEB_SPACE, nil, "*", func(key string, value map[string]interface{}) {
@ -1237,7 +1230,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
m.Richs(ice.WEB_FAVOR, nil, favor, func(key string, value map[string]interface{}) { m.Richs(ice.WEB_FAVOR, nil, favor, func(key string, value map[string]interface{}) {
kit.Value(value, "meta.time", m.Time()) kit.Value(value, "meta.time", m.Time())
}) })
m.Log(ice.LOG_INSERT, "favor: %s index: %d name: %s text: %s", favor, index, arg[2], arg[3]) m.Log(ice.LOG_INSERT, "favor: %s index: %d name: %s text: %s", arg[0], index, arg[2], arg[3])
m.Echo("%d", index) m.Echo("%d", index)
// 分发数据 // 分发数据
@ -1806,7 +1799,7 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
} }
}}, }},
ice.WEB_ROUTE: {Name: "route name auto", Help: "路由", Meta: kit.Dict("detail", []string{"分组"}), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.WEB_ROUTE: {Name: "route name cmd auto", Help: "路由", Meta: kit.Dict("detail", []string{"分组"}), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 1 && arg[0] == "action" { if len(arg) > 1 && arg[0] == "action" {
switch arg[1] { switch arg[1] {
case "group", "分组": case "group", "分组":
@ -1824,10 +1817,10 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
rest = ls[1] rest = ls[1]
} }
} }
m.Richs(ice.WEB_SPACE, nil, target, func(key string, value map[string]interface{}) { m.Richs(ice.WEB_SPACE, nil, target, func(key string, val map[string]interface{}) {
if len(arg) > 1 { if len(arg) > 1 {
ls := []interface{}{ice.WEB_SPACE, value[kit.MDB_NAME]}
m.Call(false, func(res *ice.Message) *ice.Message { return res }) m.Call(false, func(res *ice.Message) *ice.Message { return res })
ls := []interface{}{ice.WEB_SPACE, val[kit.MDB_NAME]}
// 发送命令 // 发送命令
if rest != "" { if rest != "" {
ls = append(ls, ice.WEB_SPACE, rest) ls = append(ls, ice.WEB_SPACE, rest)
@ -1836,189 +1829,301 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
return return
} }
switch value[kit.MDB_TYPE] { switch val[kit.MDB_TYPE] {
case ice.WEB_SERVER: case ice.WEB_SERVER:
if value[kit.MDB_NAME] == m.Conf(ice.CLI_RUNTIME, "node.name") { if val[kit.MDB_NAME] == m.Conf(ice.CLI_RUNTIME, "node.name") {
// 避免循环 // 避免循环
return return
} }
// 远程查询 // 远程查询
m.Cmd(ice.WEB_SPACE, value[kit.MDB_NAME], ice.WEB_ROUTE).Table(func(index int, val map[string]string, head []string) { m.Cmd(ice.WEB_SPACE, val[kit.MDB_NAME], ice.WEB_ROUTE).Table(func(index int, value map[string]string, head []string) {
m.Push(kit.MDB_TYPE, val[kit.MDB_TYPE]) m.Push(kit.MDB_TYPE, value[kit.MDB_TYPE])
m.Push(kit.MDB_NAME, kit.Keys(value[kit.MDB_NAME], val[kit.MDB_NAME])) m.Push(kit.MDB_NAME, kit.Keys(val[kit.MDB_NAME], value[kit.MDB_NAME]))
}) })
fallthrough fallthrough
case ice.WEB_WORKER: case ice.WEB_WORKER:
// 本机查询 // 本机查询
m.Push(kit.MDB_TYPE, value[kit.MDB_TYPE]) m.Push(kit.MDB_TYPE, val[kit.MDB_TYPE])
m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) m.Push(kit.MDB_NAME, val[kit.MDB_NAME])
} }
}) })
}}, }},
ice.WEB_PROXY: {Name: "proxy", Help: "代理", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.WEB_PROXY: {Name: "proxy name cmd auto", Help: "代理", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Richs(ice.WEB_SPACE, nil, kit.Select(m.Conf(ice.WEB_FAVOR, "meta.proxy"), arg[0]), func(key string, value map[string]interface{}) { switch arg[0] {
case "add":
m.Rich(ice.WEB_SPACE, nil, kit.Dict(
kit.MDB_TYPE, ice.WEB_BETTER, kit.MDB_NAME, arg[1], kit.MDB_TEXT, arg[2],
))
m.Conf(ice.WEB_PROXY, kit.Keys("meta.better", arg[1]), arg[2])
m.Logs(ice.LOG_INSERT, "proxy", arg[1], "cb", arg[2])
return
}
m.Richs(ice.WEB_SPACE, nil, arg[0], func(key string, value map[string]interface{}) {
if value[kit.MDB_TYPE] == ice.WEB_BETTER { if value[kit.MDB_TYPE] == ice.WEB_BETTER {
switch value[kit.MDB_NAME] { arg[0] = m.Cmdx(m.Conf(ice.WEB_PROXY, kit.Keys("meta.better", arg[0])))
case "tmux": m.Logs(ice.LOG_SELECT, "proxy", value["name"], "space", arg[0])
m.Cmd("web.code.tmux.session").Table(func(index int, value map[string]string, head []string) {
if value["tag"] == "1" {
m.Log(ice.LOG_SELECT, "space: %s", value["session"])
arg[0] = value["session"]
}
})
}
} }
}) })
m.Cmdy(ice.WEB_ROUTE, arg[0], arg[1:]) m.Cmdy(ice.WEB_ROUTE, arg[0], arg[1:])
}}, }},
ice.WEB_GROUP: {Name: "group group name auto", Help: "分组", Meta: kit.Dict( ice.WEB_GROUP: {Name: "group group=auto name=auto auto", Help: "分组", Meta: kit.Dict(
"exports", []string{"grp", "group"}, "detail", []string{"标签", "退还"}, "exports", []string{"grp", "group"}, "detail", []string{"标签", "添加", "退还"},
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 1 && arg[0] == "action" { if len(arg) > 1 && arg[0] == "action" {
switch arg[1] { switch arg[1] {
case "label", "标签": case "label", "标签":
if m.Option("lab") != "" && m.Option("group") != "" { if m.Option(ice.EXPORT_LABEL) != "" && m.Option(cmd) != "" {
m.Cmdy(ice.WEB_LABEL, m.Option("lab"), "add", m.Option("group"), m.Option("name")) m.Cmdy(ice.WEB_LABEL, m.Option(ice.EXPORT_LABEL), "add", m.Option(cmd), m.Option(kit.MDB_NAME))
m.Option(ice.FIELD_RELOAD, "true")
}
case "add", "添加":
if m.Option(cmd) != "" && m.Option(kit.MDB_NAME) != "" {
m.Cmdy(cmd, m.Option(cmd), "add", m.Option(kit.MDB_NAME))
m.Option(ice.FIELD_RELOAD, "true")
} }
case "del", "退还": case "del", "退还":
if m.Option("group") != "" && m.Option("name") != "" { if m.Option(cmd) != "" && m.Option(kit.MDB_NAME) != "" {
m.Cmdy(ice.WEB_GROUP, m.Option("group"), "del", m.Option("name")) m.Cmdy(cmd, m.Option(cmd), "del", m.Option(kit.MDB_NAME))
m.Option(ice.FIELD_RELOAD, "true")
} }
case "prune", "清理":
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.MDB_NAME])
m.Option(ice.FIELD_RELOAD, "true")
}
})
})
case "clear", "清空":
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)
}
})
})
case "delete", "删除":
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")
})
} }
return return
} }
if len(arg) < 2 { if len(arg) < 3 {
// 分组列表 m.Richs(cmd, nil, kit.Select(kit.MDB_FOREACH, arg, 0), func(key string, value map[string]interface{}) {
m.Richs(cmd, nil, kit.Select("*", arg, 0), func(key string, value map[string]interface{}) {
if len(arg) < 1 { if len(arg) < 1 {
m.Push(key, value[kit.MDB_META]) // 一级列表
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 return
} }
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), "*", func(key string, value map[string]interface{}) { m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), kit.Select("*", arg, 1), func(key string, value map[string]interface{}) {
m.Push(key, value) if len(arg) < 2 {
// 二级列表
m.Option(ice.FIELD_DETAIL, "标签", "添加", "退还", "清理", "清空")
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_STATUS, kit.MDB_NAME})
return
}
// 分组详情
m.Option(ice.FIELD_DETAIL, "标签", "添加", "退还")
m.Push("detail", value)
}) })
}) })
m.Logs(ice.LOG_SELECT, cmd, m.Format(ice.MSG_APPEND)) if len(arg) < 1 {
m.Sort(cmd)
} else if len(arg) < 2 {
m.Sort(kit.MDB_NAME)
}
return return
} }
if m.Richs(cmd, nil, arg[0], nil) == nil { if m.Richs(cmd, nil, arg[0], nil) == nil {
// 添加分组 // 添加分组
n := m.Rich(cmd, nil, kit.Data(kit.MDB_SHORT, kit.MDB_NAME, cmd, arg[0])) m.Logs(ice.LOG_CREATE, cmd, m.Rich(cmd, nil, kit.Data(
m.Logs(ice.LOG_CREATE, cmd, n) kit.MDB_SHORT, kit.MDB_NAME, cmd, arg[0],
)))
} }
m.Richs(cmd, nil, arg[0], func(key string, value map[string]interface{}) { m.Richs(cmd, nil, arg[0], func(key string, value map[string]interface{}) {
if m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[1], func(key string, value map[string]interface{}) {
// 分组详情
m.Push("detail", value)
}) != nil {
return
}
switch arg[1] { switch arg[1] {
case "add": case "add": // 添加设备
if m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[2], func(key string, value map[string]interface{}) { if m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[2], func(key string, value map[string]interface{}) {
if value[kit.MDB_STATUS] == "void" { if value[kit.MDB_STATUS] == "void" {
value[kit.MDB_STATUS] = "free" value[kit.MDB_STATUS] = "free"
m.Logs(ice.LOG_MODIFY, cmd, arg[0], kit.MDB_NAME, arg[2], kit.MDB_STATUS, value[kit.MDB_STATUS])
} }
m.Logs(ice.LOG_MODIFY, cmd, key, kit.MDB_NAME, arg[2], kit.MDB_STATUS, value[kit.MDB_STATUS])
}) == nil { }) == nil {
m.Logs(ice.LOG_INSERT, cmd, key, kit.MDB_NAME, arg[2]) m.Logs(ice.LOG_INSERT, cmd, arg[0], kit.MDB_NAME, arg[2])
m.Rich(cmd, kit.Keys(kit.MDB_HASH, key), kit.Dict(kit.MDB_NAME, arg[2], kit.MDB_STATUS, "free")) m.Rich(cmd, kit.Keys(kit.MDB_HASH, key), kit.Dict(
kit.MDB_NAME, arg[2], kit.MDB_STATUS, "free",
))
} }
m.Echo(arg[0]) m.Echo(arg[0])
case "del": case "del": // 删除设备
m.Logs(ice.LOG_MODIFY, cmd, key, kit.MDB_NAME, arg[2], kit.MDB_STATUS, "void")
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[2], func(sub string, value map[string]interface{}) { m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[2], func(sub string, value map[string]interface{}) {
value[kit.MDB_STATUS] = "void" if value[kit.MDB_STATUS] == "free" {
value[kit.MDB_STATUS] = "void"
m.Logs(ice.LOG_MODIFY, cmd, arg[0], kit.MDB_NAME, arg[2], kit.MDB_STATUS, value[kit.MDB_STATUS])
m.Echo(arg[2])
}
}) })
case "get": case "get": // 分配设备
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), kit.Select("%", arg, 2), func(sub string, value map[string]interface{}) { m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), kit.Select("%", arg, 2), func(sub string, value map[string]interface{}) {
m.Logs(ice.LOG_MODIFY, cmd, key, kit.MDB_NAME, value[kit.MDB_NAME], kit.MDB_STATUS, "busy") if value[kit.MDB_STATUS] == "free" {
value[kit.MDB_STATUS] = "busy" value[kit.MDB_STATUS] = "busy"
m.Echo("%s", value[kit.MDB_NAME]) m.Logs(ice.LOG_MODIFY, cmd, arg[0], kit.MDB_NAME, arg[2], kit.MDB_STATUS, value[kit.MDB_STATUS])
m.Echo("%s", value[kit.MDB_NAME])
}
}) })
case "put": case "put": // 回收设备
m.Logs(ice.LOG_MODIFY, cmd, key, kit.MDB_NAME, arg[2], kit.MDB_STATUS, "free")
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[2], func(sub string, value map[string]interface{}) { m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[2], func(sub string, value map[string]interface{}) {
value[kit.MDB_STATUS] = "free" if value[kit.MDB_STATUS] == "busy" {
value[kit.MDB_STATUS] = "free"
m.Logs(ice.LOG_MODIFY, cmd, arg[0], kit.MDB_NAME, arg[2], kit.MDB_STATUS, value[kit.MDB_STATUS])
m.Echo("%s", value[kit.MDB_NAME])
}
}) })
default: default:
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), "*", func(key string, value map[string]interface{}) { m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[1], func(key string, value map[string]interface{}) {
// 执行命令 // 执行命令
m.Cmdy(ice.WEB_PROXY, value["name"], arg[1:]) m.Cmdy(ice.WEB_PROXY, value[kit.MDB_NAME], arg[2:])
}) })
} }
}) })
}}, }},
ice.WEB_LABEL: {Name: "label label name auto", Help: "标签", Meta: kit.Dict( ice.WEB_LABEL: {Name: "label label=auto name=auto auto", Help: "标签", Meta: kit.Dict(
"exports", []string{"lab", "label"}, "detail", []string{"归还"}, "exports", []string{"lab", "label"}, "detail", []string{"归还"},
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 1 && arg[0] == "action" { if len(arg) > 1 && arg[0] == "action" {
switch arg[1] { switch arg[1] {
case "del", "归还": case "add", "添加":
if m.Option("label") != "" && m.Option("name") != "" { if m.Option(cmd) != "" && m.Option(kit.MDB_GROUP) != "" && m.Option(kit.MDB_NAME) != "" {
m.Cmdy(ice.WEB_LABEL, m.Option("label"), "del", m.Option("name")) m.Cmdy(cmd, m.Option(cmd), "add", m.Option(kit.MDB_GROUP), m.Option(kit.MDB_NAME))
m.Option(ice.FIELD_RELOAD, "true")
} }
case "del", "退还":
if m.Option(cmd) != "" && m.Option(kit.MDB_GROUP) != "" && m.Option(kit.MDB_NAME) != "" {
m.Cmdy(cmd, m.Option(cmd), "del", m.Option(kit.MDB_GROUP), m.Option(kit.MDB_NAME))
m.Option(ice.FIELD_RELOAD, "true")
}
case "prune", "清理":
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.MDB_GROUP], value[kit.MDB_NAME])
m.Option(ice.FIELD_RELOAD, "true")
}
})
})
case "clear", "清空":
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)
}
})
})
case "delete", "删除":
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")
})
} }
return return
} }
if len(arg) < 3 { if len(arg) < 3 {
m.Richs(cmd, nil, kit.Select("*", arg, 0), func(key string, value map[string]interface{}) { m.Richs(cmd, nil, kit.Select("*", arg, 0), func(key string, value map[string]interface{}) {
if len(arg) == 0 { if len(arg) < 1 {
// 分组列表 // 一级列表
m.Push(key, value[kit.MDB_META]) 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 return
} }
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), kit.Select("*", arg, 1), func(key string, value map[string]interface{}) { m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), kit.Select("*", arg, 1), func(key string, value map[string]interface{}) {
if len(arg) == 1 { if len(arg) < 2 {
// 设备列表 // 二级列表
m.Push(key, value) m.Option(ice.FIELD_DETAIL, "添加", "退还", "清理", "清空")
m.Push(key, value, []string{kit.MDB_TIME, kit.MDB_GROUP, kit.MDB_STATUS, kit.MDB_NAME})
return return
} }
// 设备详情 // 分组详情
m.Option(ice.FIELD_DETAIL, "添加", "退还")
m.Push("detail", value) m.Push("detail", value)
}) })
}) })
m.Logs(ice.LOG_SELECT, cmd, m.Format(ice.MSG_APPEND)) if len(arg) < 1 {
m.Sort(cmd)
} else if len(arg) < 2 {
m.Sort(kit.MDB_NAME)
}
return return
} }
if m.Richs(cmd, nil, arg[0], nil) == nil { 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.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{}) { m.Richs(cmd, nil, arg[0], func(key string, value map[string]interface{}) {
switch arg[1] { switch arg[1] {
case "add": case "add": // 添加设备
if pod := m.Cmdx(ice.WEB_GROUP, arg[2], "get", arg[3:]); pod != "" { if pod := m.Cmdx(ice.WEB_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 m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), pod, func(key string, value map[string]interface{}) {
if value[kit.MDB_STATUS] == "void" { if value[kit.MDB_STATUS] == "void" {
// 更新设备
value[kit.MDB_STATUS] = "free" value[kit.MDB_STATUS] = "free"
m.Logs(ice.LOG_MODIFY, cmd, key, kit.MDB_NAME, pod, kit.MDB_STATUS, value[kit.MDB_STATUS]) m.Logs(ice.LOG_MODIFY, cmd, arg[0], kit.MDB_NAME, pod, kit.MDB_STATUS, value[kit.MDB_STATUS])
} }
}) == nil { }) == nil {
// 获取设备 m.Logs(ice.LOG_INSERT, cmd, arg[0], kit.MDB_NAME, pod)
m.Logs(ice.LOG_INSERT, cmd, key, kit.MDB_NAME, pod) m.Rich(cmd, kit.Keys(kit.MDB_HASH, key), kit.Dict(
m.Rich(cmd, kit.Keys(kit.MDB_HASH, key), kit.Dict(kit.MDB_NAME, pod, "group", arg[2], kit.MDB_STATUS, "free")) kit.MDB_NAME, pod, kit.MDB_GROUP, arg[2], kit.MDB_STATUS, "free",
))
} }
m.Echo(arg[0])
} }
m.Echo(arg[0]) case "del": // 删除设备
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[3], func(sub string, value map[string]interface{}) {
case "del": if value[kit.MDB_STATUS] == "free" {
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[2], func(sub string, value map[string]interface{}) { value[kit.MDB_STATUS] = "void"
// 归还设备 m.Logs(ice.LOG_MODIFY, cmd, arg[0], kit.MDB_NAME, arg[3], kit.MDB_STATUS, "void")
m.Cmdx(ice.WEB_GROUP, value["group"], "put", arg[2]) m.Cmdx(ice.WEB_GROUP, value[kit.MDB_GROUP], "put", arg[3])
m.Logs(ice.LOG_MODIFY, cmd, key, kit.MDB_NAME, arg[2], kit.MDB_STATUS, "void") m.Echo(arg[3])
value[kit.MDB_STATUS] = "void" }
m.Echo(arg[2])
}) })
default: default:
wg := &sync.WaitGroup{} wg := &sync.WaitGroup{}
@ -2026,8 +2131,8 @@ var Index = &ice.Context{Name: "web", Help: "网络模块",
m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[1], func(key string, value map[string]interface{}) { m.Richs(cmd, kit.Keys(kit.MDB_HASH, key), arg[1], func(key string, value map[string]interface{}) {
wg.Add(1) wg.Add(1)
// 远程命令 // 远程命令
m.Option("user.pod", value["name"]) m.Option(ice.MSG_USERPOD, value[kit.MDB_NAME])
m.Cmd(ice.WEB_PROXY, value["name"], arg[2:]).Call(false, func(res *ice.Message) *ice.Message { m.Cmd(ice.WEB_PROXY, value[kit.MDB_NAME], arg[2:]).Call(false, func(res *ice.Message) *ice.Message {
if wg.Done(); res != nil && m != nil { if wg.Done(); res != nil && m != nil {
m.Copy(res) m.Copy(res)
} }

View File

@ -42,6 +42,12 @@ const ( // MSG
MSG_RIVER = "sess.river" MSG_RIVER = "sess.river"
MSG_STORM = "sess.storm" MSG_STORM = "sess.storm"
FIELD_RELOAD = "field.reload"
FIELD_DETAIL = "field.detail"
EXPORT_LABEL = "lab"
EXPORT_GROUP = "grp"
) )
const ( // CTX const ( // CTX

View File

@ -584,19 +584,22 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
}) })
}) })
default: default:
if len(arg) == 2 { if len(arg) < 4 {
m.Richs(cmd, nil, "*", func(key string, value map[string]interface{}) { m.Richs(cmd, nil, kit.Select(kit.MDB_FOREACH, arg, 2), func(key string, val map[string]interface{}) {
m.Push(key, value) if len(arg) < 3 {
}) m.Push(key, val[kit.MDB_META], []string{kit.MDB_TIME, kit.MDB_NAME, kit.MDB_COUNT})
break return
} }
if len(arg) == 3 { m.Grows(cmd, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
m.Richs(cmd, nil, "*", func(key string, value map[string]interface{}) { m.Push("", value, []string{kit.MDB_TIME})
m.Push(key, value) m.Push("group", arg[2])
m.Push("", value, []string{kit.MDB_NAME, kit.MDB_TEXT})
})
}) })
break break
} }
m.Cmdy(ice.WEB_LABEL, arg[0], arg[1], "web.chat.search", "get", arg[2:]) m.Cmdy(ice.WEB_LABEL, arg[0], arg[1], "web.chat.search", "get", arg[2:])
m.Sort("time", "time_r")
} }
}}, }},
"commend": {Name: "commend label pod engine work auto", Help: "推荐引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { "commend": {Name: "commend label pod engine work auto", Help: "推荐引擎", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
@ -626,11 +629,12 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
wg.Done() wg.Done()
}) })
}) })
m.Sort("time", "time_r")
wg.Wait() wg.Wait()
case "set": case "set":
if arg[1] != "" { if arg[1] != "" {
// m.Cmdy(ice.WEB_SPACE, arg[1], "web.chat.commend", "set", "", arg[2:]) m.Cmdy(ice.WEB_SPACE, arg[1], "web.chat.commend", "set", "", arg[2:])
// break break
} }
if m.Richs(cmd, "meta.user", m.Option(ice.MSG_USERNAME), nil) == nil { if m.Richs(cmd, "meta.user", m.Option(ice.MSG_USERNAME), nil) == nil {
@ -673,8 +677,8 @@ var Index = &ice.Context{Name: "chat", Help: "聊天中心",
}) })
break break
} }
// m.Cmdy(ice.WEB_LABEL, arg[0], arg[1], "web.chat.commend", "get", arg[2:]) m.Cmdy(ice.WEB_LABEL, arg[0], arg[1], "web.chat.commend", "get", arg[2:])
m.Cmdy("web.chat.commend", "get", arg[2:]) // m.Cmdy("web.chat.commend", "get", arg[2:])
} }
}}, }},
}, },

View File

@ -42,6 +42,15 @@ var Index = &ice.Context{Name: "tmux", Help: "工作台",
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(ice.WEB_PROXY, "add", "tmux", m.AddCmd(&ice.Command{Name: "proxy", Help: "代理", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd("session").Table(func(index int, value map[string]string, head []string) {
if value["tag"] == "1" {
m.Echo(value["session"])
}
})
}}))
}},
ice.CODE_INSTALL: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { ice.CODE_INSTALL: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option("cmd_dir", m.Conf("install", "meta.path")) m.Option("cmd_dir", m.Conf("install", "meta.path"))
m.Cmd(ice.CLI_SYSTEM, "git", "clone", "https://github.com/tmux/tmux") m.Cmd(ice.CLI_SYSTEM, "git", "clone", "https://github.com/tmux/tmux")

View File

@ -840,8 +840,9 @@ func (m *Message) Info(str string, arg ...interface{}) *Message {
} }
func (m *Message) Warn(err bool, str string, arg ...interface{}) bool { func (m *Message) Warn(err bool, str string, arg ...interface{}) bool {
if err { if err {
_, file, line, _ := runtime.Caller(1)
m.Echo("warn: ").Echo(str, arg...) m.Echo("warn: ").Echo(str, arg...)
return m.Log(LOG_WARN, str, arg...) != nil return m.Log(LOG_WARN, "%s:%d %s", file, line, fmt.Sprintf(str, arg...)) != nil
} }
return false return false
} }