diff --git a/base/cli/daemon.go b/base/cli/daemon.go index 9b480d95..3300b010 100644 --- a/base/cli/daemon.go +++ b/base/cli/daemon.go @@ -2,7 +2,6 @@ package cli import ( ice "github.com/shylinux/icebergs" - "github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" @@ -27,10 +26,8 @@ func _daemon_show(m *ice.Message, cmd *exec.Cmd, out, err string) { h := m.Cmdx(mdb.INSERT, DAEMON, "", mdb.HASH, kit.MDB_STATUS, Status.Start, kit.SSH_CMD, strings.Join(cmd.Args, " "), - kit.SSH_DIR, cmd.Dir, kit.SSH_ENV, cmd.Env, kit.SSH_PID, cmd.Process.Pid, + kit.SSH_DIR, cmd.Dir, kit.SSH_ENV, kit.Select("", cmd.Env), kit.SSH_PID, cmd.Process.Pid, CMD_STDOUT, out, CMD_STDERR, err, - aaa.IP, m.Option(ice.MSG_USERIP), aaa.UA, m.Option(ice.MSG_USERUA), - aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERROLE, m.Option(ice.MSG_USERROLE), ) m.Echo("%d", cmd.Process.Pid) @@ -55,8 +52,9 @@ var Status = struct{ Error, Start, Stop string }{ } const ( - START = "start" - STOP = "stop" + RESTART = "restart" + START = "start" + STOP = "stop" ) const DAEMON = "daemon" @@ -68,13 +66,21 @@ func init() { }, Commands: map[string]*ice.Command{ DAEMON: {Name: "daemon hash auto 添加 清理", Help: "守护进程", Action: map[string]*ice.Action{ + RESTART: {Name: "restart", Help: "重启", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(DAEMON, STOP) + m.Cmd(DAEMON, START) + }}, START: {Name: "start cmd env dir", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Option(CMD_TYPE, DAEMON) + m.Option(CMD_DIR, m.Option("dir")) + m.Option(CMD_ENV, kit.Split(m.Option("env"), " =")) m.Cmdy(SYSTEM, kit.Split(m.Option("cmd"))) }}, STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { + m.Option(mdb.FIELDS, "time,hash,status,pid,cmd,dir,env") m.Cmd(mdb.SELECT, DAEMON, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)).Table(func(index int, value map[string]string, head []string) { m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH), kit.MDB_STATUS, Status.Stop) + m.Debug("what %v", value) m.Cmdy(SYSTEM, "kill", "-9", value[kit.SSH_PID]) }) }}, @@ -82,17 +88,18 @@ func init() { m.Cmdy(mdb.DELETE, DAEMON, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) }}, mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) { + m.Option(mdb.FIELDS, "time,hash,status,pid,cmd,dir,env") m.Cmdy(mdb.PRUNES, DAEMON, "", mdb.HASH, kit.MDB_STATUS, Status.Error) m.Cmdy(mdb.PRUNES, DAEMON, "", mdb.HASH, kit.MDB_STATUS, Status.Stop) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { - m.Option(mdb.FIELDS, "time,hash,status,pid,cmd,dir") + m.Option(mdb.FIELDS, "time,hash,status,pid,cmd,dir,env") m.Cmdy(mdb.SELECT, DAEMON, "", mdb.HASH) m.Table(func(index int, value map[string]string, head []string) { switch value[kit.MDB_STATUS] { case Status.Start: - m.PushButton(STOP) + m.PushButton(RESTART, STOP) default: m.PushButton(mdb.REMOVE) } diff --git a/base/nfs/nfs.go b/base/nfs/nfs.go index 55ed2000..9d81d795 100644 --- a/base/nfs/nfs.go +++ b/base/nfs/nfs.go @@ -276,6 +276,10 @@ func _file_search(m *ice.Message, kind, name, text string, arg ...string) { }) } +const ( + OPEN = "open" + CLOSE = "close" +) const ( CAT_CB = "cat_cb" CAT = "cat" diff --git a/base/web/dream.go b/base/web/dream.go index aa07fdaa..e35d46ad 100644 --- a/base/web/dream.go +++ b/base/web/dream.go @@ -79,7 +79,7 @@ const DREAM = "dream" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ - DREAM: {Name: DREAM, Help: "梦想家", Value: kit.Data("path", "usr/local/work", + DREAM: {Name: DREAM, Help: "梦想家", Value: kit.Data(kit.MDB_PATH, "usr/local/work", "cmd", []interface{}{"ice.bin", SPACE, "connect"}, "env", kit.Dict("ctx_log", "bin/boot.log"), "miss", `#!/bin/bash diff --git a/exec.go b/exec.go index f9058d2e..61022b24 100644 --- a/exec.go +++ b/exec.go @@ -16,7 +16,7 @@ func (m *Message) TryCatch(msg *Message, safe bool, hand ...func(msg *Message)) case io.EOF: case nil: default: - fileline := kit.FileLine(4, 2) + fileline := kit.FileLine(4, 5) m.Log(LOG_WARN, "catch: %s %s", e, fileline) m.Log("chain", msg.Format("chain")) m.Log(LOG_WARN, "catch: %s %s", e, fileline) diff --git a/misc/tmux/tmux.go b/misc/tmux/tmux.go index 722395fd..0504d684 100644 --- a/misc/tmux/tmux.go +++ b/misc/tmux/tmux.go @@ -5,6 +5,7 @@ import ( "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/gdb" "github.com/shylinux/icebergs/base/mdb" + "github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/core/code" "github.com/shylinux/icebergs/core/wiki" @@ -158,18 +159,20 @@ var Index = &ice.Context{Name: TMUX, Help: "工作台", mdb.CREATE: {Name: "create name", Help: "添加", Hand: func(m *ice.Message, arg ...string) { m.Option(cli.CMD_ENV, "TMUX", "") if m.Option(PANE) != "" { - m.Cmd(cli.SYSTEM, TMUX, "split-window", "-t", m.Option(SESSION)+":"+m.Option(WINDOW)+"."+m.Option(PANE)) + m.Cmdy(cli.SYSTEM, TMUX, "split-window", "-t", m.Option(SESSION)+":"+m.Option(WINDOW)+"."+m.Option(PANE)) } else if m.Option(WINDOW) != "" { - m.Cmd(cli.SYSTEM, TMUX, "split-window", "-t", m.Option(SESSION)+":"+m.Option(WINDOW)) + m.Cmdy(cli.SYSTEM, TMUX, "split-window", "-t", m.Option(SESSION)+":"+m.Option(WINDOW)) } else if m.Option(SESSION) != "" { // 创建窗口 - m.Cmd(cli.SYSTEM, TMUX, "new-window", "-t", m.Option(SESSION), "-dn", m.Option("name")) + m.Cmdy(cli.SYSTEM, TMUX, "new-window", "-t", m.Option(SESSION), "-dn", m.Option(kit.MDB_NAME)) } else { // 创建会话 - m.Cmd(cli.SYSTEM, TMUX, "new-session", "-ds", m.Option("name")) + m.Option(cli.CMD_DIR, path.Join(m.Conf(web.DREAM, kit.META_PATH), m.Option(kit.MDB_NAME))) + m.Cmdy(cli.SYSTEM, TMUX, "new-session", "-ds", m.Option(kit.MDB_NAME)) } + m.Option(ice.MSG_PROCESS, "_refresh") }}, mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { @@ -201,8 +204,14 @@ var Index = &ice.Context{Name: TMUX, Help: "工作台", }}, mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Option(mdb.FIELDS, "name,type,text") - m.Cmdy(mdb.SELECT, SCRIPT, "", mdb.HASH) + switch arg[0] { + case kit.MDB_NAME: + m.Option(nfs.DIR_ROOT, m.Conf(web.DREAM, kit.META_PATH)) + m.Cmdy(nfs.DIR, "./", "name size time") + default: + m.Option(mdb.FIELDS, "name,type,text") + m.Cmdy(mdb.SELECT, SCRIPT, "", mdb.HASH) + } }}, SCRIPT: {Name: "script name", Help: "脚本", Hand: func(m *ice.Message, arg ...string) { diff --git a/type.go b/type.go index bbdab1bd..87bd702b 100644 --- a/type.go +++ b/type.go @@ -103,7 +103,11 @@ func (c *Context) _hand(m *Message, cmd *Command, key string, k string, h *Actio } } } - h.Hand(m, arg...) + if h.Hand == nil { + m.Cmdy(kit.Split(h.Name)) + } else { + h.Hand(m, arg...) + } return m } func (c *Context) cmd(m *Message, cmd *Command, key string, arg ...string) *Message { @@ -165,13 +169,16 @@ func (c *Context) Merge(s *Context, x Server) *Context { } for k, a := range v.Action { + kit.Value(v.Meta, kit.Keys("trans", k), a.Help) + if a.Hand == nil { + continue + } if a.List == nil { a.List = c._split(a.Name) } if len(a.List) > 0 { v.Meta[k] = a.List } - kit.Value(v.Meta, kit.Keys("trans", k), a.Help) } }