From fe92530fcd766abe1d04eed74e6defa2569e0468 Mon Sep 17 00:00:00 2001 From: shaoying Date: Sun, 27 Sep 2020 08:52:59 +0800 Subject: [PATCH] opt some --- base/gdb/gdb.go | 21 +++++++++++++--- base/ssh/server.go | 61 ++++++++++++---------------------------------- exec.go | 2 ++ 3 files changed, 34 insertions(+), 50 deletions(-) diff --git a/base/gdb/gdb.go b/base/gdb/gdb.go index 14bb960a..173ad355 100644 --- a/base/gdb/gdb.go +++ b/base/gdb/gdb.go @@ -3,6 +3,7 @@ package gdb import ( ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" + "github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/nfs" kit "github.com/shylinux/toolkits" @@ -107,14 +108,17 @@ const ( ACTION = "action" ) const ( - SIGNAL = "signal" - TIMER = "timer" - EVENT = "event" - DEBUG = "debug" + ROUTINE = "routine" + SIGNAL = "signal" + TIMER = "timer" + EVENT = "event" + DEBUG = "debug" ) var Index = &ice.Context{Name: "gdb", Help: "事件模块", Configs: map[string]*ice.Config{ + ROUTINE: {Name: "routine", Help: "协程", Value: kit.Data()}, + SIGNAL: {Name: "signal", Help: "信号器", Value: kit.Dict( kit.MDB_META, kit.Dict("pid", "var/run/ice.pid"), kit.MDB_LIST, kit.List(), @@ -160,6 +164,15 @@ var Index = &ice.Context{Name: "gdb", Help: "事件模块", } }}, + ROUTINE: {Name: "routine hash auto", Help: "协程", Action: map[string]*ice.Action{ + mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(mdb.INSERT, ROUTINE, "", mdb.LIST, arg) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Option(mdb.FIELDS, "time,fileline") + m.Cmdy(mdb.SELECT, ROUTINE, "", mdb.LIST, arg) + }}, + SIGNAL: {Name: "signal", Help: "信号器", Action: map[string]*ice.Action{ LISTEN: {Name: "listen signal cmd...", Help: "监听事件", Hand: func(m *ice.Message, arg ...string) { m.Rich(SIGNAL, arg[0], arg[1:]) diff --git a/base/ssh/server.go b/base/ssh/server.go index 08692185..04c5fcd1 100644 --- a/base/ssh/server.go +++ b/base/ssh/server.go @@ -18,7 +18,6 @@ import ( "os/exec" "path" "strings" - "time" "github.com/kr/pty" "golang.org/x/crypto/ssh" @@ -184,55 +183,25 @@ func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh request.Reply(true, nil) } } -func _ssh_listen(m *ice.Message, l net.Listener, hostport string) { - h := m.Cmdx(mdb.INSERT, m.Prefix(LISTEN), "", mdb.HASH, aaa.HOSTPORT, hostport, kit.MDB_STATUS, "listen") - defer m.Cmd(mdb.MODIFY, m.Prefix(LISTEN), "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, "close") +func _ssh_accept(m *ice.Message, c net.Conn) { + sc, sessions, req, err := ssh.NewServerConn(c, _ssh_config(m)) + if m.Warn(err != nil, err) { + return + } - config := _ssh_config(m) + m.Gos(m, func(m *ice.Message) { ssh.DiscardRequests(req) }) - for { - c, e := l.Accept() - if m.Warn(e != nil, e) { + for session := range sessions { + channel, requests, err := session.Accept() + if m.Warn(err != nil, err) { continue } - func(c net.Conn) { - m.Gos(m.Spawn(), func(msg *ice.Message) { - defer c.Close() - - m.Logs(CONNECT, aaa.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr()) - defer m.Logs("disconn", aaa.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr()) - - sc, sessions, req, err := ssh.NewServerConn(c, config) - if m.Warn(err != nil, err) { - return - } - - hostname := sc.Permissions.Extensions["hostname"] - username := sc.Permissions.Extensions["username"] - begin := time.Now() - h := m.Cmdx(mdb.INSERT, m.Prefix(CONNECT), "", mdb.HASH, aaa.HOSTPORT, c.RemoteAddr().String(), kit.MDB_STATUS, "connect", "hostname", hostname, "username", username) - defer m.Cmd(mdb.MODIFY, m.Prefix(CONNECT), "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, "close", "close_time", time.Now().Format(ice.MOD_TIME), "duration", time.Now().Sub(begin).String()) - sc.Permissions.Extensions[CONNECT] = h - - m.Gos(m, func(m *ice.Message) { - ssh.DiscardRequests(req) - }) - - for session := range sessions { - channel, requests, err := session.Accept() - if m.Warn(err != nil, err) { - continue - } - - func(channel ssh.Channel, requests <-chan *ssh.Request) { - m.Gos(m, func(m *ice.Message) { - _ssh_handle(m, sc.Permissions.Extensions, c, channel, requests) - }) - }(channel, requests) - } + func(channel ssh.Channel, requests <-chan *ssh.Request) { + m.Gos(m, func(m *ice.Message) { + _ssh_handle(m, sc.Permissions.Extensions, c, channel, requests) }) - }(c) + }(channel, requests) } } func _ssh_config(m *ice.Message) *ssh.ServerConfig { @@ -378,8 +347,8 @@ func init() { LISTEN: {Name: "listen hash=auto auto", Help: "服务", Action: map[string]*ice.Action{ mdb.CREATE: {Name: "create name=tcp port=9030", Help: "启动", Hand: func(m *ice.Message, arg ...string) { - m.Option(tcp.LISTEN_CB, func(l net.Listener) { - _ssh_listen(m, l, ":"+m.Option("port")) + m.Option(tcp.LISTEN_CB, func(c net.Conn) { + m.Gos(m.Spawn(), func(msg *ice.Message) { _ssh_accept(msg, c) }) }) m.Gos(m, func(m *ice.Message) { m.Cmdy(tcp.SERVER, tcp.LISTEN, kit.MDB_NAME, "ssh", tcp.PORT, m.Option(tcp.PORT)) diff --git a/exec.go b/exec.go index 9f22c94f..e1067b2f 100644 --- a/exec.go +++ b/exec.go @@ -110,6 +110,8 @@ func (m *Message) Back(res *Message) *Message { return m } func (m *Message) Gos(msg *Message, cb func(*Message)) *Message { + m.Cmd("gdb.routine", "create", "fileline", kit.FileLine(cb, 3)) + task.Put(nil, func(task *task.Task) error { msg.Optionv("_task", task) msg.TryCatch(msg, true, func(msg *Message) { cb(msg) })