From 356d3b1670655b86415e4dadff6347c93a557aae Mon Sep 17 00:00:00 2001 From: shylinux Date: Sun, 26 Mar 2023 22:17:58 +0800 Subject: [PATCH] opt serve --- base/tcp/broad.go | 1 + base/web/broad.go | 19 +++++++++++-------- base/web/dream.go | 21 +++++---------------- base/web/serve.go | 8 +++----- base/web/space.go | 13 ++++++------- core/code/repos.go | 6 ++++++ 6 files changed, 32 insertions(+), 36 deletions(-) diff --git a/base/tcp/broad.go b/base/tcp/broad.go index 60ae0cb8..59ea92a7 100644 --- a/base/tcp/broad.go +++ b/base/tcp/broad.go @@ -52,3 +52,4 @@ func UDPAddr(m *ice.Message, host, port string) *net.UDPAddr { } return nil } +func HostPort(host, port string) string { return host + ice.DF + port } diff --git a/base/web/broad.go b/base/web/broad.go index 30ccd10d..5f18fd76 100644 --- a/base/web/broad.go +++ b/base/web/broad.go @@ -13,10 +13,10 @@ import ( kit "shylinux.com/x/toolkits" ) -func _broad_send(m *ice.Message, remote_host, remote_port string, host, port string, arg ...string) { - m.Cmd(tcp.CLIENT, tcp.DIAL, mdb.TYPE, tcp.UDP4, tcp.HOST, remote_host, tcp.PORT, kit.Select("9020", remote_port), func(s *net.UDPConn) { +func _broad_send(m *ice.Message, to_host, to_port string, host, port string, arg ...string) { + m.Cmd(tcp.CLIENT, tcp.DIAL, mdb.TYPE, tcp.UDP4, tcp.HOST, to_host, tcp.PORT, kit.Select("9020", to_port), func(s *net.UDPConn) { msg := m.Spawn(kit.Dict(tcp.HOST, host, tcp.PORT, port, arg)) - msg.Logs(tcp.SEND, BROAD, msg.FormatsMeta(nil), nfs.TO, remote_host+ice.DF+remote_port).FormatsMeta(s) + msg.Logs(tcp.SEND, BROAD, msg.FormatsMeta(nil), nfs.TO, tcp.HostPort(to_host, to_port)).FormatsMeta(s) }) } func _broad_serve(m *ice.Message) { @@ -40,14 +40,13 @@ func init() { BROAD: {Name: "broad hash auto", Help: "广播", Actions: ice.MergeActions(ice.Actions{ mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { if arg[0] == mdb.FOREACH && arg[1] == "" { - host, domain := m.Cmd(tcp.HOST).Append(aaa.IP), OptionUserWeb(m).Hostname() + host, domain := m.Cmdv(tcp.HOST, aaa.IP), OptionUserWeb(m).Hostname() m.Cmds("", func(value ice.Maps) { switch kit.If(value[tcp.HOST] == host, func() { value[tcp.HOST] = domain }); value[mdb.TYPE] { case "sshd": - m.PushSearch(mdb.NAME, ice.Render(m, ice.RENDER_SCRIPT, kit.Format("ssh -p %s %s@%s", value[tcp.PORT], m.Option(ice.MSG_USERNAME), value[tcp.HOST])), - mdb.TEXT, kit.Format("http://%s:%s", value[tcp.HOST], value[tcp.PORT]), value) + m.PushSearch(mdb.NAME, Script(m, "ssh -p %s %s@%s", value[tcp.PORT], m.Option(ice.MSG_USERNAME), value[tcp.HOST]), mdb.TEXT, Domain(value[tcp.HOST], value[tcp.PORT]), value) default: - m.PushSearch(mdb.TEXT, kit.Format("http://%s:%s", value[tcp.HOST], value[tcp.PORT]), value) + m.PushSearch(mdb.TEXT, Domain(value[tcp.HOST], value[tcp.PORT]), value) } }) } @@ -55,9 +54,13 @@ func init() { SERVE_START: {Hand: func(m *ice.Message, arg ...string) { m.Go(func() { m.Cmd("", SERVE, m.OptionSimple(tcp.PORT)) }) }}, SERVE: {Name: "serve port=9020", Hand: func(m *ice.Message, arg ...string) { _broad_serve(m) }}, OPEN: {Hand: func(m *ice.Message, arg ...string) { - ctx.ProcessOpen(m, kit.Format("http://%s:%s", m.Option(tcp.HOST), m.Option(tcp.PORT))) + ctx.ProcessOpen(m, Domain(m.Option(tcp.HOST), m.Option(tcp.PORT))) }}, tcp.SEND: {Hand: func(m *ice.Message, arg ...string) { _broad_send(m, "", "", "", "", arg...) }}, }, mdb.HashAction(mdb.SHORT, "host,port", mdb.FIELD, "time,hash,type,name,host,port", mdb.ACTION, OPEN), mdb.ClearOnExitHashAction())}, }) } +func Domain(host, port string) string { return kit.Format("http://%s:%s", host, port) } +func Script(m *ice.Message, str string, arg ...ice.Any) string { + return ice.Render(m, ice.RENDER_SCRIPT, kit.Format(str, arg...)) +} diff --git a/base/web/dream.go b/base/web/dream.go index 4d3f26b0..775039fc 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -48,27 +48,19 @@ func _dream_show(m *ice.Message, name string) { m.Info("already exists %v", name) return } - _dream_template(m, p) defer ToastProcess(m)() defer m.Sleep300ms() m.Options(cli.CMD_DIR, kit.Path(p), cli.CMD_ENV, kit.Simple( - cli.CTX_OPS, "http://localhost:"+m.Cmdv(SERVE, tcp.PORT), cli.CTX_LOG, ice.VAR_LOG_BOOT_LOG, cli.CTX_PID, ice.VAR_LOG_ICE_PID, + cli.CTX_OPS, Domain(tcp.LOCALHOST, m.Cmdv(SERVE, tcp.PORT)), cli.CTX_LOG, ice.VAR_LOG_BOOT_LOG, cli.CTX_PID, ice.VAR_LOG_ICE_PID, cli.PATH, cli.BinPath(p, ""), cli.USER, ice.Info.Username, kit.EnvSimple(cli.HOME, cli.TERM, cli.SHELL), mdb.Configv(m, cli.ENV), ), cli.CMD_OUTPUT, path.Join(p, ice.VAR_LOG_BOOT_LOG)) defer m.Options(cli.CMD_DIR, "", cli.CMD_ENV, "", cli.CMD_OUTPUT, "") gdb.Event(m, DREAM_CREATE, m.OptionSimple(mdb.NAME, mdb.TYPE)) + kit.If(m.Option(nfs.TEMPLATE), func() { _dream_template(m, p) }) m.Cmd(cli.DAEMON, kit.Select(kit.Path(os.Args[0]), cli.SystemFind(m, ice.ICE_BIN, nfs.PWD+path.Join(p, ice.BIN), nfs.PWD+ice.BIN)), SPACE, tcp.DIAL, ice.DEV, ice.OPS, mdb.TYPE, WORKER, m.OptionSimple(mdb.NAME), cli.DAEMON, ice.OPS) } func _dream_template(m *ice.Message, p string) { - if m.Option(nfs.REPOS) != "" { - m.Cmd(cli.SYSTEM, "git", "clone", m.Option(nfs.REPOS), p) - } else { - nfs.MkdirAll(m, p) - } - if m.Option(nfs.TEMPLATE) == "" { - return - } kit.For([]string{ice.ETC_MISS_SH, ice.LICENSE, ice.MAKEFILE, ice.README_MD, ice.GO_MOD, ice.GO_SUM, ice.SRC_MAIN_GO, ice.SRC_MAIN_SH, ice.SRC_MAIN_SHY, ice.SRC_MAIN_JS, @@ -112,11 +104,11 @@ func init() { if msg := m.Cmd(SPIDE, ice.OPS, SPIDE_MSG, UserHost(m)+"/x/list"); !msg.IsErr() { m.Copy(msg) } - for _, dev := range []string{ice.OPS, ice.DEV, ice.SHY} { + kit.For([]string{ice.OPS, ice.DEV, ice.SHY}, func(dev string) { if msg := m.Cmd(SPIDE, dev, SPIDE_MSG, "/x/list"); !msg.IsErr() { m.Copy(msg) } - } + }) default: gdb.Event(m, "", arg) } @@ -142,10 +134,7 @@ func init() { } }}, DREAM_TABLES: {Hand: func(m *ice.Message, arg ...string) { - switch m.Option(mdb.TYPE) { - case SERVER, WORKER: - m.PushButton(OPEN) - } + kit.Switch(m.Option(mdb.TYPE), []string{SERVER, WORKER}, func() { m.PushButton(OPEN) }) }}, OPEN: {Hand: func(m *ice.Message, arg ...string) { ctx.ProcessOpen(m, MergePods(m, m.Option(mdb.NAME), arg)) }}, }, ctx.CmdAction(), DreamAction()), Hand: func(m *ice.Message, arg ...string) { diff --git a/base/web/serve.go b/base/web/serve.go index 052acc83..1fb82372 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -18,14 +18,12 @@ import ( kit "shylinux.com/x/toolkits" ) -func _serve_address(m *ice.Message) string { - return kit.Format("http://localhost:%s", m.Option(tcp.PORT)) -} +func _serve_address(m *ice.Message) string { return Domain(tcp.LOCALHOST, m.Option(tcp.PORT)) } func _serve_start(m *ice.Message) { defer kit.For(kit.Split(m.Option(ice.DEV)), func(v string) { m.Sleep("10ms").Cmd(SPACE, tcp.DIAL, ice.DEV, v, mdb.NAME, ice.Info.NodeName) }) kit.If(m.Option(aaa.USERNAME), func() { aaa.UserRoot(m, m.Option(aaa.USERNICK), m.Option(aaa.USERNAME)) }) kit.If(m.Option(tcp.PORT) == tcp.RANDOM, func() { m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.RIGHT)) }) - kit.If(cli.IsWindows(), func() { m.Cmd(SPIDE, ice.OPS, _serve_address(m)+"/exit").Sleep300ms() }) + kit.If(cli.IsWindows(), func() { m.Cmd(SPIDE, ice.OPS, _serve_address(m)+"/exit").Sleep30ms() }) cli.NodeInfo(m, kit.Select(ice.Info.Hostname, m.Option(tcp.NODENAME)), SERVER) m.Target().Start(m, m.OptionSimple(tcp.HOST, tcp.PORT)...) } @@ -89,6 +87,7 @@ func _serve_handle(key string, cmd *ice.Command, m *ice.Message, w http.Response kit.If(m.Optionv(ice.MSG_CMDS) == nil, func() { kit.If(strings.TrimPrefix(r.URL.Path, key), func(p string) { m.Optionv(ice.MSG_CMDS, strings.Split(p, ice.PS)) }) }) + defer func() { Render(m, m.Option(ice.MSG_OUTPUT), kit.List(m.Optionv(ice.MSG_ARGS))...) }() if cmds, ok := _serve_auth(m, key, kit.Simple(m.Optionv(ice.MSG_CMDS)), w, r); ok { defer func() { m.Cost(kit.Format("%s: %s %v", r.Method, m.PrefixPath()+path.Join(cmds...), m.FormatSize())) }() m.Option(ice.MSG_OPTS, kit.Simple(m.Optionv(ice.MSG_OPTION), func(k string) bool { return !strings.HasPrefix(k, ice.MSG_SESSID) })) @@ -98,7 +97,6 @@ func _serve_handle(key string, cmd *ice.Command, m *ice.Message, w http.Response m.CmdHand(cmd, key, cmds...) } } - Render(m, m.Option(ice.MSG_OUTPUT), kit.List(m.Optionv(ice.MSG_ARGS))...) } func _serve_domain(m *ice.Message) string { return kit.GetValid( diff --git a/base/web/space.go b/base/web/space.go index d31a524a..58ba5dd3 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -39,7 +39,7 @@ func _space_dial(m *ice.Message, dev, name string, arg ...string) { _space_handle(m.Spawn(), true, dev, c) i = 0 } - }).Cost("order", i, "sleep", next, tcp.DIAL, dev, "uri", uri.String()).Sleep(next) + }).Cost(mdb.COUNT, i, mdb.NEXT, next, tcp.DIAL, dev, LINK, uri.String()).Sleep(next) } }, kit.Join(kit.Simple(SPACE, name), ice.SP)) } @@ -106,7 +106,7 @@ func _space_domain(m *ice.Message) (link string) { return "" }, func() string { return tcp.PublishLocalhost(m, m.Option(ice.MSG_USERWEB)) }, - func() string { return kit.Format("http://%s:%s", m.Cmdv(tcp.HOST, aaa.IP), m.Cmdv(SERVE, tcp.PORT)) }) + func() string { return Domain(m.Cmdv(tcp.HOST, aaa.IP), m.Cmdv(SERVE, tcp.PORT)) }) } func _space_exec(m *ice.Message, source, target []string, c *websocket.Conn) { switch kit.Select(cli.PWD, m.Detailv(), 0) { @@ -146,9 +146,10 @@ const ( MASTER = "master" SERVER = "server" WORKER = "worker" + + REDIAL = "redial" ) const ( - REDIAL = "redial" SPACE_LOGIN = "space.login" ) const SPACE = "space" @@ -191,7 +192,7 @@ func init() { case MASTER: ctx.ProcessOpen(m, m.Cmdv(SPIDE, m.Option(mdb.NAME), CLIENT_ORIGIN)) default: - ctx.ProcessOpen(m, strings.Split(MergePod(m, m.Option(mdb.NAME), arg), ice.QS)[0]) + ctx.ProcessOpen(m, MergePods(m, m.Option(mdb.NAME), arg)) } }}, ice.PS: {Hand: func(m *ice.Message, arg ...string) { _space_fork(m) }}, @@ -199,9 +200,7 @@ func init() { REDIAL, kit.Dict("a", 3000, "b", 1000, "c", 1000), ), mdb.ClearOnExitHashAction()), Hand: func(m *ice.Message, arg ...string) { if len(arg) < 2 { - mdb.HashSelect(m, arg...).Sort("").Table(func(value ice.Maps) { - m.PushButton(kit.Select(OPEN, LOGIN, value[mdb.TYPE] == LOGIN), mdb.REMOVE) - }) + mdb.HashSelect(m, arg...).Sort("").Table(func(value ice.Maps) { m.PushButton(kit.Select(OPEN, LOGIN, value[mdb.TYPE] == LOGIN), mdb.REMOVE) }) } else { _space_send(m, arg[0], kit.Simple(kit.Split(arg[1]), arg[2:])...) } diff --git a/core/code/repos.go b/core/code/repos.go index 3b9df679..0b2ea31d 100644 --- a/core/code/repos.go +++ b/core/code/repos.go @@ -2,7 +2,10 @@ package code import ( ice "shylinux.com/x/icebergs" + "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/nfs" + "shylinux.com/x/icebergs/base/web" + kit "shylinux.com/x/toolkits" ) const ( @@ -12,6 +15,9 @@ const REPOS = nfs.REPOS func init() { Index.MergeCommands(ice.Commands{REPOS: {Name: "repos name auto", Actions: ice.Actions{ + web.DREAM_CREATE: {Hand: func(m *ice.Message, arg ...string) { + kit.If(m.Option(nfs.REPOS), func(p string) { m.Cmd(cli.SYSTEM, GIT, "clone", p, m.Option(cli.CMD_DIR), ice.Maps{cli.CMD_DIR: ""}) }) + }}, "status": {Hand: func(m *ice.Message, arg ...string) { m.Cmdy("web.code.git.status", arg) }}, }, Hand: func(m *ice.Message, arg ...string) { m.Cmdy("web.code.git.repos", arg) }}}) }