From 2f84ef4c0e0a5a4bd322cbe5983184f92c8e2ff5 Mon Sep 17 00:00:00 2001 From: shy Date: Mon, 29 Jan 2024 15:07:55 +0800 Subject: [PATCH] opt some --- base/aaa/email.go | 2 +- base/aaa/role.go | 2 +- base/cli/mirrors.go | 2 ++ base/cli/runtime.go | 31 ++++++++++++++++++++++++---- base/web/serve.go | 2 +- base/web/share.go | 2 +- base/web/space.go | 2 +- base/web/token.go | 2 +- misc/ssh/relay/relay.go | 45 +++++++++++++++++------------------------ misc/webview/webview.go | 14 +------------ 10 files changed, 55 insertions(+), 49 deletions(-) diff --git a/base/aaa/email.go b/base/aaa/email.go index c35768db..1cb727a1 100644 --- a/base/aaa/email.go +++ b/base/aaa/email.go @@ -49,7 +49,7 @@ func init() { auth := smtp.PlainAuth("", msg.Append(USERNAME), msg.Append(PASSWORD), kit.Split(msg.Append(SERVICE), ice.DF)[0]) m.Logs(EMAIL, SEND, string(content)).Warn(smtp.SendMail(msg.Append(SERVICE), auth, msg.Append(USERNAME), kit.Split(m.Option(TO)), content)) }}, - }, mdb.DevDataAction("name,service,username,password"), mdb.ImportantHashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,service,username", ice.ACTION, SEND)), Hand: func(m *ice.Message, arg ...string) { + }, mdb.DevDataAction("name,service,username,password"), mdb.HashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,service,username", ice.ACTION, SEND)), Hand: func(m *ice.Message, arg ...string) { if mdb.HashSelect(m, arg...); len(arg) == 0 && m.Length() == 0 { m.EchoInfoButton(ice.Info.Template(m, "email.html"), mdb.CREATE, mdb.DEV_REQUEST) } else if len(arg) == 0 { diff --git a/base/aaa/role.go b/base/aaa/role.go index 7fa0226e..104416eb 100644 --- a/base/aaa/role.go +++ b/base/aaa/role.go @@ -125,7 +125,7 @@ func init() { m.Push(ice.CMD, cmd).Push("actions", kit.Join(action)) }) }}, - }, mdb.ImportantHashAction(mdb.SHORT, mdb.NAME)), Hand: func(m *ice.Message, arg ...string) { + }, mdb.HashAction(mdb.SHORT, mdb.NAME)), Hand: func(m *ice.Message, arg ...string) { _role_list(m, kit.Select("", arg, 0), kit.Slice(arg, 1)...).PushAction(mdb.DELETE) }}, }) diff --git a/base/cli/mirrors.go b/base/cli/mirrors.go index b3a02d98..50696d89 100644 --- a/base/cli/mirrors.go +++ b/base/cli/mirrors.go @@ -1,6 +1,7 @@ package cli import ( + "os" "runtime" "strings" @@ -76,6 +77,7 @@ func init() { case strings.Contains(_release, ALPINE): m.Cmdy(nfs.CAT, ETC_APK_REPOS) } + m.EchoScript(kit.Format("cd %s; %s", kit.Path(""), kit.JoinCmds(kit.Simple(kit.Path(os.Args[0]), os.Args[1:])...))) }}, }) } diff --git a/base/cli/runtime.go b/base/cli/runtime.go index 86161f6b..4a9ecb27 100644 --- a/base/cli/runtime.go +++ b/base/cli/runtime.go @@ -29,6 +29,14 @@ func _runtime_init(m *ice.Message) { m.Conf(RUNTIME, kit.Keys(HOST, PWD), kit.Path("")) m.Conf(RUNTIME, kit.Keys(HOST, HOME), kit.HomePath("")) m.Conf(RUNTIME, kit.Keys(HOST, MAXPROCS), runtime.GOMAXPROCS(0)) + nfs.Exists(m, "/proc/meminfo", func(p string) { + kit.For(kit.SplitLine(m.Cmdx(nfs.CAT, p)), func(p string) { + switch ls := kit.Split(p, ": "); ls[0] { + case "MemTotal", "MemFree", "MemAvailable", "Buffers", "Cached": + m.Conf(RUNTIME, kit.Keys(HOST, ls[0]), kit.FmtSize(kit.Int(ls[1])*1024)) + } + }) + }) kit.For(ENV_LIST, func(k string) { m.Conf(RUNTIME, kit.Keys(CONF, k), kit.Env(k)) kit.If(k == CTX_PID, func() { ice.Info.PidPath = kit.Env(k) }) @@ -50,9 +58,9 @@ func _runtime_init(m *ice.Message) { ice.Info.System = m.Conf(RUNTIME, kit.Keys(HOST, OSID)) aaa.UserRoot(ice.Pulse, "", ice.Info.Make.Username, aaa.TECH, ice.DEV) aaa.UserRoot(ice.Pulse, "", ice.Info.Username, aaa.ROOT, ice.OPS) + m.Conf(RUNTIME, kit.Keys(BOOT, mdb.TIME), m.Time()) if runtime.GOARCH != MIPSLE { msg := m.Cmd(nfs.DIR, _system_find(m, os.Args[0]), "time,path,size,hash") - m.Conf(RUNTIME, kit.Keys(BOOT, mdb.TIME), msg.Append(mdb.TIME)) m.Conf(RUNTIME, kit.Keys(BOOT, mdb.HASH), msg.Append(mdb.HASH)) m.Conf(RUNTIME, kit.Keys(BOOT, nfs.SIZE), msg.Append(nfs.SIZE)) m.Conf(RUNTIME, kit.Keys(BOOT, ice.BIN), msg.Append(nfs.PATH)) @@ -70,9 +78,17 @@ func _runtime_hostinfo(m *ice.Message) { m.Push("NumGoroutine", runtime.NumGoroutine()) var stats runtime.MemStats runtime.ReadMemStats(&stats) - m.Push("Sys", kit.FmtSize(int64(stats.Sys))) - m.Push("Alloc", kit.FmtSize(int64(stats.Alloc))) + m.Push("Sys", kit.FmtSize(stats.Sys)) + m.Push("Alloc", kit.FmtSize(stats.Alloc)) + m.Push("TotalAlloc", kit.FmtSize(stats.TotalAlloc)) m.Push("Objects", stats.HeapObjects) + m.Push("StackSys", kit.FmtSize(stats.StackSys)) + m.Push("StackInuse", kit.FmtSize(stats.StackInuse)) + m.Push("HeapSys", kit.FmtSize(stats.HeapSys)) + m.Push("HeapInuse", kit.FmtSize(stats.HeapInuse)) + m.Push("HeapIdle", kit.FmtSize(stats.HeapIdle)) + m.Push("HeapReleased", kit.FmtSize(stats.HeapReleased)) + m.Push("NumGC", stats.NumGC) m.Push("LastGC", time.Unix(int64(stats.LastGC)/int64(time.Second), int64(stats.LastGC)%int64(time.Second))) m.Push("uptime", kit.Split(m.Cmdx(SYSTEM, "uptime"), mdb.FS)[0]) @@ -249,7 +265,14 @@ func init() { } var stats runtime.MemStats runtime.ReadMemStats(&stats) - m.StatusTimeCount(status, "GOMAXPROCS", runtime.GOMAXPROCS(0), "NumGC", stats.NumGC, "Alloc", kit.FmtSize(int64(stats.Alloc)), "Sys", kit.FmtSize(int64(stats.Sys))) + m.StatusTimeCount(status, "GOMAXPROCS", runtime.GOMAXPROCS(0), "NumGC", stats.NumGC, + "Sys", kit.FmtSize(stats.Sys), + "Alloc", kit.FmtSize(stats.Alloc), + "StackSys", kit.FmtSize(stats.StackSys), + "StackInuse", kit.FmtSize(stats.StackInuse), + "HeapSys", kit.FmtSize(stats.HeapSys), + "HeapInuse", kit.FmtSize(stats.HeapInuse), + ) m.Echo("%v", string(buf)) }}, "upgrade": {Help: "升级", Hand: func(m *ice.Message, arg ...string) { diff --git a/base/web/serve.go b/base/web/serve.go index 5d6e6211..1981d6b3 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -31,7 +31,7 @@ func _serve_start(m *ice.Message) { kit.If(runtime.GOOS == cli.WINDOWS || m.Cmdx(cli.SYSTEM, "lsof", "-i", ":"+m.Option(tcp.PORT)) != "", func() { m.Go(func() { m.Cmd(SPIDE, ice.OPS, _serve_address(m)+"/exit", ice.Maps{CLIENT_TIMEOUT: "30ms"}) }).Sleep300ms() }) - cli.NodeInfo(m, kit.Select(strings.TrimSuffix(ice.Info.Hostname, ".local"), m.Option(tcp.NODENAME)), SERVER) + cli.NodeInfo(m, kit.Select(kit.Split(ice.Info.Hostname, ".")[0], m.Option(tcp.NODENAME)), SERVER) m.Start("", m.OptionSimple(tcp.HOST, tcp.PORT)...) m.Cmd(nfs.SAVE, ice.VAR_LOG_ICE_PORT, m.Option(tcp.PORT)) kit.For(kit.Split(m.Option(ice.DEV)), func(dev string) { diff --git a/base/web/share.go b/base/web/share.go index f1a72857..8243d4b9 100644 --- a/base/web/share.go +++ b/base/web/share.go @@ -120,7 +120,7 @@ func init() { RenderMain(m) } }}, - }, mdb.ImportantHashAction(mdb.FIELD, "time,hash,type,name,text,usernick,username,userrole", mdb.EXPIRE, mdb.DAYS)), Hand: func(m *ice.Message, arg ...string) { + }, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,usernick,username,userrole", mdb.EXPIRE, mdb.DAYS)), Hand: func(m *ice.Message, arg ...string) { if kit.IsIn(m.Option(ice.MSG_USERROLE), aaa.ROOT, aaa.TECH) || len(arg) > 0 && arg[0] != "" { mdb.HashSelect(m, arg...) } diff --git a/base/web/space.go b/base/web/space.go index e71534c6..b6ce7e57 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -81,7 +81,7 @@ func _space_fork(m *ice.Message) { } else if kit.IsIn(m.Option(mdb.TYPE), WORKER) && IsLocalHost(m) { text = nfs.USR_LOCAL_WORK + name } else { - name, text = kit.Hashs(name), kit.Select(addr, m.Option(mdb.NAME), m.Option(mdb.TEXT)) + name, text = kit.Hashs(name), kit.Select(addr, m.Option(mdb.TEXT)) } safe := false if m.Option(ice.MSG_USERNAME, ""); kit.IsIn(m.Option(mdb.TYPE), WORKER, PORTAL) { diff --git a/base/web/token.go b/base/web/token.go index c3cbc020..34a0adb7 100644 --- a/base/web/token.go +++ b/base/web/token.go @@ -16,7 +16,7 @@ const TOKEN = "token" func init() { Index.MergeCommands(ice.Commands{ - TOKEN: {Help: "令牌桶", Actions: mdb.ImportantHashAction(mdb.SHORT, mdb.UNIQ, mdb.EXPIRE, mdb.MONTH)}, + TOKEN: {Help: "令牌桶", Actions: mdb.HashAction(mdb.SHORT, mdb.UNIQ, mdb.EXPIRE, mdb.MONTH)}, }) } diff --git a/misc/ssh/relay/relay.go b/misc/ssh/relay/relay.go index 7b6f4b86..943d136e 100644 --- a/misc/ssh/relay/relay.go +++ b/misc/ssh/relay/relay.go @@ -2,7 +2,6 @@ package relay import ( "net/http" - "net/url" "os" "path" "strings" @@ -62,7 +61,7 @@ type relay struct { ice.Code checkbox string `data:"true"` short string `data:"machine"` - field string `data:"time,machine,username,host,port,portal,dream,module,version,commitTime,compileTime,bootTime,package,shell,kernel,arch,ncpu,vcpu,mhz,mem,disk,network,listen,socket,proc,vendor"` + field string `data:"time,machine,username,host,port,portal,dream,module,version,commitTime,compileTime,bootTime,go,git,package,shell,kernel,arch,ncpu,vcpu,mhz,mem,disk,network,listen,socket,proc,vendor"` statsTables string `name:"statsTables" event:"stats.tables"` create string `name:"create machine* username* host* port*=22"` stats string `name:"stats machine" help:"采集" icon:"bi bi-pc-display"` @@ -73,7 +72,7 @@ type relay struct { publish string `name:"publish" help:"发布" icon:"bi bi-send-check"` list string `name:"list machine auto" help:"机器" icon:"relay.png"` install string `name:"install dream param" help:"安装"` - pushbin string `name:"pushbin dream param" help:"部署"` + pushbin string `name:"pushbin dream param" help:"部署" icon:"bi bi-box-arrow-in-up"` adminCmd string `name:"adminCmd cmd" help:"命令" icon:"bi bi-terminal-plus"` } @@ -111,18 +110,20 @@ func (s relay) Inputs(m *ice.Message, arg ...string) { } func (s relay) Stats(m *ice.Message) { m.Option(ice.MSG_TITLE, kit.Keys(m.CommandKey(), m.ActionKey())) - cmds := []string{ - PACKAGE, `if yum -h &>/dev/null; then echo yum; elif apk version &>/dev/null; then echo apk; elif apt -h &>/dev/null; then echo apt; fi`, + cmds := []string{"go", `go version`, "git", `git version`, + PACKAGE, `if yum -h &>/dev/null; then echo yum; elif apk version &>/dev/null; then echo apk; elif opkg -v &>/dev/null; then echo opkg; elif apt -h &>/dev/null; then echo apt; fi`, SHELL, `echo $SHELL`, KERNEL, `uname -s`, ARCH, `uname -m`, NCPU, `cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`, VCPU, `cat /proc/cpuinfo | grep "processor" | sort | uniq | wc -l`, - MHZ, `cat /proc/cpuinfo | grep "cpu MHz" | grep -o "[0-9.]\+" | sort -nr | head -n1`, + MHZ, `cat /proc/cpuinfo | grep "\(cpu MHz\|BogoMIPS\)" | grep -o "[0-9.]\+" | sort -nr | head -n1`, MEM, `cat /proc/meminfo | head -n2 | grep -o "[0-9.]*"`, DISK, `df | grep "^/dev/"`, NETWORK, `cat /proc/net/dev | grep "eth0\|eth1" | sort -r | head -n1`, LISTEN, `netstat -ntl 2>/dev/null | grep "^tcp" | grep -o ":[0-9]\+" | grep -o "[0-9]\+" | sort -n | uniq`, - SOCKET, `netstat -nt 2>/dev/null | grep "^tcp" | wc -l`, PROC, `ps aux | wc -l`, + SOCKET, `netstat -nt 2>/dev/null | grep "^tcp" | wc -l`, PROC, `ps aux | wc -l 2>/dev/null`, } trans := map[string]func([]string) string{ + "go": func(ls []string) string { return kit.Select("", ls, 2) }, + "git": func(ls []string) string { return kit.Select("", ls, 2) }, MEM: func(ls []string) string { return kit.FmtSize(kit.Int(kit.Select("", ls, 1))*1024, kit.Int(kit.Select("", ls, 0))*1024) }, @@ -132,6 +133,9 @@ func (s relay) Stats(m *ice.Message) { NETWORK: func(ls []string) string { return kit.FmtSize(kit.Int(kit.Select("", ls, 1)), kit.Int(kit.Select("", ls, 9))) }, + PROC: func(ls []string) string { + return kit.Format(kit.Int(ls[0])) + }, } machine := m.Option(MACHINE) web.GoToast(m.Message, "", func(toast func(string, int, int)) []string { @@ -247,7 +251,7 @@ func (s relay) List(m *ice.Message, arg ...string) *ice.Message { return } m.Push(web.LINK, web.HostPort(m.Message, value[tcp.HOST], value[web.PORTAL])) - m.PushButton(s.Admin, s.Dream, s.Vimer, s.AdminCmd, s.Login, s.Upgrade, s.Pushbin, s.Xterm, s.Remove) + m.PushButton(s.Admin, s.Dream, s.Vimer, s.Login, s.Upgrade, s.Pushbin, s.AdminCmd, s.Xterm, s.Remove) kit.If(len(arg) > 0, func() { m.PushQRCode(cli.QRCODE, m.Append(web.LINK)) }) }) _stats := kit.Dict(MEM, kit.FmtSize(stats[MEM_FREE], stats[MEM_TOTAL]), DISK, kit.FmtSize(stats[DISK_USED], stats[DISK_TOTAL])) @@ -299,7 +303,7 @@ func (s relay) Login(m *ice.Message, arg ...string) { } else { defer web.ToastProcess(m.Message)() ssh.CombinedOutput(m.Message, s.admins(m, kit.JoinCmds(web.SHARE, mdb.CREATE, mdb.TYPE, aaa.LOGIN, "--", mdb.TEXT, m.Option(ice.BACK))), func(res string) { - m.ProcessReplace(MergeURL2(m, m.Option(ice.BACK), "/share/"+strings.TrimSpace(res))) + m.ProcessReplace(kit.MergeURL2(m.Option(ice.BACK), "/share/"+strings.TrimSpace(res))) }) } } @@ -316,6 +320,9 @@ func (s relay) Upgrade(m *ice.Message, arg ...string) { m.Option(ice.MSG_TITLE, kit.Keys(m.CommandKey(), m.ActionKey())) if len(arg) == 0 && (m.Option(MACHINE) == "" || strings.Contains(m.Option(MACHINE), ",")) { s.foreach(m, func(msg *ice.Message, cmd []string) { + if msg.Option("go") == "" { + return + } ssh.PushShell(msg.Message, strings.Split(msg.Template(UPGRADE_SH), lex.NL), func(res string) { web.PushNoticeGrow(m.Options(ice.MSG_COUNT, "0", ctx.DISPLAY, web.PLUGIN_XTERM).Message, res) }) @@ -327,6 +334,9 @@ func (s relay) Upgrade(m *ice.Message, arg ...string) { func (s relay) Version(m *ice.Message, arg ...string) { m.Option(ice.MSG_TITLE, kit.Keys(m.CommandKey(), m.ActionKey())) s.foreach(m, func(msg *ice.Message, cmd []string) { + if msg.Option("go") == "" { + return + } ssh.PushShell(msg.Message, strings.Split(msg.Template(VERSION_SH), lex.NL), func(res string) { web.PushNoticeGrow(m.Options(ctx.DISPLAY, web.PLUGIN_XTERM).Message, res) }) @@ -387,20 +397,3 @@ func (s relay) admin(m *ice.Message, arg ...string) string { func (s relay) admins(m *ice.Message, arg ...string) string { return kit.Select(ice.CONTEXTS, m.Option(web.DREAM)) + nfs.PS + s.admin(m, arg...) } -func MergeURL2(m *ice.Message, str string, uri string, arg ...ice.Any) string { - raw, err := url.Parse(str) - m.Debug("what %v", err) - if err != nil { - return kit.MergeURL(uri, arg...) - } - get, err := url.Parse(uri) - m.Debug("what %v", err) - if err != nil { - return kit.MergeURL(str, arg...) - } - p := get.Path - m.Debug("what %v", p) - kit.If(!strings.HasPrefix(p, nfs.PS), func() { p = path.Join(raw.Path, get.Path) }) - kit.If(p == nfs.PS, func() { p = "" }) - return kit.MergeURL(kit.Select(raw.Scheme, get.Scheme)+"://"+kit.Select(raw.Host, get.Host)+p+"?"+kit.Select(raw.RawQuery, get.RawQuery), arg...) -} diff --git a/misc/webview/webview.go b/misc/webview/webview.go index 8be38097..f17d42c9 100644 --- a/misc/webview/webview.go +++ b/misc/webview/webview.go @@ -1,9 +1,6 @@ package webview import ( - "fmt" - "io" - "os" "path" "strings" @@ -96,18 +93,9 @@ func Run(cb func(*WebView) ice.Any) { } kit.If(!view.Menu(), func() { view.navigate(ice.Pulse.Cmdv(web.SPIDE, ice.OPS, web.CLIENT_ORIGIN)) }) } - -var log io.WriteCloser - -func Log(str string, arg ...ice.Any) { fmt.Fprintln(log, kit.Format(str, arg...), kit.FileLine(2, 3)) } - func RunServe() { kit.Setenv(cli.PATH, "/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin") - for _, p := range []string{ice.Info.Make.Path, kit.HomePath(ice.CONTEXTS)} { - kit.Chdir(p) - log, _ = os.Create(path.Join(p, "webview.log")) - Log("what %v", p) - } + kit.Chdir(kit.HomePath(ice.CONTEXTS)) wait := make(chan bool, 1) ice.Pulse.Optionv(web.SERVE_START, func() { wait <- true }) go ice.Run(ice.SERVE, ice.START)