forked from x/icebergs
opt web.route
This commit is contained in:
parent
eba92ecf12
commit
935621186b
@ -241,8 +241,16 @@ func init() {
|
||||
kit.For(_path_split(os.Getenv(PATH)), func(p string) { m.Push(nfs.PATH, p) })
|
||||
}},
|
||||
"chain": {Hand: func(m *ice.Message, arg ...string) { m.Echo(m.FormatChain()) }},
|
||||
"upgrade": {Hand: func(m *ice.Message, arg ...string) { m.Cmdy("web.code.upgrade") }},
|
||||
RESTART: {Hand: func(m *ice.Message, arg ...string) { m.Cmd(ice.EXIT, 1) }},
|
||||
"upgrade": {Hand: func(m *ice.Message, arg ...string) {
|
||||
if nfs.Exists(m, ".git") {
|
||||
m.Cmdy("web.code.compile")
|
||||
} else {
|
||||
m.Cmdy("web.code.upgrade")
|
||||
}
|
||||
}},
|
||||
RESTART: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Go(func() { m.Sleep("30ms", ice.EXIT, 1) })
|
||||
}},
|
||||
aaa.ROLE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(aaa.ROLE, func(value ice.Maps) { m.Push(mdb.KEY, kit.Keys(value[aaa.ROLE], value[mdb.ZONE], value[mdb.KEY])) })
|
||||
ctx.DisplayStorySpide(m.Options(nfs.DIR_ROOT, "ice."), mdb.FIELD, mdb.KEY, lex.SPLIT, nfs.PT)
|
||||
|
@ -156,16 +156,6 @@ func init() {
|
||||
SYSTEM: {Name: "system cmd", Help: "系统命令", Actions: ice.MergeActions(ice.Actions{
|
||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if runtime.GOOS == DARWIN && tcp.IsLocalHost(m, m.Option(ice.MSG_USERIP)) {
|
||||
if mdb.IsSearchPreview(m, arg, nil) {
|
||||
return
|
||||
list := map[string]bool{"Terminal.app": true, "Docker.app": true, "Google Chrome.app": true}
|
||||
for _, p := range strings.Split(m.Cmdx("", nfs.SH, "-c", `ps aux|grep /Applications/|grep -v Cache|grep -v Helper|grep -v Widget|grep -v Extension|grep -v Chrome|grep -v com.app|grep -v grep|grep -o "[^/]*.app"|sort|uniq`), lex.NL) {
|
||||
list[p] = true
|
||||
}
|
||||
for p := range list {
|
||||
m.PushSearch(mdb.TYPE, OPENS, mdb.TEXT, p)
|
||||
}
|
||||
}
|
||||
if arg[0] == m.CommandKey() && arg[1] == OPENS {
|
||||
for _, p := range []string{"/Applications", "/System/Applications", "/System/Applications/Utilities"} {
|
||||
m.Cmd(nfs.DIR, p, mdb.NAME, func(value ice.Maps) { m.PushSearch(mdb.TEXT, path.Join(p, value[mdb.NAME]), value) })
|
||||
|
@ -76,7 +76,7 @@ func init() {
|
||||
}).Cmd(nfs.SAVE, nfs.TAGS, m.Result())
|
||||
}},
|
||||
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] != "" {
|
||||
if len(arg) > 0 && arg[0] != "" && arg[0] != ice.EXIT {
|
||||
m.Cmdy(arg).Search(arg[0], func(key string, cmd *ice.Command) {
|
||||
m.Cut(kit.Format(kit.Value(cmd.List, kit.Format("%d.name", len(arg)-1))))
|
||||
})
|
||||
|
@ -203,6 +203,7 @@ func HashSelect(m *ice.Message, arg ...string) *ice.Message {
|
||||
m.Fields(len(kit.Slice(arg, 0, 1)), HashField(m))
|
||||
}
|
||||
m.Cmdy(SELECT, m.PrefixKey(), "", HASH, HashShort(m), arg, logs.FileLineMeta(-1))
|
||||
kit.If(Config(m, SORT), func(sort string) { m.Sort(sort) })
|
||||
if m.PushAction(Config(m, ACTION), REMOVE); !m.FieldsIsDetail() {
|
||||
return m.StatusTimeCount()
|
||||
}
|
||||
|
@ -125,6 +125,7 @@ const (
|
||||
NEXT = "next"
|
||||
PREV = "prev"
|
||||
|
||||
SORT = "sort"
|
||||
JSON = "json"
|
||||
CSV = "csv"
|
||||
SUB = "sub"
|
||||
|
@ -16,13 +16,15 @@ func init() {
|
||||
return nil
|
||||
})
|
||||
}
|
||||
func IsSearchPreview(m *ice.Message, arg []string, cb func() []string) bool {
|
||||
func IsSearchPreview(m *ice.Message, arg []string, cb ...func() []string) bool {
|
||||
if arg[0] == FOREACH && arg[1] == "" {
|
||||
for _, cb := range cb {
|
||||
if cb != nil {
|
||||
if args := cb(); len(args) > 0 {
|
||||
m.PushSearch(TYPE, kit.Select("", args, 0), NAME, kit.Select("", args, 1), TEXT, kit.Select("", args, 2))
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
@ -144,6 +144,7 @@ const (
|
||||
USR_LOCAL_WORK = ice.USR_LOCAL_WORK
|
||||
SRC_DOCUMENT = ice.SRC_DOCUMENT
|
||||
REQUIRE = "/require/"
|
||||
PATHNAME = "pathname"
|
||||
|
||||
TYPE_ALL = "all"
|
||||
TYPE_BIN = "bin"
|
||||
|
@ -57,7 +57,7 @@ func init() {
|
||||
mdb.HashCreate(m, mdb.TYPE, m.ActionKey(), m.OptionSimple(mdb.NAME, mdb.TEXT))
|
||||
}},
|
||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.IsSearchPreview(m, arg, nil) {
|
||||
if mdb.IsSearchPreview(m, arg) {
|
||||
ip := m.Cmdv(HOST, GATEWAY, aaa.IP)
|
||||
m.PushSearch(mdb.TYPE, GATEWAY, mdb.NAME, ip, mdb.TEXT, "http://"+ip)
|
||||
}
|
||||
@ -86,8 +86,6 @@ func init() {
|
||||
})
|
||||
}
|
||||
|
||||
func Address(host, port string) string { return fmt.Sprintf("%s:%s", host, port) }
|
||||
func IsLocalHost(m *ice.Message, ip string) bool { return m.Cmdx(HOST, ISLOCAL, ip) == ice.OK }
|
||||
func PublishLocalhost(m *ice.Message, url string) string { return m.Cmdx(HOST, PUBLISH, url) }
|
||||
func Address(host, port string) string {
|
||||
return fmt.Sprintf("%s:%s", host, port)
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
BROAD: {Name: "broad hash auto", Help: "广播", Actions: ice.MergeActions(ice.Actions{
|
||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.IsSearchPreview(m, arg, nil) {
|
||||
if mdb.IsSearchPreview(m, arg) {
|
||||
host, domain := m.Cmdv(tcp.HOST, aaa.IP), UserWeb(m).Hostname()
|
||||
m.Cmds("", func(value ice.Maps) {
|
||||
switch kit.If(value[tcp.HOST] == host, func() { value[tcp.HOST] = domain }); value[mdb.TYPE] {
|
||||
|
@ -2,6 +2,7 @@ package web
|
||||
|
||||
import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
@ -11,10 +12,40 @@ const COUNT = "count"
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
COUNT: &ice.Command{Name: "count hash auto", Help: "计数", Actions: ice.MergeActions(ice.Actions{
|
||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.IsSearchPreview(m, arg) {
|
||||
count, limit, list := 0, 5, map[string]bool{}
|
||||
mdb.HashSelect(m.Spawn(kit.Dict(ice.MSG_FIELDS, mdb.Config(m, mdb.FIELD)))).Sort(mdb.TIME, "time_r").Table(func(value ice.Maps) {
|
||||
switch value[mdb.TYPE] {
|
||||
case ctx.ACTION:
|
||||
if list[value[mdb.NAME]] {
|
||||
break
|
||||
}
|
||||
if count++; count <= limit {
|
||||
list[value[mdb.NAME]] = true
|
||||
m.PushSearch(mdb.TYPE, ice.CMD, value)
|
||||
}
|
||||
}
|
||||
})
|
||||
count, limit = 0, 5
|
||||
mdb.HashSelect(m.Spawn(kit.Dict(ice.MSG_FIELDS, mdb.Config(m, mdb.FIELD)))).Sort(mdb.COUNT, "int_r").Table(func(value ice.Maps) {
|
||||
switch value[mdb.TYPE] {
|
||||
case ctx.ACTION:
|
||||
if list[value[mdb.NAME]] {
|
||||
break
|
||||
}
|
||||
if count++; count <= limit {
|
||||
list[value[mdb.NAME]] = true
|
||||
m.PushSearch(mdb.TYPE, ice.CMD, value)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}},
|
||||
mdb.CREATE: {Name: "create type name text", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashSelectUpdate(m, mdb.HashCreate(m), func(value ice.Map) { value[mdb.COUNT] = kit.Int(value[mdb.COUNT]) + 1 })
|
||||
}},
|
||||
}, mdb.HashAction(mdb.SHORT, "type,name", mdb.FIELD, "time,hash,count,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
|
||||
}, ctx.CmdAction(), mdb.HashAction(mdb.SHORT, "type,name", mdb.FIELD, "time,hash,count,type,name,text")), Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashSelect(m, arg...).Sort("type,name,text", "str", "str", "str")
|
||||
}},
|
||||
})
|
||||
|
@ -118,7 +118,7 @@ func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
DREAM: {Name: "dream name@key auto create", Help: "梦想家", Actions: ice.MergeActions(ice.Actions{
|
||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.IsSearchPreview(m, arg, nil) {
|
||||
if mdb.IsSearchPreview(m, arg) {
|
||||
m.Cmds("", func(value ice.Maps) { m.PushSearch(mdb.TEXT, m.MergePod(value[mdb.NAME]), value) })
|
||||
}
|
||||
}},
|
||||
|
@ -170,6 +170,7 @@ const (
|
||||
CODE_VIMER = "web.code.vimer"
|
||||
CODE_XTERM = "web.code.xterm"
|
||||
CODE_COMPILE = "web.code.compile"
|
||||
CODE_UPGRADE = "web.code.upgrade"
|
||||
CODE_GIT_SERVICE = "web.code.git.service"
|
||||
CODE_GIT_STATUS = "web.code.git.status"
|
||||
CODE_GIT_REPOS = "web.code.git.repos"
|
||||
|
@ -1,86 +1,116 @@
|
||||
package web
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"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/nfs"
|
||||
"shylinux.com/x/icebergs/base/tcp"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
func _route_push(m *ice.Message, space string, msg *ice.Message) *ice.Message {
|
||||
return msg.Table(func(index int, value ice.Maps, head []string) {
|
||||
value[SPACE], head = space, append(head, SPACE)
|
||||
m.Push("", value, head)
|
||||
})
|
||||
}
|
||||
func _route_match(m *ice.Message, space string, cb func(ice.Maps, int, []ice.Maps)) {
|
||||
reg, err := regexp.Compile(space)
|
||||
if m.Warn(err) {
|
||||
return
|
||||
}
|
||||
list := []ice.Maps{}
|
||||
mdb.HashSelect(m.Spawn()).Table(func(value ice.Maps) {
|
||||
if value[SPACE] == space {
|
||||
list = append(list, value)
|
||||
} else if reg.MatchString(kit.Format("%s:%s=%s@%s", value[SPACE], value[mdb.TYPE], value[nfs.MODULE], value[nfs.VERSION])) {
|
||||
list = append(list, value)
|
||||
}
|
||||
})
|
||||
for i, item := range list {
|
||||
cb(item, i, list)
|
||||
}
|
||||
m.StatusTimeCount()
|
||||
}
|
||||
func _route_toast(m *ice.Message, space string, args ...string) {
|
||||
GoToast(m, "", func(toast func(string, int, int)) (list []string) {
|
||||
count, total := 0, 1
|
||||
_route_match(m, space, func(value ice.Maps, i int, _list []ice.Maps) {
|
||||
count, total = i, len(_list)
|
||||
toast(value[SPACE], count, total)
|
||||
if msg := _route_push(m, value[SPACE], m.Cmd(SPACE, value[SPACE], args, ice.Maps{ice.MSG_DAEMON: ""})); msg.IsErr() || !cli.IsSuccess(msg) {
|
||||
list = append(list, value[SPACE]+": "+msg.Result())
|
||||
}
|
||||
})
|
||||
m.StatusTimeCount(ice.CMD, kit.Join(args, lex.SP), ice.SUCCESS, kit.Format("%d/%d", total-len(list), total))
|
||||
return
|
||||
})
|
||||
}
|
||||
|
||||
const ROUTE = "route"
|
||||
|
||||
func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
ROUTE: {Name: "route space auto travel spide cmds compile", Help: "路由表", Actions: ice.MergeActions(ice.Actions{
|
||||
ROUTE: {Name: "route space:text cmds:text auto spide cmds build travel", Help: "路由表", Actions: ice.MergeActions(ice.Actions{
|
||||
ice.MAIN: {Help: "首页", Hand: func(m *ice.Message, arg ...string) {
|
||||
ctx.ProcessField(m, CHAT_IFRAME, m.MergePod(kit.Select(m.Option(SPACE), arg, 0)), arg...)
|
||||
}},
|
||||
"compile": {Hand: func(m *ice.Message, arg ...string) {
|
||||
args := []string{CODE_VIMER, "compile"}
|
||||
GoToast(m, "", func(toast func(string, int, int)) (list []string) {
|
||||
msg := m.Cmd("")
|
||||
count, total := 0, msg.Length()
|
||||
msg.Table(func(value ice.Maps) {
|
||||
if toast(value[SPACE], count, total); value[SPACE] == "" {
|
||||
|
||||
} else if msg := m.Cmd(SPACE, value[SPACE], args, ice.Maps{ice.MSG_DAEMON: ""}); !cli.IsSuccess(msg) {
|
||||
list = append(list, value[SPACE])
|
||||
}
|
||||
count++
|
||||
})
|
||||
toast(ice.Info.NodeName, count, total)
|
||||
if msg := m.Cmd(args, ice.Maps{ice.MSG_DAEMON: ""}); cli.IsSuccess(msg) {
|
||||
list = append(list, ice.Info.NodeName)
|
||||
}
|
||||
return
|
||||
})
|
||||
}},
|
||||
"cmds": {Name: "cmds index* args", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
args := []string{m.Option(ctx.INDEX)}
|
||||
kit.If(m.Option(ctx.ARGS), func() { args = append(args, kit.Split(m.Option(ctx.ARGS))...) })
|
||||
GoToast(m, "", func(toast func(string, int, int)) (list []string) {
|
||||
push := func(space string, msg *ice.Message) {
|
||||
if msg.IsErr() {
|
||||
list = append(list, space)
|
||||
} else {
|
||||
msg.Table(func(index int, val ice.Maps, head []string) {
|
||||
val[SPACE], head = space, append(head, SPACE)
|
||||
m.Push("", val, head)
|
||||
})
|
||||
}
|
||||
}
|
||||
msg := m.Cmd("")
|
||||
count, total := 0, msg.Length()
|
||||
msg.Table(func(value ice.Maps) {
|
||||
if toast(value[SPACE], count, total); value[SPACE] != "" {
|
||||
push(value[SPACE], m.Cmd(SPACE, value[SPACE], args, ice.Maps{ice.MSG_DAEMON: ""}))
|
||||
}
|
||||
count++
|
||||
})
|
||||
toast(ice.Info.NodeName, count, total)
|
||||
push("", m.Cmd(args))
|
||||
m.StatusTimeCount(ice.SUCCESS, kit.Format("%d/%d", total-len(list), total))
|
||||
return
|
||||
})
|
||||
}},
|
||||
"spide": {Help: "导图", Hand: func(m *ice.Message, arg ...string) {
|
||||
ctx.DisplayStorySpide(m.Cmdy(""), nfs.DIR_ROOT, ice.Info.NodeName, mdb.FIELD, SPACE, lex.SPLIT, nfs.PT, ctx.ACTION, ice.MAIN)
|
||||
}},
|
||||
"cmds": {Name: "cmds space index* args", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
_route_toast(m, m.Option(SPACE), append([]string{m.Option(ctx.INDEX)}, kit.Split(m.Option(ctx.ARGS))...)...)
|
||||
}},
|
||||
"build": {Name: "build space", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
|
||||
_route_toast(m, m.Option(SPACE), m.PrefixKey(), "_build")
|
||||
}},
|
||||
"_build": {Hand: func(m *ice.Message, arg ...string) {
|
||||
if nfs.Exists(m, ".git") {
|
||||
m.Cmdy(CODE_VIMER, "compile")
|
||||
} else if ice.Info.NodeType == SERVER {
|
||||
m.Cmdy(CODE_UPGRADE)
|
||||
} else {
|
||||
m.Cmdy(ice.EXIT, "1")
|
||||
}
|
||||
}},
|
||||
"travel": {Help: "遍历", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Push(mdb.TIME, ice.Info.Make.Time)
|
||||
m.Push("md5", ice.Info.Hash)
|
||||
m.Push(nfs.SIZE, ice.Info.Size)
|
||||
m.Push(nfs.MODULE, ice.Info.Make.Module)
|
||||
m.Push(nfs.VERSION, ice.Info.Make.Versions())
|
||||
kit.For(kit.Split(m.OptionDefault(ice.MSG_FIELDS, mdb.Config(m, mdb.FIELD))), func(key string) {
|
||||
switch key {
|
||||
case mdb.TIME:
|
||||
m.Push(key, ice.Info.Make.Time)
|
||||
case nfs.MODULE:
|
||||
m.Push(key, ice.Info.Make.Module)
|
||||
case nfs.VERSION:
|
||||
m.Push(key, ice.Info.Make.Versions())
|
||||
case "md5":
|
||||
m.Push(key, ice.Info.Hash)
|
||||
case nfs.SIZE:
|
||||
m.Push(key, kit.Format("%s/%s", ice.Info.Size, kit.Split(m.Cmdx(cli.SYSTEM, "du", "-sh"))[0]))
|
||||
case mdb.TYPE:
|
||||
m.Push(key, ice.Info.NodeType)
|
||||
case nfs.PATH:
|
||||
m.Push(key, kit.Path(""))
|
||||
case tcp.HOSTNAME:
|
||||
m.Push(key, ice.Info.Hostname)
|
||||
default:
|
||||
m.Push(key, "")
|
||||
}
|
||||
})
|
||||
PushPodCmd(m, "", m.ActionKey())
|
||||
m.Table(func(value ice.Maps) { kit.If(value[SPACE], func() { mdb.HashCreate(m.Spawn(), kit.Simple(value)) }) })
|
||||
m.StatusTimeCount()
|
||||
}},
|
||||
}, ctx.CmdAction(), mdb.HashAction(mdb.SHORT, SPACE, mdb.FIELD, "time,space,module,version,md5,size", mdb.ACTION, ice.MAIN)), Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.HashSelect(m, arg...).Sort(SPACE); len(arg) > 0 {
|
||||
}, ctx.CmdAction(), mdb.HashAction(mdb.SHORT, SPACE, mdb.FIELD, "time,space,type,module,version,md5,size,path,hostname", mdb.SORT, "type,space", mdb.ACTION, ice.MAIN)), Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 1 {
|
||||
_route_match(m, arg[0], func(value ice.Maps, i int, list []ice.Maps) {
|
||||
_route_push(m, value[SPACE], m.Cmd(SPACE, value[SPACE], arg[1:]))
|
||||
})
|
||||
} else if mdb.HashSelect(m, arg...); len(arg) > 0 {
|
||||
m.EchoIFrame(m.MergePod(arg[0]))
|
||||
}
|
||||
}},
|
||||
|
@ -50,7 +50,7 @@ func _space_fork(m *ice.Message) {
|
||||
addr := kit.Select(m.R.RemoteAddr, m.R.Header.Get(ice.MSG_USERADDR))
|
||||
name := kit.ReplaceAll(kit.Select(addr, m.Option(mdb.NAME)), "[", "_", "]", "_", nfs.DF, "_", nfs.PT, "_")
|
||||
text := kit.Select(addr, m.Option(mdb.TEXT))
|
||||
if kit.IsIn(m.Option(mdb.TYPE), CHROME) && m.Option(mdb.NAME) != "chrome" || !(ice.Info.Localhost && tcp.IsLocalHost(m, m.R.RemoteAddr) ||
|
||||
if kit.IsIn(m.Option(mdb.TYPE), CHROME) && m.Option(mdb.NAME) != CHROME || !(ice.Info.Localhost && tcp.IsLocalHost(m, m.R.RemoteAddr) ||
|
||||
m.Option(TOKEN) != "" && m.Cmdv(TOKEN, m.Option(TOKEN), mdb.TIME) > m.Time()) {
|
||||
name, text = kit.Hashs(name), kit.Select(addr, m.Option(mdb.NAME), m.Option(mdb.TEXT))
|
||||
}
|
||||
@ -73,16 +73,17 @@ func _space_fork(m *ice.Message) {
|
||||
}
|
||||
func _space_handle(m *ice.Message, safe bool, name string, c *websocket.Conn) {
|
||||
defer m.Cost(SPACE, name)
|
||||
m.Option(ice.MSG_USERROLE, "")
|
||||
for {
|
||||
_, b, e := c.ReadMessage()
|
||||
if e != nil {
|
||||
break
|
||||
}
|
||||
msg := m.Spawn(b)
|
||||
if safe { // 下行命令
|
||||
if safe { // 下行权限
|
||||
msg.OptionDefault(ice.MSG_USERROLE, aaa.UserRole(msg, msg.Option(ice.MSG_USERNAME)))
|
||||
} else { // 上行请求
|
||||
msg.Option(ice.MSG_USERROLE, aaa.VOID)
|
||||
} else { // 上行权限
|
||||
kit.If(msg.Option(ice.MSG_USERROLE), func() { msg.Option(ice.MSG_USERROLE, aaa.VOID) })
|
||||
}
|
||||
source, target := kit.Simple(msg.Optionv(ice.MSG_SOURCE), name), kit.Simple(msg.Optionv(ice.MSG_TARGET))
|
||||
msg.Log(tcp.RECV, "%v->%v %v %v", source, target, msg.Detailv(), msg.FormatsMeta(nil))
|
||||
@ -188,7 +189,7 @@ func init() {
|
||||
m.Cmd("", m.Option(mdb.NAME), ice.EXIT)
|
||||
}},
|
||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.IsSearchPreview(m, arg, nil) {
|
||||
if mdb.IsSearchPreview(m, arg) {
|
||||
m.Cmds("", func(value ice.Maps) {
|
||||
switch value[mdb.TYPE] {
|
||||
case MASTER:
|
||||
|
@ -256,7 +256,7 @@ func init() {
|
||||
m.Cmd("", mdb.CREATE, ice.SHY, kit.Select(kit.Select("https://shylinux.com", ice.Info.Make.Remote), conf[cli.CTX_SHY]))
|
||||
}},
|
||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.IsSearchPreview(m, arg, nil) {
|
||||
if mdb.IsSearchPreview(m, arg) {
|
||||
m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.DEV, mdb.TEXT, mdb.HashSelectField(m, ice.DEV, CLIENT_ORIGIN))
|
||||
m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.COM, mdb.TEXT, mdb.HashSelectField(m, ice.COM, CLIENT_ORIGIN))
|
||||
m.PushSearch(mdb.TYPE, LINK, mdb.NAME, ice.SHY, mdb.TEXT, mdb.HashSelectField(m, ice.SHY, CLIENT_ORIGIN))
|
||||
|
@ -21,7 +21,11 @@ func _action_exec(m *ice.Message, river, storm, index string, arg ...string) {
|
||||
}).Length() == 0, ice.ErrNotRight, index, arg) {
|
||||
return
|
||||
}
|
||||
if len(arg) > 0 && arg[0] == ctx.ACTION {
|
||||
m.Cmd(web.COUNT, mdb.CREATE, ACTION, index, "", kit.Dict(ice.LOG_DISABLE, ice.TRUE))
|
||||
} else {
|
||||
m.Cmd(web.COUNT, mdb.CREATE, ACTION, index, kit.Join(arg), kit.Dict(ice.LOG_DISABLE, ice.TRUE))
|
||||
}
|
||||
kit.If(!ctx.PodCmd(m, index, arg), func() { m.Cmdy(index, arg) })
|
||||
}
|
||||
func _action_auth(m *ice.Message, share string) *ice.Message {
|
||||
|
@ -27,7 +27,7 @@ func init() {
|
||||
), mdb.META, kit.Dict(mdb.FIELD, "type,file,path"))},
|
||||
}, Commands: ice.Commands{
|
||||
UPGRADE: {Name: "upgrade item=target,config,binary,source,compile run restart", Help: "升级", Actions: ice.MergeActions(ice.Actions{
|
||||
cli.RESTART: {Hand: func(m *ice.Message, arg ...string) { m.Go(func() { m.Sleep300ms(ice.EXIT, 1) }) }},
|
||||
cli.RESTART: {Hand: func(m *ice.Message, arg ...string) { m.Go(func() { m.Sleep30ms(ice.EXIT, 1) }) }},
|
||||
}), Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.ZoneSelect(m.Spawn(), kit.Select(nfs.TARGET, arg, 0)).Table(func(value ice.Maps) {
|
||||
if kit.Select("", arg, 0) == COMPILE {
|
||||
|
@ -60,7 +60,7 @@ func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
VIMER: {Name: "vimer path=src/@key file=main.go line=1 list", Help: "编辑器", Meta: kit.Dict(ctx.STYLE, INNER), Actions: ice.MergeActions(ice.Actions{
|
||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if mdb.IsSearchPreview(m, arg, nil) {
|
||||
if mdb.IsSearchPreview(m, arg) {
|
||||
m.PushSearch(mdb.TYPE, nfs.FILE, mdb.NAME, "main", mdb.TEXT, ice.SRC_MAIN_SH)
|
||||
m.PushSearch(mdb.TYPE, nfs.FILE, mdb.NAME, "main", mdb.TEXT, ice.SRC_MAIN_SHY)
|
||||
m.PushSearch(mdb.TYPE, nfs.FILE, mdb.NAME, "main", mdb.TEXT, ice.SRC_MAIN_GO)
|
||||
|
10
init.go
10
init.go
@ -58,12 +58,20 @@ var Index = &Context{Name: ICE, Help: "冰山模块", Commands: Commands{
|
||||
m.Cmd(SOURCE, ETC_INIT_SHY)
|
||||
loadImportant(m)
|
||||
}},
|
||||
QUIT: {Hand: func(m *Message, arg ...string) { os.Exit(0) }},
|
||||
QUIT: {Hand: func(m *Message, arg ...string) {
|
||||
m.Go(func() {
|
||||
m.Sleep("10ms")
|
||||
os.Exit(0)
|
||||
})
|
||||
}},
|
||||
EXIT: {Hand: func(m *Message, arg ...string) {
|
||||
m.Go(func() {
|
||||
m.Sleep("10ms")
|
||||
m.root.Option(EXIT, kit.Select("0", arg, 0))
|
||||
m.Cmd(SOURCE, ETC_EXIT_SHY)
|
||||
m.Cmd(CTX_EXIT)
|
||||
removeImportant(m)
|
||||
})
|
||||
}},
|
||||
CTX_EXIT: {Hand: func(m *Message, arg ...string) {
|
||||
defer m.Target().Close(m.Spawn(), arg...)
|
||||
|
@ -23,7 +23,7 @@ type server struct {
|
||||
}
|
||||
|
||||
func (s server) Search(m *ice.Message, arg ...string) {
|
||||
if mdb.IsSearchPreview(m.Message, arg, nil) {
|
||||
if mdb.IsSearchPreview(m.Message, arg) {
|
||||
s.Code.List(m.Spawn(kit.Dict(ice.MSG_FIELDS, "time,port,status,pid,cmd,dir")), "")
|
||||
m.Table(func(value ice.Maps) {
|
||||
m.PushSearch(mdb.TYPE, value[cli.STATUS], mdb.NAME, value[nfs.PATH], mdb.TEXT, value[mdb.LINK])
|
||||
|
@ -10,7 +10,6 @@ import (
|
||||
"shylinux.com/x/icebergs/base/lex"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/nfs"
|
||||
"shylinux.com/x/icebergs/base/ssh"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
"shylinux.com/x/icebergs/core/code"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
@ -83,14 +82,6 @@ func init() {
|
||||
}, Commands: ice.Commands{
|
||||
SESSION: {Name: "session session window pane cmds auto", Help: "会话", Actions: ice.MergeActions(ice.Actions{
|
||||
web.DREAM_CREATE: {Hand: func(m *ice.Message, arg ...string) { m.Cmd("", mdb.CREATE) }},
|
||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||
return
|
||||
if mdb.IsSearchPreview(m, arg, nil) {
|
||||
m.Cmd("", ice.OptionFields(""), func(value ice.Maps) {
|
||||
m.PushSearch(mdb.TYPE, ssh.SHELL, mdb.NAME, value[SESSION], mdb.TEXT, "tmux attach -t "+value[SESSION], value)
|
||||
})
|
||||
}
|
||||
}},
|
||||
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Option(ctx.ACTION) == SCRIPT {
|
||||
m.Cmdy(SCRIPT, mdb.INPUTS, arg)
|
||||
|
Loading…
x
Reference in New Issue
Block a user