From 0fa74bd96e1051c814c5f4fec46215af138acc7b Mon Sep 17 00:00:00 2001 From: shylinux Date: Sun, 21 Aug 2022 15:56:48 +0800 Subject: [PATCH] opt some --- base/cli/daemon.go | 21 ++++++++++++--------- base/cli/forever.go | 12 ++++++++++-- base/cli/system.go | 4 ++-- base/mdb/hash.go | 24 ++++++++++++++++++------ base/ssh/script.go | 2 +- base/tcp/port.go | 3 ++- base/web/dream.go | 16 +++++++--------- base/web/serve.go | 9 +++++---- base/web/space.go | 8 +++++--- core/code/xterm.go | 40 +++++++++++++++++++--------------------- misc/java/compile.go | 2 +- misc/java/compile.shy | 5 +++++ misc/tmux/session.go | 7 +++++-- 13 files changed, 92 insertions(+), 61 deletions(-) diff --git a/base/cli/daemon.go b/base/cli/daemon.go index 5e6ed01c..13f8eee7 100644 --- a/base/cli/daemon.go +++ b/base/cli/daemon.go @@ -3,6 +3,7 @@ package cli import ( "io" "os/exec" + "strings" ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/ctx" @@ -23,7 +24,7 @@ func _daemon_exec(m *ice.Message, cmd *exec.Cmd) { cmd.Stderr = w } - h := mdb.HashCreate(m, ice.CMD, kit.Join(cmd.Args, ice.SP), + h := mdb.HashCreate(m.Spawn(), ice.CMD, kit.Join(cmd.Args, ice.SP), STATUS, START, DIR, cmd.Dir, ENV, kit.Select("", cmd.Env), m.OptionSimple(CMD_INPUT, CMD_OUTPUT, CMD_ERRPUT, mdb.CACHE_CLEAR_ON_EXIT), ) @@ -128,15 +129,17 @@ func init() { }) }}, }, mdb.HashStatusAction(mdb.FIELD, "time,hash,status,pid,cmd,dir,env")), Hand: func(m *ice.Message, arg ...string) { - if mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) { - switch value[STATUS] { - case START: - m.PushButton(RESTART, STOP) - default: - m.PushButton(mdb.REMOVE) + if len(arg) == 0 || !strings.Contains(arg[0], ice.PS) { + if mdb.HashSelect(m, kit.Slice(arg, 0, 1)...).Tables(func(value ice.Maps) { + switch value[STATUS] { + case START: + m.PushButton(RESTART, STOP) + default: + m.PushButton(mdb.REMOVE) + } + }); len(arg) == 0 || m.Length() > 0 { + return } - }); len(arg) == 0 || m.Length() > 0 { - return } if len(arg) == 1 { diff --git a/base/cli/forever.go b/base/cli/forever.go index 57a81d09..e1ff5439 100644 --- a/base/cli/forever.go +++ b/base/cli/forever.go @@ -37,8 +37,13 @@ func init() { } m.Cmd(FOREVER, STOP) - m.Cmdy(FOREVER, kit.Select(os.Args[0], nfs.PWD+ice.BIN_ICE_BIN, nfs.ExistsFile(m, ice.BIN_ICE_BIN)), - "serve", START, ice.DEV, "", aaa.USERNAME, aaa.ROOT, aaa.PASSWORD, aaa.ROOT, arg) + if len(arg) > 0 && arg[0] == "space" { + m.Cmdy(FOREVER, kit.Select(os.Args[0], nfs.PWD+ice.BIN_ICE_BIN, nfs.ExistsFile(m, ice.BIN_ICE_BIN)), + "space", "dial", ice.DEV, ice.OPS, arg[2:]) + } else { + m.Cmdy(FOREVER, kit.Select(os.Args[0], nfs.PWD+ice.BIN_ICE_BIN, nfs.ExistsFile(m, ice.BIN_ICE_BIN)), + "serve", START, ice.DEV, "", aaa.USERNAME, aaa.ROOT, aaa.PASSWORD, aaa.ROOT, arg) + } }}, RESTART: {Name: "restart", Help: "重启", Hand: func(m *ice.Message, arg ...string) { m.Cmd(gdb.SIGNAL, gdb.RESTART) @@ -62,6 +67,9 @@ func init() { if logs.Println(); nfs.ExistsFile(m, "var/log/bench.log") { nfs.Rename(m, "var/log/bench.log", kit.Format("var/log/bench.%s.log", logs.Now().Format("20060102-150405"))) } + if logs.Println(); nfs.ExistsFile(m, "var/log/error.log") { + nfs.Rename(m, "var/log/error.log", kit.Format("var/log/error.%s.log", logs.Now().Format("20060102-150405"))) + } } } }}, diff --git a/base/cli/system.go b/base/cli/system.go index 73f74b41..35831bbf 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -31,7 +31,7 @@ func _system_cmd(m *ice.Message, arg ...string) *exec.Cmd { } } } - if _system_find(m, arg[0]) == "" { + if _system_find(m, arg[0]) == "" && !strings.Contains(arg[0], ice.PS) { m.Cmd(MIRRORS, CMD, arg[0]) if file := _system_find(m, arg[0]); file != "" { m.Logs(mdb.SELECT, "mirrors cmd", file) @@ -82,7 +82,7 @@ func _system_find(m *ice.Message, bin string, dir ...string) string { } for _, p := range dir { if nfs.ExistsFile(m, path.Join(p, bin)) { - return kit.Path(path.Join(p, bin)) + return kit.Path(p, bin) } } return "" diff --git a/base/mdb/hash.go b/base/mdb/hash.go index 0fbd6a67..fbf48e9c 100644 --- a/base/mdb/hash.go +++ b/base/mdb/hash.go @@ -26,13 +26,15 @@ func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) { defer RLock(m, prefix, chain)() list := map[string]int{} - Richs(m, prefix, chain, FOREACH, func(val Map) { + Richs(m, prefix, chain, FOREACH, func(key string, val Map) { val = kit.GetMeta(val) list[kit.Format(val[field])] += kit.Int(kit.Select("1", val[COUNT])) }) for k, i := range list { - m.Push(field, k) - m.Push(COUNT, i) + if k != "" { + m.Push(field, k) + m.Push(COUNT, i) + } } m.SortIntR(COUNT) } @@ -203,6 +205,12 @@ func HashStatusCloseAction(args ...Any) ice.Actions { }) } +func HashKey(m *ice.Message) string { + if m.Option(HASH) != "" { + return HASH + } + return HashShort(m) +} func HashShort(m *ice.Message) string { return kit.Select(HASH, m.Config(SHORT), m.Config(SHORT) != UNIQ) } @@ -220,14 +228,18 @@ func HashCreate(m *ice.Message, arg ...Any) string { func HashRemove(m *ice.Message, arg ...Any) *ice.Message { args := kit.Simple(arg) if len(args) == 0 { - args = m.OptionSimple(HashShort(m)) + args = m.OptionSimple(HashKey(m)) } else if len(args) == 1 { - args = []string{HashShort(m), args[0]} + args = []string{HashKey(m), args[0]} } return m.Cmdy(DELETE, m.PrefixKey(), "", HASH, args) } func HashModify(m *ice.Message, arg ...Any) *ice.Message { - return m.Cmd(MODIFY, m.PrefixKey(), "", HASH, m.OptionSimple(HashShort(m)), HashArgs(m, arg...)) + args := HashArgs(m, arg...) + if args[0] != HashShort(m) && args[0] != HASH { + args = append(m.OptionSimple(HashKey(m)), args...) + } + return m.Cmd(MODIFY, m.PrefixKey(), "", HASH, args) } func HashSelect(m *ice.Message, arg ...string) *ice.Message { m.Fields(len(kit.Slice(arg, 0, 1)), HashField(m)) diff --git a/base/ssh/script.go b/base/ssh/script.go index 8316f915..4f604a50 100644 --- a/base/ssh/script.go +++ b/base/ssh/script.go @@ -111,7 +111,7 @@ func (f *Frame) scan(m *ice.Message, h, line string) *Frame { if m.I, m.O = f.stdin, f.stdout; h == STDIO { gdb.Event(m, SOURCE_STDIO) - m.Sleep("1.1s") + m.Sleep("2.1s") } bio := bufio.NewScanner(f.stdin) diff --git a/base/tcp/port.go b/base/tcp/port.go index de435b46..d9a84049 100644 --- a/base/tcp/port.go +++ b/base/tcp/port.go @@ -3,6 +3,7 @@ package tcp import ( "net" "path" + "strings" ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/aaa" @@ -76,7 +77,7 @@ func init() { m.Push(mdb.TIME, value[mdb.TIME]) m.Push(PORT, port) m.Push(nfs.SIZE, value[nfs.SIZE]) - m.Push(ice.BIN, bin) + m.Push(ice.BIN, strings.TrimPrefix(bin, value[nfs.PATH])) }) m.SortInt(PORT) m.PushAction(nfs.TRASH) diff --git a/base/web/dream.go b/base/web/dream.go index 7bec4219..6a759775 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -49,14 +49,12 @@ func _dream_list(m *ice.Message) *ice.Message { func _dream_show(m *ice.Message, name string) { if m.Warn(name == "") { - return + return } if !strings.Contains(name, "-") || !strings.HasPrefix(name, "20") { name = m.Time("20060102-") + name } defer m.ProcessOpen(MergePod(m, m.Option(mdb.NAME, name))) - defer m.Echo(MergePod(m, m.Option(mdb.NAME, name))) - // defer m.PushRefresh() p := path.Join(ice.USR_LOCAL_WORK, name) if pid := m.Cmdx(nfs.CAT, path.Join(p, ice.Info.PidPath)); pid != "" && nfs.ExistsFile(m, "/proc/"+pid) { @@ -102,8 +100,8 @@ func _dream_show(m *ice.Message, name string) { m.Optionv(cli.CMD_OUTPUT, path.Join(p, ice.BIN_BOOT_LOG)) defer ToastProcess(m)() - bin := kit.Select(os.Args[0], cli.SystemFind(m, ice.ICE_BIN, kit.Path(path.Join(p, ice.BIN)), kit.Path(ice.BIN))) - m.Cmd(cli.DAEMON, bin, SPACE, tcp.DIAL, ice.DEV, ice.OPS, m.OptionSimple(mdb.NAME, RIVER)) + bin := kit.Select(os.Args[0], cli.SystemFind(m, ice.ICE_BIN, nfs.PWD+path.Join(p, ice.BIN), nfs.PWD+ice.BIN)) + m.Cmd(cli.DAEMON, bin, SPACE, tcp.DIAL, ice.DEV, ice.OPS, m.OptionSimple(mdb.NAME, RIVER), "daemon", "ops") defer gdb.Event(m, DREAM_CREATE, m.OptionSimple(mdb.TYPE, mdb.NAME)) m.Option(cli.CMD_OUTPUT, "") @@ -150,8 +148,8 @@ func init() { }}, cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { m.Cmd(SPACE, mdb.MODIFY, m.OptionSimple(mdb.NAME), mdb.STATUS, cli.STOP) - m.Cmd(SPACE, m.Option(mdb.NAME), ice.EXIT) - m.ProcessRefresh3s() + m.Go(func() { m.Cmd(SPACE, m.Option(mdb.NAME), ice.EXIT) }) + m.Sleep3s() }}, DREAM_STOP: {Name: "dream.stop type name", Help: "停止", Hand: func(m *ice.Message, arg ...string) { if m.CmdAppend(SPACE, m.Option(mdb.NAME), mdb.STATUS) == cli.STOP { @@ -186,7 +184,7 @@ fi require miss.sh ish_miss_prepare_compile ish_miss_prepare_develop -ish_miss_prepare_install +ish_miss_prepare_operate -ish_miss_make; if [ -n "$*" ]; then ./bin/ice.bin forever serve "$@"; fi +ish_miss_make; if [ -n "$*" ]; then ish_miss_serve "$@"; fi ` diff --git a/base/web/serve.go b/base/web/serve.go index 2109ec67..d8708b59 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -62,7 +62,7 @@ func _serve_rewrite(m *ice.Message) { }) } func _serve_domain(m *ice.Message) string { - if p := m.Config(DOMAIN); p != "" { + if p := ice.Info.Domain; p != "" { return p } if p := m.R.Header.Get("X-Host"); p != "" { @@ -332,7 +332,7 @@ func init() { Index.Merge(&ice.Context{Configs: ice.Configs{ SERVE: {Name: SERVE, Help: "服务器", Value: kit.Data( mdb.SHORT, mdb.NAME, mdb.FIELD, "time,status,name,proto,host,port,dev", - DOMAIN, "", tcp.LOCALHOST, ice.TRUE, LOGHEADERS, ice.FALSE, + tcp.LOCALHOST, ice.TRUE, LOGHEADERS, ice.FALSE, nfs.PATH, kit.Dict(ice.PS, ice.USR_VOLCANOS), ice.VOLCANOS, kit.Dict(nfs.PATH, ice.USR_VOLCANOS, INDEX, "page/index.html", nfs.REPOS, "https://shylinux.com/x/volcanos", nfs.BRANCH, nfs.MASTER, @@ -353,12 +353,13 @@ func init() { }}, ssh.SOURCE_STDIO: {Name: "source.stdio", Help: "终端", Hand: func(m *ice.Message, arg ...string) { m.Go(func() { - m.Sleep("1s") + m.Sleep("2s") m.Cmd(ssh.PRINTF, kit.Dict(nfs.CONTENT, ice.Render(m, ice.RENDER_QRCODE, m.Cmdx(SPACE, DOMAIN))+ice.NL)) }) }}, DOMAIN: {Name: "domain", Help: "域名", Hand: func(m *ice.Message, arg ...string) { - ice.Info.Domain = m.Conf(SHARE, kit.Keym(DOMAIN, m.Config(DOMAIN, arg[0]))) + m.Config(tcp.LOCALHOST, ice.FALSE) + ice.Info.Domain = arg[0] }}, SPIDE: {Name: "spide", Help: "架构图", Hand: func(m *ice.Message, arg ...string) { if len(arg) == 0 { // 模块列表 diff --git a/base/web/space.go b/base/web/space.go index 93cf6d1d..ed1fa609 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -17,7 +17,7 @@ import ( ) func _space_domain(m *ice.Message) (link string) { - if link = m.Config(DOMAIN); link == "" { + if link = ice.Info.Domain; link == "" { link = m.Cmd(SPACE, ice.OPS, cli.PWD).Append(mdb.LINK) } if link == "" { @@ -236,7 +236,9 @@ func _space_fork(m *ice.Message) { case WORKER: // 工作节点 gdb.Event(m, DREAM_START, args) defer gdb.Event(m, DREAM_STOP, args) - defer m.Cmd(DREAM, DREAM_STOP, args) + if m.Option("daemon") == "ops" { + defer m.Cmd(DREAM, DREAM_STOP, args) + } default: // 服务节点 gdb.Event(m, SPACE_START, args) defer gdb.Event(m, SPACE_STOP, args) @@ -321,7 +323,7 @@ func init() { m.EchoQRCode(m.Option(ice.MSG_USERWEB)) }}, tcp.DIAL: {Name: "dial dev=ops name", Help: "连接", Hand: func(m *ice.Message, arg ...string) { - _space_dial(m, m.Option(ice.DEV), kit.Select(ice.Info.NodeName, m.Option(mdb.NAME))) + _space_dial(m, m.Option(ice.DEV), kit.Select(ice.Info.NodeName, m.Option(mdb.NAME)), arg...) }}, DOMAIN: {Name: "domain", Help: "域名", Hand: func(m *ice.Message, arg ...string) { m.Echo(_space_domain(m)) diff --git a/core/code/xterm.go b/core/code/xterm.go index 49d9b9f1..3223c032 100644 --- a/core/code/xterm.go +++ b/core/code/xterm.go @@ -24,15 +24,17 @@ func _xterm_socket(m *ice.Message, h, t string) { m.Option(mdb.TEXT, t) } func _xterm_get(m *ice.Message, h string, must bool) *os.File { + t := mdb.HashSelectField(m, m.Option(mdb.HASH, h), mdb.TYPE) if f, ok := mdb.HashTarget(m, h, func() ice.Any { if !must { return nil } - ls := kit.Split(kit.Select("sh", m.Option(mdb.TYPE))) + ls := kit.Split(kit.Select("sh", t)) + m.Logs(cli.DAEMON, ice.CMD, ls) cmd := exec.Command(cli.SystemFind(m, ls[0]), ls[1:]...) + m.Logs(cli.DAEMON, ice.CMD, cmd.Path) cmd.Env = append(os.Environ(), "TERM=xterm") - m.Option(mdb.HASH, h) tty, err := pty.Start(cmd) m.Assert(err) @@ -76,45 +78,41 @@ func init() { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch mdb.HashInputs(m, arg); arg[0] { case mdb.TYPE: - m.Push(arg[0], "python", "node", "bash", "sh") + m.Push(arg[0], "ice.bin source stdio", "node", "python", "bash", "sh") case mdb.NAME: m.Push(arg[0], path.Base(m.Option(mdb.TYPE))) } }}, mdb.CREATE: {Name: "create type name", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.HashCreate(m, arg, mdb.TEXT, m.Option(ice.MSG_DAEMON)) - _xterm_get(m, m.Result(), true) }}, mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - if f := _xterm_get(m, m.Option(mdb.HASH), false); f != nil { - f.Close() - } - mdb.HashRemove(m, m.OptionSimple(mdb.HASH)) - }}, - mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - mdb.HashModify(m, m.OptionSimple(mdb.HASH), arg) - }}, - mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { - }}, - "resize": {Name: "resize", Help: "大小", Hand: func(m *ice.Message, arg ...string) { - pty.Setsize(_xterm_get(m, m.Option(mdb.HASH), true), &pty.Winsize{Rows: uint16(kit.Int(m.Option("rows"))), Cols: uint16(kit.Int(m.Option("cols")))}) + mdb.HashSelectDetail(m, m.Option(mdb.HASH), func(value ice.Map) { + if c, ok := value["_cmd"].(io.Closer); ok { + c.Close() + } + }) + mdb.HashRemove(m) }}, "rename": {Name: "rename", Help: "重命名", Hand: func(m *ice.Message, arg ...string) { mdb.HashModify(m, arg) }}, + "resize": {Name: "resize", Help: "大小", Hand: func(m *ice.Message, arg ...string) { + pty.Setsize(_xterm_get(m, m.Option(mdb.HASH), true), &pty.Winsize{Rows: uint16(kit.Int(m.Option("rows"))), Cols: uint16(kit.Int(m.Option("cols")))}) + }}, "select": {Name: "select", Help: "连接", Hand: func(m *ice.Message, arg ...string) { mdb.HashModify(m, mdb.TEXT, m.Option(ice.MSG_DAEMON)) + _xterm_get(m, m.Option(mdb.HASH), true) m.Cmd("", "input", arg) }}, "input": {Name: "input", Help: "输入", Hand: func(m *ice.Message, arg ...string) { - mdb.HashModify(m, mdb.TIME, m.Time()) - if b, e := base64.StdEncoding.DecodeString(strings.Join(arg, "")); m.Assert(e) { + if b, e := base64.StdEncoding.DecodeString(strings.Join(arg, "")); !m.Warn(e) { _xterm_get(m, m.Option(mdb.HASH), true).Write(b) + mdb.HashModify(m, mdb.TIME, m.Time()) } }}, - }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,extra"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) { - mdb.HashSelect(m, kit.Slice(arg, 0, 1)...) - ctx.DisplayLocal(m, "") + }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) { + ctx.DisplayLocal(mdb.HashSelect(m, kit.Slice(arg, 0, 1)...), "") }}, }) } diff --git a/misc/java/compile.go b/misc/java/compile.go index 1eb7d67b..c2dbae30 100644 --- a/misc/java/compile.go +++ b/misc/java/compile.go @@ -18,7 +18,7 @@ const ( type compile struct { ice.Code regexp string `data:".*.java"` - linux string `data:"https://mirrors.tencent.com/repository/generic/konajdk/8/0/10/linux-x86_64/b1/TencentKona8.0.10.b1_jdk_linux-x86_64_8u332.tar.gz"` + linux string `data:"https://github.com/Tencent/TencentKona-8/releases/download/8.0.11-GA/TencentKona8.0.11.b2_jdk_linux-x86_64_8u345.tar.gz"` list string `name:"list path auto listScript order install" help:"编译器"` } diff --git a/misc/java/compile.shy b/misc/java/compile.shy index 9f267ef7..fceb06dc 100644 --- a/misc/java/compile.shy +++ b/misc/java/compile.shy @@ -7,3 +7,8 @@ refer ` ` field web.code.java.compile +spark shell ` +wget https://github.com/Tencent/TencentKona-8/releases/download/8.0.11-GA/TencentKona8.0.11.b2_jdk_linux-x86_64_8u345.tar.gz +tar xvf TencentKona8.0.11.b2_jdk_linux-x86_64_8u345.tar.gz && cd TencentKona-8.0.11-345/ +` + diff --git a/misc/tmux/session.go b/misc/tmux/session.go index b8c18b0c..e7e43cbf 100644 --- a/misc/tmux/session.go +++ b/misc/tmux/session.go @@ -117,8 +117,11 @@ func init() { name = _tmux_key(m.Option(mdb.NAME), name) _tmux_cmd(m, SPLIT_WINDOW, "-t", kit.Keys(name, "1"), "-p", "40") - _tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "2"), "ish_miss_log", ENTER) - _tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "1"), "vi etc/miss.sh", ENTER) + m.Go(func() { + m.Sleep("1s") + _tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "2"), "ish_miss_log", ENTER) + _tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "1"), "vi etc/miss.sh", ENTER) + }) _tmux_cmd(m, LINK_WINDOW, "-s", name, "-t", "miss:") }