mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 09:34:05 +08:00
opt some
This commit is contained in:
parent
76fce2d013
commit
fe92530fcd
@ -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:])
|
||||
|
@ -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))
|
||||
|
2
exec.go
2
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) })
|
||||
|
Loading…
x
Reference in New Issue
Block a user