From e4a4bbde8f2942dc0ac5d6f4a8611452c58bf157 Mon Sep 17 00:00:00 2001 From: harveyshao Date: Thu, 3 Jun 2021 16:35:26 +0800 Subject: [PATCH] opt some --- base/aaa/sess.go | 15 ++++++++++++++- base/cli/qrcode.go | 12 +++++++----- base/cli/runtime.go | 5 +++++ base/cli/system.go | 9 +++++++++ base/mdb/mdb.go | 3 ++- base/nfs/dir.go | 12 ++++++++++-- base/ssh/channel.go | 2 +- base/ssh/connect.go | 15 ++++++++++----- base/ssh/service_darwin.go | 4 ++++ base/ssh/service_linux.go | 10 +++++++--- base/ssh/service_windows.go | 2 ++ conf.go | 2 +- go.sum | 5 +++++ misc/git/status.go | 17 +++++++++++------ 14 files changed, 88 insertions(+), 25 deletions(-) diff --git a/base/aaa/sess.go b/base/aaa/sess.go index c43e9887..63e22df7 100644 --- a/base/aaa/sess.go +++ b/base/aaa/sess.go @@ -66,10 +66,23 @@ func init() { SESS: {Name: SESS, Help: "会话", Value: kit.Data(kit.MDB_SHORT, "uniq", kit.MDB_EXPIRE, "720h")}, }, Commands: map[string]*ice.Command{ - SESS: {Name: "sess hash auto", Help: "会话", Action: map[string]*ice.Action{ + SESS: {Name: "sess hash auto prunes", Help: "会话", Action: map[string]*ice.Action{ mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Option(mdb.FIELDS, "time,username,userrole,ip,ua") m.Cmdy(mdb.DELETE, SESS, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) }}, + mdb.PRUNES: {Name: "prunes before@date", Help: "清理", Hand: func(m *ice.Message, arg ...string) { + list := []string{} + m.Richs(SESS, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) { + if value = kit.GetMeta(value); kit.Time(kit.Format(value[kit.MDB_TIME])) < kit.Time(m.Option("before")) { + list = append(list, key) + } + }) + m.Option(mdb.FIELDS, "time,username,userrole,ip,ua") + for _, v := range list { + m.Cmdy(mdb.DELETE, SESS, "", mdb.HASH, kit.MDB_HASH, v) + } + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Fields(len(arg) == 0, "time,hash,username,userrole") m.Cmdy(mdb.SELECT, SESS, "", mdb.HASH, kit.MDB_HASH, arg) diff --git a/base/cli/qrcode.go b/base/cli/qrcode.go index 085fc0ee..f76a0401 100644 --- a/base/cli/qrcode.go +++ b/base/cli/qrcode.go @@ -121,14 +121,16 @@ func init() { }, Commands: map[string]*ice.Command{ QRCODE: {Name: "qrcode text fg bg size auto", Help: "二维码", Action: map[string]*ice.Action{}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Option(FG, kit.Select(BLUE, arg, 1)) - m.Option(BG, kit.Select(WHITE, arg, 2)) m.Option(SIZE, kit.Select("240", arg, 3)) + m.Option(BG, kit.Select(WHITE, arg, 2)) + m.Option(FG, kit.Select(BLUE, arg, 1)) - if aaa.SessIsCli(m) { - _qrcode_cli(m, kit.Select("hi", arg, 0)) + if len(arg) == 0 { + + } else if aaa.SessIsCli(m) { + _qrcode_cli(m, arg[0]) } else { - _qrcode_web(m, kit.Select("hi", arg, 0)) + _qrcode_web(m, arg[0]) } }}, }, diff --git a/base/cli/runtime.go b/base/cli/runtime.go index e309318d..dfc93b44 100644 --- a/base/cli/runtime.go +++ b/base/cli/runtime.go @@ -72,6 +72,11 @@ func init() { }}, PROCINFO: {Name: "procinfo", Help: "进程信息", Hand: func(m *ice.Message, arg ...string) { m.Split(m.Cmdx(SYSTEM, "ps", "u"), "", " ", "\n") + m.PushAction("kill") + }}, + "kill": {Name: "kill", Help: "结束进程", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(SYSTEM, "kill", m.Option("PID")) + m.ProcessRefresh("10ms") }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) > 0 && arg[0] == BOOTINFO { diff --git a/base/cli/system.go b/base/cli/system.go index 65a6eea5..c065c813 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -6,8 +6,10 @@ import ( "io" "os" "os/exec" + "strings" ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" ) @@ -80,6 +82,13 @@ func init() { }, Commands: map[string]*ice.Command{ SYSTEM: {Name: "system cmd= 执行:button", Help: "系统命令", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { + if len(arg) == 0 { + m.Fields(len(arg) == 0, "time,id,cmd") + m.Cmdy(mdb.SELECT, SYSTEM, "", mdb.LIST) + return + } + m.Grow(SYSTEM, "", kit.Dict(kit.MDB_TIME, m.Time(), CMD, strings.Join(arg, " "))) + if len(arg) == 1 { arg = kit.Split(arg[0]) } diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index a369b881..e38e2d1c 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -409,8 +409,9 @@ const ( IMPORT = "import" PRUNES = "prunes" INPUTS = "inputs" - REPEAT = "repeat" REVERT = "revert" + REPEAT = "repeat" + UPLOAD = "upload" ) const ( CACHE_LIMIT = "cache.limit" diff --git a/base/nfs/dir.go b/base/nfs/dir.go index 1b33bd3b..647f52cf 100644 --- a/base/nfs/dir.go +++ b/base/nfs/dir.go @@ -13,6 +13,7 @@ import ( "strings" ice "github.com/shylinux/icebergs" + "github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" ) @@ -181,10 +182,12 @@ func init() { _dir_show(m, arg[2], arg[1], 0, m.Option(DIR_DEEP) == ice.TRUE, kit.Select(TYPE_BOTH, m.Option(DIR_TYPE)), nil, kit.Split("time,size,type,path")) }}, - - "upload": {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) { + mdb.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) { m.Upload(m.Option(kit.MDB_PATH)) }}, + TRASH: {Name: "trash", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(TRASH, m.Option(kit.MDB_PATH)) + }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { arg = append(arg, "") @@ -193,6 +196,11 @@ func init() { 0, m.Options(DIR_DEEP), kit.Select(TYPE_BOTH, m.Option(DIR_TYPE)), kit.Regexp(m.Option(DIR_REG)), kit.Split(kit.Select("time,size,path", strings.Join(arg[1:], ",")))) m.SortTimeR(kit.MDB_TIME) + if !aaa.SessIsCli(m) { + m.Table(func(index int, value map[string]string, head []string) { + m.PushButton(kit.Select("", TRASH, !strings.HasSuffix(value[kit.MDB_PATH], "/"))) + }) + } }}, }, }) diff --git a/base/ssh/channel.go b/base/ssh/channel.go index 32193420..9d30b860 100644 --- a/base/ssh/channel.go +++ b/base/ssh/channel.go @@ -35,7 +35,7 @@ func _ssh_close(m *ice.Message, c net.Conn, channel ssh.Channel) { defer channel.Close() channel.Write([]byte(m.Conf(SERVICE, kit.Keym(GOODBYE)))) } -func _ssh_watch(m *ice.Message, meta map[string]string, h string, input io.Reader, output io.Writer, display io.Writer) { +func _ssh_watch(m *ice.Message, meta map[string]string, h string, input io.Reader, output io.Writer) { r, w := io.Pipe() bio := io.TeeReader(input, w) m.Go(func() { io.Copy(output, r) }) diff --git a/base/ssh/connect.go b/base/ssh/connect.go index 76e46ae0..89699a3a 100644 --- a/base/ssh/connect.go +++ b/base/ssh/connect.go @@ -28,6 +28,11 @@ func _ssh_open(m *ice.Message, arg ...string) { defer terminal.Restore(fd, oldState) } + gdb.SignalNotify(m, 28, func() { + w, h, _ := terminal.GetSize(fd) + _ssh_sizes(os.Stdin.Fd(), w, h) + }) + // 设置宽高 w, h, _ := terminal.GetSize(fd) c.Write([]byte(fmt.Sprintf("#height:%d,width:%d\n", h, w))) @@ -89,11 +94,11 @@ func _ssh_dial(m *ice.Message, cb func(net.Conn), arg ...string) { ssh.TTY_OP_OSPEED: 14400, }) - gdb.SignalNotify(m, 28, func() { - w, h, _ := terminal.GetSize(int(os.Stdin.Fd())) - session.WindowChange(h, w) - }) - + // gdb.SignalNotify(m, 28, func() { + // w, h, _ := terminal.GetSize(int(os.Stdin.Fd())) + // session.WindowChange(h, w) + // }) + // session.Shell() session.Wait() }) diff --git a/base/ssh/service_darwin.go b/base/ssh/service_darwin.go index 0fe1d156..30c090b8 100644 --- a/base/ssh/service_darwin.go +++ b/base/ssh/service_darwin.go @@ -19,5 +19,9 @@ func _ssh_size(fd uintptr, b []byte) { ws := &Winsize{Width: uint16(w), Height: uint16(h)} syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws))) } +func _ssh_sizes(fd uintptr, w, h int) { + ws := &Winsize{Width: uint16(w), Height: uint16(h)} + syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws))) +} func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) { } diff --git a/base/ssh/service_linux.go b/base/ssh/service_linux.go index 938ffa25..574884fc 100644 --- a/base/ssh/service_linux.go +++ b/base/ssh/service_linux.go @@ -2,13 +2,14 @@ package ssh import ( "encoding/binary" - "github.com/kr/pty" "io" "net" "os" "syscall" "unsafe" + "github.com/kr/pty" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/mdb" @@ -26,6 +27,10 @@ func _ssh_size(fd uintptr, b []byte) { ws := &Winsize{Width: uint16(w), Height: uint16(h)} syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws))) } +func _ssh_sizes(fd uintptr, w, h int) { + ws := &Winsize{Width: uint16(w), Height: uint16(h)} + syscall.Syscall(syscall.SYS_IOCTL, fd, uintptr(syscall.TIOCSWINSZ), uintptr(unsafe.Pointer(ws))) +} func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) { m.Logs(CHANNEL, tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr()) defer m.Logs("dischan", tcp.HOSTPORT, c.RemoteAddr(), "->", c.LocalAddr()) @@ -67,14 +72,13 @@ func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh channel.Close() }) case "shell": + _ssh_watch(m, meta, h, channel, pty) m.Go(func() { io.Copy(channel, pty) }) _ssh_exec(m, shell, nil, list, tty, tty, func() { defer m.Cmd(mdb.MODIFY, CHANNEL, "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, tcp.CLOSE) _ssh_close(m, c, channel) }) - - _ssh_watch(m, meta, h, channel, pty, channel) } request.Reply(true, nil) } diff --git a/base/ssh/service_windows.go b/base/ssh/service_windows.go index c21ad076..fdd56f6f 100644 --- a/base/ssh/service_windows.go +++ b/base/ssh/service_windows.go @@ -11,5 +11,7 @@ type Winsize struct{ Height, Width, x, y uint16 } func _ssh_size(fd uintptr, b []byte) { } +func _ssh_sizes(fd uintptr, w, h int) { +} func _ssh_handle(m *ice.Message, meta map[string]string, c net.Conn, channel ssh.Channel, requests <-chan *ssh.Request) { } diff --git a/conf.go b/conf.go index 9c4f6a5b..40ef7e9b 100644 --- a/conf.go +++ b/conf.go @@ -6,7 +6,7 @@ const ( // MOD MOD_CHAN = 16 MOD_TICK = "1s" - MOD_BUFS = 1024 + MOD_BUFS = 4096 MOD_DATE = "2006-01-02" MOD_TIME = "2006-01-02 15:04:05" diff --git a/go.sum b/go.sum index 9a591e85..b5a9aafe 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,9 @@ github.com/AaronO/go-git-http v0.0.0-20161214145340-1d9485b3a98f/go.mod h1:+6Yuq73F9068Na+mSBNXCvyuxvgw4f/g5ii40e3U8Sc= +github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/shylinux/toolkits v0.2.3 h1:UdE5dUKtc+iVeco9sFrlj98BxVJADYoLNeywTnLrSMc= github.com/shylinux/toolkits v0.2.3/go.mod h1:oMwi/N00I2cXenmcAkqikEncTzB4u5JhTQ9mO5xj7sY= @@ -9,9 +11,12 @@ github.com/shylinux/toolkits v0.2.4 h1:2TaRBYdt15dE9vTUTO++6aF66vOZNd+ruP3be1C4z github.com/shylinux/toolkits v0.2.4/go.mod h1:oMwi/N00I2cXenmcAkqikEncTzB4u5JhTQ9mO5xj7sY= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0= github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/misc/git/status.go b/misc/git/status.go index 1437981e..87b049a4 100644 --- a/misc/git/status.go +++ b/misc/git/status.go @@ -58,6 +58,11 @@ func _status_list(m *ice.Message) (files, adds, dels int, last time.Time) { for _, v := range strings.Split(strings.TrimSpace(diff), "\n") { vs := strings.SplitN(strings.TrimSpace(v), " ", 2) + switch kit.Ext(vs[1]) { + case "swp", "bin": + continue + } + m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) m.Push(kit.MDB_TYPE, vs[0]) m.Push(kit.MDB_FILE, vs[1]) @@ -96,8 +101,9 @@ const ( OPT = "opt" PRO = "pro" - DIFF = "diff" - COMMIT = "commit" + DIFF = "diff" + COMMIT = "commit" + COMMENT = "comment" ) const STATUS = "status" @@ -130,7 +136,7 @@ func init() { m.Cmdy(cli.SYSTEM, GIT, ADD, m.Option(kit.MDB_FILE)) }}, OPT: {Name: "opt", Help: "优化"}, PRO: {Name: "pro", Help: "自举"}, - COMMIT: {Name: "commit action=add,opt,pro comment=some@key", Help: "提交", Hand: func(m *ice.Message, arg ...string) { + COMMIT: {Name: "commit action=opt,add,pro comment=some@key", Help: "提交", Hand: func(m *ice.Message, arg ...string) { if arg[0] == kit.MDB_ACTION { m.Option(kit.MDB_TEXT, arg[1]+" "+arg[3]) } else { @@ -144,10 +150,9 @@ func init() { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { case kit.MDB_NAME: - m.OptionFields("name,time") - m.Cmdy(REPOS) + m.Cmdy(REPOS, ice.OptionFields("name,time")) - case "comment": + case COMMENT: ls := []string{} ls = append(ls, kit.Split(m.Option(kit.MDB_FILE), " /")...)