diff --git a/base/cli/daemon.go b/base/cli/daemon.go index 8bf2eaab..bd3deb0c 100644 --- a/base/cli/daemon.go +++ b/base/cli/daemon.go @@ -28,7 +28,7 @@ func _daemon_show(m *ice.Message, cmd *exec.Cmd, out, err string) { } cmd.Env = append(cmd.Env, fmt.Sprintf("PATH=%s", os.Getenv("PATH"))) - if e := cmd.Start(); m.Warn(e != nil, "%v start: %s", cmd.Args, e) { + if e := cmd.Start(); m.Warn(e != nil, ice.ErrStart, cmd.Args, " ", e) { return } @@ -42,7 +42,7 @@ func _daemon_show(m *ice.Message, cmd *exec.Cmd, out, err string) { m.Gos(m, func(m *ice.Message) { if e := cmd.Wait(); e != nil { - m.Warn(e != nil, "%v wait: %s", cmd.Args, e) + m.Warn(e != nil, ice.ErrStart, cmd.Args, " ", e) m.Richs(DAEMON, nil, h, func(key string, value map[string]interface{}) { kit.Value(value, kit.MDB_STATUS, StatusError) kit.Value(value, kit.Keys(kit.MDB_EXTRA, kit.MDB_ERROR), e) @@ -61,28 +61,38 @@ const DAEMON = "daemon" func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ - DAEMON: {Name: "daemon", Help: "守护进程", Value: kit.Data()}, + DAEMON: {Name: DAEMON, Help: "守护进程", Value: kit.Data(kit.MDB_PATH, "var/daemon")}, }, Commands: map[string]*ice.Command{ DAEMON: {Name: "daemon hash 查看:button=auto 清理:button", Help: "守护进程", Action: map[string]*ice.Action{ "delete": {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy("mdb.delete", DAEMON, "", "hash", "hash", m.Option("hash")) + m.Richs(DAEMON, "", m.Option(kit.MDB_HASH), func(key string, value map[string]interface{}) { + m.Conf(DAEMON, kit.Keys(kit.MDB_HASH, key), "") + m.Log_DELETE(DAEMON, kit.Format(value)) + }) }}, - "prune": {Name: "prune", Help: "清理", Hand: func(m *ice.Message, arg ...string) { m.Richs(DAEMON, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) { - if strings.Count(m.Cmdx(SYSTEM, "ps", value["pid"]), "\n") > 1 { - value["status"] = "start" - return + if strings.Count(m.Cmdx(SYSTEM, "ps", value[kit.MDB_PID]), "\n") == 1 { + m.Conf(DAEMON, kit.Keys(kit.MDB_HASH, key), "") + m.Log_DELETE(DAEMON, kit.Format(value)) + } + }) + }}, + "stop": {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) { + m.Richs(DAEMON, "", m.Option(kit.MDB_HASH), func(key string, value map[string]interface{}) { + m.Cmdy(SYSTEM, "kill", value[kit.MDB_PID]) + if strings.Count(m.Cmdx(SYSTEM, "ps", value[kit.MDB_PID]), "\n") == 1 { + value[kit.MDB_STATUS] = StatusClose } - m.Conf(DAEMON, kit.Keys("hash", key), "") }) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { if len(arg) == 0 { m.Option("fields", "time,hash,status,pid,name,dir") - m.Cmdy("mdb.select", DAEMON, "", "hash") + m.Cmdy("mdb.select", DAEMON, "", kit.MDB_HASH) m.Sort("time", "time_r") + m.PushAction("停止", "删除") return } diff --git a/base/ctx/cmd.go b/base/ctx/cmd.go index d533c38b..1ff678e2 100644 --- a/base/ctx/cmd.go +++ b/base/ctx/cmd.go @@ -66,7 +66,7 @@ func _command_make(m *ice.Message, cmd *ice.Command) { cmd.List = append(cmd.List, kit.List(kit.MDB_INPUT, "button", "name", "返回", "value", "Last")...) button = true default: - kind, value := "text", "" + kind, value := kit.Select("text", "button", button), "" if len(ls) == 3 { kind, value = ls[1], ls[2] } else if len(ls) == 2 { diff --git a/base/nfs/nfs.go b/base/nfs/nfs.go index 4d73c7d9..4b96ea8e 100644 --- a/base/nfs/nfs.go +++ b/base/nfs/nfs.go @@ -26,6 +26,12 @@ func _file_ext(name string) string { func _file_list(m *ice.Message, root string, name string, level int, deep bool, dir_type string, dir_reg *regexp.Regexp, fields []string) { switch strings.Split(name, "/")[0] { case "etc", "var": + if m.Option(ice.MSG_USERROLE) == "root" { + break + } + if m.Option(ice.MSG_USERROLE) == "tech" { + break + } return } @@ -48,13 +54,14 @@ func _file_list(m *ice.Message, root string, name string, level int, deep bool, } p := path.Join(root, name, f.Name()) - if f, e = os.Lstat(p); e != nil { - m.Log("info", "%s", e) - continue - } else if (f.Mode()&os.ModeSymlink) != 0 && f.IsDir() { - continue - } - + // if f, e = os.Lstat(p); e != nil { + // m.Log("info", "%s", e) + // continue + // } else if (f.Mode()&os.ModeSymlink) != 0 && f.IsDir() { + // // continue + // } else { + // } + // if !(dir_type == "file" && f.IsDir() || dir_type == "dir" && !f.IsDir()) && (dir_reg == nil || dir_reg.MatchString(f.Name())) { for _, field := range fields { switch field { @@ -93,7 +100,15 @@ func _file_list(m *ice.Message, root string, name string, level int, deep bool, m.Push("tree", strings.Repeat("| ", level-1)+"|-"+f.Name()) } case "size": - m.Push("size", kit.FmtSize(f.Size())) + if f.IsDir() { + if ls, e := ioutil.ReadDir(path.Join(root, name, f.Name())); e == nil { + m.Push("size", len(ls)) + } else { + m.Push("size", 0) + } + } else { + m.Push("size", kit.FmtSize(f.Size())) + } case "line": if f.IsDir() { if d, e := ioutil.ReadDir(p); m.Assert(e) { diff --git a/base/web/render.go b/base/web/render.go index f6be24da..df3f1f8b 100644 --- a/base/web/render.go +++ b/base/web/render.go @@ -105,6 +105,7 @@ func RenderStatus(msg *ice.Message, code int, text string) { // name path expire var RENDER = struct { A string IMG string + Video string Field string Frame string Button string @@ -113,6 +114,7 @@ var RENDER = struct { }{ A: "a", IMG: "img", + Video: "video", Field: "field", Frame: "frame", Button: "button", @@ -132,6 +134,9 @@ func init() { RENDER.IMG: {Hand: func(m *ice.Message, arg ...string) { m.Echo(``, arg[0], kit.Select("120", arg, 1)) }}, + RENDER.Video: {Hand: func(m *ice.Message, arg ...string) { + m.Echo(`