mirror of
https://shylinux.com/x/icebergs
synced 2025-04-27 09:48:28 +08:00
opt code
This commit is contained in:
parent
1b56e5b7fd
commit
7d7888f61c
@ -88,7 +88,7 @@ func init() {
|
||||
})
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,hash,username,userrole,ip")
|
||||
m.Fields(len(arg), "time,hash,username,userrole,ip")
|
||||
m.Cmdy(mdb.SELECT, SESS, "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
}},
|
||||
|
@ -75,7 +75,7 @@ func init() {
|
||||
m.Cmdy(mdb.DELETE, TOTP, "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,name,secret,period,number")
|
||||
m.Fields(len(arg), "time,name,secret,period,number")
|
||||
m.Cmd(mdb.SELECT, TOTP, "", mdb.HASH, kit.MDB_NAME, arg).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push(kit.MDB_TIME, m.Time())
|
||||
m.Push(kit.MDB_NAME, value[kit.MDB_NAME])
|
||||
|
@ -138,7 +138,7 @@ func init() {
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,username,userzone,usernick")
|
||||
m.Fields(len(arg), "time,username,userzone,usernick")
|
||||
m.Cmdy(mdb.SELECT, USER, "", mdb.HASH, USERNAME, arg)
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push(USERROLE, UserRole(m, value[USERNAME]))
|
||||
|
@ -132,7 +132,7 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 { // 进程列表
|
||||
m.Fields(len(arg) == 0, "time,hash,status,pid,cmd,dir,env")
|
||||
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:
|
||||
|
@ -79,6 +79,7 @@ const (
|
||||
DARWIN = "darwin"
|
||||
WINDOWS = "windows"
|
||||
SOURCE = "source"
|
||||
TARGET = "target"
|
||||
|
||||
USER = "USER"
|
||||
HOME = "HOME"
|
||||
@ -94,7 +95,7 @@ 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.Fields(len(arg), "time,id,cmd")
|
||||
m.Cmdy(mdb.SELECT, SYSTEM, "", mdb.LIST)
|
||||
return
|
||||
}
|
||||
|
@ -37,13 +37,13 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 { // 事件列表
|
||||
m.Fields(len(arg) == 0, "time,event,count")
|
||||
m.Fields(len(arg), "time,event,count")
|
||||
m.Cmdy(mdb.SELECT, EVENT, "", mdb.HASH)
|
||||
m.PushAction(ACTION, mdb.REMOVE)
|
||||
return
|
||||
}
|
||||
|
||||
m.Fields(len(arg) == 1, "time,id,cmd")
|
||||
m.Fields(len(arg[1:]), "time,id,cmd")
|
||||
m.Cmdy(mdb.SELECT, EVENT, kit.Keys(kit.MDB_HASH, kit.Hashs(arg[0])), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
}},
|
||||
},
|
||||
|
@ -52,7 +52,7 @@ func init() {
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,hash,status,fileline")
|
||||
m.Fields(len(arg), "time,hash,status,fileline")
|
||||
m.Cmdy(mdb.SELECT, ROUTINE, "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction(INNER, mdb.REMOVE)
|
||||
}},
|
||||
|
@ -62,7 +62,7 @@ func init() {
|
||||
m.Cmdy(mdb.DELETE, SIGNAL, "", mdb.HASH, SIGNAL, m.Option(SIGNAL))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,signal,name,cmd")
|
||||
m.Fields(len(arg), "time,signal,name,cmd")
|
||||
m.Cmdy(mdb.SELECT, SIGNAL, "", mdb.HASH, SIGNAL, arg)
|
||||
m.PushAction(ACTION, mdb.REMOVE)
|
||||
m.Sort(SIGNAL)
|
||||
|
@ -69,13 +69,13 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 {
|
||||
m.Fields(len(arg) == 0, "time,hash,delay,interval,order,next,cmd")
|
||||
m.Fields(len(arg), "time,hash,delay,interval,order,next,cmd")
|
||||
m.Cmdy(mdb.SELECT, TIMER, "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
return
|
||||
}
|
||||
|
||||
m.Fields(len(arg) == 1, "time,id,res")
|
||||
m.Fields(len(arg[1:]), "time,id,res")
|
||||
m.Cmdy(mdb.SELECT, TIMER, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
}},
|
||||
},
|
||||
|
@ -428,14 +428,14 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
||||
if m.Action(mdb.CREATE); len(arg) == 0 { // 矩阵列表
|
||||
m.Fields(len(arg) == 0, "time,hash,npage,nhash")
|
||||
m.Fields(len(arg), "time,hash,npage,nhash")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), "", mdb.HASH)
|
||||
m.PushAction(mdb.INSERT, "show", mdb.REMOVE)
|
||||
return
|
||||
}
|
||||
|
||||
if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表
|
||||
m.Fields(len(arg) == 1, "time,npage,nhash,text")
|
||||
m.Fields(len(arg[1:]), "time,npage,nhash,text")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST)
|
||||
m.PushAction(PARSE)
|
||||
return
|
||||
|
@ -455,6 +455,8 @@ const MDB = "mdb"
|
||||
var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*ice.Command{
|
||||
INSERT: {Name: "insert key sub type arg...", Help: "添加", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
switch arg[2] {
|
||||
case ZONE:
|
||||
_list_insert(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.SubKey(arg[3]))), arg[4:]...)
|
||||
case HASH:
|
||||
_hash_insert(m, arg[0], _domain_chain(m, arg[1]), arg[3:]...)
|
||||
case LIST:
|
||||
@ -521,6 +523,8 @@ var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*
|
||||
}},
|
||||
INPUTS: {Name: "inputs key sub type field value", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
switch arg[2] {
|
||||
case ZONE:
|
||||
_list_inputs(m, arg[0], _domain_chain(m, kit.Keys(arg[1], kit.SubKey(arg[3]))), kit.Select("name", arg, 4), kit.Select("", arg, 5))
|
||||
case HASH:
|
||||
_hash_inputs(m, arg[0], _domain_chain(m, arg[1]), kit.Select("name", arg, 3), kit.Select("", arg, 4))
|
||||
case LIST:
|
||||
|
@ -64,7 +64,7 @@ func init() {
|
||||
mdb.NextPage(m, _tail_count(m, arg[0]), kit.Slice(arg, 2)...)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) < 2 || (len(arg) > 1 && arg[1] == ""), kit.Select("time,name,count,name,file", "time,id,file,text", len(arg) > 0 && arg[0] != ""))
|
||||
m.Fields(len(kit.Slice(arg, 0, 2)), "time,name,count,name,file", "time,id,file,text")
|
||||
m.Option(mdb.CACHE_FILTER, kit.Select("", arg, 4))
|
||||
m.Option(mdb.CACHE_OFFEND, kit.Select("0", arg, 3))
|
||||
m.Option(mdb.CACHE_LIMIT, kit.Select("10", arg, 2))
|
||||
|
@ -57,7 +57,7 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 {
|
||||
m.Fields(len(arg) == 0, "time,hash,file,from")
|
||||
m.Fields(len(arg), "time,hash,file,from")
|
||||
m.Cmdy(mdb.SELECT, TRASH, "", mdb.HASH)
|
||||
m.PushAction(mdb.REVERT, mdb.REMOVE)
|
||||
return
|
||||
|
@ -94,7 +94,7 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 { // 通道列表
|
||||
m.Fields(len(arg) == 0, "time,hash,status,username,hostport,tty,count")
|
||||
m.Fields(len(arg), "time,hash,status,username,hostport,tty,count")
|
||||
if m.Cmdy(mdb.SELECT, CHANNEL, "", mdb.HASH); len(arg) == 0 {
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushButton(kit.Select("", ctx.COMMAND, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE)
|
||||
@ -104,7 +104,7 @@ func init() {
|
||||
}
|
||||
|
||||
// 通道命令
|
||||
m.Fields(len(arg) == 1, "time,id,type,text")
|
||||
m.Fields(len(arg[1:]), "time,id,type,text")
|
||||
m.Cmdy(mdb.SELECT, CHANNEL, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
m.PushAction(mdb.REPEAT)
|
||||
}},
|
||||
|
@ -211,7 +211,7 @@ func init() {
|
||||
m.Echo(h)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,hash,status,username,host,port")
|
||||
m.Fields(len(arg), "time,hash,status,username,host,port")
|
||||
if m.Cmdy(mdb.SELECT, CONNECT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushButton(kit.Select("", SESSION, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE)
|
||||
|
@ -384,7 +384,7 @@ func init() {
|
||||
}
|
||||
|
||||
if len(arg) == 0 { // 脚本列表
|
||||
m.Fields(len(arg) == 0, "time,hash,name,count")
|
||||
m.Fields(len(arg), "time,hash,name,count")
|
||||
m.Cmdy(mdb.SELECT, SOURCE, "", mdb.HASH)
|
||||
m.Sort(kit.MDB_NAME)
|
||||
return
|
||||
@ -397,7 +397,7 @@ func init() {
|
||||
}
|
||||
|
||||
// 命令列表
|
||||
m.Fields(len(arg) == 1 || arg[1] == "", "time,id,text")
|
||||
m.Fields(len(arg[1:]), "time,id,text")
|
||||
m.Cmdy(mdb.SELECT, SOURCE, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
m.PushAction(mdb.REPEAT)
|
||||
}},
|
||||
|
@ -170,14 +170,14 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 { // 服务列表
|
||||
m.Fields(len(arg) == 0, "time,port,status,private,authkey,count")
|
||||
m.Fields(len(arg), "time,port,status,private,authkey,count")
|
||||
m.Cmdy(mdb.SELECT, SERVICE, "", mdb.HASH)
|
||||
m.PushAction(mdb.IMPORT, mdb.INSERT, mdb.EXPORT, aaa.INVITE)
|
||||
return
|
||||
}
|
||||
|
||||
// 公钥列表
|
||||
m.Fields(len(arg) == 1, "time,id,type,name,text")
|
||||
m.Fields(len(arg[1:]), "time,id,type,name,text")
|
||||
m.Cmdy(mdb.SELECT, SERVICE, kit.Keys(kit.MDB_HASH, kit.Hashs(arg[0])), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
}},
|
||||
},
|
||||
|
@ -85,7 +85,7 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 {
|
||||
m.Fields(len(arg) == 0, "time,hash,status,count,connect")
|
||||
m.Fields(len(arg), "time,hash,status,count,connect")
|
||||
if m.Cmdy(mdb.SELECT, SESSION, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushButton(kit.Select("", ctx.COMMAND, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE)
|
||||
@ -94,7 +94,7 @@ func init() {
|
||||
return
|
||||
}
|
||||
|
||||
m.Fields(len(arg) == 1, "time,id,type,text")
|
||||
m.Fields(len(arg[1:]), "time,id,type,text")
|
||||
m.Cmdy(mdb.SELECT, SESSION, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushButton(kit.Select("", mdb.REPEAT, value[kit.MDB_TYPE] == CMD))
|
||||
|
@ -92,7 +92,7 @@ func init() {
|
||||
m.Cmdy(mdb.PRUNES, CLIENT, "", mdb.HASH, kit.MDB_STATUS, CLOSE)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,hash,status,type,name,host,port,error,nread,nwrite")
|
||||
m.Fields(len(arg), "time,hash,status,type,name,host,port,error,nread,nwrite")
|
||||
if m.Cmdy(mdb.SELECT, CLIENT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == OPEN))
|
||||
|
@ -94,7 +94,7 @@ func init() {
|
||||
m.Cmdy(mdb.PRUNES, SERVER, "", mdb.HASH, kit.MDB_STATUS, CLOSE)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,hash,status,type,name,host,port,error,nconn")
|
||||
m.Fields(len(arg), "time,hash,status,type,name,host,port,error,nconn")
|
||||
if m.Cmdy(mdb.SELECT, SERVER, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == CLOSE))
|
||||
|
@ -168,7 +168,7 @@ func init() {
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,hash,size,type,name,text")
|
||||
m.Fields(len(arg), "time,hash,size,type,name,text")
|
||||
if m.Cmdy(mdb.SELECT, CACHE, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
|
||||
return
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ func Render(msg *ice.Message, cmd string, args ...interface{}) {
|
||||
RenderCookie(msg, arg[0], arg[1:]...)
|
||||
|
||||
case ice.RENDER_DOWNLOAD: // file [type [name]]
|
||||
msg.W.Header().Set("Content-Disposition", fmt.Sprintf("filename=%s", kit.Select(path.Base(arg[0]), arg, 2)))
|
||||
msg.W.Header().Set("Content-Disposition", fmt.Sprintf("filename=%s", kit.Select(path.Base(kit.Select(arg[0], msg.Option("filename"))), arg, 2)))
|
||||
if RenderType(msg.W, arg[0], kit.Select("", arg, 1)); !ice.Dump(msg.W, arg[0], nil) {
|
||||
http.ServeFile(msg.W, msg.R, kit.Path(arg[0]))
|
||||
}
|
||||
|
@ -253,7 +253,7 @@ func init() {
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,status,name,port,dev")
|
||||
m.Fields(len(arg), "time,status,name,port,dev")
|
||||
m.Cmdy(mdb.SELECT, SERVE, "", mdb.HASH, kit.MDB_NAME, arg)
|
||||
}},
|
||||
|
||||
|
@ -151,7 +151,7 @@ func init() {
|
||||
)))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,hash,type,name,text,userrole,username,river,storm")
|
||||
m.Fields(len(arg), "time,hash,type,name,text,userrole,username,river,storm")
|
||||
m.Cmdy(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
|
||||
@ -169,7 +169,7 @@ func init() {
|
||||
}
|
||||
}},
|
||||
"/share/": {Name: "/share/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(true, "time,hash,userrole,username,river,storm,type,name,text")
|
||||
m.Fields(0, "time,hash,userrole,username,river,storm,type,name,text")
|
||||
msg := m.Cmd(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, kit.Select(m.Option(SHARE), arg, 0))
|
||||
|
||||
list := []string{SHARE, kit.Select(m.Option(SHARE), arg, 0)}
|
||||
|
@ -17,7 +17,9 @@ import (
|
||||
)
|
||||
|
||||
func _space_list(m *ice.Message, space string) {
|
||||
m.Fields(space == "", "time,type,name,text")
|
||||
if space == "" {
|
||||
m.Fields(0, "time,type,name,text")
|
||||
}
|
||||
m.Cmdy(mdb.SELECT, SPACE, "", mdb.HASH, kit.MDB_NAME, space)
|
||||
|
||||
if space == "" {
|
||||
|
@ -337,7 +337,7 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) < 2 || arg[0] == "" || (len(arg) > 3 && arg[3] == "") {
|
||||
m.Fields(len(arg) == 0 || arg[0] == "", "time,client.name,client.url")
|
||||
m.Fields(len(kit.Slice(arg, 0, 1)), "time,client.name,client.url")
|
||||
m.Cmdy(mdb.SELECT, SPIDE, "", mdb.HASH, CLIENT_NAME, arg)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
return
|
||||
|
@ -401,14 +401,14 @@ func init() {
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
||||
m.Option(mdb.CACHE_LIMIT, -1)
|
||||
if m.Action(mdb.CREATE); len(arg) == 0 { // 矩阵列表
|
||||
m.Fields(len(arg) == 0, "time,name,npage,nhash")
|
||||
m.Fields(len(arg), "time,name,npage,nhash")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), "", mdb.HASH)
|
||||
m.PushAction(mdb.INSERT, "show", mdb.REMOVE)
|
||||
return
|
||||
}
|
||||
|
||||
if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表
|
||||
m.Fields(len(arg) == 1, "time,npage,nhash,text")
|
||||
m.Fields(len(arg[1:]), "time,npage,nhash,text")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, kit.Hashs(arg[0])), mdb.LIST)
|
||||
m.PushAction(PARSE)
|
||||
return
|
||||
|
4
conf.go
4
conf.go
@ -31,12 +31,14 @@ const ( // REPOS
|
||||
)
|
||||
const ( // DIR
|
||||
USR_VOLCANOS = "usr/volcanos"
|
||||
USR_LEARNING = "usr/learning"
|
||||
USR_ICEBERGS = "usr/icebergs"
|
||||
USR_INTSHELL = "usr/intshell"
|
||||
USR_INSTALL = "usr/install"
|
||||
USR_PUBLISH = "usr/publish"
|
||||
USR_LOCAL = "usr/local"
|
||||
|
||||
FAVICON = "favicon.ico"
|
||||
PROTO_JS = "proto.js"
|
||||
FRAME_JS = "frame.js"
|
||||
INDEX_JS = "index.js"
|
||||
@ -53,11 +55,13 @@ const ( // DIR
|
||||
VAR_PROXY = "var/proxy"
|
||||
VAR_TRASH = "var/trash"
|
||||
BIN_ICE = "bin/ice.sh"
|
||||
BIN_ICE_SH = "bin/ice.sh"
|
||||
BIN_ICE_BIN = "bin/ice.bin"
|
||||
BIN_BOOTLOG = "bin/boot.log"
|
||||
ETC_INIT = "etc/init.shy"
|
||||
ETC_EXIT = "etc/exit.shy"
|
||||
ETC_MISS = "etc/miss.sh"
|
||||
ETC_MISS_SH = "etc/miss.sh"
|
||||
|
||||
SRC_MAIN = "src/main.shy"
|
||||
SRC_MAIN_GO = "src/main.go"
|
||||
|
@ -26,7 +26,7 @@ func init() {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(FILES), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, m.Conf(FILES, kit.META_FIELD))
|
||||
m.Fields(len(arg), m.Conf(FILES, kit.META_FIELD))
|
||||
m.Cmd(mdb.SELECT, m.Prefix(FILES), "", mdb.HASH, kit.MDB_HASH, arg).Table(func(index int, value map[string]string, head []string) {
|
||||
link := kit.MergeURL("/share/cache/"+value[kit.MDB_DATA], "pod", m.Option(ice.MSG_USERPOD))
|
||||
m.Push("", value, kit.Split(m.Option(ice.MSG_FIELDS)))
|
||||
|
@ -53,7 +53,7 @@ func init() {
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(TARGET), "", mdb.HASH, arg)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, "time,hash,type,name,text")
|
||||
m.Fields(len(arg), "time,hash,type,name,text")
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(TARGET), "", mdb.HASH, "", kit.Select(kit.MDB_FOREACH, arg, 0))
|
||||
if len(arg) == 0 {
|
||||
m.PushAction("备课", "学习", "测试", "删除")
|
||||
|
@ -1,19 +1,21 @@
|
||||
package code
|
||||
|
||||
import (
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func _autogen_script(m *ice.Message, dir string) {
|
||||
if b, e := kit.Render(m.Conf(AUTOGEN, kit.Keym(SHY)), m); m.Assert(e) {
|
||||
if b, e := kit.Render(`chapter "{{.Option "name"}}"
|
||||
field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}}
|
||||
`, m); m.Assert(e) {
|
||||
m.Cmd(nfs.DEFS, dir, string(b))
|
||||
}
|
||||
}
|
||||
@ -41,7 +43,7 @@ func _autogen_module(m *ice.Message, dir string, ctx string, from string) (list
|
||||
list = append(list, line)
|
||||
})
|
||||
|
||||
m.Cmd(nfs.SAVE, dir, strings.Join(list, "\n"))
|
||||
m.Cmd(nfs.SAVE, dir, strings.Join(list, ice.MOD_NL))
|
||||
return
|
||||
}
|
||||
func _autogen_import(m *ice.Message, main string, ctx string, mod string) (list []string) {
|
||||
@ -51,7 +53,7 @@ func _autogen_import(m *ice.Message, main string, ctx string, mod string) (list
|
||||
}
|
||||
})
|
||||
|
||||
m.Cmd(nfs.SAVE, main, strings.Join(list, "\n"))
|
||||
m.Cmd(nfs.SAVE, main, strings.Join(list, ice.MOD_NL))
|
||||
return
|
||||
}
|
||||
func _autogen_mod(m *ice.Message, file string) (mod string) {
|
||||
@ -107,56 +109,47 @@ func _autogen_miss(m *ice.Message) {
|
||||
const AUTOGEN = "autogen"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Commands: map[string]*ice.Command{
|
||||
AUTOGEN: {Name: "autogen path auto create binpack script", Help: "生成", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
|
||||
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) {
|
||||
_autogen_script(m, p)
|
||||
_autogen_source(m, m.Option(kit.MDB_NAME))
|
||||
}
|
||||
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
||||
AUTOGEN: {Name: "autogen path auto create binpack script", Help: "生成", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
|
||||
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) {
|
||||
_autogen_script(m, p)
|
||||
_autogen_source(m, m.Option(kit.MDB_NAME))
|
||||
}
|
||||
|
||||
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) {
|
||||
_autogen_module(m, p, m.Option(kit.MDB_NAME), m.Option(kit.MDB_FROM))
|
||||
_autogen_import(m, m.Option(kit.MDB_MAIN), m.Option(kit.MDB_NAME), _autogen_mod(m, "go.mod"))
|
||||
}
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_MAIN:
|
||||
m.Option(nfs.DIR_REG, `.*\.go`)
|
||||
m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time")
|
||||
m.RenameAppend(kit.MDB_PATH, arg[0])
|
||||
|
||||
case kit.MDB_FROM:
|
||||
m.Option(nfs.DIR_DEEP, true)
|
||||
m.Option(nfs.DIR_REG, `.*\.go`)
|
||||
m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time")
|
||||
m.Cmdy(nfs.DIR, "usr/icebergs/misc/", "path,size,time")
|
||||
m.RenameAppend(kit.MDB_PATH, arg[0])
|
||||
}
|
||||
}},
|
||||
BINPACK: {Name: "binpack", Help: "打包", Hand: func(m *ice.Message, arg ...string) {
|
||||
_autogen_version(m)
|
||||
m.Cmd(BINPACK, mdb.CREATE)
|
||||
}},
|
||||
"script": {Name: "script", Help: "脚本", Hand: func(m *ice.Message, arg ...string) {
|
||||
_autogen_miss(m)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if m.Option(nfs.DIR_ROOT, kit.SSH_SRC); len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
|
||||
m.Cmdy(nfs.DIR, kit.Select("./", arg, 0))
|
||||
} else {
|
||||
m.Cmdy(nfs.CAT, arg[0])
|
||||
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) {
|
||||
_autogen_module(m, p, m.Option(kit.MDB_NAME), m.Option(kit.MDB_FROM))
|
||||
_autogen_import(m, m.Option(kit.MDB_MAIN), m.Option(kit.MDB_NAME), _autogen_mod(m, ice.GO_MOD))
|
||||
}
|
||||
}},
|
||||
},
|
||||
Configs: map[string]*ice.Config{
|
||||
AUTOGEN: {Name: AUTOGEN, Help: "生成", Value: kit.Data(
|
||||
SHY, `chapter "{{.Option "name"}}"
|
||||
field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}}
|
||||
`,
|
||||
)},
|
||||
},
|
||||
})
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_MAIN:
|
||||
m.Option(nfs.DIR_REG, `.*\.go`)
|
||||
m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time")
|
||||
m.RenameAppend(kit.MDB_PATH, arg[0])
|
||||
|
||||
case kit.MDB_FROM:
|
||||
m.Option(nfs.DIR_REG, `.*\.go`)
|
||||
m.Option(nfs.DIR_DEEP, ice.TRUE)
|
||||
m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time")
|
||||
m.Cmdy(nfs.DIR, "usr/icebergs/misc/", "path,size,time")
|
||||
m.RenameAppend(kit.MDB_PATH, arg[0])
|
||||
}
|
||||
}},
|
||||
BINPACK: {Name: "binpack", Help: "打包:生成 src/binpack.go", Hand: func(m *ice.Message, arg ...string) {
|
||||
_autogen_version(m)
|
||||
m.Cmd(BINPACK, mdb.CREATE)
|
||||
}},
|
||||
"script": {Name: "script", Help: "脚本:生成 etc/miss.sh", Hand: func(m *ice.Message, arg ...string) {
|
||||
_autogen_miss(m)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if m.Option(nfs.DIR_ROOT, kit.SSH_SRC); len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
|
||||
m.Cmdy(nfs.DIR, kit.Select("./", arg, 0))
|
||||
} else {
|
||||
m.Cmdy(nfs.CAT, arg[0])
|
||||
}
|
||||
}},
|
||||
}})
|
||||
}
|
||||
|
@ -1,14 +1,6 @@
|
||||
package code
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"github.com/shylinux/toolkits/util/bench"
|
||||
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
@ -16,6 +8,13 @@ import (
|
||||
"path"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
"github.com/shylinux/toolkits/util/bench"
|
||||
)
|
||||
|
||||
func _bench_http(m *ice.Message, name, target string, arg ...string) {
|
||||
@ -55,11 +54,14 @@ func _bench_http(m *ice.Message, name, target string, arg ...string) {
|
||||
func _bench_redis(m *ice.Message, name, target string, arg ...string) {
|
||||
}
|
||||
|
||||
const (
|
||||
HTTP = "http"
|
||||
REDIS = "redis"
|
||||
)
|
||||
const (
|
||||
NCONN = "nconn"
|
||||
NREQS = "nreqs"
|
||||
)
|
||||
|
||||
const BENCH = "bench"
|
||||
|
||||
func init() {
|
||||
@ -68,37 +70,37 @@ func init() {
|
||||
BENCH: {Name: BENCH, Help: "性能压测", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
"/bench": {Name: "/bench cmd...", Help: "性能压测", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(m.Optionv("cmd"))
|
||||
}},
|
||||
BENCH: {Name: "bench zone id auto insert", Help: "性能压测", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, arg)
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert zone type=http,redis name text nconn=3 nreqs=10", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.INSERT: {Name: "insert zone=some type=http,redis name=demo text nconn=3 nreqs=10", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, kit.MDB_ZONE, arg[1])
|
||||
m.Cmdy(mdb.INSERT, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, arg[2:])
|
||||
m.Cmdy(mdb.INSERT, BENCH, "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:])
|
||||
}},
|
||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
|
||||
m.Cmdy(mdb.MODIFY, BENCH, "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg)
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, BENCH, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE))
|
||||
m.Cmdy(mdb.DELETE, BENCH, "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
||||
}},
|
||||
|
||||
cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
|
||||
cli.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch m.Option(kit.MDB_TYPE) {
|
||||
case "http":
|
||||
case HTTP:
|
||||
_bench_http(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT))
|
||||
case "redis":
|
||||
case REDIS:
|
||||
_bench_redis(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT))
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, kit.Select("time,count,zone", kit.Select("time,id,type,name,text,nconn,nreqs", mdb.DETAIL, len(arg) > 1), len(arg) > 0))
|
||||
m.Fields(len(arg), "time,zone,count", "time,id,type,name,text,nconn,nreqs")
|
||||
m.Cmdy(mdb.SELECT, BENCH, "", mdb.ZONE, arg)
|
||||
m.PushAction(kit.Select(mdb.REMOVE, cli.RUN, len(arg) > 0))
|
||||
}},
|
||||
"/bench": {Name: "/bench cmd...", Help: "性能压测", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(m.Optionv("cmd"))
|
||||
}},
|
||||
|
||||
"test": {Name: "test path func auto run case", Help: "测试用例", Action: map[string]*ice.Action{
|
||||
"run": {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -1,23 +1,23 @@
|
||||
package code
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
func _pack_write(o *os.File, arg ...string) {
|
||||
for _, v := range arg {
|
||||
o.WriteString(v)
|
||||
}
|
||||
o.WriteString("\n")
|
||||
o.WriteString(ice.MOD_NL)
|
||||
}
|
||||
func _pack_file(m *ice.Message, file string) string {
|
||||
list := ""
|
||||
@ -35,9 +35,9 @@ func _pack_file(m *ice.Message, file string) string {
|
||||
return "[]byte{}"
|
||||
}
|
||||
func _pack_dir(m *ice.Message, pack *os.File, dir string) {
|
||||
m.Option(nfs.DIR_ROOT, dir)
|
||||
m.Option(nfs.DIR_DEEP, "true")
|
||||
m.Option(nfs.DIR_DEEP, ice.TRUE)
|
||||
m.Option(nfs.DIR_TYPE, nfs.CAT)
|
||||
m.Option(nfs.DIR_ROOT, dir)
|
||||
|
||||
m.Cmd(nfs.DIR, "./").Table(func(index int, value map[string]string, head []string) {
|
||||
switch strings.Split(value[kit.MDB_PATH], "/")[0] {
|
||||
@ -48,15 +48,15 @@ func _pack_dir(m *ice.Message, pack *os.File, dir string) {
|
||||
pack.WriteString(fmt.Sprintf(" \"%s\": %s,\n",
|
||||
path.Join(dir, value[kit.MDB_PATH]), _pack_file(m, path.Join(dir, value[kit.MDB_PATH]))))
|
||||
})
|
||||
pack.WriteString("\n")
|
||||
pack.WriteString(ice.MOD_NL)
|
||||
}
|
||||
|
||||
func _pack_volcanos(m *ice.Message, pack *os.File, dir string) {
|
||||
m.Option(nfs.DIR_ROOT, dir)
|
||||
m.Option(nfs.DIR_DEEP, "true")
|
||||
m.Option(nfs.DIR_DEEP, ice.TRUE)
|
||||
m.Option(nfs.DIR_TYPE, nfs.CAT)
|
||||
m.Option(nfs.DIR_ROOT, dir)
|
||||
|
||||
for _, k := range []string{"favicon.ico", "proto.js", "frame.js"} {
|
||||
for _, k := range []string{ice.FAVICON, ice.PROTO_JS, ice.FRAME_JS} {
|
||||
pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n", k, _pack_file(m, path.Join(dir, k))))
|
||||
}
|
||||
for _, k := range []string{"lib", "page", "panel", "plugin"} {
|
||||
@ -65,55 +65,50 @@ func _pack_volcanos(m *ice.Message, pack *os.File, dir string) {
|
||||
value[kit.MDB_PATH], _pack_file(m, path.Join(dir, value[kit.MDB_PATH]))))
|
||||
})
|
||||
}
|
||||
pack.WriteString("\n")
|
||||
pack.WriteString(ice.MOD_NL)
|
||||
}
|
||||
func _pack_contexts(m *ice.Message, pack *os.File) {
|
||||
_pack_dir(m, pack, "src")
|
||||
pack.WriteString("\n")
|
||||
pack.WriteString(ice.MOD_NL)
|
||||
}
|
||||
|
||||
const BINPACK = "binpack"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
BINPACK: {Name: BINPACK, Help: "binpack", Value: kit.Data()},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
BINPACK: {Name: "binpack path auto create", Help: "打包", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
if pack, p, e := kit.Create("src/binpack.go"); m.Assert(e) {
|
||||
defer pack.Close()
|
||||
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
||||
BINPACK: {Name: "binpack path auto create", Help: "打包", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
if pack, p, e := kit.Create(ice.SRC_BINPACK); m.Assert(e) {
|
||||
defer pack.Close()
|
||||
|
||||
_pack_write(pack, `package main`)
|
||||
_pack_write(pack, "")
|
||||
_pack_write(pack, `import (`)
|
||||
_pack_write(pack, ` ice "github.com/shylinux/icebergs"`)
|
||||
_pack_write(pack, `)`)
|
||||
_pack_write(pack, "")
|
||||
_pack_write(pack, `package main`)
|
||||
_pack_write(pack, "")
|
||||
_pack_write(pack, `import (`)
|
||||
_pack_write(pack, ` ice "github.com/shylinux/icebergs"`)
|
||||
_pack_write(pack, `)`)
|
||||
_pack_write(pack, "")
|
||||
|
||||
_pack_write(pack, `func init() {`)
|
||||
_pack_write(pack, ` ice.Info.BinPack = map[string][]byte{`)
|
||||
_pack_write(pack, `func init() {`)
|
||||
_pack_write(pack, ` ice.Info.BinPack = map[string][]byte{`)
|
||||
|
||||
_pack_volcanos(m, pack, "usr/volcanos")
|
||||
_pack_dir(m, pack, "usr/learning")
|
||||
// _pack_dir(m, pack, "usr/icebergs")
|
||||
// _pack_dir(m, pack, "usr/toolkits")
|
||||
_pack_dir(m, pack, "usr/intshell")
|
||||
// _pack_contexts(m, pack)
|
||||
_pack_volcanos(m, pack, ice.USR_VOLCANOS)
|
||||
_pack_dir(m, pack, ice.USR_LEARNING)
|
||||
// _pack_dir(m, pack, ice.USR_ICEBERGS)
|
||||
// _pack_dir(m, pack, ice.USR_TOOLKITS)
|
||||
_pack_dir(m, pack, ice.USR_INTSHELL)
|
||||
// _pack_contexts(m, pack)
|
||||
|
||||
_pack_write(pack, ` }`)
|
||||
_pack_write(pack, `}`)
|
||||
m.Echo(p)
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
for k, v := range ice.Info.BinPack {
|
||||
m.Push(kit.MDB_NAME, k)
|
||||
m.Push(kit.MDB_SIZE, len(v))
|
||||
_pack_write(pack, ` }`)
|
||||
_pack_write(pack, `}`)
|
||||
m.Echo(p)
|
||||
}
|
||||
m.Sort(kit.MDB_NAME)
|
||||
}},
|
||||
},
|
||||
})
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
for k, v := range ice.Info.BinPack {
|
||||
m.Push(kit.MDB_NAME, k)
|
||||
m.Push(kit.MDB_SIZE, len(v))
|
||||
}
|
||||
m.Sort(kit.MDB_NAME)
|
||||
}},
|
||||
}})
|
||||
}
|
||||
|
184
core/code/c.go
184
core/code/c.go
@ -37,46 +37,40 @@ func _c_help(m *ice.Message, section, key string) string {
|
||||
return string(res)
|
||||
}
|
||||
|
||||
const H = "h"
|
||||
const C = "c"
|
||||
const CC = "cc"
|
||||
const MAN1 = "man1"
|
||||
const MAN2 = "man2"
|
||||
const MAN3 = "man3"
|
||||
const MAN8 = "man8"
|
||||
|
||||
const (
|
||||
H = "h"
|
||||
CC = "cc"
|
||||
MAN1 = "man1"
|
||||
MAN2 = "man2"
|
||||
MAN3 = "man3"
|
||||
MAN8 = "man8"
|
||||
)
|
||||
const (
|
||||
FIND = "find"
|
||||
GREP = "grep"
|
||||
MAN = "man"
|
||||
)
|
||||
const C = "c"
|
||||
|
||||
func init() {
|
||||
Index.Register(&ice.Context{Name: C, Help: "系统",
|
||||
Commands: map[string]*ice.Command{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, CC, m.Prefix(C))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, CC, m.Prefix(C))
|
||||
m.Cmd(mdb.SEARCH, mdb.CREATE, CC, m.Prefix(C))
|
||||
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, C, m.Prefix(C))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, C, m.Prefix(C))
|
||||
m.Cmd(mdb.ENGINE, mdb.CREATE, C, m.Prefix(C))
|
||||
m.Cmd(mdb.SEARCH, mdb.CREATE, C, m.Prefix(C))
|
||||
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, H, m.Prefix(C))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, H, m.Prefix(C))
|
||||
m.Cmd(mdb.SEARCH, mdb.CREATE, H, m.Prefix(C))
|
||||
|
||||
for _, k := range []string{MAN1, MAN2, MAN3, MAN8} {
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, k, m.Prefix(MAN))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, k, m.Prefix(MAN))
|
||||
m.Cmd(mdb.SEARCH, mdb.CREATE, k, m.Prefix(MAN))
|
||||
for _, k := range []string{H, C, CC} {
|
||||
for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} {
|
||||
m.Cmd(cmd, mdb.CREATE, k, m.Prefix(C))
|
||||
}
|
||||
}
|
||||
for _, k := range []string{MAN1, MAN2, MAN3, MAN8} {
|
||||
for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.SEARCH} {
|
||||
m.Cmd(cmd, mdb.CREATE, k, m.Prefix(MAN))
|
||||
}
|
||||
}
|
||||
LoadPlug(m, C)
|
||||
}},
|
||||
C: {Name: C, Help: "系统", Action: map[string]*ice.Action{
|
||||
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Echo(m.Conf(C, "meta.plug"))
|
||||
m.Echo(m.Conf(C, kit.Keym(PLUG)))
|
||||
}},
|
||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
|
||||
@ -84,7 +78,10 @@ func init() {
|
||||
mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(cli.CMD_DIR, arg[2])
|
||||
name := strings.TrimSuffix(arg[1], path.Ext(arg[1])) + ".bin"
|
||||
m.Cmd(cli.SYSTEM, "gcc", arg[1], "-o", name)
|
||||
if msg := m.Cmd(cli.SYSTEM, "gcc", arg[1], "-o", name); msg.Append(cli.CMD_CODE) != "0" {
|
||||
m.Copy(msg)
|
||||
return
|
||||
}
|
||||
m.Cmdy(cli.SYSTEM, "./"+name)
|
||||
}},
|
||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||
@ -92,16 +89,17 @@ func init() {
|
||||
return
|
||||
}
|
||||
m.Option(cli.CMD_DIR, kit.Select("src", arg, 2))
|
||||
_go_find(m, kit.Select("main", arg, 1))
|
||||
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
m.Cmdy(mdb.SEARCH, MAN2, arg[1:])
|
||||
m.Cmdy(mdb.SEARCH, MAN3, arg[1:])
|
||||
_c_tags(m, kit.Select("main", arg, 1))
|
||||
_go_grep(m, kit.Select("main", arg, 1))
|
||||
_c_tags(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
}},
|
||||
MAN: {Name: MAN, Help: "手册", Action: map[string]*ice.Action{
|
||||
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Echo(m.Conf(MAN, "meta.plug"))
|
||||
m.Echo(m.Conf(MAN, kit.Keym(PLUG)))
|
||||
}},
|
||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Echo(_c_help(m, strings.TrimPrefix(arg[0], MAN), strings.TrimSuffix(arg[1], "."+arg[0])))
|
||||
@ -111,11 +109,11 @@ func init() {
|
||||
return
|
||||
}
|
||||
for _, i := range []string{"1", "2", "3", "8"} {
|
||||
if text := _c_help(m, i, kit.Select("main", arg, 1)); text != "" {
|
||||
if text := _c_help(m, i, kit.Select(kit.MDB_MAIN, arg, 1)); text != "" {
|
||||
for _, k := range kit.Split(m.Option(mdb.FIELDS)) {
|
||||
switch k {
|
||||
case kit.MDB_FILE:
|
||||
m.Push(k, arg[1]+".man"+i)
|
||||
m.Push(k, kit.Keys(arg[1], MAN+i))
|
||||
case kit.MDB_LINE:
|
||||
m.Push(k, 1)
|
||||
case kit.MDB_TEXT:
|
||||
@ -130,8 +128,67 @@ func init() {
|
||||
}},
|
||||
},
|
||||
Configs: map[string]*ice.Config{
|
||||
C: {Name: C, Help: "系统", Value: kit.Data(
|
||||
PLUG, kit.Dict(
|
||||
SPLIT, kit.Dict(
|
||||
"space", " ",
|
||||
"operator", "{[(.,:;!|<>)]}",
|
||||
),
|
||||
PREFIX, kit.Dict(
|
||||
"//", COMMENT,
|
||||
"/*", COMMENT,
|
||||
"*", COMMENT,
|
||||
),
|
||||
PREPARE, kit.Dict(
|
||||
KEYWORD, kit.Simple(
|
||||
"#include",
|
||||
"#define",
|
||||
"#ifndef",
|
||||
"#ifdef",
|
||||
"#else",
|
||||
"#endif",
|
||||
|
||||
"if",
|
||||
"else",
|
||||
"for",
|
||||
"while",
|
||||
"do",
|
||||
"break",
|
||||
"continue",
|
||||
"switch",
|
||||
"case",
|
||||
"default",
|
||||
"return",
|
||||
|
||||
"typedef",
|
||||
"sizeof",
|
||||
"extern",
|
||||
"static",
|
||||
"const",
|
||||
),
|
||||
DATATYPE, kit.Simple(
|
||||
"union",
|
||||
"struct",
|
||||
"unsigned",
|
||||
"double",
|
||||
"void",
|
||||
"long",
|
||||
"char",
|
||||
"int",
|
||||
),
|
||||
FUNCTION, kit.Simple(
|
||||
"assert",
|
||||
"zmalloc",
|
||||
),
|
||||
CONSTANT, kit.Simple(
|
||||
"NULL", "-1", "0", "1", "2",
|
||||
),
|
||||
),
|
||||
KEYWORD, kit.Dict(),
|
||||
),
|
||||
)},
|
||||
MAN: {Name: MAN, Help: "手册", Value: kit.Data(
|
||||
"plug", kit.Dict(
|
||||
PLUG, kit.Dict(
|
||||
PREFIX, kit.Dict(
|
||||
"NAME", COMMENT,
|
||||
"LIBRARY", COMMENT,
|
||||
@ -144,63 +201,6 @@ func init() {
|
||||
),
|
||||
),
|
||||
)},
|
||||
C: {Name: C, Help: "系统", Value: kit.Data(
|
||||
"plug", kit.Dict(
|
||||
SPLIT, kit.Dict(
|
||||
"space", " ",
|
||||
"operator", "{[(.,:;!|<>)]}",
|
||||
),
|
||||
PREFIX, kit.Dict(
|
||||
"//", COMMENT,
|
||||
"/*", COMMENT,
|
||||
"*", COMMENT,
|
||||
),
|
||||
KEYWORD, kit.Dict(
|
||||
"#include", KEYWORD,
|
||||
"#define", KEYWORD,
|
||||
"#ifndef", KEYWORD,
|
||||
"#ifdef", KEYWORD,
|
||||
"#else", KEYWORD,
|
||||
"#endif", KEYWORD,
|
||||
|
||||
"if", KEYWORD,
|
||||
"else", KEYWORD,
|
||||
"for", KEYWORD,
|
||||
"while", KEYWORD,
|
||||
"do", KEYWORD,
|
||||
"break", KEYWORD,
|
||||
"continue", KEYWORD,
|
||||
"switch", KEYWORD,
|
||||
"case", KEYWORD,
|
||||
"default", KEYWORD,
|
||||
"return", KEYWORD,
|
||||
|
||||
"typedef", KEYWORD,
|
||||
"extern", KEYWORD,
|
||||
"static", KEYWORD,
|
||||
"const", KEYWORD,
|
||||
"sizeof", KEYWORD,
|
||||
|
||||
"union", DATATYPE,
|
||||
"struct", DATATYPE,
|
||||
"unsigned", DATATYPE,
|
||||
"double", DATATYPE,
|
||||
"void", DATATYPE,
|
||||
"long", DATATYPE,
|
||||
"char", DATATYPE,
|
||||
"int", DATATYPE,
|
||||
|
||||
"assert", FUNCTION,
|
||||
"zmalloc", FUNCTION,
|
||||
|
||||
"NULL", STRING,
|
||||
"-1", STRING,
|
||||
"0", STRING,
|
||||
"1", STRING,
|
||||
"2", STRING,
|
||||
),
|
||||
),
|
||||
)},
|
||||
},
|
||||
}, nil)
|
||||
}
|
||||
|
@ -2,9 +2,7 @@ package code
|
||||
|
||||
import (
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/aaa"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
const CODE = "code"
|
||||
@ -12,8 +10,6 @@ const CODE = "code"
|
||||
var Index = &ice.Context{Name: CODE, Help: "编程中心", Commands: map[string]*ice.Command{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Load()
|
||||
m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS), _contexts)
|
||||
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Prefix(PUBLISH))
|
||||
}},
|
||||
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Save()
|
||||
@ -22,9 +18,8 @@ var Index = &ice.Context{Name: CODE, Help: "编程中心", Commands: map[string]
|
||||
|
||||
func init() {
|
||||
web.Index.Register(Index, &web.Frame{},
|
||||
INSTALL, COMPILE, BINPACK, WEBPACK,
|
||||
WEBPACK, BINPACK, AUTOGEN, COMPILE, UPGRADE, PUBLISH, INSTALL,
|
||||
VIMER, INNER, FAVOR, BENCH, PPROF,
|
||||
AUTOGEN, PUBLISH, UPGRADE,
|
||||
C, SH, SHY, GO, JS,
|
||||
)
|
||||
}
|
||||
|
@ -1,13 +1,12 @@
|
||||
chapter "源码"
|
||||
|
||||
field "后端" web.code.binpack
|
||||
field "前端" web.code.webpack
|
||||
|
||||
field "安装" web.code.install
|
||||
field "后端" web.code.binpack
|
||||
field "生成" web.code.autogen
|
||||
field "编译" web.code.compile
|
||||
field "发布" web.code.publish
|
||||
field "升级" web.code.upgrade
|
||||
field "发布" web.code.publish
|
||||
field "安装" web.code.install
|
||||
|
||||
field "编辑" web.code.vimer
|
||||
field "查看" web.code.inner
|
||||
@ -21,37 +20,3 @@ field "脚本" web.code.shy
|
||||
field "后端" web.code.go
|
||||
field "前端" web.code.js
|
||||
|
||||
return
|
||||
vimer.go
|
||||
inner.go
|
||||
favor.go
|
||||
bench.go
|
||||
pprof.go
|
||||
|
||||
c.go
|
||||
sh.go
|
||||
shy.go
|
||||
go.go
|
||||
js.go
|
||||
|
||||
autogen.go
|
||||
compile.go
|
||||
publish.go
|
||||
upgrade.go
|
||||
|
||||
webpack.go
|
||||
binpack.go
|
||||
install.go
|
||||
|
||||
code.go
|
||||
code.shy
|
||||
csdn.go
|
||||
github.go
|
||||
|
||||
section "python"
|
||||
refer `
|
||||
官网 https://www.python.org/
|
||||
源码 https://www.python.org/downloads/source/
|
||||
文档 https://docs.python.org/3/reference/index.html
|
||||
`
|
||||
|
||||
|
@ -1,15 +1,15 @@
|
||||
package code
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const COMPILE = "compile"
|
||||
@ -18,18 +18,17 @@ func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
COMPILE: {Name: COMPILE, Help: "编译", Value: kit.Data(
|
||||
kit.MDB_PATH, "usr/publish", kit.SSH_ENV, kit.Dict(
|
||||
kit.MDB_PATH, ice.USR_PUBLISH, kit.SSH_ENV, kit.Dict(
|
||||
"CGO_ENABLED", "0", "GOCACHE", os.Getenv("GOCACHE"),
|
||||
"HOME", os.Getenv("HOME"), "PATH", os.Getenv("PATH"),
|
||||
cli.HOME, os.Getenv(cli.HOME), cli.PATH, os.Getenv(cli.PATH),
|
||||
"GOPROXY", "https://goproxy.cn,direct", "GOPRIVATE", "github.com",
|
||||
), "go", []interface{}{"go", "build"},
|
||||
), 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 执行:button", Help: "编译", Action: map[string]*ice.Action{
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(nfs.DIR_REG, `.*\.go$`)
|
||||
m.Cmdy(nfs.DIR, "src", "path,size,time")
|
||||
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) {
|
||||
@ -38,12 +37,12 @@ func init() {
|
||||
return
|
||||
}
|
||||
|
||||
main := "src/main.go"
|
||||
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 "linux", "darwin", "windows":
|
||||
case cli.LINUX, cli.DARWIN, cli.WINDOWS:
|
||||
goos = k
|
||||
case "amd64", "386", "arm":
|
||||
arch = k
|
||||
@ -51,22 +50,24 @@ func init() {
|
||||
main = k
|
||||
}
|
||||
}
|
||||
_autogen_version(m)
|
||||
_autogen_version(m.Spawn())
|
||||
|
||||
// 编译目标
|
||||
file := path.Join(kit.Select("", m.Conf(cmd, kit.META_PATH), m.Option(cli.CMD_DIR) == ""), kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != "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))
|
||||
|
||||
// 编译参数
|
||||
m.Optionv(cli.CMD_ENV, kit.Simple(m.Confv(COMPILE, "meta.env"), "GOARCH", arch, "GOOS", goos))
|
||||
if msg := m.Cmd(cli.SYSTEM, m.Confv(COMPILE, "meta.go"), "-o", file, main, "src/version.go", "src/binpack.go"); msg.Append(cli.CMD_CODE) != "0" {
|
||||
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, ice.SRC_BINPACK); msg.Append(cli.CMD_CODE) != "0" {
|
||||
m.Copy(msg)
|
||||
return
|
||||
}
|
||||
|
||||
m.Log_EXPORT("source", main, "target", file)
|
||||
m.Push(kit.MDB_TIME, m.Time())
|
||||
m.PushDownload(kit.MDB_LINK, file)
|
||||
m.Echo(file)
|
||||
m.Log_EXPORT(cli.SOURCE, main, cli.TARGET, file)
|
||||
m.Cmdy(nfs.DIR, file)
|
||||
m.EchoDownload(file)
|
||||
m.StatusTimeCount()
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
@ -6,61 +6,52 @@ import (
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
func _sub_key(m *ice.Message, topic string) string {
|
||||
return kit.Keys(kit.MDB_HASH, kit.Hashs(topic))
|
||||
}
|
||||
|
||||
const FAVOR = "favor"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TOPIC)},
|
||||
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(
|
||||
kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,type,name,text,path,file,line",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
FAVOR: {Name: "favor topic id auto insert export import", Help: "收藏夹", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, FAVOR, "", mdb.HASH, arg)
|
||||
FAVOR: {Name: "favor zone id auto insert export import", Help: "收藏夹", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg)
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert topic=数据结构 type=go name=hi text=hello path file line", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, FAVOR, "", mdb.HASH, kit.MDB_TOPIC, arg[1])
|
||||
m.Cmdy(mdb.INSERT, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:])
|
||||
mdb.INSERT: {Name: "insert zone=数据结构 type=go name=hi text=hello path file line", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_ZONE, arg[1])
|
||||
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:])
|
||||
}},
|
||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.MODIFY, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
|
||||
m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg)
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, FAVOR, "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC))
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
||||
}},
|
||||
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(mdb.FIELDS, "topic,id,time,type,name,text,path,file,line")
|
||||
m.Cmdy(mdb.EXPORT, FAVOR, "", mdb.ZONE)
|
||||
m.OptionFields(kit.MDB_ZONE, m.Conf(FAVOR, kit.META_FIELD))
|
||||
m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.ZONE)
|
||||
}},
|
||||
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(mdb.FIELDS, kit.MDB_TOPIC)
|
||||
m.Cmdy(mdb.IMPORT, FAVOR, "", mdb.ZONE)
|
||||
m.OptionFields(kit.MDB_ZONE)
|
||||
m.Cmdy(mdb.IMPORT, m.Prefix(FAVOR), "", mdb.ZONE)
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case kit.MDB_TOPIC:
|
||||
m.Cmdy(mdb.INPUTS, FAVOR, "", mdb.HASH, arg)
|
||||
case kit.MDB_ZONE:
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg)
|
||||
default:
|
||||
m.Cmdy(mdb.INPUTS, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, arg)
|
||||
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg)
|
||||
}
|
||||
}},
|
||||
|
||||
INNER: {Name: "inner", Help: "源代码", Hand: func(m *ice.Message, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == mdb.RENDER {
|
||||
m.Cmdy(INNER, arg[1:])
|
||||
return
|
||||
}
|
||||
|
||||
m.ShowPlugin("", m.Prefix(), INNER, INNER, mdb.RENDER)
|
||||
m.Push(kit.SSH_ARG, kit.Format([]string{m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE), m.Option(kit.MDB_LINE)}))
|
||||
INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.ProcessCommand(INNER, m.OptionSplit("path,file,line"), arg...)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, kit.Select("time,count,topic", kit.Select("time,id,type,name,text,path,file,line", mdb.DETAIL, len(arg) > 1), len(arg) > 0))
|
||||
m.Cmdy(mdb.SELECT, FAVOR, "", mdb.ZONE, arg)
|
||||
m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg)
|
||||
m.PushAction(kit.Select(mdb.REMOVE, INNER, len(arg) > 0))
|
||||
}},
|
||||
},
|
||||
|
@ -73,8 +73,6 @@ const MOD = "mod"
|
||||
const SUM = "sum"
|
||||
const PROTO = "proto"
|
||||
|
||||
const PLUG = "plug"
|
||||
|
||||
func init() {
|
||||
Index.Register(&ice.Context{Name: GO, Help: "后端",
|
||||
Commands: map[string]*ice.Command{
|
||||
@ -142,10 +140,10 @@ func init() {
|
||||
if arg[0] == kit.MDB_FOREACH {
|
||||
return
|
||||
}
|
||||
_go_find(m, kit.Select("main", arg, 1))
|
||||
_go_help(m, kit.Select("main", arg, 1))
|
||||
_go_tags(m, kit.Select("main", arg, 1))
|
||||
_go_grep(m, kit.Select("main", arg, 1))
|
||||
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
_go_help(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
_go_tags(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
}},
|
||||
}},
|
||||
},
|
||||
@ -155,7 +153,7 @@ func init() {
|
||||
PREFIX, kit.Dict(
|
||||
"//", COMMENT,
|
||||
),
|
||||
"_keyword", kit.Dict(
|
||||
PREPARE, kit.Dict(
|
||||
KEYWORD, kit.Simple(
|
||||
"syntax", "option", "package", "import", "service", "message",
|
||||
),
|
||||
@ -171,7 +169,7 @@ func init() {
|
||||
PREFIX, kit.Dict(
|
||||
"//", COMMENT,
|
||||
),
|
||||
"_keyword", kit.Dict(
|
||||
PREPARE, kit.Dict(
|
||||
KEYWORD, kit.Simple(
|
||||
"module", "require", "replace", "=>",
|
||||
),
|
||||
@ -190,7 +188,7 @@ func init() {
|
||||
"/*", COMMENT,
|
||||
"* ", COMMENT,
|
||||
),
|
||||
"_keyword", kit.Dict(
|
||||
PREPARE, kit.Dict(
|
||||
KEYWORD, kit.Simple(
|
||||
"package", "import", "type", "struct", "interface", "const", "var", "func",
|
||||
"if", "else", "for", "range", "break", "continue",
|
||||
@ -204,7 +202,7 @@ func init() {
|
||||
FUNCTION, kit.Simple(
|
||||
"len", "cap", "copy", "append", "msg", "m",
|
||||
),
|
||||
STRING, kit.Simple(
|
||||
CONSTANT, kit.Simple(
|
||||
"false", "true", "nil", "-1", "0", "1", "2",
|
||||
),
|
||||
),
|
||||
|
@ -1,20 +1,17 @@
|
||||
package code
|
||||
|
||||
import (
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/ctx"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func _inner_ext(name string) string {
|
||||
return strings.ToLower(kit.Select(path.Base(name), strings.TrimPrefix(path.Ext(name), ".")))
|
||||
}
|
||||
func _inner_list(m *ice.Message, ext, file, dir string, arg ...string) {
|
||||
if m.Warn(!m.Right(dir, file), ice.ErrNotRight, path.Join(dir, file)) {
|
||||
return // 没有权限
|
||||
@ -23,7 +20,7 @@ func _inner_list(m *ice.Message, ext, file, dir string, arg ...string) {
|
||||
return // 解析成功
|
||||
}
|
||||
|
||||
if m.Conf(INNER, kit.Keys(kit.META_SOURCE, ext)) == "true" {
|
||||
if m.Conf(INNER, kit.Keys(kit.META_SOURCE, ext)) == ice.TRUE {
|
||||
m.Cmdy(nfs.CAT, path.Join(dir, file))
|
||||
}
|
||||
}
|
||||
@ -35,14 +32,14 @@ func _inner_show(m *ice.Message, ext, file, dir string, arg ...string) {
|
||||
return // 执行成功
|
||||
}
|
||||
|
||||
if ls := kit.Simple(m.Confv(INNER, kit.Keym("show", ext))); len(ls) > 0 {
|
||||
m.Option(cli.CMD_DIR, dir)
|
||||
m.Cmdy(cli.SYSTEM, ls, file)
|
||||
if ls := kit.Simple(m.Confv(INNER, kit.Keym(SHOW, ext))); len(ls) > 0 {
|
||||
m.Cmdy(cli.SYSTEM, ls, file, ice.Option{cli.CMD_DIR, dir})
|
||||
m.Set(ice.MSG_APPEND)
|
||||
}
|
||||
}
|
||||
|
||||
func LoadPlug(m *ice.Message, language string) {
|
||||
m.Confm(language, kit.Keym(PLUG, "_keyword"), func(key string, value interface{}) {
|
||||
m.Confm(language, kit.Keym(PLUG, PREPARE), func(key string, value interface{}) {
|
||||
for _, v := range kit.Simple(value) {
|
||||
m.Conf(language, kit.Keym(PLUG, KEYWORD, v), key)
|
||||
}
|
||||
@ -52,27 +49,30 @@ func LoadPlug(m *ice.Message, language string) {
|
||||
const (
|
||||
COMMENT = "comment"
|
||||
KEYWORD = "keyword"
|
||||
FUNCTION = "function"
|
||||
DATATYPE = "datatype"
|
||||
STRING = "string"
|
||||
FUNCTION = "function"
|
||||
CONSTANT = "constant"
|
||||
)
|
||||
const (
|
||||
SPLIT = "split"
|
||||
PREFIX = "prefix"
|
||||
SUFFIX = "suffix"
|
||||
)
|
||||
|
||||
const (
|
||||
PLUG = "plug"
|
||||
SHOW = "show"
|
||||
)
|
||||
const INNER = "inner"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Commands: map[string]*ice.Command{
|
||||
INNER: {Name: "inner path=src/ file=main.go line=1 auto", Help: "源代码", Meta: kit.Dict(
|
||||
"display", "/plugin/local/code/inner.js", "style", "editor",
|
||||
ice.Display("/plugin/local/code/inner.js", "editor"),
|
||||
), Action: map[string]*ice.Action{
|
||||
mdb.PLUGIN: {Name: "plugin", Help: "插件", Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Cmdy(mdb.PLUGIN, arg); m.Result() == "" {
|
||||
m.Echo(kit.Select("{}", m.Conf(INNER, kit.Keym("plug", arg[0]))))
|
||||
m.Echo(kit.Select("{}", m.Conf(INNER, kit.Keym(PLUG, arg[0]))))
|
||||
}
|
||||
}},
|
||||
mdb.ENGINE: {Name: "engine", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
|
||||
@ -88,34 +88,31 @@ func init() {
|
||||
m.Option(nfs.DIR_ROOT, arg[2])
|
||||
m.Cmdy(mdb.SEARCH, arg[:2], "cmd,file,line,text")
|
||||
}},
|
||||
mdb.INPUTS: {Name: "favor inputs", Help: "补全"},
|
||||
|
||||
FAVOR: {Name: "favor", Help: "收藏"},
|
||||
mdb.INPUTS: {Name: "favor inputs", Help: "补全"},
|
||||
ctx.COMMAND: {Name: "command", Help: "命令"},
|
||||
FAVOR: {Name: "favor", Help: "收藏"},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) < 2 {
|
||||
nfs.Dir(m, kit.MDB_PATH)
|
||||
return
|
||||
}
|
||||
_inner_list(m, _inner_ext(arg[1]), arg[1], arg[0])
|
||||
_inner_list(m, kit.Ext(arg[1]), arg[1], arg[0])
|
||||
}},
|
||||
},
|
||||
Configs: map[string]*ice.Config{
|
||||
INNER: {Name: "inner", Help: "源代码", Value: kit.Data(
|
||||
"source", kit.Dict(
|
||||
"s", "true", "S", "true",
|
||||
"shy", "true", "py", "true",
|
||||
"csv", "true", "json", "true",
|
||||
"css", "true", "html", "true",
|
||||
"txt", "true", "url", "true",
|
||||
"log", "true", "err", "true",
|
||||
"yml", "true",
|
||||
cli.SOURCE, kit.Dict(
|
||||
"s", ice.TRUE, "S", ice.TRUE,
|
||||
"shy", ice.TRUE, "py", ice.TRUE,
|
||||
"csv", ice.TRUE, "json", ice.TRUE,
|
||||
"css", ice.TRUE, "html", ice.TRUE,
|
||||
"txt", ice.TRUE, "url", ice.TRUE,
|
||||
"log", ice.TRUE, "err", ice.TRUE,
|
||||
|
||||
"md", "true", "license", "true", "makefile", "true",
|
||||
"ini", "true", "conf", "true", "toml", "true", "yaml", "true",
|
||||
"sql", "true",
|
||||
"md", ice.TRUE, "license", ice.TRUE, "makefile", ice.TRUE, "sql", ice.TRUE,
|
||||
"ini", ice.TRUE, "conf", ice.TRUE, "toml", ice.TRUE, "yaml", ice.TRUE, "yml", ice.TRUE,
|
||||
),
|
||||
"plug", kit.Dict(
|
||||
PLUG, kit.Dict(
|
||||
"s", kit.Dict(
|
||||
PREFIX, kit.Dict("//", COMMENT),
|
||||
KEYWORD, kit.Dict(
|
||||
@ -163,7 +160,7 @@ func init() {
|
||||
),
|
||||
),
|
||||
),
|
||||
"show", kit.Dict(
|
||||
SHOW, kit.Dict(
|
||||
"py", []string{"python"},
|
||||
"js", []string{"node"},
|
||||
),
|
||||
|
@ -15,135 +15,156 @@ import (
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
const PREPARE = "prepare"
|
||||
func _install_download(m *ice.Message) {
|
||||
link := m.Option(kit.MDB_LINK)
|
||||
name := path.Base(link)
|
||||
file := path.Join(kit.Select(m.Conf(INSTALL, kit.META_PATH), m.Option(kit.MDB_PATH)), name)
|
||||
|
||||
defer m.Cmdy(nfs.DIR, file)
|
||||
if _, e := os.Stat(file); e == nil {
|
||||
return // 文件存在
|
||||
}
|
||||
|
||||
// 创建文件
|
||||
m.Cmd(nfs.SAVE, file, "")
|
||||
|
||||
m.GoToast(web.DOWNLOAD, func(toast func(string, int, int)) {
|
||||
// 进度
|
||||
m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name, kit.MDB_LINK, link)
|
||||
m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) {
|
||||
value = kit.GetMeta(value)
|
||||
|
||||
p := 0
|
||||
m.Optionv(kit.Keycb(web.DOWNLOAD), func(size int, total int) {
|
||||
if n := size * 100 / total; p != n {
|
||||
value[kit.SSH_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = n, size, total
|
||||
toast(name, size, total)
|
||||
p = n
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// 下载
|
||||
msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, link)
|
||||
m.Cmd(nfs.LINK, file, msg.Append(kit.MDB_FILE))
|
||||
|
||||
// 解压
|
||||
m.Option(cli.CMD_DIR, path.Dir(file))
|
||||
m.Cmd(cli.SYSTEM, "tar", "xvf", name)
|
||||
})
|
||||
}
|
||||
func _install_build(m *ice.Message, arg ...string) {
|
||||
p := m.Option(cli.CMD_DIR, path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK))))
|
||||
pp := kit.Path(path.Join(p, "_install"))
|
||||
|
||||
// 推流
|
||||
web.PushStream(m)
|
||||
|
||||
// 配置
|
||||
switch cb := m.Optionv(PREPARE).(type) {
|
||||
case func(string):
|
||||
cb(p)
|
||||
default:
|
||||
if msg := m.Cmd(cli.SYSTEM, "./configure", "--prefix="+pp, arg[1:]); msg.Append(cli.CMD_CODE) != "0" {
|
||||
m.Echo(msg.Append(cli.CMD_ERR))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 编译
|
||||
if msg := m.Cmd(cli.SYSTEM, "make", "-j8"); msg.Append(cli.CMD_CODE) != "0" {
|
||||
m.Echo(msg.Append(cli.CMD_ERR))
|
||||
return
|
||||
}
|
||||
|
||||
// 安装
|
||||
if msg := m.Cmd(cli.SYSTEM, "make", "PREFIX="+pp, "install"); msg.Append(cli.CMD_CODE) != "0" {
|
||||
m.Echo(msg.Append(cli.CMD_ERR))
|
||||
return
|
||||
}
|
||||
|
||||
m.Toast(ice.SUCCESS, cli.BUILD)
|
||||
m.ProcessHold()
|
||||
}
|
||||
func _install_spawn(m *ice.Message, arg ...string) {
|
||||
port := m.Cmdx(tcp.PORT, aaa.RIGHT)
|
||||
target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), port)
|
||||
source := path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK)))
|
||||
|
||||
m.Cmd(nfs.DIR, path.Join(source, kit.Select("_install", m.Option("install")))).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[kit.MDB_PATH], "/"), target)
|
||||
})
|
||||
m.Echo(target)
|
||||
}
|
||||
func _install_start(m *ice.Message, arg ...string) {
|
||||
p := m.Option(cli.CMD_DIR, m.Cmdx(INSTALL, cli.SPAWN))
|
||||
|
||||
args := []string{}
|
||||
switch cb := m.Optionv(PREPARE).(type) {
|
||||
case func(string) []string:
|
||||
args = append(args, cb(p)...)
|
||||
}
|
||||
|
||||
m.Cmdy(cli.DAEMON, arg[1:], args)
|
||||
}
|
||||
func _install_package(m *ice.Message, arg ...string) {
|
||||
m.Fields(len(arg), "time,name,path")
|
||||
m.Cmdy(mdb.SELECT, INSTALL, "", mdb.HASH)
|
||||
}
|
||||
func _install_service(m *ice.Message, arg ...string) {
|
||||
arg = kit.Split(path.Base(arg[0]), "-.")[:1]
|
||||
|
||||
m.Fields(len(arg[1:]), "time,port,status,pid,cmd,dir")
|
||||
m.Cmd(mdb.SELECT, cli.DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) {
|
||||
if strings.Contains(value[cli.CMD], "bin/"+arg[0]) {
|
||||
m.Push("", value, kit.Split(m.Option(mdb.FIELDS)))
|
||||
}
|
||||
})
|
||||
|
||||
m.Appendv(tcp.PORT, []string{})
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push(tcp.PORT, path.Base(value[nfs.DIR]))
|
||||
})
|
||||
}
|
||||
|
||||
const (
|
||||
PREPARE = "prepare"
|
||||
)
|
||||
const INSTALL = "install"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_PATH, ice.USR_INSTALL)},
|
||||
INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data(
|
||||
kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_PATH, ice.USR_INSTALL,
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
INSTALL: {Name: "install name port path auto download", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{
|
||||
web.DOWNLOAD: {Name: "download link path", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
link := m.Option(kit.MDB_LINK)
|
||||
name := path.Base(link)
|
||||
file := path.Join(kit.Select(m.Conf(INSTALL, kit.META_PATH), m.Option(kit.MDB_PATH)), name)
|
||||
|
||||
defer m.Cmdy(nfs.DIR, file)
|
||||
if _, e := os.Stat(file); e == nil {
|
||||
return // 文件存在
|
||||
}
|
||||
|
||||
// 创建文件
|
||||
m.Cmd(nfs.SAVE, file, "")
|
||||
|
||||
m.GoToast("download", func(toast func(string, int, int)) {
|
||||
// 进度
|
||||
m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name, kit.MDB_LINK, link)
|
||||
m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) {
|
||||
value = kit.GetMeta(value)
|
||||
|
||||
p := 0
|
||||
m.Optionv(kit.Keycb(web.DOWNLOAD), func(size int, total int) {
|
||||
if n := size * 100 / total; p != n {
|
||||
value[kit.SSH_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = n, size, total
|
||||
toast(name, size, total)
|
||||
p = n
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
// 下载
|
||||
msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, link)
|
||||
m.Cmd(nfs.LINK, file, msg.Append(kit.MDB_FILE))
|
||||
|
||||
// 解压
|
||||
m.Option(cli.CMD_DIR, path.Dir(file))
|
||||
m.Cmd(cli.SYSTEM, "tar", "xvf", name)
|
||||
})
|
||||
_install_download(m)
|
||||
}},
|
||||
cli.BUILD: {Name: "build link", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
|
||||
p := m.Option(cli.CMD_DIR, path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK))))
|
||||
pp := kit.Path(path.Join(p, "_install"))
|
||||
|
||||
// 推流
|
||||
web.PushStream(m)
|
||||
|
||||
// 配置
|
||||
switch cb := m.Optionv(PREPARE).(type) {
|
||||
case func(string):
|
||||
cb(p)
|
||||
default:
|
||||
if msg := m.Cmd(cli.SYSTEM, "./configure", "--prefix="+pp, arg[1:]); msg.Append(cli.CMD_CODE) != "0" {
|
||||
m.Echo(msg.Append(cli.CMD_ERR))
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 编译
|
||||
if msg := m.Cmd(cli.SYSTEM, "make", "-j8"); msg.Append(cli.CMD_CODE) != "0" {
|
||||
m.Echo(msg.Append(cli.CMD_ERR))
|
||||
return
|
||||
}
|
||||
|
||||
// 安装
|
||||
if msg := m.Cmd(cli.SYSTEM, "make", "PREFIX="+pp, "install"); msg.Append(cli.CMD_CODE) != "0" {
|
||||
m.Echo(msg.Append(cli.CMD_ERR))
|
||||
return
|
||||
}
|
||||
|
||||
m.Toast(ice.SUCCESS, cli.BUILD)
|
||||
m.ProcessHold()
|
||||
_install_build(m, arg...)
|
||||
}},
|
||||
cli.SPAWN: {Name: "spawn link", Help: "新建", Hand: func(m *ice.Message, arg ...string) {
|
||||
port := m.Cmdx(tcp.PORT, aaa.RIGHT)
|
||||
target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), port)
|
||||
source := path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK)))
|
||||
|
||||
m.Cmd(nfs.DIR, path.Join(source, kit.Select("_install", m.Option("install")))).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[kit.MDB_PATH], "/"), target)
|
||||
})
|
||||
m.Echo(target)
|
||||
_install_spawn(m, arg...)
|
||||
}},
|
||||
cli.START: {Name: "start link cmd", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
p := m.Option(cli.CMD_DIR, m.Cmdx(INSTALL, cli.SPAWN))
|
||||
|
||||
args := []string{}
|
||||
switch cb := m.Optionv(PREPARE).(type) {
|
||||
case func(string) []string:
|
||||
args = append(args, cb(p)...)
|
||||
}
|
||||
|
||||
m.Cmdy(cli.DAEMON, arg[1:], args)
|
||||
_install_start(m, arg...)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 { // 源码列表
|
||||
m.Fields(len(arg) == 0, "time,name,path")
|
||||
m.Cmdy(mdb.SELECT, INSTALL, "", mdb.HASH)
|
||||
return
|
||||
switch len(arg) {
|
||||
case 0: // 源码列表
|
||||
_install_package(m, arg...)
|
||||
|
||||
case 1: // 服务列表
|
||||
_install_service(m, arg...)
|
||||
|
||||
default: // 目录列表
|
||||
m.Option(nfs.DIR_ROOT, path.Join(m.Conf(cli.DAEMON, kit.META_PATH), arg[1]))
|
||||
m.Cmdy(nfs.CAT, kit.Select("./", arg, 2))
|
||||
}
|
||||
|
||||
if len(arg) == 1 { // 服务列表
|
||||
arg = kit.Split(path.Base(arg[0]), "-.")[:1]
|
||||
|
||||
m.Fields(len(arg) == 1, "time,port,status,pid,cmd,dir")
|
||||
m.Cmd(mdb.SELECT, cli.DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) {
|
||||
if strings.Contains(value[cli.CMD], "bin/"+arg[0]) {
|
||||
m.Push("", value, kit.Split(m.Option(mdb.FIELDS)))
|
||||
}
|
||||
})
|
||||
|
||||
m.Appendv(tcp.PORT, []string{})
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push(tcp.PORT, path.Base(value[nfs.DIR]))
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// 目录列表
|
||||
m.Option(nfs.DIR_ROOT, path.Join(m.Conf(cli.DAEMON, kit.META_PATH), arg[1]))
|
||||
m.Cmdy(nfs.CAT, kit.Select("./", arg, 2))
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
163
core/code/js.go
163
core/code/js.go
@ -21,19 +21,15 @@ func init() {
|
||||
Index.Register(&ice.Context{Name: JS, Help: "前端",
|
||||
Commands: map[string]*ice.Command{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, JS, m.Prefix(JS))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, JS, m.Prefix(JS))
|
||||
m.Cmd(mdb.ENGINE, mdb.CREATE, JS, m.Prefix(JS))
|
||||
m.Cmd(mdb.SEARCH, mdb.CREATE, JS, m.Prefix(JS))
|
||||
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, VUE, m.Prefix(VUE))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, VUE, m.Prefix(VUE))
|
||||
m.Cmd(mdb.ENGINE, mdb.CREATE, VUE, m.Prefix(VUE))
|
||||
m.Cmd(mdb.SEARCH, mdb.CREATE, VUE, m.Prefix(VUE))
|
||||
for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} {
|
||||
m.Cmd(cmd, mdb.CREATE, VUE, m.Prefix(VUE))
|
||||
m.Cmd(cmd, mdb.CREATE, JS, m.Prefix(JS))
|
||||
}
|
||||
LoadPlug(m, JS)
|
||||
}},
|
||||
JS: {Name: JS, Help: "前端", Action: map[string]*ice.Action{
|
||||
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Echo(m.Conf(JS, "meta.plug"))
|
||||
m.Echo(m.Conf(JS, kit.Keym(PLUG)))
|
||||
}},
|
||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
|
||||
@ -47,8 +43,8 @@ func init() {
|
||||
if arg[0] == kit.MDB_FOREACH {
|
||||
return
|
||||
}
|
||||
_go_find(m, kit.Select("main", arg, 1))
|
||||
_go_grep(m, kit.Select("main", arg, 1))
|
||||
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
}},
|
||||
}},
|
||||
NODE: {Name: "node", Help: "前端", Action: map[string]*ice.Action{
|
||||
@ -58,7 +54,7 @@ func init() {
|
||||
}},
|
||||
VUE: {Name: "vue", Help: "前端", Action: map[string]*ice.Action{
|
||||
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Echo(m.Conf(VUE, "meta.plug"))
|
||||
m.Echo(m.Conf(VUE, kit.Keym(PLUG)))
|
||||
}},
|
||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
|
||||
@ -72,30 +68,30 @@ func init() {
|
||||
if arg[0] == kit.MDB_FOREACH {
|
||||
return
|
||||
}
|
||||
_go_find(m, kit.Select("main", arg, 1))
|
||||
_go_grep(m, kit.Select("main", arg, 1))
|
||||
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
}},
|
||||
}},
|
||||
},
|
||||
Configs: map[string]*ice.Config{
|
||||
VUE: {Name: VUE, Help: "vue", Value: kit.Data(
|
||||
"plug", kit.Dict(
|
||||
PLUG, kit.Dict(
|
||||
SPLIT, kit.Dict(
|
||||
"space", " \t",
|
||||
"operator", "{[(&.,;!|<>)]}",
|
||||
),
|
||||
PREFIX, kit.Dict(
|
||||
"//", COMMENT,
|
||||
"/*", COMMENT,
|
||||
"*", COMMENT,
|
||||
),
|
||||
SPLIT, kit.Dict(
|
||||
"space", " \t",
|
||||
"operator", "{[(&.,;!|<>)]}",
|
||||
),
|
||||
),
|
||||
)},
|
||||
NODE: {Name: NODE, Help: "前端", Value: kit.Data(
|
||||
kit.SSH_SOURCE, "https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.xz",
|
||||
)},
|
||||
JS: {Name: JS, Help: "js", Value: kit.Data(
|
||||
"plug", kit.Dict(
|
||||
PLUG, kit.Dict(
|
||||
SPLIT, kit.Dict(
|
||||
"space", " \t",
|
||||
"operator", "{[(&.,;!|<>)]}",
|
||||
@ -105,77 +101,72 @@ func init() {
|
||||
"/*", COMMENT,
|
||||
"*", COMMENT,
|
||||
),
|
||||
KEYWORD, kit.Dict(
|
||||
"import", KEYWORD,
|
||||
"from", KEYWORD,
|
||||
"export", KEYWORD,
|
||||
PREPARE, kit.Dict(
|
||||
KEYWORD, kit.Simple(
|
||||
"import",
|
||||
"from",
|
||||
"export",
|
||||
|
||||
"var", KEYWORD,
|
||||
"new", KEYWORD,
|
||||
"delete", KEYWORD,
|
||||
"typeof", KEYWORD,
|
||||
"const", KEYWORD,
|
||||
"function", KEYWORD,
|
||||
"var",
|
||||
"new",
|
||||
"delete",
|
||||
"typeof",
|
||||
"const",
|
||||
"function",
|
||||
|
||||
"if", KEYWORD,
|
||||
"else", KEYWORD,
|
||||
"for", KEYWORD,
|
||||
"while", KEYWORD,
|
||||
"break", KEYWORD,
|
||||
"continue", KEYWORD,
|
||||
"switch", KEYWORD,
|
||||
"case", KEYWORD,
|
||||
"default", KEYWORD,
|
||||
"return", KEYWORD,
|
||||
"try", KEYWORD,
|
||||
"throw", KEYWORD,
|
||||
"catch", KEYWORD,
|
||||
"finally", KEYWORD,
|
||||
"if",
|
||||
"else",
|
||||
"for",
|
||||
"while",
|
||||
"break",
|
||||
"continue",
|
||||
"switch",
|
||||
"case",
|
||||
"default",
|
||||
"return",
|
||||
"try",
|
||||
"throw",
|
||||
"catch",
|
||||
"finally",
|
||||
),
|
||||
FUNCTION, kit.Simple(
|
||||
"window",
|
||||
"console",
|
||||
"document",
|
||||
"arguments",
|
||||
"event",
|
||||
"Date",
|
||||
"JSON",
|
||||
|
||||
"window", FUNCTION,
|
||||
"console", FUNCTION,
|
||||
"document", FUNCTION,
|
||||
"arguments", FUNCTION,
|
||||
"event", FUNCTION,
|
||||
"Date", FUNCTION,
|
||||
"JSON", FUNCTION,
|
||||
"__proto__",
|
||||
"setTimeout",
|
||||
"createElement",
|
||||
"appendChild",
|
||||
"removeChild",
|
||||
"parentNode",
|
||||
"childNodes",
|
||||
|
||||
"0", STRING,
|
||||
"1", STRING,
|
||||
"10", STRING,
|
||||
"-1", STRING,
|
||||
"true", STRING,
|
||||
"false", STRING,
|
||||
"undefined", STRING,
|
||||
"null", STRING,
|
||||
"Volcanos",
|
||||
"request",
|
||||
"require",
|
||||
|
||||
"__proto__", FUNCTION,
|
||||
"setTimeout", FUNCTION,
|
||||
"createElement", FUNCTION,
|
||||
"appendChild", FUNCTION,
|
||||
"removeChild", FUNCTION,
|
||||
"parentNode", FUNCTION,
|
||||
"childNodes", FUNCTION,
|
||||
|
||||
"Volcanos", FUNCTION,
|
||||
"request", FUNCTION,
|
||||
"require", FUNCTION,
|
||||
|
||||
"cb", FUNCTION,
|
||||
"cbs", FUNCTION,
|
||||
"shy", FUNCTION,
|
||||
"can", FUNCTION,
|
||||
"sub", FUNCTION,
|
||||
"msg", FUNCTION,
|
||||
"res", FUNCTION,
|
||||
"pane", FUNCTION,
|
||||
"plugin", FUNCTION,
|
||||
|
||||
"-1", STRING,
|
||||
"0", STRING,
|
||||
"1", STRING,
|
||||
"2", STRING,
|
||||
"cb",
|
||||
"cbs",
|
||||
"shy",
|
||||
"can",
|
||||
"sub",
|
||||
"msg",
|
||||
"res",
|
||||
"pane",
|
||||
"plugin",
|
||||
),
|
||||
CONSTANT, kit.Simple(
|
||||
"true", "false",
|
||||
"undefined", "null",
|
||||
"-1", "0", "1", "2", "10",
|
||||
),
|
||||
),
|
||||
KEYWORD, kit.Dict(),
|
||||
),
|
||||
)},
|
||||
},
|
||||
|
@ -1,6 +1,10 @@
|
||||
package code
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
_ "net/http/pprof"
|
||||
"strings"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/aaa"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
@ -9,10 +13,6 @@ import (
|
||||
"github.com/shylinux/icebergs/base/tcp"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"net/http"
|
||||
_ "net/http/pprof"
|
||||
"strings"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -27,80 +27,76 @@ func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
PPROF: {Name: PPROF, Help: "性能分析", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE,
|
||||
PPROF, []string{"go", "tool", "pprof"},
|
||||
PPROF, []string{GO, "tool", PPROF},
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
"/pprof/": {Name: "/pprof/", Help: "性能分析", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.R.URL.Path = strings.Replace("/code"+m.R.URL.Path, "code", "debug", 1)
|
||||
http.DefaultServeMux.ServeHTTP(m.W, m.R)
|
||||
m.Render(ice.RENDER_VOID)
|
||||
}},
|
||||
PPROF: {Name: "pprof zone id auto create", Help: "性能分析", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create zone binnary service seconds", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
mdb.CREATE: {Name: "create zone=some binnary service seconds=3", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, PPROF, "", mdb.HASH, arg)
|
||||
}},
|
||||
mdb.INSERT: {Name: "insert zone type name text", Help: "插入", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.INSERT, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, arg[2:])
|
||||
m.Cmdy(mdb.INSERT, PPROF, "", mdb.HASH, kit.MDB_ZONE, arg[1])
|
||||
m.Cmdy(mdb.INSERT, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:])
|
||||
}},
|
||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Option(kit.MDB_ID) != "" {
|
||||
m.Cmdy(mdb.MODIFY, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
|
||||
} else {
|
||||
m.Cmdy(mdb.MODIFY, PPROF, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE), arg)
|
||||
}
|
||||
m.Cmdy(mdb.MODIFY, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg)
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(mdb.DELETE, PPROF, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE))
|
||||
m.Cmdy(mdb.DELETE, PPROF, "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case "binnary":
|
||||
case BINNARY:
|
||||
m.Cmd(nfs.DIR, "bin/", "path,size,time").Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push("binnary", value["path"])
|
||||
m.Push(BINNARY, value["path"])
|
||||
m.Push("", value, []string{"size,time"})
|
||||
})
|
||||
case "service":
|
||||
case SERVICE:
|
||||
m.Cmd(web.SPIDE).Table(func(index int, value map[string]string, head []string) {
|
||||
m.Push("service", kit.MergeURL2(value["client.url"], "/debug/pprof/profile"))
|
||||
m.Push(SERVICE, kit.MergeURL2(value["client.url"], "/debug/pprof/profile"))
|
||||
})
|
||||
}
|
||||
}},
|
||||
|
||||
cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
|
||||
cli.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
|
||||
msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option(SERVICE), SECONDS, m.Option(SECONDS))
|
||||
|
||||
cmd := kit.Simple(m.Confv(PPROF, "meta.pprof"), "-text", m.Option(BINNARY), msg.Append(kit.MDB_FILE))
|
||||
res := strings.Split(m.Cmdx(cli.SYSTEM, cmd), "\n")
|
||||
cmd := kit.Simple(m.Confv(PPROF, kit.Keym(PPROF)), "-text", m.Option(BINNARY), msg.Append(kit.MDB_FILE))
|
||||
res := strings.Split(m.Cmdx(cli.SYSTEM, cmd), ice.MOD_NL)
|
||||
if len(res) > 20 {
|
||||
res = res[:20]
|
||||
}
|
||||
|
||||
m.Cmd(mdb.INSERT, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_TEXT, strings.Join(res, "\n"), kit.MDB_FILE, msg.Append(kit.MDB_FILE))
|
||||
m.Echo(strings.Join(res, "\n"))
|
||||
m.Cmd(mdb.INSERT, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE),
|
||||
kit.MDB_TEXT, strings.Join(res, ice.MOD_NL), kit.MDB_FILE, msg.Append(kit.MDB_FILE))
|
||||
m.Echo(strings.Join(res, ice.MOD_NL))
|
||||
m.ProcessInner()
|
||||
}},
|
||||
web.SERVE: {Name: "serve", Help: "展示", Hand: func(m *ice.Message, arg ...string) {
|
||||
u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
|
||||
p := u.Hostname() + ":" + m.Cmdx(tcp.PORT, aaa.RIGHT)
|
||||
|
||||
m.Cmd(cli.DAEMON, m.Confv(PPROF, "meta.pprof"), "-http="+p, m.Option(BINNARY), m.Option(kit.MDB_FILE))
|
||||
m.Cmd(cli.DAEMON, m.Confv(PPROF, kit.Keym(PPROF)), "-http="+p, m.Option(BINNARY), m.Option(kit.MDB_FILE))
|
||||
m.Echo("http://%s/ui/top", p)
|
||||
m.ProcessInner()
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(mdb.FIELDS, kit.Select("time,count,zone,binnary,service,seconds", kit.Select("time,id,text,binnary,file", mdb.DETAIL, len(arg) > 1), len(arg) > 0))
|
||||
m.Cmdy(mdb.SELECT, PPROF, "", mdb.ZONE, arg)
|
||||
if len(arg) == 0 {
|
||||
m.Fields(len(arg), "time,zone,count,binnary,service,seconds", "time,id,text,file")
|
||||
if m.Cmdy(mdb.SELECT, PPROF, "", mdb.ZONE, arg); len(arg) == 0 {
|
||||
m.PushAction(cli.RUN, mdb.REMOVE)
|
||||
|
||||
} else {
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushDownload(kit.MDB_LINK, "pprof.pd.gz", value[kit.MDB_FILE])
|
||||
m.PushButton(web.SERVE)
|
||||
})
|
||||
return
|
||||
}
|
||||
}},
|
||||
|
||||
"/pprof/": {Name: "/pprof/", Help: "性能分析", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.R.URL.Path = strings.Replace("/code"+m.R.URL.Path, "code", "debug", 1)
|
||||
http.DefaultServeMux.ServeHTTP(m.W, m.R)
|
||||
m.Render(ice.RENDER_VOID)
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushDownload(kit.MDB_LINK, "pprof.pd.gz", value[kit.MDB_FILE])
|
||||
m.PushButton(web.SERVE)
|
||||
})
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
"strings"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/aaa"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
@ -43,22 +44,12 @@ const PUBLISH = "publish"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data(
|
||||
kit.MDB_PATH, "usr/publish", ice.CONTEXTS, _contexts,
|
||||
SH, `#!/bin/bash
|
||||
echo "hello world"
|
||||
`,
|
||||
JS, `Volcanos("onengine", {_init: function(can, sub) {
|
||||
can.base.Log("hello volcanos world")
|
||||
}, river: {
|
||||
|
||||
}})
|
||||
`,
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
PUBLISH: {Name: "publish path auto dream volcanos icebergs intshell", Help: "发布", Action: map[string]*ice.Action{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Prefix(PUBLISH))
|
||||
m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS), _contexts)
|
||||
}},
|
||||
PUBLISH: {Name: "publish path auto create volcanos icebergs intshell dream", Help: "发布", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
_publish_file(m, m.Option(kit.MDB_FILE))
|
||||
}},
|
||||
@ -67,22 +58,23 @@ echo "hello world"
|
||||
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "miss") }()
|
||||
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.ETC_MISS)
|
||||
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.GO_MOD)
|
||||
m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_JS), m.Conf(PUBLISH, kit.Keym(JS)))
|
||||
m.Cmd(nfs.DEFS, "usr/volcanos/page/cache.css", "")
|
||||
m.Cmd(nfs.DEFS, "usr/volcanos/page/cache.js", "")
|
||||
|
||||
m.Option(nfs.DIR_DEEP, true)
|
||||
m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_JS), m.Conf(PUBLISH, kit.Keym(JS)))
|
||||
m.Cmd(nfs.DEFS, path.Join(ice.USR_VOLCANOS, "page/cache.css"), "")
|
||||
m.Cmd(nfs.DEFS, path.Join(ice.USR_VOLCANOS, "page/cache.js"), "")
|
||||
|
||||
m.Option(nfs.DIR_DEEP, ice.TRUE)
|
||||
m.Option(nfs.DIR_REG, `.*\.(html|css|js)$`)
|
||||
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
|
||||
m.Cmdy(nfs.DIR, "./", "time,size,line,path,link")
|
||||
}},
|
||||
ice.ICEBERGS: {Name: "icebergs", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) {
|
||||
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "base") }()
|
||||
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_SH)
|
||||
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_BIN)
|
||||
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE)
|
||||
|
||||
p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH))
|
||||
ls := strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), "\n")
|
||||
ls := strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), ice.MOD_NL)
|
||||
for _, ls := range ls {
|
||||
if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" {
|
||||
if s, e := os.Stat(path.Join(p, file)); e == nil {
|
||||
@ -99,17 +91,14 @@ echo "hello world"
|
||||
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "tmux") }()
|
||||
m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_SH), m.Conf(PUBLISH, kit.Keym(SH)))
|
||||
|
||||
m.Option(nfs.DIR_DEEP, true)
|
||||
m.Option(nfs.DIR_DEEP, ice.TRUE)
|
||||
m.Option(nfs.DIR_REG, ".*\\.(sh|vim|conf)$")
|
||||
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
|
||||
m.Cmdy(nfs.DIR, "./", "time,size,line,path,link")
|
||||
}},
|
||||
ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) {
|
||||
u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
|
||||
host := u.Host
|
||||
if strings.Contains(host, "localhost") {
|
||||
host = strings.Replace(host, "localhost", m.Cmd(tcp.HOST).Append(tcp.IP), 1)
|
||||
}
|
||||
host := m.ReplaceLocalhost(u.Host)
|
||||
|
||||
m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1)))
|
||||
m.Option("hostport", fmt.Sprintf("%s:%s", strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1)))
|
||||
@ -127,23 +116,37 @@ echo "hello world"
|
||||
}
|
||||
}
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH))
|
||||
os.Remove(path.Join(p, m.Option(kit.MDB_PATH)))
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(web.DREAM, mdb.INPUTS, arg)
|
||||
}},
|
||||
web.DREAM: {Name: "dream name=hi repos", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(web.DREAM, tcp.START, arg)
|
||||
m.Process(ice.PROCESS_OPEN, kit.MergeURL(m.Option(ice.MSG_USERWEB),
|
||||
kit.SSH_POD, kit.Keys(m.Option(ice.MSG_USERPOD), m.Option(kit.MDB_NAME))))
|
||||
}},
|
||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(web.DREAM, mdb.INPUTS, arg)
|
||||
}},
|
||||
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH))
|
||||
os.Remove(path.Join(p, m.Option(kit.MDB_PATH)))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
|
||||
m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time,size,path,link")
|
||||
m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time,size,path,action,link")
|
||||
}},
|
||||
},
|
||||
Configs: map[string]*ice.Config{
|
||||
PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data(
|
||||
kit.MDB_PATH, "usr/publish", ice.CONTEXTS, _contexts,
|
||||
SH, `#!/bin/bash
|
||||
echo "hello world"
|
||||
`,
|
||||
JS, `Volcanos("onengine", {_init: function(can, sub) {
|
||||
can.base.Log("hello volcanos world")
|
||||
}, river: {
|
||||
|
||||
}})
|
||||
`,
|
||||
)},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -5,6 +5,7 @@ import (
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
)
|
||||
|
||||
@ -13,30 +14,30 @@ const PYTHON = "python"
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
PYTHON: {Name: "python", Help: "脚本命令", Value: kit.Data(
|
||||
PYTHON, "python", cli.SOURCE, "http://mirrors.sohu.com/python/3.5.2/Python-3.5.2.tar.xz",
|
||||
PYTHON: {Name: PYTHON, Help: "脚本命令", Value: kit.Data(
|
||||
cli.SOURCE, "http://mirrors.sohu.com/python/3.5.2/Python-3.5.2.tar.xz",
|
||||
PYTHON, "python",
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
PYTHON: {Name: "python port path auto start build download", Help: "脚本命令", Action: map[string]*ice.Action{
|
||||
"download": {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy("web.code.install", "download", m.Conf(PYTHON, "meta.source"))
|
||||
web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(INSTALL, web.DOWNLOAD, m.Conf(PYTHON, kit.Keym(cli.SOURCE)))
|
||||
}},
|
||||
"build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy("web.code.install", "build", m.Conf(PYTHON, "meta.source"))
|
||||
cli.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(INSTALL, cli.BUILD, m.Conf(PYTHON, kit.Keym(cli.SOURCE)))
|
||||
}},
|
||||
"start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy("web.code.install", "start", m.Conf(PYTHON, "meta.source"), "bin/python3")
|
||||
cli.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(INSTALL, cli.START, m.Conf(PYTHON, kit.Keym(cli.SOURCE)), "bin/python3")
|
||||
}},
|
||||
cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(cli.SYSTEM, m.Conf(PYTHON, kit.Keym(PYTHON)), arg)
|
||||
}},
|
||||
|
||||
"pip": {Name: "pip", Help: "安装", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(cli.SYSTEM, m.Conf(PYTHON, "meta.pip"), "install", arg)
|
||||
}},
|
||||
"run": {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(cli.SYSTEM, m.Conf(PYTHON, "meta.python"), arg)
|
||||
m.Cmdy(cli.SYSTEM, m.Conf(PYTHON, kit.Keym("pip")), "install", arg)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy("web.code.install", path.Base(m.Conf(PYTHON, kit.META_SOURCE)), arg)
|
||||
m.Cmdy(INSTALL, path.Base(m.Conf(PYTHON, kit.META_SOURCE)), arg)
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
7
core/code/python.shy
Normal file
7
core/code/python.shy
Normal file
@ -0,0 +1,7 @@
|
||||
section "python"
|
||||
refer `
|
||||
官网 https://www.python.org/
|
||||
源码 https://www.python.org/downloads/source/
|
||||
文档 https://docs.python.org/3/reference/index.html
|
||||
`
|
||||
|
@ -1,13 +1,13 @@
|
||||
package code
|
||||
|
||||
import (
|
||||
"path"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"path"
|
||||
)
|
||||
|
||||
const SH = "sh"
|
||||
@ -16,14 +16,14 @@ func init() {
|
||||
Index.Register(&ice.Context{Name: SH, Help: "命令",
|
||||
Commands: map[string]*ice.Command{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, SH, SH, c.Cap(ice.CTX_FOLLOW))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, SH, SH, c.Cap(ice.CTX_FOLLOW))
|
||||
m.Cmd(mdb.ENGINE, mdb.CREATE, SH, SH, c.Cap(ice.CTX_FOLLOW))
|
||||
m.Cmd(mdb.SEARCH, mdb.CREATE, SH, SH, c.Cap(ice.CTX_FOLLOW))
|
||||
for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} {
|
||||
m.Cmd(cmd, mdb.CREATE, SH, m.Prefix(SH))
|
||||
}
|
||||
LoadPlug(m, SH)
|
||||
}},
|
||||
SH: {Name: SH, Help: "命令", Action: map[string]*ice.Action{
|
||||
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Echo(m.Conf(SH, "meta.plug"))
|
||||
m.Echo(m.Conf(SH, kit.Keym(PLUG)))
|
||||
}},
|
||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
|
||||
@ -38,10 +38,10 @@ func init() {
|
||||
return
|
||||
}
|
||||
m.Option(cli.CMD_DIR, kit.Select("src", arg, 2))
|
||||
_go_find(m, kit.Select("main", arg, 1))
|
||||
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
m.Cmdy(mdb.SEARCH, MAN1, arg[1:])
|
||||
m.Cmdy(mdb.SEARCH, MAN8, arg[1:])
|
||||
_go_grep(m, kit.Select("main", arg, 1))
|
||||
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
}},
|
||||
|
||||
MAN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
@ -51,7 +51,7 @@ func init() {
|
||||
},
|
||||
Configs: map[string]*ice.Config{
|
||||
SH: {Name: SH, Help: "命令", Value: kit.Data(
|
||||
"plug", kit.Dict(
|
||||
PLUG, kit.Dict(
|
||||
SPLIT, kit.Dict(
|
||||
"space", " ",
|
||||
"operator", "{[(.,;!|<>)]}",
|
||||
@ -62,44 +62,48 @@ func init() {
|
||||
SUFFIX, kit.Dict(
|
||||
"{", COMMENT,
|
||||
),
|
||||
KEYWORD, kit.Dict(
|
||||
"export", KEYWORD,
|
||||
"source", KEYWORD,
|
||||
"require", KEYWORD,
|
||||
PREPARE, kit.Dict(
|
||||
KEYWORD, kit.Simple(
|
||||
"export",
|
||||
"source",
|
||||
"require",
|
||||
|
||||
"if", KEYWORD,
|
||||
"then", KEYWORD,
|
||||
"else", KEYWORD,
|
||||
"fi", KEYWORD,
|
||||
"for", KEYWORD,
|
||||
"while", KEYWORD,
|
||||
"do", KEYWORD,
|
||||
"done", KEYWORD,
|
||||
"esac", KEYWORD,
|
||||
"case", KEYWORD,
|
||||
"in", KEYWORD,
|
||||
"return", KEYWORD,
|
||||
"if",
|
||||
"then",
|
||||
"else",
|
||||
"fi",
|
||||
"for",
|
||||
"while",
|
||||
"do",
|
||||
"done",
|
||||
"esac",
|
||||
"case",
|
||||
"in",
|
||||
"return",
|
||||
|
||||
"shift", KEYWORD,
|
||||
"local", KEYWORD,
|
||||
"echo", KEYWORD,
|
||||
"eval", KEYWORD,
|
||||
"kill", KEYWORD,
|
||||
"let", KEYWORD,
|
||||
"cd", KEYWORD,
|
||||
|
||||
"xargs", FUNCTION,
|
||||
"date", FUNCTION,
|
||||
"find", FUNCTION,
|
||||
"grep", FUNCTION,
|
||||
"sed", FUNCTION,
|
||||
"awk", FUNCTION,
|
||||
"pwd", FUNCTION,
|
||||
"ps", FUNCTION,
|
||||
"ls", FUNCTION,
|
||||
"rm", FUNCTION,
|
||||
"go", FUNCTION,
|
||||
"shift",
|
||||
"local",
|
||||
"echo",
|
||||
"eval",
|
||||
"kill",
|
||||
"let",
|
||||
"cd",
|
||||
),
|
||||
FUNCTION, kit.Simple(
|
||||
"xargs",
|
||||
"date",
|
||||
"find",
|
||||
"grep",
|
||||
"sed",
|
||||
"awk",
|
||||
"pwd",
|
||||
"ps",
|
||||
"ls",
|
||||
"rm",
|
||||
"go",
|
||||
),
|
||||
),
|
||||
KEYWORD, kit.Dict(),
|
||||
),
|
||||
)},
|
||||
},
|
||||
|
@ -1,12 +1,12 @@
|
||||
package code
|
||||
|
||||
import (
|
||||
"path"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/mdb"
|
||||
"github.com/shylinux/icebergs/base/nfs"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"path"
|
||||
)
|
||||
|
||||
const SHY = "shy"
|
||||
@ -15,14 +15,14 @@ func init() {
|
||||
Index.Register(&ice.Context{Name: SHY, Help: "脚本",
|
||||
Commands: map[string]*ice.Command{
|
||||
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, SHY, m.Prefix(SHY))
|
||||
m.Cmd(mdb.RENDER, mdb.CREATE, SHY, m.Prefix(SHY))
|
||||
m.Cmd(mdb.ENGINE, mdb.CREATE, SHY, m.Prefix(SHY))
|
||||
m.Cmd(mdb.SEARCH, mdb.CREATE, SHY, m.Prefix(SHY))
|
||||
for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} {
|
||||
m.Cmd(cmd, mdb.CREATE, SHY, m.Prefix(SHY))
|
||||
}
|
||||
LoadPlug(m, SHY)
|
||||
}},
|
||||
SHY: {Name: SHY, Help: "脚本", Action: map[string]*ice.Action{
|
||||
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Echo(m.Conf(SHY, "meta.plug"))
|
||||
m.Echo(m.Conf(SHY, kit.Keym(PLUG)))
|
||||
}},
|
||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
|
||||
@ -34,28 +34,31 @@ func init() {
|
||||
if arg[0] == kit.MDB_FOREACH {
|
||||
return
|
||||
}
|
||||
_go_find(m, kit.Select("main", arg, 1))
|
||||
_go_grep(m, kit.Select("main", arg, 1))
|
||||
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
|
||||
}},
|
||||
}},
|
||||
},
|
||||
Configs: map[string]*ice.Config{
|
||||
SHY: {Name: SHY, Help: "脚本", Value: kit.Data(
|
||||
"plug", kit.Dict(
|
||||
PLUG, kit.Dict(
|
||||
PREFIX, kit.Dict("#", COMMENT),
|
||||
KEYWORD, kit.Dict(
|
||||
"title", KEYWORD,
|
||||
"premenu", KEYWORD,
|
||||
"chapter", KEYWORD,
|
||||
"section", KEYWORD,
|
||||
"source", KEYWORD,
|
||||
"refer", KEYWORD,
|
||||
"field", KEYWORD,
|
||||
"spark", KEYWORD,
|
||||
"image", KEYWORD,
|
||||
"label", KEYWORD,
|
||||
"chain", KEYWORD,
|
||||
PREPARE, kit.Dict(
|
||||
KEYWORD, kit.Simple(
|
||||
"title",
|
||||
"premenu",
|
||||
"chapter",
|
||||
"section",
|
||||
"source",
|
||||
"refer",
|
||||
"field",
|
||||
"spark",
|
||||
"image",
|
||||
"label",
|
||||
"chain",
|
||||
),
|
||||
),
|
||||
KEYWORD, kit.Dict(),
|
||||
),
|
||||
)},
|
||||
},
|
||||
|
@ -1,12 +1,12 @@
|
||||
package code
|
||||
|
||||
import (
|
||||
"os"
|
||||
|
||||
ice "github.com/shylinux/icebergs"
|
||||
"github.com/shylinux/icebergs/base/cli"
|
||||
"github.com/shylinux/icebergs/base/web"
|
||||
kit "github.com/shylinux/toolkits"
|
||||
|
||||
"os"
|
||||
)
|
||||
|
||||
const UPGRADE = "upgrade"
|
||||
@ -15,19 +15,23 @@ func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
UPGRADE: {Name: UPGRADE, Help: "升级", Value: kit.Dict(kit.MDB_HASH, kit.Dict(
|
||||
kit.MDB_PATH, "usr/upgrade", "system", kit.Dict(kit.MDB_LIST, kit.List(
|
||||
kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.sh", kit.MDB_PATH, "bin/ice.sh",
|
||||
kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.bin", kit.MDB_PATH, "bin/ice.bin",
|
||||
cli.SYSTEM, kit.Dict(kit.MDB_LIST, kit.List(
|
||||
kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.sh", kit.MDB_PATH, ice.BIN_ICE,
|
||||
kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.bin", kit.MDB_PATH, ice.BIN_ICE_BIN,
|
||||
)),
|
||||
cli.SOURCE, kit.Dict(kit.MDB_LIST, kit.List(
|
||||
kit.MDB_INPUT, "txt", kit.MDB_FILE, "main.go", kit.MDB_PATH, ice.SRC_MAIN_GO,
|
||||
kit.MDB_INPUT, "txt", kit.MDB_FILE, "miss.sh", kit.MDB_PATH, ice.ETC_MISS_SH,
|
||||
kit.MDB_INPUT, "txt", kit.MDB_FILE, "go.mod", kit.MDB_PATH, ice.GO_MOD,
|
||||
)),
|
||||
))},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
UPGRADE: {Name: "upgrade item:select=system 执行:button", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select("system", arg, 0)), "", "", func(index int, value map[string]interface{}) {
|
||||
m.Option("exit", "true")
|
||||
if value[kit.MDB_FILE] == "ice.bin" {
|
||||
// 程序文件
|
||||
UPGRADE: {Name: "upgrade item=system,source 执行:button", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select(cli.SYSTEM, arg, 0)), "", "", func(index int, value map[string]interface{}) {
|
||||
if value[kit.MDB_PATH] == ice.BIN_ICE_BIN { // 程序文件
|
||||
value[kit.MDB_FILE] = kit.Keys("ice", m.Conf(cli.RUNTIME, "host.GOOS"), m.Conf(cli.RUNTIME, "host.GOARCH"))
|
||||
m.Option("exit", ice.TRUE)
|
||||
}
|
||||
|
||||
// 下载文件
|
||||
@ -35,7 +39,7 @@ func init() {
|
||||
m.Cmd(web.STORY, web.WATCH, msg.Append(kit.MDB_FILE), value[kit.MDB_PATH])
|
||||
os.Chmod(kit.Format(value[kit.MDB_PATH]), 0770)
|
||||
})
|
||||
if m.Option("exit") == "true" {
|
||||
if m.Option("exit") == ice.TRUE {
|
||||
m.Sleep("1s").Go(func() { m.Cmd("exit", 1) })
|
||||
}
|
||||
}},
|
||||
|
@ -16,7 +16,7 @@ const VIMER = "vimer"
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
||||
VIMER: {Name: "vimer path=src/ file=main.go line=1 刷新:button=auto save", Help: "编辑器", Meta: kit.Dict(
|
||||
"display", "/plugin/local/code/vimer.js", "style", "editor",
|
||||
ice.Display("/plugin/local/code/vimer.js", "editor"),
|
||||
), Action: map[string]*ice.Action{
|
||||
mdb.ENGINE: {Name: "engine", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
|
||||
if m.Cmdy(mdb.ENGINE, arg); len(m.Resultv()) > 0 || len(m.Appendv(ice.MSG_APPEND)) > 0 {
|
||||
@ -32,6 +32,8 @@ func init() {
|
||||
nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(nfs.SAVE, path.Join(m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE)))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Cmdy(INNER, arg) }},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(INNER, arg)
|
||||
}},
|
||||
}})
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ const WEBPACK = "webpack"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
|
||||
WEBPACK: {Name: "webpack path auto create", Help: "打包", Action: map[string]*ice.Action{
|
||||
WEBPACK: {Name: "webpack path auto create prunes", Help: "打包", Action: map[string]*ice.Action{
|
||||
mdb.CREATE: {Name: "create name=demo", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
dir := m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.SSH_PATH))
|
||||
css, _, e := kit.Create(path.Join(dir, "page/cache.css"))
|
||||
@ -32,8 +32,7 @@ func init() {
|
||||
|
||||
for _, k := range []string{"lib", "panel", "plugin"} {
|
||||
m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) {
|
||||
switch kit.Ext(value[kit.MDB_PATH]) {
|
||||
case CSS:
|
||||
if kit.Ext(value[kit.MDB_PATH]) == CSS {
|
||||
js.WriteString(`Volcanos.meta.cache["` + path.Join("/", value[kit.MDB_PATH]) + "\"] = []\n")
|
||||
css.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH]))
|
||||
}
|
||||
@ -41,8 +40,7 @@ func init() {
|
||||
}
|
||||
for _, k := range []string{"lib", "panel", "plugin"} {
|
||||
m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) {
|
||||
switch kit.Ext(value[kit.MDB_PATH]) {
|
||||
case JS:
|
||||
if kit.Ext(value[kit.MDB_PATH]) == JS {
|
||||
js.WriteString(`_can_name = "` + path.Join("/", value[kit.MDB_PATH]) + "\";\n")
|
||||
js.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH]))
|
||||
}
|
||||
@ -54,7 +52,7 @@ func init() {
|
||||
js.WriteString(m.Cmdx(nfs.CAT, k))
|
||||
}
|
||||
|
||||
if f, _, e := kit.Create("usr/publish/webpack/" + m.Option(kit.MDB_NAME) + ".js"); m.Assert(e) {
|
||||
if f, _, e := kit.Create(path.Join(ice.USR_PUBLISH, WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), JS))); m.Assert(e) {
|
||||
defer f.Close()
|
||||
|
||||
f.WriteString("\n")
|
||||
@ -64,13 +62,13 @@ func init() {
|
||||
}
|
||||
|
||||
m.Option(nfs.DIR_ROOT, "")
|
||||
if f, p, e := kit.Create("usr/publish/webpack/" + m.Option(kit.MDB_NAME) + ".html"); m.Assert(e) {
|
||||
if f, p, e := kit.Create(path.Join(ice.USR_PUBLISH, WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), HTML))); m.Assert(e) {
|
||||
f.WriteString(fmt.Sprintf(_pack,
|
||||
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/cache.css")),
|
||||
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/index.css")),
|
||||
|
||||
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, ice.PROTO_JS)),
|
||||
m.Cmdx(nfs.CAT, path.Join(ice.USR_PUBLISH, "webpack/"+m.Option(kit.MDB_NAME)+".js")),
|
||||
m.Cmdx(nfs.CAT, path.Join(ice.USR_PUBLISH, path.Join(WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), JS)))),
|
||||
|
||||
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/cache.js")),
|
||||
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/index.js")),
|
||||
@ -78,14 +76,16 @@ func init() {
|
||||
m.Echo(p)
|
||||
}
|
||||
}},
|
||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.css"), "")
|
||||
m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.js"), "")
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
|
||||
m.Option(nfs.DIR_TYPE, nfs.CAT)
|
||||
m.Option(nfs.DIR_DEEP, true)
|
||||
m.Option(nfs.DIR_TYPE, nfs.CAT)
|
||||
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
|
||||
|
||||
m.Cmdy(nfs.DIR, WEBPACK).Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushDownload(kit.MDB_LINK, path.Join(m.Option(nfs.DIR_ROOT), value[kit.MDB_PATH]))
|
||||
})
|
||||
m.Cmdy(nfs.DIR, WEBPACK, "time,size,path,action,link")
|
||||
}},
|
||||
}})
|
||||
}
|
||||
@ -93,8 +93,13 @@ func init() {
|
||||
const _pack = `
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<link rel="apple-touch-icon-precomposed" href="/publish/app.png"/>
|
||||
<link rel="apple-touch-startup-image" href="/publish/splash.png"/>
|
||||
<meta name="apple-mobile-web-app-capable" content="yes"/>
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
|
||||
|
||||
<meta name="viewport" content="width=device-width,initial-scale=0.8,user-scalable=no">
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=0.7,user-scalable=no">
|
||||
<title>volcanos</title>
|
||||
<style type="text/css">%s</style>
|
||||
<style type="text/css">%s</style>
|
||||
|
@ -12,7 +12,7 @@ import (
|
||||
|
||||
func _plan_list(m *ice.Message, begin_time, end_time time.Time) *ice.Message {
|
||||
m.Option(mdb.CACHE_LIMIT, "100")
|
||||
m.Fields(true, "begin_time,close_time,zone,id,level,status,score,type,name,text,extra")
|
||||
m.Fields(0, "begin_time,close_time,zone,id,level,status,score,type,name,text,extra")
|
||||
m.Option(kit.Keycb(mdb.SELECT), func(key string, fields []string, value, val map[string]interface{}) {
|
||||
begin, _ := time.ParseInLocation(ice.MOD_TIME, kit.Format(value[BEGIN_TIME]), time.Local)
|
||||
if begin_time.After(begin) || begin.After(end_time) {
|
||||
|
@ -57,18 +57,6 @@ func _task_action(m *ice.Message, status interface{}, action ...string) string {
|
||||
return strings.Join(action, ",")
|
||||
}
|
||||
|
||||
func _task_list(m *ice.Message, zone string, id string) *ice.Message {
|
||||
if zone == "" {
|
||||
m.Fields(zone == "", "time,zone,count")
|
||||
defer func() { m.PushAction(mdb.REMOVE) }()
|
||||
} else {
|
||||
m.Fields(id == "", "begin_time,id,status,level,score,type,name,text")
|
||||
defer m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushButton(_task_action(m, value[STATUS]))
|
||||
})
|
||||
}
|
||||
return m.Cmdy(mdb.SELECT, TASK, "", mdb.ZONE, zone, id)
|
||||
}
|
||||
func _task_create(m *ice.Message, zone string) {
|
||||
m.Cmdy(mdb.INSERT, TASK, "", mdb.HASH, kit.MDB_ZONE, zone)
|
||||
}
|
||||
@ -217,7 +205,14 @@ func init() {
|
||||
_task_modify(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), STATUS, FINISH)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
_task_list(m, kit.Select("", arg, 0), kit.Select("", arg, 1))
|
||||
m.Fields(len(arg), "time,zone,count", "begin_time,id,status,level,score,type,name,text")
|
||||
if m.Cmdy(mdb.SELECT, TASK, "", mdb.ZONE, arg); len(arg) == 0 {
|
||||
m.PushAction(mdb.REMOVE)
|
||||
} else {
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushButton(_task_action(m, value[STATUS]))
|
||||
})
|
||||
}
|
||||
}},
|
||||
},
|
||||
})
|
||||
|
43
misc.go
43
misc.go
@ -131,14 +131,19 @@ func Render(m *Message, cmd string, args ...interface{}) string {
|
||||
if arg[0] == "" {
|
||||
return ""
|
||||
}
|
||||
list := []string{}
|
||||
if m.Option(MSG_USERPOD) != "" {
|
||||
list = append(list, kit.SSH_POD, m.Option(MSG_USERPOD))
|
||||
}
|
||||
if len(arg) == 1 {
|
||||
arg[0] = kit.MergeURL2(m.Option(MSG_USERWEB), path.Join(kit.Select("", "/share/local",
|
||||
!strings.HasPrefix(arg[0], "/")), arg[0]), kit.SSH_POD, m.Option(MSG_USERPOD))
|
||||
!strings.HasPrefix(arg[0], "/")), arg[0]), list)
|
||||
} else {
|
||||
arg[1] = kit.MergeURL2(m.Option(MSG_USERWEB), path.Join(kit.Select("", "/share/local",
|
||||
!strings.HasPrefix(arg[1], "/")), arg[1]), kit.SSH_POD, m.Option(MSG_USERPOD))
|
||||
!strings.HasPrefix(arg[1], "/")), arg[1]), list, "filename", arg[0])
|
||||
}
|
||||
return fmt.Sprintf(`<a href="%s" download="%s">%s</a>`, kit.Select(arg[0], arg, 1), path.Base(arg[0]), arg[0])
|
||||
arg[0] = m.ReplaceLocalhost(arg[0])
|
||||
return fmt.Sprintf(`<a href="%s" download="%s">%s</a>`, m.ReplaceLocalhost(kit.Select(arg[0], arg, 1)), path.Base(arg[0]), arg[0])
|
||||
|
||||
case RENDER_ANCHOR: // [name] link
|
||||
return fmt.Sprintf(`<a href="%s" target="_blank">%s</a>`, kit.Select(arg[0], arg, 1), arg[0])
|
||||
@ -236,6 +241,9 @@ func (m *Message) EchoImages(src string, arg ...string) *Message {
|
||||
func (m *Message) EchoQRCode(text string, arg ...string) *Message { // text [size]
|
||||
return m.Echo(Render(m, RENDER_QRCODE, text, arg))
|
||||
}
|
||||
func (m *Message) EchoDownload(arg ...interface{}) { // [name] file
|
||||
m.Echo(Render(m, RENDER_DOWNLOAD, arg...))
|
||||
}
|
||||
|
||||
func (m *Message) SortInt(key string) { m.Sort(key, "int") }
|
||||
func (m *Message) SortIntR(key string) { m.Sort(key, "int_r") }
|
||||
@ -312,8 +320,8 @@ func (m *Message) OptionLoad(file string) *Message {
|
||||
}
|
||||
return m
|
||||
}
|
||||
func (m *Message) Fields(condition bool, fields string) string {
|
||||
return m.Option(MSG_FIELDS, kit.Select(kit.Select("detail", fields, condition), m.Option(MSG_FIELDS)))
|
||||
func (m *Message) Fields(length int, fields ...string) string {
|
||||
return m.Option(MSG_FIELDS, kit.Select(kit.Select("detail", fields, length), m.Option(MSG_FIELDS)))
|
||||
}
|
||||
func (m *Message) Upload(dir string) {
|
||||
up := kit.Simple(m.Optionv(MSG_UPLOAD))
|
||||
@ -391,7 +399,7 @@ func (m *Message) ProcessRefresh(delay string) {
|
||||
func (m *Message) ProcessRefresh30ms() { m.ProcessRefresh("30ms") }
|
||||
func (m *Message) ProcessRefresh300ms() { m.ProcessRefresh("300ms") }
|
||||
func (m *Message) ProcessRefresh3s() { m.ProcessRefresh("3s") }
|
||||
func (m *Message) ProcessCommand(cmd, val string, arg ...string) {
|
||||
func (m *Message) ProcessCommand(cmd string, val []string, arg ...string) {
|
||||
if len(arg) > 0 && arg[0] == "run" {
|
||||
m.Cmdy(cmd, arg[1:])
|
||||
return
|
||||
@ -399,7 +407,7 @@ func (m *Message) ProcessCommand(cmd, val string, arg ...string) {
|
||||
|
||||
m.Cmdy("command", cmd)
|
||||
m.ProcessField(cmd, "run")
|
||||
m.Push("arg", kit.Format(kit.Split(val)))
|
||||
m.Push("arg", kit.Format(val))
|
||||
}
|
||||
func (m *Message) ProcessCommandOpt(arg ...string) {
|
||||
m.Push("opt", kit.Format(m.OptionSimple(arg...)))
|
||||
@ -523,3 +531,24 @@ func (m *Message) IsCliUA() bool {
|
||||
}
|
||||
return false
|
||||
}
|
||||
func (m *Message) ReplaceLocalhost(url string) string {
|
||||
if strings.Contains(url, "://localhost") {
|
||||
return strings.Replace(url, "localhost", m.Cmd("tcp.host").Append("ip"), 1)
|
||||
}
|
||||
return url
|
||||
}
|
||||
|
||||
func Display(file string, arg ...string) map[string]string {
|
||||
if file != "" && !strings.HasPrefix(file, "/") {
|
||||
ls := strings.Split(kit.FileLine(2, 100), "usr")
|
||||
file = kit.Select(file+".js", file, strings.HasSuffix(file, ".js"))
|
||||
file = path.Join("/require/github.com/shylinux", path.Dir(ls[len(ls)-1]), file)
|
||||
}
|
||||
return map[string]string{kit.MDB_DISPLAY: file, kit.MDB_STYLE: kit.Select("", arg, 0)}
|
||||
}
|
||||
func (m *Message) OptionSplit(fields ...string) (res []string) {
|
||||
for _, k := range strings.Split(strings.Join(fields, ","), ",") {
|
||||
res = append(res, m.Option(k))
|
||||
}
|
||||
return res
|
||||
}
|
||||
|
@ -61,11 +61,11 @@ func init() {
|
||||
}},
|
||||
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(cli.CMD_DIR, m.Option(cli.PWD))
|
||||
m.ProcessCommand(cli.SYSTEM, m.Option(kit.MDB_TEXT), arg...)
|
||||
m.ProcessCommand(cli.SYSTEM, kit.Split(m.Option(kit.MDB_TEXT)), arg...)
|
||||
m.ProcessCommandOpt(cli.PWD)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) < 2, kit.Select(m.Conf(FAVOR, kit.META_FIELD), "time,zone,count", len(arg) == 0))
|
||||
m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD))
|
||||
if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 {
|
||||
m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
|
@ -77,7 +77,7 @@ func init() {
|
||||
m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGOUT)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, m.Conf(SESS, kit.META_FIELD))
|
||||
m.Fields(len(arg), m.Conf(SESS, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
}},
|
||||
|
@ -67,7 +67,7 @@ func init() {
|
||||
}},
|
||||
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(cli.CMD_DIR, m.Option(cli.PWD))
|
||||
m.ProcessCommand(cli.SYSTEM, m.Option(kit.MDB_TEXT), arg...)
|
||||
m.ProcessCommand(cli.SYSTEM, kit.Split(m.Option(kit.MDB_TEXT)), arg...)
|
||||
m.ProcessCommandOpt(cli.PWD)
|
||||
}},
|
||||
FAVOR: {Name: "favor zone=some@key type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
||||
@ -75,7 +75,7 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.OptionPage(kit.Slice(arg, _sync_index)...)
|
||||
m.Fields(len(arg) == 0 || arg[0] == "", m.Conf(SYNC, kit.META_FIELD))
|
||||
m.Fields(len(kit.Slice(arg, 0, 1)), m.Conf(SYNC, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
|
||||
m.PushAction(cli.SYSTEM, FAVOR)
|
||||
m.StatusTimeCountTotal(_sync_count(m))
|
||||
|
@ -45,11 +45,11 @@ func init() {
|
||||
}},
|
||||
nfs.DIR: {Name: "dir", Help: "目录", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Option(nfs.DIR_ROOT, m.Option(TO))
|
||||
m.ProcessCommand(nfs.DIR, "", arg...)
|
||||
m.ProcessCommand(nfs.DIR, []string{}, arg...)
|
||||
m.ProcessCommandOpt(TO)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, m.Conf(TRASH, kit.META_FIELD))
|
||||
m.Fields(len(arg), m.Conf(TRASH, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction(nfs.DIR, mdb.REVERT, mdb.REMOVE)
|
||||
}},
|
||||
|
@ -45,7 +45,7 @@ func init() {
|
||||
m.Cmdy(mdb.PRUNES, m.Prefix(CACHE), "", mdb.HASH, kit.SSH_STEP, "100")
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, m.Conf(CACHE, kit.META_FIELD))
|
||||
m.Fields(len(arg), m.Conf(CACHE, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
}},
|
||||
|
@ -48,7 +48,7 @@ func init() {
|
||||
}
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) < 2, kit.Select(m.Conf(FAVOR, kit.META_FIELD), "time,zone,count", len(arg) == 0))
|
||||
m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD))
|
||||
if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 {
|
||||
m.Action(mdb.CREATE)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
|
@ -53,7 +53,7 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.OptionPage(kit.Slice(arg, _sync_index)...)
|
||||
m.Fields(len(arg) == 0 || arg[0] == "", m.Conf(SYNC, kit.META_FIELD))
|
||||
m.Fields(len(kit.Slice(arg, 0, 1)), m.Conf(SYNC, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
|
||||
m.StatusTimeCountTotal(_sync_count(m))
|
||||
m.PushAction(FAVOR)
|
||||
|
@ -80,7 +80,7 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) == 0 { // 仓库列表
|
||||
m.Fields(len(arg) == 0, m.Conf(REPOS, kit.META_FIELD))
|
||||
m.Fields(len(arg), m.Conf(REPOS, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(REPOS), "", mdb.HASH)
|
||||
m.Sort(kit.MDB_NAME)
|
||||
return
|
||||
|
@ -49,7 +49,7 @@ func init() {
|
||||
m.Echo(msg.Append(TOKEN))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, m.Conf(APP, kit.META_FIELD))
|
||||
m.Fields(len(arg), m.Conf(APP, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(APP), "", mdb.HASH, APPID, arg)
|
||||
}},
|
||||
},
|
||||
|
@ -31,7 +31,7 @@ func init() {
|
||||
m.Cmdy(mdb.IMPORT, m.Prefix(SCRIPT), "", mdb.HASH)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, m.Conf(SCRIPT, kit.META_FIELD))
|
||||
m.Fields(len(arg), m.Conf(SCRIPT, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SCRIPT), "", mdb.HASH, kit.MDB_NAME, arg)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
}},
|
||||
|
@ -65,14 +65,14 @@ func init() {
|
||||
}
|
||||
}},
|
||||
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.ProcessCommand(code.INNER, kit.Format([]string{
|
||||
m.ProcessCommand(code.INNER, []string{
|
||||
kit.Select("./", path.Dir(m.Option(kit.MDB_FILE))),
|
||||
path.Base(m.Option(kit.MDB_FILE)),
|
||||
m.Option(kit.MDB_LINE),
|
||||
}), arg...)
|
||||
}, arg...)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) < 2, kit.Select(m.Conf(FAVOR, kit.META_FIELD), "time,zone,count", len(arg) == 0))
|
||||
m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD))
|
||||
if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 {
|
||||
m.Action(mdb.CREATE)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
|
@ -58,7 +58,7 @@ func init() {
|
||||
m.Cmdy(mdb.IMPORT, m.Prefix(INPUT), "", mdb.LIST)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, m.Conf(INPUT, kit.META_FIELD))
|
||||
m.Fields(len(arg), m.Conf(INPUT, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(INPUT), "", mdb.LIST, kit.MDB_ID, arg)
|
||||
}},
|
||||
},
|
||||
|
@ -77,7 +77,7 @@ func init() {
|
||||
m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGOUT)
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, m.Conf(SESS, kit.META_FIELD))
|
||||
m.Fields(len(arg), m.Conf(SESS, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg)
|
||||
m.PushAction(mdb.REMOVE)
|
||||
}},
|
||||
|
@ -43,7 +43,7 @@ func init() {
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.OptionPage(kit.Slice(arg, _sync_index)...)
|
||||
m.Fields(len(arg) == 0 || arg[0] == "", m.Conf(SYNC, kit.META_FIELD))
|
||||
m.Fields(len(kit.Slice(arg, 0, 1)), m.Conf(SYNC, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
|
||||
m.StatusTimeCountTotal(_sync_count(m))
|
||||
}},
|
||||
|
@ -71,7 +71,7 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器",
|
||||
code.PREFIX, kit.Dict(
|
||||
"\"", "comment",
|
||||
),
|
||||
"_keyword", kit.Dict(
|
||||
code.PREPARE, kit.Dict(
|
||||
code.KEYWORD, kit.Simple(
|
||||
"source", "finish",
|
||||
"set", "let", "end",
|
||||
|
@ -26,7 +26,7 @@ func init() {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, m.OptionSimple(kit.MDB_TEXT))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) == 0, m.Conf(FAVOR, kit.META_FIELD))
|
||||
m.Fields(len(arg), m.Conf(FAVOR, kit.META_FIELD))
|
||||
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TEXT, arg)
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
m.PushImages(cli.QRCODE, kit.MergeURL("https://open.weixin.qq.com/qr/code", aaa.USERNAME, value[kit.MDB_TEXT]))
|
||||
|
@ -31,7 +31,7 @@ func init() {
|
||||
m.Cmdy(mdb.DELETE, m.Prefix(MENU), "", mdb.ZONE, m.OptionSimple(kit.MDB_ZONE))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Fields(len(arg) < 2, kit.Select(m.Conf(MENU, kit.META_FIELD), "time,zone,count", len(arg) == 0))
|
||||
m.Fields(len(arg), "time,zone,count", m.Conf(MENU, kit.META_FIELD))
|
||||
if m.Cmdy(mdb.SELECT, m.Prefix(MENU), "", mdb.ZONE, arg); len(arg) == 0 {
|
||||
m.PushAction(mdb.REMOVE)
|
||||
}
|
||||
|
9
type.go
9
type.go
@ -198,7 +198,14 @@ func (c *Context) Merge(s *Context) *Context {
|
||||
}
|
||||
|
||||
for k, a := range v.Action {
|
||||
kit.Value(v.Meta, kit.Keys("trans", k), a.Help)
|
||||
help := strings.SplitN(a.Help, ":", 2)
|
||||
if len(help) == 1 || help[1] == "" {
|
||||
help = strings.SplitN(help[0], ":", 2)
|
||||
}
|
||||
kit.Value(v.Meta, kit.Keys("trans", k), help[0])
|
||||
if len(help) > 1 {
|
||||
kit.Value(v.Meta, kit.Keys("title", k), help[1])
|
||||
}
|
||||
if a.Hand == nil {
|
||||
continue
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user