diff --git a/base/cli/daemon.go b/base/cli/daemon.go index 377f3e9d..7da9ad68 100644 --- a/base/cli/daemon.go +++ b/base/cli/daemon.go @@ -126,68 +126,65 @@ const ( 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)}, - }, - 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) + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + DAEMON: {Name: DAEMON, Help: "守护进程", Value: kit.Data(kit.MDB_PATH, ice.USR_LOCAL_DAEMON)}, + }, 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: map[string]*ice.Action{ + 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), " =")) + m.Cmdy(DAEMON, kit.Split(m.Option(CMD))) }}, - - DAEMON: {Name: "daemon hash auto start prunes", Help: "守护进程", Action: map[string]*ice.Action{ - 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), " =")) - m.Cmdy(DAEMON, kit.Split(m.Option(CMD))) - }}, - RESTART: {Name: "restart", Help: "重启", Hand: func(m *ice.Message, arg ...string) { - m.Cmd(DAEMON, STOP) - m.Sleep("3s") - m.Cmdy(DAEMON, START) - }}, - 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, STOP) - m.Cmdy(SYSTEM, "kill", "-9", value[PID]) - }) - }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - 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, ERROR) - m.Cmdy(mdb.PRUNES, DAEMON, "", mdb.HASH, kit.MDB_STATUS, STOP) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) == 0 { // 进程列表 - m.Fields(len(arg), "time,hash,status,pid,cmd,dir,env") - m.Cmdy(mdb.SELECT, DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) { - switch value[kit.MDB_STATUS] { - case START: - m.PushButton(RESTART, STOP) - default: - m.PushButton(mdb.REMOVE) - } - }) - - } else if m.Richs(DAEMON, "", arg[0], nil) != nil { // 进程详情 - m.Option(mdb.FIELDS, mdb.DETAIL) - m.Cmdy(mdb.SELECT, DAEMON, "", mdb.HASH, kit.MDB_HASH, arg) - switch m.Append(kit.MDB_STATUS) { + RESTART: {Name: "restart", Help: "重启", Hand: func(m *ice.Message, arg ...string) { + m.Cmd(DAEMON, STOP) + m.Sleep("3s") + m.Cmdy(DAEMON, START) + }}, + 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, STOP) + m.Cmdy(SYSTEM, "kill", "-9", value[PID]) + }) + }}, + mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + 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, ERROR) + m.Cmdy(mdb.PRUNES, DAEMON, "", mdb.HASH, kit.MDB_STATUS, STOP) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) == 0 { // 进程列表 + m.Fields(len(arg), "time,hash,status,pid,cmd,dir,env") + m.Cmdy(mdb.SELECT, DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) { + switch value[kit.MDB_STATUS] { case START: m.PushButton(RESTART, STOP) default: m.PushButton(mdb.REMOVE) } + }) - } else { // 启动进程 - m.Option(CMD_TYPE, DAEMON) - m.Cmdy(SYSTEM, arg) + } else if m.Richs(DAEMON, "", arg[0], nil) != nil { // 进程详情 + m.Option(mdb.FIELDS, mdb.DETAIL) + m.Cmdy(mdb.SELECT, DAEMON, "", mdb.HASH, kit.MDB_HASH, arg) + switch m.Append(kit.MDB_STATUS) { + case START: + m.PushButton(RESTART, STOP) + default: + m.PushButton(mdb.REMOVE) } - }}, - }, - }) + + } else { // 启动进程 + m.Option(CMD_TYPE, DAEMON) + m.Cmdy(SYSTEM, arg) + } + }}, + }}) } diff --git a/base/cli/system.go b/base/cli/system.go index 7a02d494..5981353c 100644 --- a/base/cli/system.go +++ b/base/cli/system.go @@ -2,7 +2,6 @@ package cli import ( "bytes" - "fmt" "io" "os" "os/exec" @@ -26,7 +25,6 @@ func _system_show(m *ice.Message, cmd *exec.Cmd) { if w, ok := m.Optionv(CMD_ERRPUT).(io.Writer); ok { cmd.Stderr = w } - } else { out := bytes.NewBuffer(make([]byte, 0, ice.MOD_BUFS)) err := bytes.NewBuffer(make([]byte, 0, ice.MOD_BUFS)) @@ -59,6 +57,9 @@ func SystemProcess(m *ice.Message, text string, arg ...string) { m.ProcessField(SYSTEM, RUN) m.Push(ARG, kit.Split(text)) } +func IsSuccess(m *ice.Message) bool { + return m.Append(CMD_CODE) == "0" +} const ( CMD_DIR = "cmd_dir" @@ -75,11 +76,17 @@ const ( ) const ( + GOARCH = "goarch" + GOOS = "goos" LINUX = "linux" DARWIN = "darwin" WINDOWS = "windows" - SOURCE = "source" - TARGET = "target" + AMD64 = "amd64" + I386 = "i386" + ARM = "arm" + + SOURCE = "source" + TARGET = "target" USER = "USER" HOME = "HOME" @@ -88,48 +95,45 @@ const ( const SYSTEM = "system" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - SYSTEM: {Name: SYSTEM, Help: "系统命令", Value: kit.Data()}, - }, - 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 { - m.Fields(len(arg), "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, " "))) + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + SYSTEM: {Name: SYSTEM, Help: "系统命令", Value: kit.Data()}, + }, 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 { + m.Fields(len(arg), "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]) - } - cmd := exec.Command(arg[0], arg[1:]...) + if len(arg) == 1 { + arg = kit.Split(arg[0]) + } + cmd := exec.Command(arg[0], arg[1:]...) - // 运行目录 - if cmd.Dir = m.Option(CMD_DIR); len(cmd.Dir) > 0 { - m.Log_EXPORT(kit.MDB_META, SYSTEM, CMD_DIR, cmd.Dir) - if _, e := os.Stat(cmd.Dir); e != nil && os.IsNotExist(e) { - os.MkdirAll(cmd.Dir, ice.MOD_DIR) - } + // 运行目录 + if cmd.Dir = m.Option(CMD_DIR); len(cmd.Dir) > 0 { + m.Log_EXPORT(kit.MDB_META, SYSTEM, CMD_DIR, cmd.Dir) + if _, e := os.Stat(cmd.Dir); e != nil && os.IsNotExist(e) { + os.MkdirAll(cmd.Dir, ice.MOD_DIR) } + } - // 环境变量 - env := kit.Simple(m.Optionv(CMD_ENV)) - for i := 0; i < len(env)-1; i += 2 { - cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", env[i], env[i+1])) - } - if len(cmd.Env) > 0 { - m.Log_EXPORT(kit.MDB_META, SYSTEM, CMD_ENV, cmd.Env) - } + // 环境变量 + env := kit.Simple(m.Optionv(CMD_ENV)) + for i := 0; i < len(env)-1; i += 2 { + cmd.Env = append(cmd.Env, kit.Format("%s=%s", env[i], env[i+1])) + } + if len(cmd.Env) > 0 { + m.Log_EXPORT(kit.MDB_META, SYSTEM, CMD_ENV, cmd.Env) + } - switch m.Option(CMD_TYPE) { - case DAEMON: - _daemon_show(m, cmd, m.Option(CMD_OUTPUT), m.Option(CMD_ERRPUT)) - default: - _system_show(m, cmd) - } - }}, - }, - }) + switch m.Option(CMD_TYPE) { + case DAEMON: + _daemon_show(m, cmd, m.Option(CMD_OUTPUT), m.Option(CMD_ERRPUT)) + default: + _system_show(m, cmd) + } + }}, + }}) } diff --git a/base/mdb/hash.go b/base/mdb/hash.go index eee9d9d5..5ddbafec 100644 --- a/base/mdb/hash.go +++ b/base/mdb/hash.go @@ -144,6 +144,7 @@ func _hash_prunes(m *ice.Message, prefix, chain string, arg ...string) { const HASH = "hash" func HashAction(fields ...string) map[string]*ice.Action { + _key := func(m *ice.Message) string { return kit.Select(kit.MDB_HASH, m.Config(kit.MDB_SHORT)) } return ice.SelectAction(map[string]*ice.Action{ INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { m.Cmdy(INPUTS, m.PrefixKey(), "", HASH, arg) @@ -152,16 +153,16 @@ func HashAction(fields ...string) map[string]*ice.Action { m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg) }}, REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(DELETE, m.PrefixKey(), "", HASH, m.OptionSimple(kit.Select(kit.MDB_HASH, m.Config(kit.MDB_SHORT))), arg) + m.Cmdy(DELETE, m.PrefixKey(), "", HASH, m.OptionSimple(_key(m)), arg) }}, MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(MODIFY, m.PrefixKey(), "", HASH, m.OptionSimple(kit.Select(kit.MDB_HASH, m.Config(kit.MDB_SHORT))), arg) + m.Cmdy(MODIFY, m.PrefixKey(), "", HASH, m.OptionSimple(_key(m)), arg) }}, EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(EXPORT, m.PrefixKey(), "", HASH) + m.Cmdy(EXPORT, m.PrefixKey(), "", HASH, arg) }}, IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(IMPORT, m.PrefixKey(), "", HASH) + m.Cmdy(IMPORT, m.PrefixKey(), "", HASH, arg) }}, PRUNES: {Name: "prunes before@date", Help: "清理", Hand: func(m *ice.Message, arg ...string) { list := []string{} @@ -170,7 +171,7 @@ func HashAction(fields ...string) map[string]*ice.Action { list = append(list, key) } }) - m.OptionFields(m.Conf(m.PrefixKey(), kit.META_FIELD)) + m.OptionFields(m.Config(kit.MDB_FIELD)) for _, v := range list { m.Cmdy(DELETE, m.PrefixKey(), "", HASH, kit.MDB_HASH, v) } diff --git a/base/mdb/zone.go b/base/mdb/zone.go index d0ae6175..3f5cf381 100644 --- a/base/mdb/zone.go +++ b/base/mdb/zone.go @@ -129,32 +129,9 @@ func _zone_import(m *ice.Message, prefix, chain, file string) { const ZONE_FIELD = "time,zone,count" func ZoneAction(fields ...string) map[string]*ice.Action { - _zone := func(m *ice.Message) string { - return kit.Select(kit.MDB_ZONE, m.Conf(m.PrefixKey(), kit.Keym(kit.MDB_SHORT))) - } + _zone := func(m *ice.Message) string { return kit.Select(kit.MDB_ZONE, m.Config(kit.MDB_SHORT)) } + return ice.SelectAction(map[string]*ice.Action{ - CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg) - }}, - INSERT: {Name: "insert zone type=go name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(INSERT, m.PrefixKey(), "", HASH, _zone(m), arg[1]) - m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), arg[2:]) - }}, - MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(kit.MDB_ID), arg) - }}, - REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(DELETE, m.PrefixKey(), "", HASH, m.OptionSimple(_zone(m))) - }}, - EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { - m.OptionFields(_zone(m), m.Conf(m.PrefixKey(), kit.META_FIELD)) - m.Cmdy(EXPORT, m.PrefixKey(), "", ZONE) - m.Conf(m.PrefixKey(), kit.MDB_HASH, "") - }}, - IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { - m.OptionFields(_zone(m)) - m.Cmdy(IMPORT, m.PrefixKey(), "", ZONE) - }}, INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { case _zone(m): @@ -163,5 +140,33 @@ func ZoneAction(fields ...string) map[string]*ice.Action { m.Cmdy(INPUTS, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), arg) } }}, + CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(INSERT, m.PrefixKey(), "", HASH, arg) + }}, + REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(DELETE, m.PrefixKey(), "", HASH, m.OptionSimple(_zone(m)), arg) + }}, + INSERT: {Name: "insert zone type=go name=hi text=hello", Help: "添加", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(INSERT, m.PrefixKey(), "", HASH, _zone(m), arg[1]) + m.Cmdy(INSERT, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), arg[2:]) + }}, + MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(MODIFY, m.PrefixKey(), "", ZONE, m.Option(_zone(m)), m.Option(kit.MDB_ID), arg) + }}, + EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) { + m.OptionFields(_zone(m), m.Config(kit.MDB_FIELD)) + m.Cmdy(EXPORT, m.PrefixKey(), "", ZONE) + m.Conf(m.PrefixKey(), kit.MDB_HASH, "") + }}, + IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { + m.OptionFields(_zone(m)) + m.Cmdy(IMPORT, m.PrefixKey(), "", ZONE) + }}, + PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) { + PrevPage(m, arg[0], arg[1:]...) + }}, + NEXT: {Name: "next", Help: "下一页", Hand: func(m *ice.Message, arg ...string) { + NextPageLimit(m, arg[0], arg[1:]...) + }}, }, fields...) } diff --git a/base/nfs/tail.go b/base/nfs/tail.go index 67043d40..ec6976a8 100644 --- a/base/nfs/tail.go +++ b/base/nfs/tail.go @@ -47,7 +47,7 @@ func init() { m.Cmd(TAIL, mdb.CREATE, kit.MDB_FILE, kit.Format(value[kit.MDB_FILE]), kit.MDB_NAME, kit.Format(value[kit.MDB_NAME])) }) }}, - TAIL: {Name: "tail name id auto page filter:text create", Help: "日志流", Action: map[string]*ice.Action{ + TAIL: {Name: "tail name id auto page filter:text create", Help: "日志流", Action: ice.MergeAction(map[string]*ice.Action{ mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { switch arg[0] { case FILE: @@ -55,21 +55,17 @@ func init() { m.ProcessAgain() case kit.MDB_NAME: m.Push(arg[0], kit.Split(m.Option(FILE), "/")) + case "limit": + m.Push("limit", 10) + m.Push("limit", 20) + m.Push("limit", 30) + m.Push("limit", 50) } }}, mdb.CREATE: {Name: "create file name", Help: "创建", Hand: func(m *ice.Message, arg ...string) { _tail_create(m, arg...) }}, - mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(mdb.DELETE, TAIL, "", mdb.HASH, m.OptionSimple(kit.MDB_NAME)) - }}, - mdb.PREV: {Name: "prev", Help: "上一页", Hand: func(m *ice.Message, arg ...string) { - mdb.PrevPage(m, arg[0], arg[1:]...) - }}, - mdb.NEXT: {Name: "next", Help: "下一页", Hand: func(m *ice.Message, arg ...string) { - mdb.NextPageLimit(m, arg[0], arg[1:]...) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + }, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Fields(len(kit.Slice(arg, 0, 2)), "time,name,count,file", "time,id,file,text") m.Option(mdb.CACHE_FILTER, kit.Select("", arg, 4)) m.Option(mdb.CACHE_OFFEND, kit.Select("0", arg, 3)) diff --git a/core/code/autogen.go b/core/code/autogen.go index 488c7a11..74ee77d4 100644 --- a/core/code/autogen.go +++ b/core/code/autogen.go @@ -100,8 +100,10 @@ func _autogen_version(m *ice.Message) { m.Cmdy(cli.SYSTEM, "go", "mod", "init", path.Base(kit.Path(""))) } - file := ice.SRC_VERSION_GO - m.Cmd(nfs.SAVE, file, kit.Format(`package main + m.Cmd(nfs.DEFS, ice.SRC_BINPACK_GO, kit.Format(`package main +`)) + + m.Cmd(nfs.SAVE, ice.SRC_VERSION_GO, kit.Format(`package main import ( "shylinux.com/x/icebergs" @@ -124,10 +126,9 @@ func init() { strings.TrimSpace(m.Cmdx(cli.SYSTEM, "git", "describe", "--tags")), ice.Info.HostName, ice.Info.UserName, )) - defer m.Cmdy(nfs.CAT, file) - m.Cmdy(nfs.DIR, file, "time,size,line,path") m.Cmdy(nfs.DIR, ice.SRC_BINPACK_GO, "time,size,line,path") + m.Cmdy(nfs.DIR, ice.SRC_VERSION_GO, "time,size,line,path") m.Cmdy(nfs.DIR, ice.SRC_MAIN_GO, "time,size,line,path") } func _autogen_miss(m *ice.Message) { diff --git a/core/code/case.go b/core/code/case.go index 6c3dafe0..20929c22 100644 --- a/core/code/case.go +++ b/core/code/case.go @@ -16,12 +16,15 @@ func init() { kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,name,cmd,api,arg,res", )}, }, Commands: map[string]*ice.Command{ - CASE: {Name: "case zone id auto", Help: "用例", Action: ice.MergeAction(map[string]*ice.Action{ - mdb.INSERT: {Name: "create zone name=hi cmd=POST,GET api arg:textarea res:textarea", Help: "添加"}, + CASE: {Name: "case dev zone id auto", Help: "用例", Action: ice.MergeAction(map[string]*ice.Action{ + mdb.CREATE: {Name: "create name address", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(web.SPIDE, mdb.CREATE, arg) + }}, + mdb.INSERT: {Name: "insert zone name=hi cmd=POST,GET api arg:textarea res:textarea", Help: "添加"}, cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) { m.Option(web.SPIDE_HEADER, web.ContentType, web.ContentJSON) - m.Echo(kit.Formats(kit.UnMarshal(m.Cmdx(web.SPIDE, ice.DEV, web.SPIDE_RAW, + m.Echo(kit.Formats(kit.UnMarshal(m.Cmdx(web.SPIDE, m.Option(ice.DEV), web.SPIDE_RAW, m.Option(cli.CMD), m.Option(cli.API), web.SPIDE_DATA, m.Option(cli.ARG))))) m.Info(`curl "` + m.Option(cli.API) + `" -H "Content-Type: application/json"` + ` -d '` + m.Option(cli.ARG) + `'`) m.ProcessDisplay("/plugin/local/wiki/json.js") @@ -58,9 +61,17 @@ func init() { m.Echo(ice.OK) }}, }, mdb.ZoneAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - m.Fields(len(arg), "time,zone,count", m.Conf(m.PrefixKey(), kit.META_FIELD)) - if m.Cmdy(mdb.SELECT, m.PrefixKey(), "", mdb.ZONE, arg); len(arg) == 0 { - m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT) + if len(arg) == 0 { + m.Action(mdb.CREATE) + m.Cmdy(web.SPIDE) + m.RenameAppend("client.name", "dev") + m.RenameAppend("client.url", "address") + return + } + + m.Fields(len(arg)-1, "time,zone,count", m.Config(kit.MDB_FIELD)) + if m.Cmdy(mdb.SELECT, m.PrefixKey(), "", mdb.ZONE, arg[1:]); len(arg) == 1 { + m.Action(mdb.INSERT, mdb.EXPORT, mdb.IMPORT) m.PushAction(mdb.INSERT, cli.CHECK, mdb.REMOVE) } else { m.Action(mdb.INSERT, cli.CHECK) diff --git a/core/code/compile.go b/core/code/compile.go index 468e6fb0..196e9aec 100644 --- a/core/code/compile.go +++ b/core/code/compile.go @@ -3,72 +3,70 @@ package code import ( "os" "path" - "strings" ice "shylinux.com/x/icebergs" "shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" + "shylinux.com/x/icebergs/base/tcp" kit "shylinux.com/x/toolkits" ) const COMPILE = "compile" func init() { - Index.Merge(&ice.Context{ - Configs: map[string]*ice.Config{ - COMPILE: {Name: COMPILE, Help: "编译", Value: kit.Data( - kit.MDB_PATH, ice.USR_PUBLISH, cli.ENV, kit.Dict( - "CGO_ENABLED", "0", "GOCACHE", os.Getenv("GOCACHE"), - cli.HOME, os.Getenv(cli.HOME), cli.PATH, os.Getenv(cli.PATH), - "GOPROXY", "https://goproxy.cn,direct", "GOPRIVATE", "github.com", - ), GO, []interface{}{GO, cli.BUILD}, - )}, - }, - Commands: map[string]*ice.Command{ - COMPILE: {Name: "compile arch=amd64,386,arm os=linux,darwin,windows src=src/main.go@key run:button", Help: "编译", Action: map[string]*ice.Action{ - mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { - m.Cmdy(nfs.DIR, "src", "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go$`}) - m.Sort(kit.MDB_PATH) - }}, - }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { - if len(arg) == 0 { - m.Cmdy(nfs.DIR, m.Conf(COMPILE, kit.META_PATH), "time,size,path") - return - } + Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ + COMPILE: {Name: COMPILE, Help: "编译", Value: kit.Data( + nfs.PATH, ice.USR_PUBLISH, cli.ENV, kit.Dict( + "GOPRIVATE", "shylinux.com,github.com", "GOPROXY", "https://goproxy.cn,direct", + cli.HOME, os.Getenv(cli.HOME), cli.PATH, os.Getenv(cli.PATH), + "GOCACHE", os.Getenv("GOCACHE"), "CGO_ENABLED", "0", + ), GO, kit.List(GO, cli.BUILD), + )}, + }, Commands: map[string]*ice.Command{ + COMPILE: {Name: "compile arch=amd64,386,arm os=linux,darwin,windows src=src/main.go@key run:button", Help: "编译", Action: map[string]*ice.Action{ + mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { + m.Cmdy(nfs.DIR, ice.SRC, "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go$`}) + m.Sort(kit.MDB_PATH) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) == 0 { + m.Cmdy(nfs.DIR, m.Config(nfs.PATH), "time,size,path") + return + } - main := ice.SRC_MAIN_GO - goos := m.Conf(cli.RUNTIME, "host.GOOS") - arch := m.Conf(cli.RUNTIME, "host.GOARCH") - for _, k := range arg { - switch k { - case cli.LINUX, cli.DARWIN, cli.WINDOWS: - goos = k - case "amd64", "386", "arm": - arch = k - default: + // 交叉编译 + main := ice.SRC_MAIN_GO + goos := m.Conf(cli.RUNTIME, kit.Keys(tcp.HOST, cli.GOOS)) + arch := m.Conf(cli.RUNTIME, kit.Keys(tcp.HOST, cli.GOARCH)) + for _, k := range arg { + switch k { + case cli.LINUX, cli.DARWIN, cli.WINDOWS: + goos = k + case cli.AMD64, cli.I386, cli.ARM: + arch = k + default: + if kit.Ext(k) == GO { main = k } } - _autogen_version(m.Spawn()) + } + file := path.Join(kit.Select("", m.Config(nfs.PATH), m.Option(cli.CMD_DIR) == ""), + kit.Keys(kit.Select(ice.ICE, kit.TrimExt(main, ".go"), main != ice.SRC_MAIN_GO), goos, arch)) - // 编译目标 - file := path.Join(kit.Select("", m.Conf(COMPILE, kit.META_PATH), m.Option(cli.CMD_DIR) == ""), - kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != ice.SRC_MAIN_GO), goos, arch)) + // 执行编译 + _autogen_version(m.Spawn()) + m.Optionv(cli.CMD_ENV, kit.Simple(m.Confv(COMPILE, kit.Keym(cli.ENV)), cli.GOOS, goos, cli.GOARCH, arch)) + if msg := m.Cmd(cli.SYSTEM, m.Confv(COMPILE, kit.Keym(GO)), "-o", file, main, ice.SRC_VERSION_GO, ice.SRC_BINPACK_GO); !cli.IsSuccess(msg) { + m.Copy(msg) + return + } - // 编译参数 - m.Optionv(cli.CMD_ENV, kit.Simple(m.Confv(COMPILE, kit.Keym(cli.ENV)), "GOARCH", arch, "GOOS", goos)) - if msg := m.Cmd(cli.SYSTEM, m.Confv(COMPILE, kit.Keym(GO)), - "-o", file, main, ice.SRC_VERSION_GO, ice.SRC_BINPACK_GO); msg.Append(cli.CMD_CODE) != "0" { - m.Copy(msg) - return - } - - m.Log_EXPORT(cli.SOURCE, main, cli.TARGET, file) - m.Cmdy(nfs.DIR, file) - m.EchoDownload(file) - m.StatusTimeCount() - }}, - }, - }) + // 编译成功 + m.Log_EXPORT(cli.SOURCE, main, cli.TARGET, file) + m.Cmdy(nfs.DIR, file, "time,path,size,link,action") + m.Cmdy(PUBLISH, ice.CONTEXTS, "base") + m.StatusTimeCount() + }}, + }}) }