mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 01:24:05 +08:00
opt cli
This commit is contained in:
parent
fe937b8d9f
commit
61aa881b7d
@ -80,12 +80,12 @@ func RoleRight(m *ice.Message, userrole string, keys ...string) bool {
|
||||
return _role_right(m, userrole, kit.Split(kit.Keys(keys), ice.PT)...)
|
||||
}
|
||||
|
||||
const ( // 用户角色
|
||||
const (
|
||||
ROOT = "root"
|
||||
TECH = "tech"
|
||||
VOID = "void"
|
||||
)
|
||||
const ( // 角色操作
|
||||
const (
|
||||
BLACK = "black"
|
||||
WHITE = "white"
|
||||
RIGHT = "right"
|
||||
|
@ -4,11 +4,6 @@ import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
)
|
||||
|
||||
const (
|
||||
USER = "USER"
|
||||
HOME = "HOME"
|
||||
PATH = "PATH"
|
||||
)
|
||||
const CLI = "cli"
|
||||
|
||||
var Index = &ice.Context{Name: CLI, Help: "命令模块"}
|
||||
|
@ -3,11 +3,10 @@ package cli
|
||||
import (
|
||||
"io"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/nfs"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
@ -28,24 +27,24 @@ func _daemon_exec(m *ice.Message, cmd *exec.Cmd) {
|
||||
|
||||
m.Go(func() {
|
||||
h := m.Cmdx(mdb.INSERT, DAEMON, "", mdb.HASH,
|
||||
kit.MDB_STATUS, START, ice.CMD, kit.Join(cmd.Args, ice.SP),
|
||||
STATUS, START, ice.CMD, kit.Join(cmd.Args, ice.SP),
|
||||
PID, cmd.Process.Pid, DIR, cmd.Dir, ENV, kit.Select("", cmd.Env),
|
||||
m.OptionSimple(CMD_OUTPUT, CMD_ERRPUT, mdb.CACHE_CLEAR_ON_EXIT),
|
||||
)
|
||||
|
||||
if e := cmd.Wait(); m.Warn(e, ice.ErrNotStart, cmd.Args) {
|
||||
if m.Conf(DAEMON, kit.Keys(kit.MDB_HASH, h, kit.Keym(kit.MDB_STATUS))) == START {
|
||||
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, ERROR, ERROR, e)
|
||||
if m.Conf(DAEMON, kit.Keys(mdb.HASH, h, kit.Keym(STATUS))) == START {
|
||||
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, mdb.HASH, h, STATUS, ERROR, ERROR, e)
|
||||
}
|
||||
} else {
|
||||
m.Cost(kit.MDB_CODE, cmd.ProcessState.ExitCode(), kit.MDB_ARGS, cmd.Args)
|
||||
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, kit.MDB_HASH, h, kit.MDB_STATUS, STOP)
|
||||
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, mdb.HASH, h, STATUS, STOP)
|
||||
}
|
||||
|
||||
switch cb := m.Optionv(kit.Keycb(DAEMON)).(type) {
|
||||
case func(string):
|
||||
m.Sleep("1s")
|
||||
cb(m.Conf(DAEMON, kit.Keys(kit.MDB_HASH, h, kit.Keym(kit.MDB_STATUS))))
|
||||
cb(m.Conf(DAEMON, kit.Keys(mdb.HASH, h, kit.Keym(STATUS))))
|
||||
case func():
|
||||
m.Sleep("1s")
|
||||
cb()
|
||||
@ -63,22 +62,6 @@ func _daemon_exec(m *ice.Message, cmd *exec.Cmd) {
|
||||
})
|
||||
}
|
||||
|
||||
func Inputs(m *ice.Message, field string) bool {
|
||||
switch strings.TrimPrefix(field, "extra.") {
|
||||
case ice.POD:
|
||||
m.Cmdy("route")
|
||||
case ice.CTX:
|
||||
m.Cmdy(ctx.CONTEXT)
|
||||
case ice.CMD:
|
||||
m.Cmdy(ctx.CONTEXT, kit.Select(m.Option(ice.CTX), m.Option(kit.Keys(kit.MDB_EXTRA, ice.CTX))), ctx.COMMAND)
|
||||
case ice.ARG:
|
||||
|
||||
default:
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
const (
|
||||
DIR = "dir"
|
||||
ENV = "env"
|
||||
@ -87,7 +70,6 @@ const (
|
||||
PWD = "pwd"
|
||||
)
|
||||
const (
|
||||
ERROR = "error"
|
||||
BUILD = "build"
|
||||
ORDER = "order"
|
||||
SPAWN = "spawn"
|
||||
@ -95,6 +77,8 @@ const (
|
||||
BENCH = "bench"
|
||||
PPROF = "pprof"
|
||||
|
||||
STATUS = "status"
|
||||
ERROR = "error"
|
||||
START = "start"
|
||||
RESTART = "restart"
|
||||
RELOAD = "reload"
|
||||
@ -111,14 +95,18 @@ const DAEMON = "daemon"
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
DAEMON: {Name: DAEMON, Help: "守护进程", Value: kit.Data(
|
||||
kit.MDB_PATH, ice.USR_LOCAL_DAEMON, kit.MDB_FIELD, "time,hash,status,pid,cmd,dir,env",
|
||||
nfs.PATH, ice.USR_LOCAL_DAEMON, mdb.FIELD, "time,hash,status,pid,cmd,dir,env",
|
||||
)},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmd(mdb.PRUNES, DAEMON, "", mdb.HASH, mdb.CACHE_CLEAR_ON_EXIT, ice.TRUE)
|
||||
}},
|
||||
|
||||
DAEMON: {Name: "daemon hash auto start prunes", Help: "守护进程", Action: ice.MergeAction(map[string]*ice.Action{
|
||||
ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(mdb.PRUNES, DAEMON, "", mdb.HASH, mdb.CACHE_CLEAR_ON_EXIT, ice.TRUE)
|
||||
}},
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.OptionFields(m.Config(mdb.FIELD))
|
||||
m.Cmdy(mdb.PRUNES, DAEMON, "", mdb.HASH, STATUS, STOP)
|
||||
m.Cmdy(mdb.PRUNES, DAEMON, "", mdb.HASH, STATUS, ERROR)
|
||||
}},
|
||||
START: {Name: "start cmd env dir", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(CMD_DIR, m.Option(DIR))
|
||||
m.Option(CMD_ENV, kit.Split(m.Option(ENV), " ="))
|
||||
@ -130,20 +118,15 @@ func init() {
|
||||
m.Cmdy(DAEMON, START)
|
||||
}},
|
||||
STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.OptionFields(m.Config(kit.MDB_FIELD))
|
||||
m.Cmd(mdb.SELECT, DAEMON, "", mdb.HASH, m.OptionSimple(kit.MDB_HASH)).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, m.OptionSimple(kit.MDB_HASH), kit.MDB_STATUS, STOP)
|
||||
m.OptionFields(m.Config(mdb.FIELD))
|
||||
m.Cmd(mdb.SELECT, DAEMON, "", mdb.HASH, m.OptionSimple(mdb.HASH)).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Cmd(mdb.MODIFY, DAEMON, "", mdb.HASH, m.OptionSimple(mdb.HASH), STATUS, STOP)
|
||||
m.Cmdy(SYSTEM, "kill", "-9", value[PID])
|
||||
})
|
||||
}},
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.OptionFields(m.Config(kit.MDB_FIELD))
|
||||
m.Cmdy(mdb.PRUNES, DAEMON, "", mdb.HASH, kit.MDB_STATUS, STOP)
|
||||
m.Cmdy(mdb.PRUNES, DAEMON, "", mdb.HASH, kit.MDB_STATUS, ERROR)
|
||||
}},
|
||||
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
mdb.HashSelect(m, arg...).Table(func(index int, value map[string]string, head []string) {
|
||||
switch value[kit.MDB_STATUS] {
|
||||
switch value[STATUS] {
|
||||
case START:
|
||||
m.PushButton(RESTART, STOP)
|
||||
default:
|
||||
|
@ -11,6 +11,7 @@ import (
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
@ -36,7 +37,7 @@ func _runtime_init(m *ice.Message) {
|
||||
}
|
||||
if name, e := os.Getwd(); e == nil {
|
||||
name = path.Base(kit.Select(name, os.Getenv("PWD")))
|
||||
ls := strings.Split(name, "/")
|
||||
ls := strings.Split(name, ice.PS)
|
||||
name = ls[len(ls)-1]
|
||||
ls = strings.Split(name, "\\")
|
||||
name = ls[len(ls)-1]
|
||||
@ -56,7 +57,7 @@ func _runtime_init(m *ice.Message) {
|
||||
m.Conf(RUNTIME, kit.Keys(BOOT, kit.MDB_COUNT), count)
|
||||
|
||||
// 节点信息
|
||||
m.Conf(RUNTIME, kit.Keys(NODE, kit.MDB_TIME), m.Time())
|
||||
m.Conf(RUNTIME, kit.Keys(NODE, mdb.TIME), m.Time())
|
||||
NodeInfo(m, "worker", m.Conf(RUNTIME, kit.Keys(BOOT, PATHNAME)))
|
||||
|
||||
runtime.GOMAXPROCS(kit.Int(kit.Select("1", m.Conf(RUNTIME, kit.Keys(HOST, "GOMAXPROCS")))))
|
||||
@ -80,13 +81,13 @@ func _runtime_hostinfo(m *ice.Message) {
|
||||
}
|
||||
}
|
||||
}
|
||||
m.Push("uptime", kit.Split(m.Cmdx(SYSTEM, "uptime"), ",")[0])
|
||||
m.Push("uptime", kit.Split(m.Cmdx(SYSTEM, "uptime"), ice.FS)[0])
|
||||
}
|
||||
|
||||
func NodeInfo(m *ice.Message, kind, name string) {
|
||||
name = strings.ReplaceAll(name, ice.PT, "_")
|
||||
m.Conf(RUNTIME, kit.Keys(NODE, kit.MDB_TYPE), kind)
|
||||
m.Conf(RUNTIME, kit.Keys(NODE, kit.MDB_NAME), name)
|
||||
m.Conf(RUNTIME, kit.Keys(NODE, mdb.TYPE), kind)
|
||||
m.Conf(RUNTIME, kit.Keys(NODE, mdb.NAME), name)
|
||||
ice.Info.NodeName = name
|
||||
ice.Info.NodeType = kind
|
||||
}
|
||||
@ -114,6 +115,11 @@ const (
|
||||
DARWIN = "darwin"
|
||||
WINDOWS = "windows"
|
||||
)
|
||||
const (
|
||||
USER = "USER"
|
||||
HOME = "HOME"
|
||||
PATH = "PATH"
|
||||
)
|
||||
const (
|
||||
CTX_SHY = "ctx_shy"
|
||||
CTX_DEV = "ctx_dev"
|
||||
@ -145,10 +151,10 @@ func init() {
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
RUNTIME: {Name: RUNTIME, Help: "运行环境", Value: kit.Dict()},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
_runtime_init(m)
|
||||
}},
|
||||
RUNTIME: {Name: "runtime info=ifconfig,hostinfo,hostname,userinfo,procinfo,bootinfo,diskinfo auto", Help: "运行环境", Action: map[string]*ice.Action{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
|
||||
_runtime_init(m)
|
||||
}},
|
||||
IFCONFIG: {Name: "ifconfig", Help: "网卡配置", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy("tcp.host")
|
||||
}},
|
||||
@ -157,17 +163,17 @@ func init() {
|
||||
}},
|
||||
HOSTNAME: {Name: "hostname", Help: "主机域名", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 {
|
||||
m.Conf(RUNTIME, kit.Keys(NODE, kit.MDB_NAME), arg[0])
|
||||
m.Conf(RUNTIME, kit.Keys(NODE, mdb.NAME), arg[0])
|
||||
m.Conf(RUNTIME, kit.Keys(BOOT, HOSTNAME), arg[0])
|
||||
ice.Info.HostName = arg[0]
|
||||
}
|
||||
m.Echo(ice.Info.HostName)
|
||||
}},
|
||||
USERINFO: {Name: "userinfo", Help: "用户信息", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Split(m.Cmdx(SYSTEM, "who"), "user term time", ice.SP, ice.NL)
|
||||
m.Split(m.Cmdx(SYSTEM, "who"), "user term time")
|
||||
}},
|
||||
PROCINFO: {Name: "procinfo", Help: "进程信息", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Split(m.Cmdx(SYSTEM, "ps", "u"), "", ice.SP, ice.NL)
|
||||
m.Split(m.Cmdx(SYSTEM, "ps", "u"))
|
||||
m.PushAction("prockill")
|
||||
m.StatusTimeCount()
|
||||
}},
|
||||
@ -181,12 +187,15 @@ func init() {
|
||||
m.Push("", value, head)
|
||||
}
|
||||
})
|
||||
m.Display("/plugin/story/pie.js?field=Size")
|
||||
m.RenameAppend("Use%", "Use")
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == BOOTINFO {
|
||||
arg = arg[1:]
|
||||
}
|
||||
m.Cmdy(ctx.CONFIG, RUNTIME, arg)
|
||||
m.Display("/plugin/story/json.js")
|
||||
}},
|
||||
}})
|
||||
}
|
||||
|
@ -5,8 +5,10 @@ import (
|
||||
"io"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
@ -72,12 +74,27 @@ func _system_exec(m *ice.Message, cmd *exec.Cmd) {
|
||||
m.Cost(kit.MDB_CODE, cmd.ProcessState.ExitCode(), kit.MDB_ARGS, cmd.Args)
|
||||
}
|
||||
|
||||
m.Push(kit.MDB_TIME, m.Time())
|
||||
m.Push(mdb.TIME, m.Time())
|
||||
m.Push(kit.MDB_CODE, int(cmd.ProcessState.ExitCode()))
|
||||
}
|
||||
func IsSuccess(m *ice.Message) bool {
|
||||
return m.Append(kit.MDB_CODE) == "0" || m.Append(kit.MDB_CODE) == ""
|
||||
}
|
||||
func Inputs(m *ice.Message, field string) bool {
|
||||
switch strings.TrimPrefix(field, "extra.") {
|
||||
case ice.POD:
|
||||
m.Cmdy("route")
|
||||
case ice.CTX:
|
||||
m.Cmdy(ctx.CONTEXT)
|
||||
case ice.CMD:
|
||||
m.Cmdy(ctx.CONTEXT, kit.Select(m.Option(ice.CTX), m.Option(kit.Keys(kit.MDB_EXTRA, ice.CTX))), ctx.COMMAND)
|
||||
case ice.ARG:
|
||||
|
||||
default:
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
const (
|
||||
CMD_DIR = "cmd_dir"
|
||||
@ -95,14 +112,14 @@ const SYSTEM = "system"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
SYSTEM: {Name: SYSTEM, Help: "系统命令", Value: kit.Data(kit.MDB_FIELD, "time,id,cmd")},
|
||||
SYSTEM: {Name: SYSTEM, Help: "系统命令", Value: kit.Data(mdb.FIELD, "time,id,cmd")},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
SYSTEM: {Name: "system cmd run:button", Help: "系统命令", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
||||
if len(arg) == 0 {
|
||||
mdb.ListSelect(m, arg...)
|
||||
return
|
||||
}
|
||||
m.Grow(SYSTEM, "", kit.Dict(kit.MDB_TIME, m.Time(), ice.CMD, kit.Join(arg, ice.SP)))
|
||||
m.Grow(SYSTEM, "", kit.Dict(mdb.TIME, m.Time(), ice.CMD, kit.Join(arg, ice.SP)))
|
||||
|
||||
if len(arg) == 1 {
|
||||
arg = kit.Split(arg[0])
|
||||
|
@ -6,7 +6,6 @@ import (
|
||||
"strings"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/cli"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
@ -25,10 +24,9 @@ func _tail_create(m *ice.Message, arg ...string) {
|
||||
}
|
||||
})
|
||||
|
||||
m.Option(cli.CMD_OUTPUT, w)
|
||||
m.Option(cli.CMD_ERRPUT, w)
|
||||
m.Option("cmd_output", w)
|
||||
m.Option(mdb.CACHE_CLEAR_ON_EXIT, ice.TRUE)
|
||||
m.Cmd(cli.DAEMON, TAIL, "-n", "0", "-f", file)
|
||||
m.Cmd("cli.daemon", TAIL, "-n", "0", "-f", file)
|
||||
})
|
||||
}
|
||||
func _tail_count(m *ice.Message, name string) string {
|
||||
|
@ -8,7 +8,6 @@ import (
|
||||
"strings"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/cli"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
|
||||
@ -17,8 +16,8 @@ const TAR = "tar"
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
||||
TAR: {Name: "tar file path auto", Help: "打包", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(cli.CMD_DIR, m.Option(DIR_ROOT))
|
||||
m.Cmdy(cli.SYSTEM, "tar", "zcvf", arg)
|
||||
m.Option("cmd_dir", m.Option(DIR_ROOT))
|
||||
m.Cmdy("cli.system", "tar", "zcvf", arg)
|
||||
return
|
||||
|
||||
file, err := os.Create(arg[0])
|
||||
|
@ -5,7 +5,6 @@ import (
|
||||
"path"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/cli"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
@ -14,7 +13,7 @@ func _trash_create(m *ice.Message, name string) {
|
||||
if s, e := os.Stat(name); e == nil {
|
||||
if s.IsDir() {
|
||||
tar := path.Base(name) + ".tar.gz"
|
||||
m.Cmd(cli.SYSTEM, "tar", "zcf", tar, name)
|
||||
m.Cmd(TAR, tar, name)
|
||||
name = tar
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user