diff --git a/src/contexts/log/log.go b/src/contexts/log/log.go index fd93789a..8c52817c 100644 --- a/src/contexts/log/log.go +++ b/src/contexts/log/log.go @@ -217,7 +217,7 @@ func init() { "debug": 0, } log.slient = map[string]bool{ - "lock": true, + // "lock": true, } log.module = map[string]map[string]bool{ "log": {"cmd": true}, diff --git a/src/contexts/nfs/nfs.go b/src/contexts/nfs/nfs.go index ef67ea58..0a6fce64 100644 --- a/src/contexts/nfs/nfs.go +++ b/src/contexts/nfs/nfs.go @@ -482,13 +482,14 @@ func (nfs *NFS) Start(m *ctx.Message, arg ...string) bool { // {{{ func() { cmd := msg + nsend := cmd.Option("nsend") cmd.Call(func(sub *ctx.Message) *ctx.Message { for _, v := range sub.Meta["result"] { _, e := fmt.Fprintf(nfs.Writer, "result: %s\n", url.QueryEscape(v)) sub.Assert(e) } - sub.Append("nsend", sub.Option("nsend")) + sub.Append("nsend", nsend) for _, k := range sub.Meta["append"] { for _, v := range sub.Meta[k] { _, e := fmt.Fprintf(nfs.Writer, "%s: %s\n", k, v) diff --git a/src/contexts/ssh/ssh.go b/src/contexts/ssh/ssh.go index 92a2e573..7fe30c62 100644 --- a/src/contexts/ssh/ssh.go +++ b/src/contexts/ssh/ssh.go @@ -20,7 +20,7 @@ type SSH struct { func (ssh *SSH) Spawn(m *ctx.Message, c *ctx.Context, arg ...string) ctx.Server { // {{{ c.Caches = map[string]*ctx.Cache{} c.Configs = map[string]*ctx.Config{ - "domain": &ctx.Config{Name: "domain", Value: "", Help: "主机数量"}, + "domains": &ctx.Config{Name: "domains", Value: "", Help: "主机数量"}, } s := new(SSH) @@ -87,14 +87,14 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心", "domain": &ctx.Cache{Name: "domain", Value: "com", Help: "主机数量"}, }, Configs: map[string]*ctx.Config{ - "domain": &ctx.Config{Name: "domain", Value: "com", Help: "主机数量"}, + "domain": &ctx.Config{Name: "domain", Value: "com", Help: "主机数量"}, + "domain.json": &ctx.Config{Name: "domain.json", Value: "var/domain.json", Help: "主机数量"}, + "domain.png": &ctx.Config{Name: "domain.png", Value: "var/domain.png", Help: "主机数量"}, - "route.json": &ctx.Config{Name: "route.json", Value: "var/route.json", Help: "主机数量"}, - "route.png": &ctx.Config{Name: "route.png", Value: "var/route.png", Help: "主机数量"}, - "type": &ctx.Config{Name: "type", Value: "terminal", Help: "主机数量"}, - "kind": &ctx.Config{Name: "kind", Value: "terminal", Help: "主机数量"}, - "name": &ctx.Config{Name: "name", Value: "vps", Help: "主机数量"}, - "mark": &ctx.Config{Name: "mark", Value: "com", Help: "主机数量"}, + "type": &ctx.Config{Name: "type", Value: "terminal", Help: "主机数量"}, + "kind": &ctx.Config{Name: "kind", Value: "terminal", Help: "主机数量"}, + "name": &ctx.Config{Name: "name", Value: "vps", Help: "主机数量"}, + "mark": &ctx.Config{Name: "mark", Value: "com", Help: "主机数量"}, }, Commands: map[string]*ctx.Command{ "listen": &ctx.Command{Name: "listen address protocol", Help: "监听连接", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { @@ -103,7 +103,6 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心", sub := file.Spawn(m.Target()) sub.Start(fmt.Sprintf("host%d", Pulse.Capi("nhost", 1)), "远程主机") m.Sessions["ssh"] = sub - // sub.Sesss("nfs").Cmd("send", "route", sub.Target().Name, m.Cap("route")) return sub }, m.Meta["detail"]) } @@ -123,54 +122,23 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心", } // }}} }}, - "route": &ctx.Command{Name: "route", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { - m.Conf("route", arg[0]) // {{{ - m.Cap("route", arg[1]+"."+arg[0]) - info := map[string]string{"route": m.Cap("route")} - - msg := m.Sesss("nfs") - msg.Put("option", "data", info) - msg.Cmd("json", m.Conf("route.json")) - - png := m.Sesss("nfs") - png.Cmd("genqr", m.Conf("route.png"), msg.Result(0)) - - m.Back(m) - // }}} - }}, - "who": &ctx.Command{Name: "who", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { - aaa := m.Sesss("aaa") - if aaa != nil { - m.Echo(aaa.Cap("group")) - } - }}, - "pwd": &ctx.Command{Name: "pwd", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { - switch len(arg) { - case 0: - m.Echo(m.Cap("domain")) - case 1: - if m.Options("nsend") { - m.Conf("domain", arg[0]) - m.Echo(m.Cap("domain")) - m.Echo(".") - m.Echo(m.Conf("domain")) - } else { - m.Spawn(m.Target()).CallBack(m.Options("stdio"), func(msg *ctx.Message) *ctx.Message { - m.Conf("domain", msg.Result(2)) - m.Echo(m.Cap("domain", strings.Join(msg.Meta["result"], ""))) - m.Back(msg) - return nil - }, "send", "pwd", arg[0]) - } - } - }}, - "send": &ctx.Command{Name: "send [route domain] cmd arg...", Help: "远程执行", - Formats: map[string]int{"route": 1}, + "send": &ctx.Command{Name: "send [domain str] cmd arg...", Help: "远程执行", + Formats: map[string]int{"domain": 1}, Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { if ssh, ok := m.Target().Server.(*SSH); m.Assert(ok) { // {{{ - target := strings.Split(m.Option("route"), ".") - if len(target) == 1 && len(target[0]) == 0 { + target := strings.Split(m.Option("domain"), ".") + name, rest := target[0], target[1:] + if name == m.Conf("domain") { + if len(target) > 1 { + name = target[1] + rest = target[2:] + } else { + name = "" + } + } + + if len(rest) == 0 && len(name) == 0 { if m.Options("nsend") { msg := m.Spawn(m.Target()) msg.Cmd(arg) @@ -186,10 +154,10 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心", miss := true m.Travel(c, func(m *ctx.Message) bool { - if ssh, ok := m.Target().Server.(*SSH); ok && m.Target().Name == target[0] { + if ssh, ok := m.Target().Server.(*SSH); ok && m.Conf("domains") == name { msg := m.Spawn(ssh.nfs) - msg.Option("route", strings.Join(target[1:], ".")) - msg.Call(func(host *ctx.Message) *ctx.Message { + msg.Option("domain", strings.Join(rest, ".")) + msg.CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message { return m.Copy(host, "result").Copy(host, "append") }, "send", "send", arg) @@ -198,16 +166,53 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心", return miss }) - if ssh, ok := c.Server.(*SSH); m.Assert(ok) && ssh.nfs != nil { - msg := m.Spawn(ssh.nfs) - msg.Option("route", m.Option("route")) - msg.Call(func(host *ctx.Message) *ctx.Message { - return m.Copy(host, "result").Copy(host, "append") - }, "send", "send", arg) + if miss { + if ssh, ok := c.Server.(*SSH); m.Assert(ok) && ssh.nfs != nil { + msg := m.Spawn(ssh.nfs) + msg.Option("domain", m.Option("domain")) + msg.CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message { + return m.Copy(host, "result").Copy(host, "append") + }, "send", "send", arg) + } } } // }}} }}, + "pwd": &ctx.Command{Name: "pwd", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { + switch len(arg) { // {{{ + case 0: + m.Echo(m.Cap("domain")) + case 1: + if m.Options("nsend") { + m.Conf("domains", arg[0]) + m.Echo(m.Cap("domain")) + m.Echo(".") + m.Echo(m.Conf("domains")) + } else { + m.Spawn(m.Target()).CallBack(m.Options("stdio"), func(msg *ctx.Message) *ctx.Message { + m.Conf("domain", msg.Result(2)) + m.Echo(m.Cap("domain", strings.Join(msg.Meta["result"], ""))) + m.Back(msg) + + nfs := m.Sesss("nfs") + nfs.Put("option", "data", map[string]string{"domain": m.Cap("domain")}) + nfs.Cmd("json", m.Conf("domain.json")) + + png := m.Sesss("nfs") + png.Cmd("genqr", m.Conf("domain.png"), m.Cap("domain")) + + return nil + }, "send", "pwd", arg[0]) + } + } + // }}} + }}, + "who": &ctx.Command{Name: "who", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { + aaa := m.Sesss("aaa") + if aaa != nil { + m.Echo(aaa.Cap("group")) + } + }}, "good": &ctx.Command{Name: "good", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { m.Append("share", m.Cap("share")) // {{{ m.Append("level", m.Cap("level"))