forked from x/icebergs
128 lines
4.5 KiB
Go
128 lines
4.5 KiB
Go
package web
|
|
|
|
import (
|
|
ice "shylinux.com/x/icebergs"
|
|
"shylinux.com/x/icebergs/base/aaa"
|
|
"shylinux.com/x/icebergs/base/cli"
|
|
"shylinux.com/x/icebergs/base/ctx"
|
|
"shylinux.com/x/icebergs/base/lex"
|
|
"shylinux.com/x/icebergs/base/mdb"
|
|
"shylinux.com/x/icebergs/base/tcp"
|
|
kit "shylinux.com/x/toolkits"
|
|
)
|
|
|
|
func _route_travel(m *ice.Message, route string) {
|
|
m.Richs(SPACE, nil, mdb.FOREACH, func(key string, val map[string]interface{}) {
|
|
switch val[mdb.TYPE] {
|
|
case SERVER: // 远程查询
|
|
if val[mdb.NAME] == ice.Info.NodeName {
|
|
return // 避免循环
|
|
}
|
|
|
|
m.Cmd(SPACE, val[mdb.NAME], ROUTE).Table(func(index int, value map[string]string, head []string) {
|
|
m.Push(mdb.TYPE, value[mdb.TYPE])
|
|
m.Push(ROUTE, kit.Keys(val[mdb.NAME], value[ROUTE]))
|
|
})
|
|
|
|
fallthrough
|
|
case WORKER: // 本机查询
|
|
m.Push(mdb.TYPE, val[mdb.TYPE])
|
|
m.Push(ROUTE, val[mdb.NAME])
|
|
}
|
|
})
|
|
}
|
|
func _route_list(m *ice.Message) {
|
|
m.Table(func(index int, value map[string]string, field []string) {
|
|
m.PushAnchor(value[ROUTE], _space_link(m, kit.Keys(m.Option(ice.MSG_USERPOD), value[ROUTE])))
|
|
|
|
switch value[mdb.TYPE] {
|
|
case SERVER:
|
|
m.PushButton(tcp.START)
|
|
case WORKER:
|
|
fallthrough
|
|
default:
|
|
m.PushButton("")
|
|
}
|
|
})
|
|
|
|
// 网卡信息
|
|
u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
|
|
m.Cmd(tcp.HOST).Table(func(index int, value map[string]string, head []string) {
|
|
m.Push(mdb.TYPE, MYSELF)
|
|
m.Push(ROUTE, ice.Info.NodeName)
|
|
m.PushAnchor(value[aaa.IP], kit.Format("%s://%s:%s", u.Scheme, value[aaa.IP], u.Port()))
|
|
m.PushButton(tcp.START)
|
|
})
|
|
|
|
// 本机信息
|
|
m.Push(mdb.TYPE, MYSELF)
|
|
m.Push(ROUTE, ice.Info.NodeName)
|
|
m.PushAnchor(tcp.LOCALHOST, kit.Format("%s://%s:%s", u.Scheme, tcp.LOCALHOST, u.Port()))
|
|
m.PushButton(tcp.START)
|
|
|
|
m.Sort(ROUTE)
|
|
}
|
|
|
|
const ROUTE = "route"
|
|
|
|
func init() {
|
|
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
|
ROUTE: {Name: ROUTE, Help: "路由器", Value: kit.Data(mdb.SHORT, ROUTE)},
|
|
}, Commands: map[string]*ice.Command{
|
|
ROUTE: {Name: "route route ctx cmd auto invite spide", Help: "路由器", Action: map[string]*ice.Action{
|
|
aaa.INVITE: {Name: "invite", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
|
m.Cmdy(SPACE, m.Option(ROUTE), SPACE, aaa.INVITE, arg)
|
|
m.ProcessInner()
|
|
}},
|
|
cli.START: {Name: "start name repos template", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
|
m.Cmdy(SPACE, m.Option(ROUTE), DREAM, tcp.START, arg)
|
|
m.ProcessInner()
|
|
}},
|
|
ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
|
m.Cmdy(SPACE, m.Option(ROUTE), kit.Keys(m.Option(ice.CTX), m.Option(ice.CMD)), arg)
|
|
}},
|
|
ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
|
m.Cmdy(SPACE, m.Option(ROUTE), arg)
|
|
}},
|
|
SPIDE: {Name: "spide", Help: "架构图", Hand: func(m *ice.Message, arg ...string) {
|
|
if m.Option(ROUTE) == "" { // 路由列表 route
|
|
m.Cmdy(ROUTE).Cut(ROUTE)
|
|
m.Display("/plugin/story/spide.js?prefix=spide", lex.SPLIT, ice.PT)
|
|
|
|
} else if m.Option(ctx.CONTEXT) == "" { // 模块列表 context
|
|
m.Cmdy(SPACE, m.Option(ROUTE), ctx.CONTEXT, ice.ICE, ctx.CONTEXT).Cut(mdb.NAME).RenameAppend(mdb.NAME, ctx.CONTEXT)
|
|
m.Option(lex.SPLIT, ice.PT)
|
|
|
|
} else if m.Option(mdb.NAME) == "" { // 命令列表 name
|
|
m.Cmdy(SPACE, m.Option(ROUTE), ctx.CONTEXT, SPIDE, "", m.Option(ctx.CONTEXT), m.Option(ctx.CONTEXT)).Cut(mdb.NAME)
|
|
|
|
} else { // 命令详情 index name help meta list
|
|
m.Cmdy(SPACE, m.Option(ROUTE), ctx.CONTEXT, SPIDE, "", m.Option(ctx.CONTEXT), m.Option(mdb.NAME))
|
|
}
|
|
}},
|
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
|
if len(arg) == 0 || arg[0] == "" { // 路由列表
|
|
if _route_travel(m, kit.Select("", arg, 0)); m.W != nil {
|
|
_route_list(m)
|
|
}
|
|
|
|
} else if len(arg) == 1 || arg[1] == "" { // 模块列表
|
|
m.Cmd(SPACE, arg[0], ctx.CONTEXT, ice.ICE).Table(func(index int, value map[string]string, head []string) {
|
|
m.Push(ice.CTX, kit.Keys(value["ups"], value[mdb.NAME]))
|
|
m.Push("", value, kit.List(ice.CTX_STATUS, ice.CTX_STREAM, mdb.HELP))
|
|
})
|
|
|
|
} else if len(arg) == 2 || arg[2] == "" { // 命令列表
|
|
m.Cmd(SPACE, arg[0], ctx.CONTEXT, arg[1], ctx.COMMAND).Table(func(index int, value map[string]string, head []string) {
|
|
m.Push(ice.CMD, value[mdb.KEY])
|
|
m.Push("", value, kit.List(mdb.NAME, mdb.HELP))
|
|
})
|
|
|
|
} else { // 命令详情
|
|
m.Cmdy(SPACE, arg[0], ctx.CONTEXT, arg[1], ctx.COMMAND, arg[2])
|
|
m.ProcessField(ctx.ACTION, ctx.COMMAND)
|
|
}
|
|
}},
|
|
}})
|
|
}
|