forked from x/icebergs
opt space
This commit is contained in:
parent
577dd9cafc
commit
0f65bdb891
@ -34,7 +34,7 @@ func init() {
|
||||
m.Warn(smtp.SendMail(m.Option(SERVICE), auth, m.Option(USERNAME), kit.Split(m.Option(TO)), content))
|
||||
m.Logs(mdb.EXPORT, EMAIL, auth, string(content))
|
||||
}},
|
||||
}, mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,service,username,password")), Hand: func(m *ice.Message, arg ...string) {
|
||||
}, mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,service,username,password"), mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashSelect(m, arg...).PushAction(SEND, mdb.REMOVE)
|
||||
}},
|
||||
})
|
||||
|
@ -92,7 +92,7 @@ func init() {
|
||||
m.Echo(ice.OK)
|
||||
}
|
||||
}},
|
||||
}, mdb.HashAction(mdb.SHORT, mdb.NAME)), Hand: func(m *ice.Message, arg ...string) {
|
||||
}, mdb.HashAction(mdb.SHORT, mdb.NAME), mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
_role_list(m, kit.Select("", arg, 0)).PushAction(mdb.DELETE)
|
||||
}},
|
||||
})
|
||||
@ -145,4 +145,4 @@ func Black(m *ice.Message, key ...string) {
|
||||
for _, key := range key {
|
||||
m.Cmd(ROLE, BLACK, VOID, key)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -42,6 +42,9 @@ func init() {
|
||||
|
||||
func release(m *ice.Message) string {
|
||||
osid := runtime.GOOS
|
||||
if osid != "linux" {
|
||||
return osid
|
||||
}
|
||||
m.Cmd(nfs.CAT, "/etc/os-release", kit.Dict(ice.MSG_USERROLE, aaa.ROOT), func(text string) {
|
||||
if ls := kit.Split(text, ice.EQ); len(ls) > 1 {
|
||||
switch ls[0] {
|
||||
|
@ -156,6 +156,7 @@ func init() {
|
||||
Index.MergeCommands(ice.Commands{
|
||||
RUNTIME: {Name: "runtime info=ifconfig,hostinfo,hostname,userinfo,procinfo,diskinfo,bootinfo,api,cli,cmd,env auto", Help: "运行环境", Actions: ice.MergeActions(ice.Actions{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { _runtime_init(m) }},
|
||||
ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { m.Conf("", "", nil) }},
|
||||
IFCONFIG: {Hand: func(m *ice.Message, arg ...string) { m.Cmdy("tcp.host") }},
|
||||
HOSTINFO: {Hand: func(m *ice.Message, arg ...string) { _runtime_hostinfo(m) }},
|
||||
HOSTNAME: {Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -197,7 +197,7 @@ func TravelCmd(m *ice.Message, cb func(key, file, line string)) *ice.Message {
|
||||
if IsOrderCmd(key) {
|
||||
return
|
||||
}
|
||||
if ls := kit.Split(cmd.GetFileLines(), ice.DF); !m.Warn(len(ls) == 0, ice.ErrNotFound, key) {
|
||||
if ls := kit.Split(cmd.GetFileLines(), ice.DF); len(ls) > 0 {
|
||||
cb(kit.Keys(s.Cap(ice.CTX_FOLLOW), key), strings.TrimPrefix(ls[0], kit.Path("")+ice.PS), kit.Select("1", ls, 1))
|
||||
}
|
||||
})
|
||||
|
@ -12,21 +12,43 @@ import (
|
||||
"shylinux.com/x/toolkits/miss"
|
||||
)
|
||||
|
||||
func _config_save(m *ice.Message, name string, arg ...string) {
|
||||
name = path.Join(ice.VAR_CONF, name)
|
||||
if f, p, e := miss.CreateFile(name); m.Assert(e) {
|
||||
defer f.Close()
|
||||
defer m.Echo(p)
|
||||
msg := m.Spawn(m.Source())
|
||||
data := ice.Map{}
|
||||
for _, k := range arg {
|
||||
if v := msg.Confv(k); v != "" {
|
||||
data[k] = v
|
||||
func _config_only(v ice.Any, arg ...string) bool {
|
||||
switch v := v.(type) {
|
||||
case nil:
|
||||
return true
|
||||
case ice.Map:
|
||||
if len(v) > len(arg) {
|
||||
return false
|
||||
}
|
||||
kit.Sort(arg)
|
||||
for _, k := range kit.SortedKey(v) {
|
||||
if kit.IndexOf(arg, k) == -1 {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
func _config_save(m *ice.Message, name string, arg ...string) {
|
||||
msg := m.Spawn(m.Source())
|
||||
data := ice.Map{}
|
||||
for _, k := range arg {
|
||||
// if v := msg.Confv(k); _config_only(v, mdb.META) && _config_only(kit.Value(v, mdb.META), mdb.FIELD, mdb.SHORT) {
|
||||
if v := msg.Confv(k); _config_only(v, mdb.META) {
|
||||
continue
|
||||
} else {
|
||||
data[k] = v
|
||||
}
|
||||
}
|
||||
if len(data) == 0 {
|
||||
return
|
||||
}
|
||||
if f, p, e := miss.CreateFile(path.Join(ice.VAR_CONF, name)); m.Assert(e) {
|
||||
defer f.Close()
|
||||
defer m.Echo(p)
|
||||
if s, e := json.MarshalIndent(data, "", " "); !m.Warn(e) {
|
||||
if _, e := f.Write(s); !m.Warn(e) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ func init() {
|
||||
}},
|
||||
HAPPEN: {Name: "happen event", Help: "触发", Hand: func(m *ice.Message, arg ...string) {
|
||||
defer m.Cost()
|
||||
m.OptionCB(mdb.SELECT, "")
|
||||
mdb.ZoneSelect(m.Spawn(ice.OptionFields("")), m.Option(EVENT)).Tables(func(value ice.Maps) {
|
||||
m.Cmdy(kit.Split(value[ice.CMD]), m.Option(EVENT), arg[2:], ice.OptionFields(""))
|
||||
})
|
||||
@ -56,3 +57,13 @@ func Watch(m *ice.Message, key string, arg ...string) *ice.Message {
|
||||
func Event(m *ice.Message, key string, arg ...ice.Any) *ice.Message {
|
||||
return m.Cmdy(EVENT, HAPPEN, EVENT, kit.Select(kit.Keys(m.CommandKey(), m.ActionKey()), key), arg, logs.FileLineMeta(logs.FileLine(-1)))
|
||||
}
|
||||
func EventDeferEvent(m *ice.Message, key string, arg ...ice.Any) func(string, ...ice.Any) {
|
||||
Event(m, key, arg...)
|
||||
return func(key string, args ...ice.Any) {
|
||||
if len(args) > 0 {
|
||||
Event(m, key, args)
|
||||
} else {
|
||||
Event(m, key, arg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -7,8 +7,8 @@ import (
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
"shylinux.com/x/toolkits/miss"
|
||||
"shylinux.com/x/toolkits/logs"
|
||||
"shylinux.com/x/toolkits/miss"
|
||||
)
|
||||
|
||||
func _hash_fields(m *ice.Message) []string {
|
||||
@ -146,8 +146,10 @@ func StatusHashAction(arg ...Any) ice.Actions {
|
||||
}},
|
||||
}, HashAction(arg...))
|
||||
}
|
||||
func ExitClearHashAction() ice.Actions {
|
||||
return ice.MergeActions(ice.Actions{ ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { m.Conf("", HASH, "") }} })
|
||||
func ClearHashOnExitAction() ice.Actions {
|
||||
return ice.MergeActions(ice.Actions{ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Conf("", HASH, "")
|
||||
}}})
|
||||
}
|
||||
|
||||
func HashKey(m *ice.Message) string {
|
||||
@ -278,6 +280,14 @@ func HashSelectClose(m *ice.Message) *ice.Message {
|
||||
func HashPrunesValue(m *ice.Message, field, value string) {
|
||||
m.Cmdy(PRUNES, m.PrefixKey(), "", HASH, field, value, ice.OptionFields(HashField(m)))
|
||||
}
|
||||
func HashCreateDeferRemove(m *ice.Message, arg ...Any) func() {
|
||||
h := HashCreate(m, arg...)
|
||||
return func() { HashRemove(m, HASH, h) }
|
||||
}
|
||||
func HashModifyDeferRemove(m *ice.Message, arg ...Any) func() {
|
||||
HashModify(m, arg...)
|
||||
return func() { HashRemove(m, arg...) }
|
||||
}
|
||||
|
||||
func Richs(m *ice.Message, prefix string, chain Any, raw Any, cb Any) (res Map) {
|
||||
cache := m.Confm(prefix, chain)
|
||||
|
@ -51,7 +51,7 @@ func _mdb_select(m *ice.Message, cb Any, key string, value Map, fields []string,
|
||||
res[k] = kit.Format(v)
|
||||
}
|
||||
cb(res)
|
||||
case nil:
|
||||
case string, []string, []ice.Any, nil:
|
||||
if m.FieldsIsDetail() {
|
||||
m.Push(ice.FIELDS_DETAIL, value)
|
||||
} else {
|
||||
|
@ -37,5 +37,6 @@ func RenderAction(args ...ice.Any) ice.Actions {
|
||||
})
|
||||
}
|
||||
}},
|
||||
ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { m.Conf("", HASH, "") }},
|
||||
})
|
||||
}
|
||||
|
@ -46,9 +46,9 @@ func _host_list(m *ice.Message, name string) {
|
||||
|
||||
const (
|
||||
LOCALHOST = "localhost"
|
||||
|
||||
ISLOCAL = "islocal"
|
||||
PUBLISH = "publish"
|
||||
|
||||
ISLOCAL = "islocal"
|
||||
PUBLISH = "publish"
|
||||
)
|
||||
const HOST = "host"
|
||||
|
||||
@ -77,12 +77,11 @@ func init() {
|
||||
}
|
||||
m.Echo(arg[0])
|
||||
}},
|
||||
}, mdb.HashAction(mdb.SHORT, mdb.TEXT)), Hand: func(m *ice.Message, arg ...string) {
|
||||
}, mdb.HashAction(mdb.SHORT, mdb.TEXT), mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
_host_list(m, kit.Select("", arg, 0))
|
||||
m.Debug(m.FormatChain())
|
||||
}},
|
||||
})
|
||||
}
|
||||
|
||||
func IsLocalHost(m *ice.Message, ip string) bool { return m.Cmdx(HOST, ISLOCAL, ip) == ice.OK }
|
||||
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) }
|
||||
|
@ -66,6 +66,6 @@ func init() {
|
||||
LISTEN: {Name: "listen type name port=9030 host=", Hand: func(m *ice.Message, arg ...string) {
|
||||
_server_listen(m, arg...)
|
||||
}},
|
||||
}, mdb.StatusHashAction(mdb.FIELD, "time,hash,status,type,name,host,port,error,nconn"))},
|
||||
}, mdb.StatusHashAction(mdb.FIELD, "time,hash,status,type,name,host,port,error,nconn"), mdb.ClearHashOnExitAction())},
|
||||
})
|
||||
}
|
||||
|
@ -9,12 +9,14 @@ import (
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/tcp"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
"shylinux.com/x/toolkits/logs"
|
||||
)
|
||||
|
||||
func _broad_addr(m *ice.Message, host, port string) *net.UDPAddr {
|
||||
addr, err := net.ResolveUDPAddr("udp4", kit.Format("%s:%s", host, port))
|
||||
m.Assert(err)
|
||||
return addr
|
||||
if addr, e := net.ResolveUDPAddr("udp4", kit.Format("%s:%s", host, port)); !m.Warn(e != nil, e, host, port, logs.FileLineMeta(logs.FileLine(2))) {
|
||||
return addr
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func _broad_send(m *ice.Message, host, port string, remote_host, remote_port string) {
|
||||
if s, e := net.DialUDP("udp", nil, _broad_addr(m, remote_host, remote_port)); m.Assert(e) {
|
||||
@ -26,9 +28,9 @@ func _broad_send(m *ice.Message, host, port string, remote_host, remote_port str
|
||||
}
|
||||
func _broad_serve(m *ice.Message, host, port string) {
|
||||
_broad_send(m, host, port, "255.255.255.255", "9020")
|
||||
if s, e := net.ListenUDP("udp", _broad_addr(m, "0.0.0.0", port)); m.Assert(e) {
|
||||
if s, e := net.ListenUDP("udp4", _broad_addr(m, "0.0.0.0", port)); m.Assert(e) {
|
||||
defer s.Close()
|
||||
mdb.HashCreate(m, tcp.HOST, host, tcp.PORT, port, kit.Dict(mdb.TARGET, s))
|
||||
defer mdb.HashCreateDeferRemove(m, tcp.HOST, host, tcp.PORT, port, kit.Dict(mdb.TARGET, s))()
|
||||
buf := make([]byte, ice.MOD_BUFS)
|
||||
for {
|
||||
n, addr, err := s.ReadFromUDP(buf[:])
|
||||
@ -40,7 +42,7 @@ func _broad_serve(m *ice.Message, host, port string) {
|
||||
if m.Cmd(BROAD, kit.Format("%s,%s", msg.Option(tcp.HOST), msg.Option(tcp.PORT))).Length() > 0 {
|
||||
continue
|
||||
}
|
||||
if remote, err := net.ResolveUDPAddr("udp4", kit.Format("%s:%s", msg.Option(tcp.HOST), msg.Option(tcp.PORT))); !m.Warn(err) {
|
||||
if remote := _broad_addr(m, msg.Option(tcp.HOST), msg.Option(tcp.PORT)); !m.Warn(remote == nil) {
|
||||
m.Cmd(BROAD, func(value ice.Maps) {
|
||||
m.Logs(mdb.EXPORT, BROAD, kit.Format(value), "to", kit.Format(remote))
|
||||
s.WriteToUDP([]byte(m.Spawn(value).FormatMeta()), remote)
|
||||
@ -62,6 +64,6 @@ func init() {
|
||||
OPEN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
ctx.ProcessOpen(m, kit.Format("http://%s:%s", m.Option(tcp.HOST), m.Option(tcp.PORT)))
|
||||
}},
|
||||
}, mdb.HashAction(mdb.SHORT, "host,port", mdb.FIELD, "time,hash,host,port", mdb.ACTION, OPEN), mdb.ExitClearHashAction())},
|
||||
}, mdb.HashAction(mdb.SHORT, "host,port", mdb.FIELD, "time,hash,host,port", mdb.ACTION, OPEN), mdb.ClearHashOnExitAction())},
|
||||
})
|
||||
}
|
||||
|
@ -194,7 +194,7 @@ func init() {
|
||||
mdb.SHORT, mdb.NAME, mdb.FIELD, "time,status,name,proto,host,port", tcp.LOCALHOST, ice.TRUE, LOGHEADERS, ice.FALSE,
|
||||
ice.INTSHELL, kit.Dict(nfs.PATH, ice.USR_INTSHELL, INDEX, ice.INDEX_SH, nfs.REPOS, "https://shylinux.com/x/intshell", nfs.BRANCH, nfs.MASTER),
|
||||
ice.VOLCANOS, kit.Dict(nfs.PATH, ice.USR_VOLCANOS, INDEX, "page/index.html", nfs.REPOS, "https://shylinux.com/x/volcanos", nfs.BRANCH, nfs.MASTER),
|
||||
), mdb.ExitClearHashAction(), ServeAction())},
|
||||
), mdb.ClearHashOnExitAction(), ServeAction())},
|
||||
PP(ice.INTSHELL): {Name: "/intshell/", Help: "命令行", Actions: aaa.WhiteAction(), Hand: func(m *ice.Message, arg ...string) {
|
||||
RenderIndex(m, ice.INTSHELL, arg...)
|
||||
}},
|
||||
|
@ -27,8 +27,7 @@ func _space_dial(m *ice.Message, dev, name string, arg ...string) {
|
||||
next := time.Duration(rand.Intn(a*(i+1))+b*i) * time.Millisecond
|
||||
m.Cmd(tcp.CLIENT, tcp.DIAL, args, func(c net.Conn) {
|
||||
if conn, _, e := websocket.NewClient(c, uri, nil, kit.Int(redial["r"]), kit.Int(redial["w"])); !m.Warn(e, tcp.DIAL, dev, SPACE, uri.String()) {
|
||||
mdb.HashCreate(m, kit.SimpleKV("", MASTER, dev, msg.Append(tcp.HOSTNAME)), kit.Dict(mdb.TARGET, conn))
|
||||
defer mdb.HashRemove(m, dev)
|
||||
defer mdb.HashCreateDeferRemove(m, kit.SimpleKV("", MASTER, dev, msg.Append(tcp.HOSTNAME)), kit.Dict(mdb.TARGET, conn))()
|
||||
_space_handle(m, true, dev, conn)
|
||||
}
|
||||
}).Cost("order", i, "sleep", next, "redial", dev).Sleep(next)
|
||||
@ -42,11 +41,11 @@ func _space_fork(m *ice.Message) {
|
||||
name := strings.ToLower(kit.ReplaceAll(kit.Select(m.Option(ice.MSG_USERADDR), m.Option(mdb.NAME)), ice.PT, "_", ice.DF, "_"))
|
||||
args := kit.Simple(mdb.TYPE, kit.Select(WORKER, m.Option(mdb.TYPE)), mdb.NAME, name, mdb.TEXT, text, m.OptionSimple(SHARE, RIVER, ice.MSG_USERUA))
|
||||
m.Go(func() {
|
||||
defer kit.BeginEnd(func() { mdb.HashCreate(m, args, kit.Dict(mdb.TARGET, conn)) }, func() { mdb.HashRemove(m, name) })()
|
||||
defer kit.BeginEnd(func() { gdb.Event(m, SPACE_OPEN, args) }, func() { gdb.Event(m, SPACE_CLOSE, args) })()
|
||||
defer mdb.HashCreateDeferRemove(m, args, kit.Dict(mdb.TARGET, conn))()
|
||||
defer gdb.EventDeferEvent(m, SPACE_OPEN, args)(SPACE_CLOSE, args)
|
||||
switch m.Option(mdb.TYPE) {
|
||||
case WORKER:
|
||||
defer kit.BeginEnd(func() { gdb.Event(m, DREAM_OPEN, args) }, func() { gdb.Event(m, DREAM_CLOSE, args) })()
|
||||
defer gdb.EventDeferEvent(m, DREAM_OPEN, args)(DREAM_CLOSE, args)
|
||||
case CHROME:
|
||||
m.Cmd(SPACE, name, cli.PWD, name)
|
||||
}
|
||||
@ -77,6 +76,7 @@ func _space_handle(m *ice.Message, safe bool, name string, conn *websocket.Conn)
|
||||
}) {
|
||||
} else if res := getSend(m, next); !m.Warn(res == nil || len(target) != 1, ice.ErrNotFound, next) {
|
||||
res.Cost(kit.Format("[%v]->%v %v %v", next, res.Optionv(ice.MSG_TARGET), res.Detailv(), msg.FormatSize()))
|
||||
m.Sleep("10ms")
|
||||
back(res, msg) // 接收响应
|
||||
}
|
||||
}
|
||||
@ -131,8 +131,9 @@ func _space_send(m *ice.Message, space string, arg ...string) {
|
||||
_space_echo(m, []string{addSend(m, m)}, target, conn)
|
||||
}
|
||||
}), ice.ErrNotFound, space) {
|
||||
m.Sleep("30ms")
|
||||
call(m, m.Config(kit.Keys(TIMEOUT, "c")), func(res *ice.Message) { m.Copy(res) })
|
||||
call(m, m.Config(kit.Keys(TIMEOUT, "c")), func(res *ice.Message) {
|
||||
m.Copy(res)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -168,8 +169,7 @@ func init() {
|
||||
_space_dial(m, m.Option(ice.DEV), kit.Select(ice.Info.NodeName, m.Option(mdb.NAME)), arg...)
|
||||
}},
|
||||
mdb.REMOVE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.HashModify(m, m.OptionSimple(mdb.NAME), mdb.STATUS, cli.STOP)
|
||||
defer mdb.HashRemove(m, m.OptionSimple(mdb.NAME))
|
||||
defer mdb.HashModifyDeferRemove(m, m.OptionSimple(mdb.NAME), mdb.STATUS, cli.STOP)()
|
||||
m.Cmd(SPACE, m.Option(mdb.NAME), ice.EXIT)
|
||||
}},
|
||||
SPACE_LOGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
@ -185,7 +185,7 @@ func init() {
|
||||
}, mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,type,name,text",
|
||||
REDIAL, kit.Dict("a", 3000, "b", 1000, "c", 1000), TIMEOUT, kit.Dict("c", "30s"),
|
||||
BUFFER, kit.Dict("r", ice.MOD_BUFS, "w", ice.MOD_BUFS),
|
||||
), mdb.ExitClearHashAction(), SpaceAction(), aaa.WhiteAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
), mdb.ClearHashOnExitAction(), SpaceAction(), aaa.WhiteAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) < 2 {
|
||||
mdb.HashSelect(m, arg...).Sort("type,name,text")
|
||||
} else {
|
||||
|
@ -22,7 +22,8 @@ import (
|
||||
)
|
||||
|
||||
func _spide_create(m *ice.Message, name, address string) {
|
||||
if uri, e := url.Parse(address); !m.Warn(e != nil || address == "") {
|
||||
// if uri, e := url.Parse(address); !m.Warn(e != nil || address == "", address) {
|
||||
if uri, e := url.Parse(address); m.Assert(e == nil) {
|
||||
m.Logs(mdb.CREATE, SPIDE, name, ADDRESS, address)
|
||||
dir, file := path.Split(uri.EscapedPath())
|
||||
mdb.HashCreate(m, CLIENT_NAME, name)
|
||||
@ -393,7 +394,7 @@ func init() {
|
||||
m.Push(tcp.PROTOCOL, msg.Append("client.protocol"))
|
||||
m.Push(DOMAIN, msg.Append("client.protocol")+"://"+msg.Append("client.hostname")+kit.Select("", arg, 1))
|
||||
}},
|
||||
}, mdb.HashAction(mdb.SHORT, CLIENT_NAME, mdb.FIELD, "time,client.name,client.url", LOGHEADERS, ice.FALSE)), Hand: func(m *ice.Message, arg ...string) {
|
||||
}, mdb.HashAction(mdb.SHORT, CLIENT_NAME, mdb.FIELD, "time,client.name,client.url", LOGHEADERS, ice.FALSE), mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) < 2 || arg[0] == "" || (len(arg) > 3 && arg[3] == "") {
|
||||
mdb.HashSelect(m, kit.Slice(arg, 0, 1)...).Sort(CLIENT_NAME)
|
||||
} else {
|
||||
|
@ -61,8 +61,7 @@ func (f *Frame) Start(m *ice.Message, arg ...string) bool {
|
||||
}(key, cmd)
|
||||
}
|
||||
})
|
||||
gdb.Event(m, SERVE_START, arg)
|
||||
defer gdb.Event(m, SERVE_STOP, arg)
|
||||
defer gdb.EventDeferEvent(m, SERVE_START, arg)(SERVE_STOP, arg)
|
||||
switch cb := m.OptionCB("").(type) {
|
||||
case func(http.Handler):
|
||||
cb(f)
|
||||
|
@ -50,7 +50,7 @@ func init() {
|
||||
m.Cmd(mdb.DELETE, m.PrefixKey(), kit.KeyHash(m.Option(RIVER)), mdb.HASH, m.OptionSimple(STORM))
|
||||
}
|
||||
}},
|
||||
}), Hand: func(m *ice.Message, arg ...string) {
|
||||
}, mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
switch len(arg) {
|
||||
case 0:
|
||||
m.Cmdy(mdb.SELECT, m.PrefixKey(), "", mdb.HASH, ice.OptionFields("time,river"))
|
||||
|
@ -52,7 +52,7 @@ func init() {
|
||||
cli.IsAlpine(m, "vim")
|
||||
cli.IsAlpine(m, "tmux")
|
||||
if cli.IsAlpine(m, "git"); !cli.IsAlpine(m, "go", "go git") {
|
||||
mdb.ZoneInsert(m, cli.CLI, "go", cli.CMD, kit.Format("install download https://golang.google.cn/dl/go1.15.5.%s-%s.tar.gz usr/local", runtime.GOOS, runtime.GOARCH))
|
||||
m.Cmd(mdb.INSERT, cli.CLI, "", mdb.ZONE, cli.CLI, "go", cli.CMD, kit.Format("install download https://golang.google.cn/dl/go1.15.5.%s-%s.tar.gz usr/local", runtime.GOOS, runtime.GOARCH))
|
||||
}
|
||||
}},
|
||||
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -23,11 +23,11 @@ func init() {
|
||||
nfs.SOURCE, kit.Dict(mdb.LIST, kit.List(mdb.TYPE, nfs.TAR, nfs.FILE, "contexts.src.tar.gz")),
|
||||
))},
|
||||
}, Commands: ice.Commands{
|
||||
UPGRADE: {Name: "upgrade item=target,binary,source run restart", Help: "升级", Actions: ice.Actions{
|
||||
UPGRADE: {Name: "upgrade item=target,binary,source run restart", Help: "升级", Actions: ice.MergeActions(ice.Actions{
|
||||
cli.RESTART: {Name: "restart", Help: "重启", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Go(func() { m.Sleep300ms(ice.EXIT, 1) })
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, arg ...string) {
|
||||
}, mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.ZoneSelect(m, kit.Select(nfs.TARGET, arg, 0)).Tables(func(value ice.Maps) {
|
||||
if value[nfs.FILE] == ice.ICE_BIN { // 程序文件
|
||||
value[nfs.FILE] = kit.Keys(ice.ICE, runtime.GOOS, runtime.GOARCH)
|
||||
|
@ -167,7 +167,7 @@ func init() {
|
||||
nfs.Trash(m, m.Option(nfs.PATH))
|
||||
}
|
||||
}},
|
||||
}, mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path")), Hand: func(m *ice.Message, arg ...string) {
|
||||
}, mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path"), mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(nfs.DIR_TYPE, nfs.CAT)
|
||||
m.Option(nfs.DIR_DEEP, ice.TRUE)
|
||||
m.OptionFields(nfs.DIR_WEB_FIELDS)
|
||||
|
7
misc.go
7
misc.go
@ -335,6 +335,13 @@ func MergeActions(arg ...Any) Actions {
|
||||
hand(m, arg...)
|
||||
last(m, arg...)
|
||||
}
|
||||
} else if k == CTX_EXIT {
|
||||
last := h.Hand
|
||||
hand := v.Hand
|
||||
h.Hand = func(m *Message, arg ...string) {
|
||||
hand(m, arg...)
|
||||
last(m, arg...)
|
||||
}
|
||||
} else if h.Name = kit.Select(v.Name, h.Name); h.Hand == nil {
|
||||
h.Hand = v.Hand
|
||||
}
|
||||
|
@ -79,7 +79,7 @@ func init() {
|
||||
web.DREAM_OPEN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd("web.code.git.repos", mdb.CREATE, m.OptionSimple(nfs.REPOS), nfs.PATH, m.Option(nfs.PATH))
|
||||
}},
|
||||
}, mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,branch,commit,remote")), Hand: func(m *ice.Message, arg ...string) {
|
||||
}, mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,branch,commit,remote"), mdb.ClearHashOnExitAction()), Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) == 0 { // 仓库列表
|
||||
mdb.HashSelect(m, arg...).Sort(mdb.NAME).RenameAppend(mdb.NAME, REPOS)
|
||||
} else { // 文件列表
|
||||
|
Loading…
x
Reference in New Issue
Block a user