mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 17:44:05 +08:00
opt some
This commit is contained in:
parent
76fce2d013
commit
fe92530fcd
@ -3,6 +3,7 @@ package gdb
|
|||||||
import (
|
import (
|
||||||
ice "github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/cli"
|
"github.com/shylinux/icebergs/base/cli"
|
||||||
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
"github.com/shylinux/icebergs/base/nfs"
|
"github.com/shylinux/icebergs/base/nfs"
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
|
|
||||||
@ -107,6 +108,7 @@ const (
|
|||||||
ACTION = "action"
|
ACTION = "action"
|
||||||
)
|
)
|
||||||
const (
|
const (
|
||||||
|
ROUTINE = "routine"
|
||||||
SIGNAL = "signal"
|
SIGNAL = "signal"
|
||||||
TIMER = "timer"
|
TIMER = "timer"
|
||||||
EVENT = "event"
|
EVENT = "event"
|
||||||
@ -115,6 +117,8 @@ const (
|
|||||||
|
|
||||||
var Index = &ice.Context{Name: "gdb", Help: "事件模块",
|
var Index = &ice.Context{Name: "gdb", Help: "事件模块",
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
|
ROUTINE: {Name: "routine", Help: "协程", Value: kit.Data()},
|
||||||
|
|
||||||
SIGNAL: {Name: "signal", Help: "信号器", Value: kit.Dict(
|
SIGNAL: {Name: "signal", Help: "信号器", Value: kit.Dict(
|
||||||
kit.MDB_META, kit.Dict("pid", "var/run/ice.pid"),
|
kit.MDB_META, kit.Dict("pid", "var/run/ice.pid"),
|
||||||
kit.MDB_LIST, kit.List(),
|
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{
|
SIGNAL: {Name: "signal", Help: "信号器", Action: map[string]*ice.Action{
|
||||||
LISTEN: {Name: "listen signal cmd...", Help: "监听事件", Hand: func(m *ice.Message, arg ...string) {
|
LISTEN: {Name: "listen signal cmd...", Help: "监听事件", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Rich(SIGNAL, arg[0], arg[1:])
|
m.Rich(SIGNAL, arg[0], arg[1:])
|
||||||
|
@ -18,7 +18,6 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/kr/pty"
|
"github.com/kr/pty"
|
||||||
"golang.org/x/crypto/ssh"
|
"golang.org/x/crypto/ssh"
|
||||||
@ -184,40 +183,13 @@ func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh
|
|||||||
request.Reply(true, nil)
|
request.Reply(true, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func _ssh_listen(m *ice.Message, l net.Listener, hostport string) {
|
func _ssh_accept(m *ice.Message, c net.Conn) {
|
||||||
h := m.Cmdx(mdb.INSERT, m.Prefix(LISTEN), "", mdb.HASH, aaa.HOSTPORT, hostport, kit.MDB_STATUS, "listen")
|
sc, sessions, req, err := ssh.NewServerConn(c, _ssh_config(m))
|
||||||
defer m.Cmd(mdb.MODIFY, m.Prefix(LISTEN), "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, "close")
|
|
||||||
|
|
||||||
config := _ssh_config(m)
|
|
||||||
|
|
||||||
for {
|
|
||||||
c, e := l.Accept()
|
|
||||||
if m.Warn(e != nil, e) {
|
|
||||||
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) {
|
if m.Warn(err != nil, err) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
hostname := sc.Permissions.Extensions["hostname"]
|
m.Gos(m, func(m *ice.Message) { ssh.DiscardRequests(req) })
|
||||||
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 {
|
for session := range sessions {
|
||||||
channel, requests, err := session.Accept()
|
channel, requests, err := session.Accept()
|
||||||
@ -231,9 +203,6 @@ func _ssh_listen(m *ice.Message, l net.Listener, hostport string) {
|
|||||||
})
|
})
|
||||||
}(channel, requests)
|
}(channel, requests)
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}(c)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
func _ssh_config(m *ice.Message) *ssh.ServerConfig {
|
func _ssh_config(m *ice.Message) *ssh.ServerConfig {
|
||||||
config := &ssh.ServerConfig{
|
config := &ssh.ServerConfig{
|
||||||
@ -378,8 +347,8 @@ func init() {
|
|||||||
|
|
||||||
LISTEN: {Name: "listen hash=auto auto", Help: "服务", Action: map[string]*ice.Action{
|
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) {
|
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) {
|
m.Option(tcp.LISTEN_CB, func(c net.Conn) {
|
||||||
_ssh_listen(m, l, ":"+m.Option("port"))
|
m.Gos(m.Spawn(), func(msg *ice.Message) { _ssh_accept(msg, c) })
|
||||||
})
|
})
|
||||||
m.Gos(m, func(m *ice.Message) {
|
m.Gos(m, func(m *ice.Message) {
|
||||||
m.Cmdy(tcp.SERVER, tcp.LISTEN, kit.MDB_NAME, "ssh", tcp.PORT, m.Option(tcp.PORT))
|
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
|
return m
|
||||||
}
|
}
|
||||||
func (m *Message) Gos(msg *Message, cb func(*Message)) *Message {
|
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 {
|
task.Put(nil, func(task *task.Task) error {
|
||||||
msg.Optionv("_task", task)
|
msg.Optionv("_task", task)
|
||||||
msg.TryCatch(msg, true, func(msg *Message) { cb(msg) })
|
msg.TryCatch(msg, true, func(msg *Message) { cb(msg) })
|
||||||
|
Loading…
x
Reference in New Issue
Block a user