1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-28 02:02:02 +08:00
This commit is contained in:
shaoying 2021-07-25 14:48:28 +08:00
parent 1b56e5b7fd
commit 7d7888f61c
72 changed files with 826 additions and 810 deletions

View File

@ -88,7 +88,7 @@ func init() {
}) })
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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.Cmdy(mdb.SELECT, SESS, "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},

View File

@ -75,7 +75,7 @@ func init() {
m.Cmdy(mdb.DELETE, TOTP, "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME)) 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) { }, 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.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_TIME, m.Time())
m.Push(kit.MDB_NAME, value[kit.MDB_NAME]) m.Push(kit.MDB_NAME, value[kit.MDB_NAME])

View File

@ -138,7 +138,7 @@ func init() {
} }
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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.Cmdy(mdb.SELECT, USER, "", mdb.HASH, USERNAME, arg)
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.Push(USERROLE, UserRole(m, value[USERNAME])) m.Push(USERROLE, UserRole(m, value[USERNAME]))

View File

@ -132,7 +132,7 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { // 进程列表 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) { m.Cmdy(mdb.SELECT, DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) {
switch value[kit.MDB_STATUS] { switch value[kit.MDB_STATUS] {
case START: case START:

View File

@ -79,6 +79,7 @@ const (
DARWIN = "darwin" DARWIN = "darwin"
WINDOWS = "windows" WINDOWS = "windows"
SOURCE = "source" SOURCE = "source"
TARGET = "target"
USER = "USER" USER = "USER"
HOME = "HOME" HOME = "HOME"
@ -94,7 +95,7 @@ func init() {
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
SYSTEM: {Name: "system cmd= 执行:button", Help: "系统命令", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { SYSTEM: {Name: "system cmd= 执行:button", Help: "系统命令", Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
if len(arg) == 0 { 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) m.Cmdy(mdb.SELECT, SYSTEM, "", mdb.LIST)
return return
} }

View File

@ -37,13 +37,13 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { // 事件列表 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.Cmdy(mdb.SELECT, EVENT, "", mdb.HASH)
m.PushAction(ACTION, mdb.REMOVE) m.PushAction(ACTION, mdb.REMOVE)
return 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:]) m.Cmdy(mdb.SELECT, EVENT, kit.Keys(kit.MDB_HASH, kit.Hashs(arg[0])), mdb.LIST, kit.MDB_ID, arg[1:])
}}, }},
}, },

View File

@ -52,7 +52,7 @@ func init() {
} }
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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.Cmdy(mdb.SELECT, ROUTINE, "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(INNER, mdb.REMOVE) m.PushAction(INNER, mdb.REMOVE)
}}, }},

View File

@ -62,7 +62,7 @@ func init() {
m.Cmdy(mdb.DELETE, SIGNAL, "", mdb.HASH, SIGNAL, m.Option(SIGNAL)) m.Cmdy(mdb.DELETE, SIGNAL, "", mdb.HASH, SIGNAL, m.Option(SIGNAL))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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.Cmdy(mdb.SELECT, SIGNAL, "", mdb.HASH, SIGNAL, arg)
m.PushAction(ACTION, mdb.REMOVE) m.PushAction(ACTION, mdb.REMOVE)
m.Sort(SIGNAL) m.Sort(SIGNAL)

View File

@ -69,13 +69,13 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { 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.Cmdy(mdb.SELECT, TIMER, "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
return 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:]) m.Cmdy(mdb.SELECT, TIMER, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
}}, }},
}, },

View File

@ -428,14 +428,14 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
if m.Action(mdb.CREATE); len(arg) == 0 { // 矩阵列表 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.Cmdy(mdb.SELECT, m.Prefix(MATRIX), "", mdb.HASH)
m.PushAction(mdb.INSERT, "show", mdb.REMOVE) m.PushAction(mdb.INSERT, "show", mdb.REMOVE)
return return
} }
if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表 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.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST)
m.PushAction(PARSE) m.PushAction(PARSE)
return return

View File

@ -455,6 +455,8 @@ const MDB = "mdb"
var Index = &ice.Context{Name: MDB, Help: "数据模块", Commands: map[string]*ice.Command{ 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) { INSERT: {Name: "insert key sub type arg...", Help: "添加", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
switch arg[2] { 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: case HASH:
_hash_insert(m, arg[0], _domain_chain(m, arg[1]), arg[3:]...) _hash_insert(m, arg[0], _domain_chain(m, arg[1]), arg[3:]...)
case LIST: 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) { INPUTS: {Name: "inputs key sub type field value", Help: "补全", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
switch arg[2] { 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: case HASH:
_hash_inputs(m, arg[0], _domain_chain(m, arg[1]), kit.Select("name", arg, 3), kit.Select("", arg, 4)) _hash_inputs(m, arg[0], _domain_chain(m, arg[1]), kit.Select("name", arg, 3), kit.Select("", arg, 4))
case LIST: case LIST:

View File

@ -64,7 +64,7 @@ func init() {
mdb.NextPage(m, _tail_count(m, arg[0]), kit.Slice(arg, 2)...) mdb.NextPage(m, _tail_count(m, arg[0]), kit.Slice(arg, 2)...)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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_FILTER, kit.Select("", arg, 4))
m.Option(mdb.CACHE_OFFEND, kit.Select("0", arg, 3)) m.Option(mdb.CACHE_OFFEND, kit.Select("0", arg, 3))
m.Option(mdb.CACHE_LIMIT, kit.Select("10", arg, 2)) m.Option(mdb.CACHE_LIMIT, kit.Select("10", arg, 2))

View File

@ -57,7 +57,7 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { 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.Cmdy(mdb.SELECT, TRASH, "", mdb.HASH)
m.PushAction(mdb.REVERT, mdb.REMOVE) m.PushAction(mdb.REVERT, mdb.REMOVE)
return return

View File

@ -94,7 +94,7 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { // 通道列表 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 { if m.Cmdy(mdb.SELECT, CHANNEL, "", mdb.HASH); len(arg) == 0 {
m.Table(func(index int, value map[string]string, head []string) { 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) 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.Cmdy(mdb.SELECT, CHANNEL, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
m.PushAction(mdb.REPEAT) m.PushAction(mdb.REPEAT)
}}, }},

View File

@ -211,7 +211,7 @@ func init() {
m.Echo(h) m.Echo(h)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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 { 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.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", SESSION, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE) m.PushButton(kit.Select("", SESSION, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE)

View File

@ -384,7 +384,7 @@ func init() {
} }
if len(arg) == 0 { // 脚本列表 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.Cmdy(mdb.SELECT, SOURCE, "", mdb.HASH)
m.Sort(kit.MDB_NAME) m.Sort(kit.MDB_NAME)
return 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.Cmdy(mdb.SELECT, SOURCE, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
m.PushAction(mdb.REPEAT) m.PushAction(mdb.REPEAT)
}}, }},

View File

@ -170,14 +170,14 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { // 服务列表 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.Cmdy(mdb.SELECT, SERVICE, "", mdb.HASH)
m.PushAction(mdb.IMPORT, mdb.INSERT, mdb.EXPORT, aaa.INVITE) m.PushAction(mdb.IMPORT, mdb.INSERT, mdb.EXPORT, aaa.INVITE)
return 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:]) m.Cmdy(mdb.SELECT, SERVICE, kit.Keys(kit.MDB_HASH, kit.Hashs(arg[0])), mdb.LIST, kit.MDB_ID, arg[1:])
}}, }},
}, },

View File

@ -85,7 +85,7 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { 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 { 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.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", ctx.COMMAND, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE) m.PushButton(kit.Select("", ctx.COMMAND, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE)
@ -94,7 +94,7 @@ func init() {
return 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.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.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", mdb.REPEAT, value[kit.MDB_TYPE] == CMD)) m.PushButton(kit.Select("", mdb.REPEAT, value[kit.MDB_TYPE] == CMD))

View File

@ -92,7 +92,7 @@ func init() {
m.Cmdy(mdb.PRUNES, CLIENT, "", mdb.HASH, kit.MDB_STATUS, CLOSE) m.Cmdy(mdb.PRUNES, CLIENT, "", mdb.HASH, kit.MDB_STATUS, CLOSE)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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 { 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.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == OPEN)) m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == OPEN))

View File

@ -94,7 +94,7 @@ func init() {
m.Cmdy(mdb.PRUNES, SERVER, "", mdb.HASH, kit.MDB_STATUS, CLOSE) m.Cmdy(mdb.PRUNES, SERVER, "", mdb.HASH, kit.MDB_STATUS, CLOSE)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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 { 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.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == CLOSE)) m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == CLOSE))

View File

@ -168,7 +168,7 @@ func init() {
} }
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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 { if m.Cmdy(mdb.SELECT, CACHE, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
return return
} }

View File

@ -39,7 +39,7 @@ func Render(msg *ice.Message, cmd string, args ...interface{}) {
RenderCookie(msg, arg[0], arg[1:]...) RenderCookie(msg, arg[0], arg[1:]...)
case ice.RENDER_DOWNLOAD: // file [type [name]] 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) { 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])) http.ServeFile(msg.W, msg.R, kit.Path(arg[0]))
} }

View File

@ -253,7 +253,7 @@ func init() {
} }
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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) m.Cmdy(mdb.SELECT, SERVE, "", mdb.HASH, kit.MDB_NAME, arg)
}}, }},

View File

@ -151,7 +151,7 @@ func init() {
))) )))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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.Cmdy(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE) 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) { "/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)) 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)} list := []string{SHARE, kit.Select(m.Option(SHARE), arg, 0)}

View File

@ -17,7 +17,9 @@ import (
) )
func _space_list(m *ice.Message, space string) { 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) m.Cmdy(mdb.SELECT, SPACE, "", mdb.HASH, kit.MDB_NAME, space)
if space == "" { if space == "" {

View File

@ -337,7 +337,7 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) < 2 || arg[0] == "" || (len(arg) > 3 && arg[3] == "") { 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.Cmdy(mdb.SELECT, SPIDE, "", mdb.HASH, CLIENT_NAME, arg)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
return return

View File

@ -401,14 +401,14 @@ func init() {
}, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
m.Option(mdb.CACHE_LIMIT, -1) m.Option(mdb.CACHE_LIMIT, -1)
if m.Action(mdb.CREATE); len(arg) == 0 { // 矩阵列表 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.Cmdy(mdb.SELECT, m.Prefix(MATRIX), "", mdb.HASH)
m.PushAction(mdb.INSERT, "show", mdb.REMOVE) m.PushAction(mdb.INSERT, "show", mdb.REMOVE)
return return
} }
if m.Action(mdb.INSERT, "show"); len(arg) == 1 { // 词法列表 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.Cmdy(mdb.SELECT, m.Prefix(MATRIX), kit.Keys(kit.MDB_HASH, kit.Hashs(arg[0])), mdb.LIST)
m.PushAction(PARSE) m.PushAction(PARSE)
return return

View File

@ -31,12 +31,14 @@ const ( // REPOS
) )
const ( // DIR const ( // DIR
USR_VOLCANOS = "usr/volcanos" USR_VOLCANOS = "usr/volcanos"
USR_LEARNING = "usr/learning"
USR_ICEBERGS = "usr/icebergs" USR_ICEBERGS = "usr/icebergs"
USR_INTSHELL = "usr/intshell" USR_INTSHELL = "usr/intshell"
USR_INSTALL = "usr/install" USR_INSTALL = "usr/install"
USR_PUBLISH = "usr/publish" USR_PUBLISH = "usr/publish"
USR_LOCAL = "usr/local" USR_LOCAL = "usr/local"
FAVICON = "favicon.ico"
PROTO_JS = "proto.js" PROTO_JS = "proto.js"
FRAME_JS = "frame.js" FRAME_JS = "frame.js"
INDEX_JS = "index.js" INDEX_JS = "index.js"
@ -53,11 +55,13 @@ const ( // DIR
VAR_PROXY = "var/proxy" VAR_PROXY = "var/proxy"
VAR_TRASH = "var/trash" VAR_TRASH = "var/trash"
BIN_ICE = "bin/ice.sh" BIN_ICE = "bin/ice.sh"
BIN_ICE_SH = "bin/ice.sh"
BIN_ICE_BIN = "bin/ice.bin" BIN_ICE_BIN = "bin/ice.bin"
BIN_BOOTLOG = "bin/boot.log" BIN_BOOTLOG = "bin/boot.log"
ETC_INIT = "etc/init.shy" ETC_INIT = "etc/init.shy"
ETC_EXIT = "etc/exit.shy" ETC_EXIT = "etc/exit.shy"
ETC_MISS = "etc/miss.sh" ETC_MISS = "etc/miss.sh"
ETC_MISS_SH = "etc/miss.sh"
SRC_MAIN = "src/main.shy" SRC_MAIN = "src/main.shy"
SRC_MAIN_GO = "src/main.go" SRC_MAIN_GO = "src/main.go"

View File

@ -26,7 +26,7 @@ func init() {
m.Cmdy(mdb.DELETE, m.Prefix(FILES), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH)) 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) { }, 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) { 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)) 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))) m.Push("", value, kit.Split(m.Option(ice.MSG_FIELDS)))

View File

@ -53,7 +53,7 @@ func init() {
m.Cmdy(mdb.INPUTS, m.Prefix(TARGET), "", mdb.HASH, arg) m.Cmdy(mdb.INPUTS, m.Prefix(TARGET), "", mdb.HASH, arg)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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)) m.Cmdy(mdb.SELECT, m.Prefix(TARGET), "", mdb.HASH, "", kit.Select(kit.MDB_FOREACH, arg, 0))
if len(arg) == 0 { if len(arg) == 0 {
m.PushAction("备课", "学习", "测试", "删除") m.PushAction("备课", "学习", "测试", "删除")

View File

@ -1,19 +1,21 @@
package code package code
import ( import (
"path"
"strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/nfs"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"path"
"strings"
) )
func _autogen_script(m *ice.Message, dir string) { 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)) 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) 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 return
} }
func _autogen_import(m *ice.Message, main string, ctx string, mod string) (list []string) { 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 return
} }
func _autogen_mod(m *ice.Message, file string) (mod string) { func _autogen_mod(m *ice.Message, file string) (mod string) {
@ -107,8 +109,7 @@ func _autogen_miss(m *ice.Message) {
const AUTOGEN = "autogen" const AUTOGEN = "autogen"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
Commands: map[string]*ice.Command{
AUTOGEN: {Name: "autogen path auto create binpack script", Help: "生成", Action: map[string]*ice.Action{ 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) { 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) { if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) {
@ -118,7 +119,7 @@ func init() {
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) { 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_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")) _autogen_import(m, m.Option(kit.MDB_MAIN), m.Option(kit.MDB_NAME), _autogen_mod(m, ice.GO_MOD))
} }
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
@ -129,18 +130,18 @@ func init() {
m.RenameAppend(kit.MDB_PATH, arg[0]) m.RenameAppend(kit.MDB_PATH, arg[0])
case kit.MDB_FROM: case kit.MDB_FROM:
m.Option(nfs.DIR_DEEP, true)
m.Option(nfs.DIR_REG, `.*\.go`) 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, kit.SSH_SRC, "path,size,time")
m.Cmdy(nfs.DIR, "usr/icebergs/misc/", "path,size,time") m.Cmdy(nfs.DIR, "usr/icebergs/misc/", "path,size,time")
m.RenameAppend(kit.MDB_PATH, arg[0]) m.RenameAppend(kit.MDB_PATH, arg[0])
} }
}}, }},
BINPACK: {Name: "binpack", Help: "打包", Hand: func(m *ice.Message, arg ...string) { BINPACK: {Name: "binpack", Help: "打包:生成 src/binpack.go", Hand: func(m *ice.Message, arg ...string) {
_autogen_version(m) _autogen_version(m)
m.Cmd(BINPACK, mdb.CREATE) m.Cmd(BINPACK, mdb.CREATE)
}}, }},
"script": {Name: "script", Help: "脚本", Hand: func(m *ice.Message, arg ...string) { "script": {Name: "script", Help: "脚本:生成 etc/miss.sh", Hand: func(m *ice.Message, arg ...string) {
_autogen_miss(m) _autogen_miss(m)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
@ -150,13 +151,5 @@ func init() {
m.Cmdy(nfs.CAT, arg[0]) m.Cmdy(nfs.CAT, arg[0])
} }
}}, }},
}, }})
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"}}
`,
)},
},
})
} }

View File

@ -1,14 +1,6 @@
package code package code
import ( 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"
"io/ioutil" "io/ioutil"
"net/http" "net/http"
@ -16,6 +8,13 @@ import (
"path" "path"
"strings" "strings"
"sync/atomic" "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) { 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) { func _bench_redis(m *ice.Message, name, target string, arg ...string) {
} }
const (
HTTP = "http"
REDIS = "redis"
)
const ( const (
NCONN = "nconn" NCONN = "nconn"
NREQS = "nreqs" NREQS = "nreqs"
) )
const BENCH = "bench" const BENCH = "bench"
func init() { func init() {
@ -68,37 +70,37 @@ func init() {
BENCH: {Name: BENCH, Help: "性能压测", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE)}, BENCH: {Name: BENCH, Help: "性能压测", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE)},
}, },
Commands: map[string]*ice.Command{ 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{ 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) { mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, arg) 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, "", 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) { 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) { 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) { switch m.Option(kit.MDB_TYPE) {
case "http": case HTTP:
_bench_http(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT)) _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)) _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) { }, 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.Cmdy(mdb.SELECT, BENCH, "", mdb.ZONE, arg)
m.PushAction(kit.Select(mdb.REMOVE, cli.RUN, len(arg) > 0)) 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{ "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) { "run": {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {

View File

@ -1,23 +1,23 @@
package code package code
import ( import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
"path" "path"
"strings" "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) { func _pack_write(o *os.File, arg ...string) {
for _, v := range arg { for _, v := range arg {
o.WriteString(v) o.WriteString(v)
} }
o.WriteString("\n") o.WriteString(ice.MOD_NL)
} }
func _pack_file(m *ice.Message, file string) string { func _pack_file(m *ice.Message, file string) string {
list := "" list := ""
@ -35,9 +35,9 @@ func _pack_file(m *ice.Message, file string) string {
return "[]byte{}" return "[]byte{}"
} }
func _pack_dir(m *ice.Message, pack *os.File, dir string) { func _pack_dir(m *ice.Message, pack *os.File, dir string) {
m.Option(nfs.DIR_ROOT, dir) m.Option(nfs.DIR_DEEP, ice.TRUE)
m.Option(nfs.DIR_DEEP, "true")
m.Option(nfs.DIR_TYPE, nfs.CAT) 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) { m.Cmd(nfs.DIR, "./").Table(func(index int, value map[string]string, head []string) {
switch strings.Split(value[kit.MDB_PATH], "/")[0] { 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", pack.WriteString(fmt.Sprintf(" \"%s\": %s,\n",
path.Join(dir, value[kit.MDB_PATH]), _pack_file(m, path.Join(dir, value[kit.MDB_PATH])))) 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) { func _pack_volcanos(m *ice.Message, pack *os.File, dir string) {
m.Option(nfs.DIR_ROOT, dir) m.Option(nfs.DIR_DEEP, ice.TRUE)
m.Option(nfs.DIR_DEEP, "true")
m.Option(nfs.DIR_TYPE, nfs.CAT) 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)))) pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n", k, _pack_file(m, path.Join(dir, k))))
} }
for _, k := range []string{"lib", "page", "panel", "plugin"} { for _, k := range []string{"lib", "page", "panel", "plugin"} {
@ -65,24 +65,20 @@ 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])))) 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) { func _pack_contexts(m *ice.Message, pack *os.File) {
_pack_dir(m, pack, "src") _pack_dir(m, pack, "src")
pack.WriteString("\n") pack.WriteString(ice.MOD_NL)
} }
const BINPACK = "binpack" const BINPACK = "binpack"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
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{ BINPACK: {Name: "binpack path auto create", Help: "打包", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
if pack, p, e := kit.Create("src/binpack.go"); m.Assert(e) { if pack, p, e := kit.Create(ice.SRC_BINPACK); m.Assert(e) {
defer pack.Close() defer pack.Close()
_pack_write(pack, `package main`) _pack_write(pack, `package main`)
@ -95,11 +91,11 @@ func init() {
_pack_write(pack, `func init() {`) _pack_write(pack, `func init() {`)
_pack_write(pack, ` ice.Info.BinPack = map[string][]byte{`) _pack_write(pack, ` ice.Info.BinPack = map[string][]byte{`)
_pack_volcanos(m, pack, "usr/volcanos") _pack_volcanos(m, pack, ice.USR_VOLCANOS)
_pack_dir(m, pack, "usr/learning") _pack_dir(m, pack, ice.USR_LEARNING)
// _pack_dir(m, pack, "usr/icebergs") // _pack_dir(m, pack, ice.USR_ICEBERGS)
// _pack_dir(m, pack, "usr/toolkits") // _pack_dir(m, pack, ice.USR_TOOLKITS)
_pack_dir(m, pack, "usr/intshell") _pack_dir(m, pack, ice.USR_INTSHELL)
// _pack_contexts(m, pack) // _pack_contexts(m, pack)
_pack_write(pack, ` }`) _pack_write(pack, ` }`)
@ -114,6 +110,5 @@ func init() {
} }
m.Sort(kit.MDB_NAME) m.Sort(kit.MDB_NAME)
}}, }},
}, }})
})
} }

View File

@ -37,46 +37,40 @@ func _c_help(m *ice.Message, section, key string) string {
return string(res) return string(res)
} }
const H = "h" const (
const C = "c" H = "h"
const CC = "cc" CC = "cc"
const MAN1 = "man1" MAN1 = "man1"
const MAN2 = "man2" MAN2 = "man2"
const MAN3 = "man3" MAN3 = "man3"
const MAN8 = "man8" MAN8 = "man8"
)
const ( const (
FIND = "find" FIND = "find"
GREP = "grep" GREP = "grep"
MAN = "man" MAN = "man"
) )
const C = "c"
func init() { func init() {
Index.Register(&ice.Context{Name: C, Help: "系统", Index.Register(&ice.Context{Name: C, Help: "系统",
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { 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)) for _, k := range []string{H, C, CC} {
m.Cmd(mdb.RENDER, mdb.CREATE, CC, m.Prefix(C)) for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} {
m.Cmd(mdb.SEARCH, mdb.CREATE, CC, m.Prefix(C)) m.Cmd(cmd, mdb.CREATE, k, 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{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{ C: {Name: C, Help: "系统", Action: map[string]*ice.Action{
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { 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) { mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) 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) { mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) {
m.Option(cli.CMD_DIR, arg[2]) m.Option(cli.CMD_DIR, arg[2])
name := strings.TrimSuffix(arg[1], path.Ext(arg[1])) + ".bin" 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) m.Cmdy(cli.SYSTEM, "./"+name)
}}, }},
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
@ -92,16 +89,17 @@ func init() {
return return
} }
m.Option(cli.CMD_DIR, kit.Select("src", arg, 2)) 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, MAN2, arg[1:])
m.Cmdy(mdb.SEARCH, MAN3, arg[1:]) m.Cmdy(mdb.SEARCH, MAN3, arg[1:])
_c_tags(m, kit.Select("main", arg, 1)) _c_tags(m, kit.Select(kit.MDB_MAIN, arg, 1))
_go_grep(m, kit.Select("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{ MAN: {Name: MAN, Help: "手册", Action: map[string]*ice.Action{
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { 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) { 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]))) m.Echo(_c_help(m, strings.TrimPrefix(arg[0], MAN), strings.TrimSuffix(arg[1], "."+arg[0])))
@ -111,11 +109,11 @@ func init() {
return return
} }
for _, i := range []string{"1", "2", "3", "8"} { 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)) { for _, k := range kit.Split(m.Option(mdb.FIELDS)) {
switch k { switch k {
case kit.MDB_FILE: case kit.MDB_FILE:
m.Push(k, arg[1]+".man"+i) m.Push(k, kit.Keys(arg[1], MAN+i))
case kit.MDB_LINE: case kit.MDB_LINE:
m.Push(k, 1) m.Push(k, 1)
case kit.MDB_TEXT: case kit.MDB_TEXT:
@ -130,8 +128,67 @@ func init() {
}}, }},
}, },
Configs: map[string]*ice.Config{ 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( MAN: {Name: MAN, Help: "手册", Value: kit.Data(
"plug", kit.Dict( PLUG, kit.Dict(
PREFIX, kit.Dict( PREFIX, kit.Dict(
"NAME", COMMENT, "NAME", COMMENT,
"LIBRARY", 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) }, nil)
} }

View File

@ -2,9 +2,7 @@ package code
import ( import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits"
) )
const CODE = "code" const CODE = "code"
@ -12,8 +10,6 @@ const CODE = "code"
var Index = &ice.Context{Name: CODE, Help: "编程中心", Commands: map[string]*ice.Command{ 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) { ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load() 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) { ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Save() m.Save()
@ -22,9 +18,8 @@ var Index = &ice.Context{Name: CODE, Help: "编程中心", Commands: map[string]
func init() { func init() {
web.Index.Register(Index, &web.Frame{}, web.Index.Register(Index, &web.Frame{},
INSTALL, COMPILE, BINPACK, WEBPACK, WEBPACK, BINPACK, AUTOGEN, COMPILE, UPGRADE, PUBLISH, INSTALL,
VIMER, INNER, FAVOR, BENCH, PPROF, VIMER, INNER, FAVOR, BENCH, PPROF,
AUTOGEN, PUBLISH, UPGRADE,
C, SH, SHY, GO, JS, C, SH, SHY, GO, JS,
) )
} }

View File

@ -1,13 +1,12 @@
chapter "源码" chapter "源码"
field "后端" web.code.binpack
field "前端" web.code.webpack field "前端" web.code.webpack
field "后端" web.code.binpack
field "安装" web.code.install
field "生成" web.code.autogen field "生成" web.code.autogen
field "编译" web.code.compile field "编译" web.code.compile
field "发布" web.code.publish
field "升级" web.code.upgrade field "升级" web.code.upgrade
field "发布" web.code.publish
field "安装" web.code.install
field "编辑" web.code.vimer field "编辑" web.code.vimer
field "查看" web.code.inner field "查看" web.code.inner
@ -21,37 +20,3 @@ field "脚本" web.code.shy
field "后端" web.code.go field "后端" web.code.go
field "前端" web.code.js 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
`

View File

@ -1,15 +1,15 @@
package code package code
import ( import (
"os"
"path"
"strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"os"
"path"
"strings"
) )
const COMPILE = "compile" const COMPILE = "compile"
@ -18,18 +18,17 @@ func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
COMPILE: {Name: COMPILE, Help: "编译", Value: kit.Data( 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"), "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", "GOPROXY", "https://goproxy.cn,direct", "GOPRIVATE", "github.com",
), "go", []interface{}{"go", "build"}, ), GO, []interface{}{GO, cli.BUILD},
)}, )},
}, },
Commands: map[string]*ice.Command{ 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{ 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) { 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", ice.Option{nfs.DIR_REG, `.*\.go$`})
m.Cmdy(nfs.DIR, "src", "path,size,time")
m.Sort(kit.MDB_PATH) m.Sort(kit.MDB_PATH)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
@ -38,12 +37,12 @@ func init() {
return return
} }
main := "src/main.go" main := ice.SRC_MAIN_GO
goos := m.Conf(cli.RUNTIME, "host.GOOS") goos := m.Conf(cli.RUNTIME, "host.GOOS")
arch := m.Conf(cli.RUNTIME, "host.GOARCH") arch := m.Conf(cli.RUNTIME, "host.GOARCH")
for _, k := range arg { for _, k := range arg {
switch k { switch k {
case "linux", "darwin", "windows": case cli.LINUX, cli.DARWIN, cli.WINDOWS:
goos = k goos = k
case "amd64", "386", "arm": case "amd64", "386", "arm":
arch = k arch = k
@ -51,22 +50,24 @@ func init() {
main = k 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)) 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, "meta.go"), "-o", file, main, "src/version.go", "src/binpack.go"); msg.Append(cli.CMD_CODE) != "0" { 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) m.Copy(msg)
return return
} }
m.Log_EXPORT("source", main, "target", file) m.Log_EXPORT(cli.SOURCE, main, cli.TARGET, file)
m.Push(kit.MDB_TIME, m.Time()) m.Cmdy(nfs.DIR, file)
m.PushDownload(kit.MDB_LINK, file) m.EchoDownload(file)
m.Echo(file) m.StatusTimeCount()
}}, }},
}, },
}) })

View File

@ -6,61 +6,52 @@ import (
kit "github.com/shylinux/toolkits" 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" const FAVOR = "favor"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ 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{ Commands: map[string]*ice.Command{
FAVOR: {Name: "favor topic id auto insert export import", Help: "收藏夹", Action: map[string]*ice.Action{ FAVOR: {Name: "favor zone id auto insert export import", Help: "收藏夹", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, FAVOR, "", mdb.HASH, arg) 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) { 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, FAVOR, "", mdb.HASH, kit.MDB_TOPIC, arg[1]) m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_ZONE, arg[1])
m.Cmdy(mdb.INSERT, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:]) 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) { 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) { 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) { 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.OptionFields(kit.MDB_ZONE, m.Conf(FAVOR, kit.META_FIELD))
m.Cmdy(mdb.EXPORT, FAVOR, "", mdb.ZONE) m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.ZONE)
}}, }},
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) { mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.Option(mdb.FIELDS, kit.MDB_TOPIC) m.OptionFields(kit.MDB_ZONE)
m.Cmdy(mdb.IMPORT, FAVOR, "", mdb.ZONE) m.Cmdy(mdb.IMPORT, m.Prefix(FAVOR), "", mdb.ZONE)
}}, }},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] { switch arg[0] {
case kit.MDB_TOPIC: case kit.MDB_ZONE:
m.Cmdy(mdb.INPUTS, FAVOR, "", mdb.HASH, arg) m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg)
default: 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) {
INNER: {Name: "inner", Help: "源代码", Hand: func(m *ice.Message, arg ...string) { m.ProcessCommand(INNER, m.OptionSplit("path,file,line"), arg...)
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)}))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD))
m.Cmdy(mdb.SELECT, FAVOR, "", mdb.ZONE, arg) m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg)
m.PushAction(kit.Select(mdb.REMOVE, INNER, len(arg) > 0)) m.PushAction(kit.Select(mdb.REMOVE, INNER, len(arg) > 0))
}}, }},
}, },

View File

@ -73,8 +73,6 @@ const MOD = "mod"
const SUM = "sum" const SUM = "sum"
const PROTO = "proto" const PROTO = "proto"
const PLUG = "plug"
func init() { func init() {
Index.Register(&ice.Context{Name: GO, Help: "后端", Index.Register(&ice.Context{Name: GO, Help: "后端",
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
@ -142,10 +140,10 @@ func init() {
if arg[0] == kit.MDB_FOREACH { if arg[0] == kit.MDB_FOREACH {
return return
} }
_go_find(m, kit.Select("main", arg, 1)) _go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
_go_help(m, kit.Select("main", arg, 1)) _go_help(m, kit.Select(kit.MDB_MAIN, arg, 1))
_go_tags(m, kit.Select("main", arg, 1)) _go_tags(m, kit.Select(kit.MDB_MAIN, arg, 1))
_go_grep(m, kit.Select("main", arg, 1)) _go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
}}, }},
}}, }},
}, },
@ -155,7 +153,7 @@ func init() {
PREFIX, kit.Dict( PREFIX, kit.Dict(
"//", COMMENT, "//", COMMENT,
), ),
"_keyword", kit.Dict( PREPARE, kit.Dict(
KEYWORD, kit.Simple( KEYWORD, kit.Simple(
"syntax", "option", "package", "import", "service", "message", "syntax", "option", "package", "import", "service", "message",
), ),
@ -171,7 +169,7 @@ func init() {
PREFIX, kit.Dict( PREFIX, kit.Dict(
"//", COMMENT, "//", COMMENT,
), ),
"_keyword", kit.Dict( PREPARE, kit.Dict(
KEYWORD, kit.Simple( KEYWORD, kit.Simple(
"module", "require", "replace", "=>", "module", "require", "replace", "=>",
), ),
@ -190,7 +188,7 @@ func init() {
"/*", COMMENT, "/*", COMMENT,
"* ", COMMENT, "* ", COMMENT,
), ),
"_keyword", kit.Dict( PREPARE, kit.Dict(
KEYWORD, kit.Simple( KEYWORD, kit.Simple(
"package", "import", "type", "struct", "interface", "const", "var", "func", "package", "import", "type", "struct", "interface", "const", "var", "func",
"if", "else", "for", "range", "break", "continue", "if", "else", "for", "range", "break", "continue",
@ -204,7 +202,7 @@ func init() {
FUNCTION, kit.Simple( FUNCTION, kit.Simple(
"len", "cap", "copy", "append", "msg", "m", "len", "cap", "copy", "append", "msg", "m",
), ),
STRING, kit.Simple( CONSTANT, kit.Simple(
"false", "true", "nil", "-1", "0", "1", "2", "false", "true", "nil", "-1", "0", "1", "2",
), ),
), ),

View File

@ -1,20 +1,17 @@
package code package code
import ( import (
"path"
"strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/ctx" "github.com/shylinux/icebergs/base/ctx"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits" 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) { 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)) { if m.Warn(!m.Right(dir, file), ice.ErrNotRight, path.Join(dir, file)) {
return // 没有权限 return // 没有权限
@ -23,7 +20,7 @@ func _inner_list(m *ice.Message, ext, file, dir string, arg ...string) {
return // 解析成功 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)) 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 // 执行成功 return // 执行成功
} }
if ls := kit.Simple(m.Confv(INNER, kit.Keym("show", ext))); len(ls) > 0 { 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, ice.Option{cli.CMD_DIR, dir})
m.Cmdy(cli.SYSTEM, ls, file)
m.Set(ice.MSG_APPEND) m.Set(ice.MSG_APPEND)
} }
} }
func LoadPlug(m *ice.Message, language string) { 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) { for _, v := range kit.Simple(value) {
m.Conf(language, kit.Keym(PLUG, KEYWORD, v), key) m.Conf(language, kit.Keym(PLUG, KEYWORD, v), key)
} }
@ -52,27 +49,30 @@ func LoadPlug(m *ice.Message, language string) {
const ( const (
COMMENT = "comment" COMMENT = "comment"
KEYWORD = "keyword" KEYWORD = "keyword"
FUNCTION = "function"
DATATYPE = "datatype" DATATYPE = "datatype"
STRING = "string" FUNCTION = "function"
CONSTANT = "constant"
) )
const ( const (
SPLIT = "split" SPLIT = "split"
PREFIX = "prefix" PREFIX = "prefix"
SUFFIX = "suffix" SUFFIX = "suffix"
) )
const (
PLUG = "plug"
SHOW = "show"
)
const INNER = "inner" const INNER = "inner"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
INNER: {Name: "inner path=src/ file=main.go line=1 auto", Help: "源代码", Meta: kit.Dict( 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{ ), Action: map[string]*ice.Action{
mdb.PLUGIN: {Name: "plugin", Help: "插件", Hand: func(m *ice.Message, arg ...string) { mdb.PLUGIN: {Name: "plugin", Help: "插件", Hand: func(m *ice.Message, arg ...string) {
if m.Cmdy(mdb.PLUGIN, arg); m.Result() == "" { 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) { mdb.ENGINE: {Name: "engine", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
@ -89,33 +89,30 @@ func init() {
m.Cmdy(mdb.SEARCH, arg[:2], "cmd,file,line,text") m.Cmdy(mdb.SEARCH, arg[:2], "cmd,file,line,text")
}}, }},
mdb.INPUTS: {Name: "favor inputs", Help: "补全"}, mdb.INPUTS: {Name: "favor inputs", Help: "补全"},
FAVOR: {Name: "favor", Help: "收藏"},
ctx.COMMAND: {Name: "command", Help: "命令"}, ctx.COMMAND: {Name: "command", Help: "命令"},
FAVOR: {Name: "favor", Help: "收藏"},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) < 2 { if len(arg) < 2 {
nfs.Dir(m, kit.MDB_PATH) nfs.Dir(m, kit.MDB_PATH)
return 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{ Configs: map[string]*ice.Config{
INNER: {Name: "inner", Help: "源代码", Value: kit.Data( INNER: {Name: "inner", Help: "源代码", Value: kit.Data(
"source", kit.Dict( cli.SOURCE, kit.Dict(
"s", "true", "S", "true", "s", ice.TRUE, "S", ice.TRUE,
"shy", "true", "py", "true", "shy", ice.TRUE, "py", ice.TRUE,
"csv", "true", "json", "true", "csv", ice.TRUE, "json", ice.TRUE,
"css", "true", "html", "true", "css", ice.TRUE, "html", ice.TRUE,
"txt", "true", "url", "true", "txt", ice.TRUE, "url", ice.TRUE,
"log", "true", "err", "true", "log", ice.TRUE, "err", ice.TRUE,
"yml", "true",
"md", "true", "license", "true", "makefile", "true", "md", ice.TRUE, "license", ice.TRUE, "makefile", ice.TRUE, "sql", ice.TRUE,
"ini", "true", "conf", "true", "toml", "true", "yaml", "true", "ini", ice.TRUE, "conf", ice.TRUE, "toml", ice.TRUE, "yaml", ice.TRUE, "yml", ice.TRUE,
"sql", "true",
), ),
"plug", kit.Dict( PLUG, kit.Dict(
"s", kit.Dict( "s", kit.Dict(
PREFIX, kit.Dict("//", COMMENT), PREFIX, kit.Dict("//", COMMENT),
KEYWORD, kit.Dict( KEYWORD, kit.Dict(
@ -163,7 +160,7 @@ func init() {
), ),
), ),
), ),
"show", kit.Dict( SHOW, kit.Dict(
"py", []string{"python"}, "py", []string{"python"},
"js", []string{"node"}, "js", []string{"node"},
), ),

View File

@ -15,17 +15,7 @@ import (
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
) )
const PREPARE = "prepare" func _install_download(m *ice.Message) {
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)},
},
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) link := m.Option(kit.MDB_LINK)
name := path.Base(link) name := path.Base(link)
file := path.Join(kit.Select(m.Conf(INSTALL, kit.META_PATH), m.Option(kit.MDB_PATH)), name) file := path.Join(kit.Select(m.Conf(INSTALL, kit.META_PATH), m.Option(kit.MDB_PATH)), name)
@ -38,7 +28,7 @@ func init() {
// 创建文件 // 创建文件
m.Cmd(nfs.SAVE, file, "") m.Cmd(nfs.SAVE, file, "")
m.GoToast("download", func(toast func(string, int, int)) { 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.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{}) { m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) {
@ -62,8 +52,8 @@ func init() {
m.Option(cli.CMD_DIR, path.Dir(file)) m.Option(cli.CMD_DIR, path.Dir(file))
m.Cmd(cli.SYSTEM, "tar", "xvf", name) m.Cmd(cli.SYSTEM, "tar", "xvf", name)
}) })
}}, }
cli.BUILD: {Name: "build link", Help: "构建", Hand: func(m *ice.Message, arg ...string) { 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)))) 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")) pp := kit.Path(path.Join(p, "_install"))
@ -95,8 +85,8 @@ func init() {
m.Toast(ice.SUCCESS, cli.BUILD) m.Toast(ice.SUCCESS, cli.BUILD)
m.ProcessHold() m.ProcessHold()
}}, }
cli.SPAWN: {Name: "spawn link", Help: "新建", Hand: func(m *ice.Message, arg ...string) { func _install_spawn(m *ice.Message, arg ...string) {
port := m.Cmdx(tcp.PORT, aaa.RIGHT) port := m.Cmdx(tcp.PORT, aaa.RIGHT)
target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), port) 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))) source := path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK)))
@ -105,8 +95,8 @@ func init() {
m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[kit.MDB_PATH], "/"), target) m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[kit.MDB_PATH], "/"), target)
}) })
m.Echo(target) m.Echo(target)
}}, }
cli.START: {Name: "start link cmd", Help: "启动", Hand: func(m *ice.Message, arg ...string) { func _install_start(m *ice.Message, arg ...string) {
p := m.Option(cli.CMD_DIR, m.Cmdx(INSTALL, cli.SPAWN)) p := m.Option(cli.CMD_DIR, m.Cmdx(INSTALL, cli.SPAWN))
args := []string{} args := []string{}
@ -116,18 +106,15 @@ func init() {
} }
m.Cmdy(cli.DAEMON, arg[1:], args) m.Cmdy(cli.DAEMON, arg[1:], args)
}},
}, 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
} }
func _install_package(m *ice.Message, arg ...string) {
if len(arg) == 1 { // 服务列表 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] arg = kit.Split(path.Base(arg[0]), "-.")[:1]
m.Fields(len(arg) == 1, "time,port,status,pid,cmd,dir") 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) { 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]) { if strings.Contains(value[cli.CMD], "bin/"+arg[0]) {
m.Push("", value, kit.Split(m.Option(mdb.FIELDS))) m.Push("", value, kit.Split(m.Option(mdb.FIELDS)))
@ -138,12 +125,46 @@ func init() {
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.Push(tcp.PORT, path.Base(value[nfs.DIR])) m.Push(tcp.PORT, path.Base(value[nfs.DIR]))
}) })
return
} }
// 目录列表 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,
)},
},
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) {
_install_download(m)
}},
cli.BUILD: {Name: "build link", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
_install_build(m, arg...)
}},
cli.SPAWN: {Name: "spawn link", Help: "新建", Hand: func(m *ice.Message, arg ...string) {
_install_spawn(m, arg...)
}},
cli.START: {Name: "start link cmd", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
_install_start(m, arg...)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
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.Option(nfs.DIR_ROOT, path.Join(m.Conf(cli.DAEMON, kit.META_PATH), arg[1]))
m.Cmdy(nfs.CAT, kit.Select("./", arg, 2)) m.Cmdy(nfs.CAT, kit.Select("./", arg, 2))
}
}}, }},
}, },
}) })

View File

@ -21,19 +21,15 @@ func init() {
Index.Register(&ice.Context{Name: JS, Help: "前端", Index.Register(&ice.Context{Name: JS, Help: "前端",
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { 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)) for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} {
m.Cmd(mdb.RENDER, mdb.CREATE, JS, m.Prefix(JS)) m.Cmd(cmd, mdb.CREATE, VUE, m.Prefix(VUE))
m.Cmd(mdb.ENGINE, mdb.CREATE, JS, m.Prefix(JS)) m.Cmd(cmd, mdb.CREATE, JS, m.Prefix(JS))
m.Cmd(mdb.SEARCH, mdb.CREATE, JS, m.Prefix(JS)) }
LoadPlug(m, 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))
}}, }},
JS: {Name: JS, Help: "前端", Action: map[string]*ice.Action{ JS: {Name: JS, Help: "前端", Action: map[string]*ice.Action{
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { 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) { mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
@ -47,8 +43,8 @@ func init() {
if arg[0] == kit.MDB_FOREACH { if arg[0] == kit.MDB_FOREACH {
return return
} }
_go_find(m, kit.Select("main", arg, 1)) _go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
_go_grep(m, kit.Select("main", arg, 1)) _go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
}}, }},
}}, }},
NODE: {Name: "node", Help: "前端", Action: map[string]*ice.Action{ NODE: {Name: "node", Help: "前端", Action: map[string]*ice.Action{
@ -58,7 +54,7 @@ func init() {
}}, }},
VUE: {Name: "vue", Help: "前端", Action: map[string]*ice.Action{ VUE: {Name: "vue", Help: "前端", Action: map[string]*ice.Action{
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { 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) { mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
@ -72,30 +68,30 @@ func init() {
if arg[0] == kit.MDB_FOREACH { if arg[0] == kit.MDB_FOREACH {
return return
} }
_go_find(m, kit.Select("main", arg, 1)) _go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
_go_grep(m, kit.Select("main", arg, 1)) _go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
}}, }},
}}, }},
}, },
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
VUE: {Name: VUE, Help: "vue", Value: kit.Data( VUE: {Name: VUE, Help: "vue", Value: kit.Data(
"plug", kit.Dict( PLUG, kit.Dict(
SPLIT, kit.Dict(
"space", " \t",
"operator", "{[(&.,;!|<>)]}",
),
PREFIX, kit.Dict( PREFIX, kit.Dict(
"//", COMMENT, "//", COMMENT,
"/*", COMMENT, "/*", COMMENT,
"*", COMMENT, "*", COMMENT,
), ),
SPLIT, kit.Dict(
"space", " \t",
"operator", "{[(&.,;!|<>)]}",
),
), ),
)}, )},
NODE: {Name: NODE, Help: "前端", Value: kit.Data( 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", 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( JS: {Name: JS, Help: "js", Value: kit.Data(
"plug", kit.Dict( PLUG, kit.Dict(
SPLIT, kit.Dict( SPLIT, kit.Dict(
"space", " \t", "space", " \t",
"operator", "{[(&.,;!|<>)]}", "operator", "{[(&.,;!|<>)]}",
@ -105,77 +101,72 @@ func init() {
"/*", COMMENT, "/*", COMMENT,
"*", COMMENT, "*", COMMENT,
), ),
KEYWORD, kit.Dict( PREPARE, kit.Dict(
"import", KEYWORD, KEYWORD, kit.Simple(
"from", KEYWORD, "import",
"export", KEYWORD, "from",
"export",
"var", KEYWORD, "var",
"new", KEYWORD, "new",
"delete", KEYWORD, "delete",
"typeof", KEYWORD, "typeof",
"const", KEYWORD, "const",
"function", KEYWORD, "function",
"if", KEYWORD, "if",
"else", KEYWORD, "else",
"for", KEYWORD, "for",
"while", KEYWORD, "while",
"break", KEYWORD, "break",
"continue", KEYWORD, "continue",
"switch", KEYWORD, "switch",
"case", KEYWORD, "case",
"default", KEYWORD, "default",
"return", KEYWORD, "return",
"try", KEYWORD, "try",
"throw", KEYWORD, "throw",
"catch", KEYWORD, "catch",
"finally", KEYWORD, "finally",
"window", FUNCTION,
"console", FUNCTION,
"document", FUNCTION,
"arguments", FUNCTION,
"event", FUNCTION,
"Date", FUNCTION,
"JSON", FUNCTION,
"0", STRING,
"1", STRING,
"10", STRING,
"-1", STRING,
"true", STRING,
"false", STRING,
"undefined", STRING,
"null", STRING,
"__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,
), ),
FUNCTION, kit.Simple(
"window",
"console",
"document",
"arguments",
"event",
"Date",
"JSON",
"__proto__",
"setTimeout",
"createElement",
"appendChild",
"removeChild",
"parentNode",
"childNodes",
"Volcanos",
"request",
"require",
"cb",
"cbs",
"shy",
"can",
"sub",
"msg",
"res",
"pane",
"plugin",
),
CONSTANT, kit.Simple(
"true", "false",
"undefined", "null",
"-1", "0", "1", "2", "10",
),
),
KEYWORD, kit.Dict(),
), ),
)}, )},
}, },

View File

@ -1,6 +1,10 @@
package code package code
import ( import (
"net/http"
_ "net/http/pprof"
"strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa" "github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
@ -9,10 +13,6 @@ import (
"github.com/shylinux/icebergs/base/tcp" "github.com/shylinux/icebergs/base/tcp"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"net/http"
_ "net/http/pprof"
"strings"
) )
const ( const (
@ -27,80 +27,76 @@ func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
PPROF: {Name: PPROF, Help: "性能分析", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE, 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{ 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{ 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) m.Cmdy(mdb.INSERT, PPROF, "", mdb.HASH, arg)
}}, }},
mdb.INSERT: {Name: "insert zone type name text", Help: "插入", Hand: func(m *ice.Message, arg ...string) { 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) { mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
if m.Option(kit.MDB_ID) != "" { m.Cmdy(mdb.MODIFY, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg)
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)
}
}}, }},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) { 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) { mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] { 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.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"}) 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.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)) 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)) 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), "\n") res := strings.Split(m.Cmdx(cli.SYSTEM, cmd), ice.MOD_NL)
if len(res) > 20 { if len(res) > 20 {
res = 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.Cmd(mdb.INSERT, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE),
m.Echo(strings.Join(res, "\n")) 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() m.ProcessInner()
}}, }},
web.SERVE: {Name: "serve", Help: "展示", Hand: func(m *ice.Message, arg ...string) { web.SERVE: {Name: "serve", Help: "展示", Hand: func(m *ice.Message, arg ...string) {
u := kit.ParseURL(m.Option(ice.MSG_USERWEB)) u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
p := u.Hostname() + ":" + m.Cmdx(tcp.PORT, aaa.RIGHT) 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.Echo("http://%s/ui/top", p)
m.ProcessInner() m.ProcessInner()
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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.Fields(len(arg), "time,zone,count,binnary,service,seconds", "time,id,text,file")
m.Cmdy(mdb.SELECT, PPROF, "", mdb.ZONE, arg) if m.Cmdy(mdb.SELECT, PPROF, "", mdb.ZONE, arg); len(arg) == 0 {
if len(arg) == 0 {
m.PushAction(cli.RUN, mdb.REMOVE) m.PushAction(cli.RUN, mdb.REMOVE)
return
}
} else {
m.Table(func(index int, value map[string]string, head []string) { m.Table(func(index int, value map[string]string, head []string) {
m.PushDownload(kit.MDB_LINK, "pprof.pd.gz", value[kit.MDB_FILE]) m.PushDownload(kit.MDB_LINK, "pprof.pd.gz", value[kit.MDB_FILE])
m.PushButton(web.SERVE) m.PushButton(web.SERVE)
}) })
}
}},
"/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)
}}, }},
}, },
}) })

View File

@ -8,6 +8,7 @@ import (
"strings" "strings"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/nfs"
@ -43,22 +44,12 @@ const PUBLISH = "publish"
func init() { func init() {
Index.Merge(&ice.Context{ 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{ 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) { mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_publish_file(m, m.Option(kit.MDB_FILE)) _publish_file(m, m.Option(kit.MDB_FILE))
}}, }},
@ -67,22 +58,23 @@ echo "hello world"
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "miss") }() 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.ETC_MISS)
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.GO_MOD) 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_REG, `.*\.(html|css|js)$`)
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
m.Cmdy(nfs.DIR, "./", "time,size,line,path,link") m.Cmdy(nfs.DIR, "./", "time,size,line,path,link")
}}, }},
ice.ICEBERGS: {Name: "icebergs", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) { ice.ICEBERGS: {Name: "icebergs", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) {
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "base") }() 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_BIN)
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE)
p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH)) 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 { for _, ls := range ls {
if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" { if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" {
if s, e := os.Stat(path.Join(p, file)); e == nil { 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") }() 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.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_REG, ".*\\.(sh|vim|conf)$")
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH)) m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
m.Cmdy(nfs.DIR, "./", "time,size,line,path,link") m.Cmdy(nfs.DIR, "./", "time,size,line,path,link")
}}, }},
ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) { ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) {
u := kit.ParseURL(m.Option(ice.MSG_USERWEB)) u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
host := u.Host host := m.ReplaceLocalhost(u.Host)
if strings.Contains(host, "localhost") {
host = strings.Replace(host, "localhost", m.Cmd(tcp.HOST).Append(tcp.IP), 1)
}
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("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))) 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) { web.DREAM: {Name: "dream name=hi repos", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(web.DREAM, tcp.START, arg) m.Cmdy(web.DREAM, tcp.START, arg)
m.Process(ice.PROCESS_OPEN, kit.MergeURL(m.Option(ice.MSG_USERWEB), 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)))) 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) { }, 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_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: {
}})
`,
)},
},
}) })
} }

View File

@ -5,6 +5,7 @@ import (
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
) )
@ -13,30 +14,30 @@ const PYTHON = "python"
func init() { func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
PYTHON: {Name: "python", Help: "脚本命令", Value: kit.Data( 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", cli.SOURCE, "http://mirrors.sohu.com/python/3.5.2/Python-3.5.2.tar.xz",
PYTHON, "python",
)}, )},
}, },
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
PYTHON: {Name: "python port path auto start build download", Help: "脚本命令", Action: map[string]*ice.Action{ 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) { web.DOWNLOAD: {Name: "download", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy("web.code.install", "download", m.Conf(PYTHON, "meta.source")) m.Cmdy(INSTALL, web.DOWNLOAD, m.Conf(PYTHON, kit.Keym(cli.SOURCE)))
}}, }},
"build": {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) { cli.BUILD: {Name: "build", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy("web.code.install", "build", m.Conf(PYTHON, "meta.source")) m.Cmdy(INSTALL, cli.BUILD, m.Conf(PYTHON, kit.Keym(cli.SOURCE)))
}}, }},
"start": {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) { cli.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy("web.code.install", "start", m.Conf(PYTHON, "meta.source"), "bin/python3") 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) { "pip": {Name: "pip", Help: "安装", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(cli.SYSTEM, m.Conf(PYTHON, "meta.pip"), "install", arg) m.Cmdy(cli.SYSTEM, m.Conf(PYTHON, kit.Keym("pip")), "install", arg)
}},
"run": {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(cli.SYSTEM, m.Conf(PYTHON, "meta.python"), arg)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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
View 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
`

View File

@ -1,13 +1,13 @@
package code package code
import ( import (
"path"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"path"
) )
const SH = "sh" const SH = "sh"
@ -16,14 +16,14 @@ func init() {
Index.Register(&ice.Context{Name: SH, Help: "命令", Index.Register(&ice.Context{Name: SH, Help: "命令",
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { 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)) for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} {
m.Cmd(mdb.RENDER, mdb.CREATE, SH, SH, c.Cap(ice.CTX_FOLLOW)) m.Cmd(cmd, mdb.CREATE, SH, m.Prefix(SH))
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)) LoadPlug(m, SH)
}}, }},
SH: {Name: SH, Help: "命令", Action: map[string]*ice.Action{ SH: {Name: SH, Help: "命令", Action: map[string]*ice.Action{
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { 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) { mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
@ -38,10 +38,10 @@ func init() {
return return
} }
m.Option(cli.CMD_DIR, kit.Select("src", arg, 2)) 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, MAN1, arg[1:])
m.Cmdy(mdb.SEARCH, MAN8, 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) { MAN: {Hand: func(m *ice.Message, arg ...string) {
@ -51,7 +51,7 @@ func init() {
}, },
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
SH: {Name: SH, Help: "命令", Value: kit.Data( SH: {Name: SH, Help: "命令", Value: kit.Data(
"plug", kit.Dict( PLUG, kit.Dict(
SPLIT, kit.Dict( SPLIT, kit.Dict(
"space", " ", "space", " ",
"operator", "{[(.,;!|<>)]}", "operator", "{[(.,;!|<>)]}",
@ -62,44 +62,48 @@ func init() {
SUFFIX, kit.Dict( SUFFIX, kit.Dict(
"{", COMMENT, "{", COMMENT,
), ),
KEYWORD, kit.Dict( PREPARE, kit.Dict(
"export", KEYWORD, KEYWORD, kit.Simple(
"source", KEYWORD, "export",
"require", KEYWORD, "source",
"require",
"if", KEYWORD, "if",
"then", KEYWORD, "then",
"else", KEYWORD, "else",
"fi", KEYWORD, "fi",
"for", KEYWORD, "for",
"while", KEYWORD, "while",
"do", KEYWORD, "do",
"done", KEYWORD, "done",
"esac", KEYWORD, "esac",
"case", KEYWORD, "case",
"in", KEYWORD, "in",
"return", KEYWORD, "return",
"shift", KEYWORD, "shift",
"local", KEYWORD, "local",
"echo", KEYWORD, "echo",
"eval", KEYWORD, "eval",
"kill", KEYWORD, "kill",
"let", KEYWORD, "let",
"cd", KEYWORD, "cd",
"xargs", FUNCTION,
"date", FUNCTION,
"find", FUNCTION,
"grep", FUNCTION,
"sed", FUNCTION,
"awk", FUNCTION,
"pwd", FUNCTION,
"ps", FUNCTION,
"ls", FUNCTION,
"rm", FUNCTION,
"go", FUNCTION,
), ),
FUNCTION, kit.Simple(
"xargs",
"date",
"find",
"grep",
"sed",
"awk",
"pwd",
"ps",
"ls",
"rm",
"go",
),
),
KEYWORD, kit.Dict(),
), ),
)}, )},
}, },

View File

@ -1,12 +1,12 @@
package code package code
import ( import (
"path"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb" "github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs" "github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"path"
) )
const SHY = "shy" const SHY = "shy"
@ -15,14 +15,14 @@ func init() {
Index.Register(&ice.Context{Name: SHY, Help: "脚本", Index.Register(&ice.Context{Name: SHY, Help: "脚本",
Commands: map[string]*ice.Command{ Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { 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)) for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} {
m.Cmd(mdb.RENDER, mdb.CREATE, SHY, m.Prefix(SHY)) m.Cmd(cmd, 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)) LoadPlug(m, SHY)
}}, }},
SHY: {Name: SHY, Help: "脚本", Action: map[string]*ice.Action{ SHY: {Name: SHY, Help: "脚本", Action: map[string]*ice.Action{
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) { 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) { mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1])) m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
@ -34,29 +34,32 @@ func init() {
if arg[0] == kit.MDB_FOREACH { if arg[0] == kit.MDB_FOREACH {
return return
} }
_go_find(m, kit.Select("main", arg, 1)) _go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
_go_grep(m, kit.Select("main", arg, 1)) _go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
}}, }},
}}, }},
}, },
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
SHY: {Name: SHY, Help: "脚本", Value: kit.Data( SHY: {Name: SHY, Help: "脚本", Value: kit.Data(
"plug", kit.Dict( PLUG, kit.Dict(
PREFIX, kit.Dict("#", COMMENT), PREFIX, kit.Dict("#", COMMENT),
KEYWORD, kit.Dict( PREPARE, kit.Dict(
"title", KEYWORD, KEYWORD, kit.Simple(
"premenu", KEYWORD, "title",
"chapter", KEYWORD, "premenu",
"section", KEYWORD, "chapter",
"source", KEYWORD, "section",
"refer", KEYWORD, "source",
"field", KEYWORD, "refer",
"spark", KEYWORD, "field",
"image", KEYWORD, "spark",
"label", KEYWORD, "image",
"chain", KEYWORD, "label",
"chain",
), ),
), ),
KEYWORD, kit.Dict(),
),
)}, )},
}, },
}, nil) }, nil)

View File

@ -1,12 +1,12 @@
package code package code
import ( import (
"os"
ice "github.com/shylinux/icebergs" ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/web" "github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits" kit "github.com/shylinux/toolkits"
"os"
) )
const UPGRADE = "upgrade" const UPGRADE = "upgrade"
@ -15,19 +15,23 @@ func init() {
Index.Merge(&ice.Context{ Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{ Configs: map[string]*ice.Config{
UPGRADE: {Name: UPGRADE, Help: "升级", Value: kit.Dict(kit.MDB_HASH, kit.Dict( 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( cli.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.sh", kit.MDB_PATH, ice.BIN_ICE,
kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.bin", kit.MDB_PATH, "bin/ice.bin", 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{ 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) { 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("system", arg, 0)), "", "", func(index int, value map[string]interface{}) { m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select(cli.SYSTEM, arg, 0)), "", "", func(index int, value map[string]interface{}) {
m.Option("exit", "true") if value[kit.MDB_PATH] == ice.BIN_ICE_BIN { // 程序文件
if value[kit.MDB_FILE] == "ice.bin" {
// 程序文件
value[kit.MDB_FILE] = kit.Keys("ice", m.Conf(cli.RUNTIME, "host.GOOS"), m.Conf(cli.RUNTIME, "host.GOARCH")) 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]) m.Cmd(web.STORY, web.WATCH, msg.Append(kit.MDB_FILE), value[kit.MDB_PATH])
os.Chmod(kit.Format(value[kit.MDB_PATH]), 0770) 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) }) m.Sleep("1s").Go(func() { m.Cmd("exit", 1) })
} }
}}, }},

View File

@ -16,7 +16,7 @@ const VIMER = "vimer"
func init() { func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ 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( 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{ ), Action: map[string]*ice.Action{
mdb.ENGINE: {Name: "engine", Help: "运行", Hand: func(m *ice.Message, arg ...string) { 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 { 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) { 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))) 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)
}},
}}) }})
} }

View File

@ -15,7 +15,7 @@ const WEBPACK = "webpack"
func init() { func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{ 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) { 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)) dir := m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.SSH_PATH))
css, _, e := kit.Create(path.Join(dir, "page/cache.css")) css, _, e := kit.Create(path.Join(dir, "page/cache.css"))
@ -32,8 +32,7 @@ func init() {
for _, k := range []string{"lib", "panel", "plugin"} { for _, k := range []string{"lib", "panel", "plugin"} {
m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) {
switch kit.Ext(value[kit.MDB_PATH]) { if kit.Ext(value[kit.MDB_PATH]) == CSS {
case CSS:
js.WriteString(`Volcanos.meta.cache["` + path.Join("/", value[kit.MDB_PATH]) + "\"] = []\n") js.WriteString(`Volcanos.meta.cache["` + path.Join("/", value[kit.MDB_PATH]) + "\"] = []\n")
css.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH])) css.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH]))
} }
@ -41,8 +40,7 @@ func init() {
} }
for _, k := range []string{"lib", "panel", "plugin"} { for _, k := range []string{"lib", "panel", "plugin"} {
m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) { m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) {
switch kit.Ext(value[kit.MDB_PATH]) { if kit.Ext(value[kit.MDB_PATH]) == JS {
case JS:
js.WriteString(`_can_name = "` + path.Join("/", value[kit.MDB_PATH]) + "\";\n") js.WriteString(`_can_name = "` + path.Join("/", value[kit.MDB_PATH]) + "\";\n")
js.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH])) js.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH]))
} }
@ -54,7 +52,7 @@ func init() {
js.WriteString(m.Cmdx(nfs.CAT, k)) 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() defer f.Close()
f.WriteString("\n") f.WriteString("\n")
@ -64,13 +62,13 @@ func init() {
} }
m.Option(nfs.DIR_ROOT, "") 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, 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/cache.css")),
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/index.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_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/cache.js")),
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/index.js")), m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/index.js")),
@ -78,14 +76,16 @@ func init() {
m.Echo(p) 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) { }, 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_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.Cmdy(nfs.DIR, WEBPACK, "time,size,path,action,link")
m.PushDownload(kit.MDB_LINK, path.Join(m.Option(nfs.DIR_ROOT), value[kit.MDB_PATH]))
})
}}, }},
}}) }})
} }
@ -93,8 +93,13 @@ func init() {
const _pack = ` const _pack = `
<!DOCTYPE html> <!DOCTYPE html>
<head> <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 charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=0.7,user-scalable=no">
<title>volcanos</title> <title>volcanos</title>
<style type="text/css">%s</style> <style type="text/css">%s</style>
<style type="text/css">%s</style> <style type="text/css">%s</style>

View File

@ -12,7 +12,7 @@ import (
func _plan_list(m *ice.Message, begin_time, end_time time.Time) *ice.Message { func _plan_list(m *ice.Message, begin_time, end_time time.Time) *ice.Message {
m.Option(mdb.CACHE_LIMIT, "100") 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{}) { 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) begin, _ := time.ParseInLocation(ice.MOD_TIME, kit.Format(value[BEGIN_TIME]), time.Local)
if begin_time.After(begin) || begin.After(end_time) { if begin_time.After(begin) || begin.After(end_time) {

View File

@ -57,18 +57,6 @@ func _task_action(m *ice.Message, status interface{}, action ...string) string {
return strings.Join(action, ",") 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) { func _task_create(m *ice.Message, zone string) {
m.Cmdy(mdb.INSERT, TASK, "", mdb.HASH, kit.MDB_ZONE, zone) 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) _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) { }, 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
View File

@ -131,14 +131,19 @@ func Render(m *Message, cmd string, args ...interface{}) string {
if arg[0] == "" { if arg[0] == "" {
return "" return ""
} }
list := []string{}
if m.Option(MSG_USERPOD) != "" {
list = append(list, kit.SSH_POD, m.Option(MSG_USERPOD))
}
if len(arg) == 1 { if len(arg) == 1 {
arg[0] = kit.MergeURL2(m.Option(MSG_USERWEB), path.Join(kit.Select("", "/share/local", 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 { } else {
arg[1] = kit.MergeURL2(m.Option(MSG_USERWEB), path.Join(kit.Select("", "/share/local", 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 case RENDER_ANCHOR: // [name] link
return fmt.Sprintf(`<a href="%s" target="_blank">%s</a>`, kit.Select(arg[0], arg, 1), arg[0]) 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] func (m *Message) EchoQRCode(text string, arg ...string) *Message { // text [size]
return m.Echo(Render(m, RENDER_QRCODE, text, arg)) 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) SortInt(key string) { m.Sort(key, "int") }
func (m *Message) SortIntR(key string) { m.Sort(key, "int_r") } func (m *Message) SortIntR(key string) { m.Sort(key, "int_r") }
@ -312,8 +320,8 @@ func (m *Message) OptionLoad(file string) *Message {
} }
return m return m
} }
func (m *Message) Fields(condition bool, fields string) string { func (m *Message) Fields(length int, fields ...string) string {
return m.Option(MSG_FIELDS, kit.Select(kit.Select("detail", fields, condition), m.Option(MSG_FIELDS))) return m.Option(MSG_FIELDS, kit.Select(kit.Select("detail", fields, length), m.Option(MSG_FIELDS)))
} }
func (m *Message) Upload(dir string) { func (m *Message) Upload(dir string) {
up := kit.Simple(m.Optionv(MSG_UPLOAD)) 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) ProcessRefresh30ms() { m.ProcessRefresh("30ms") }
func (m *Message) ProcessRefresh300ms() { m.ProcessRefresh("300ms") } func (m *Message) ProcessRefresh300ms() { m.ProcessRefresh("300ms") }
func (m *Message) ProcessRefresh3s() { m.ProcessRefresh("3s") } 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" { if len(arg) > 0 && arg[0] == "run" {
m.Cmdy(cmd, arg[1:]) m.Cmdy(cmd, arg[1:])
return return
@ -399,7 +407,7 @@ func (m *Message) ProcessCommand(cmd, val string, arg ...string) {
m.Cmdy("command", cmd) m.Cmdy("command", cmd)
m.ProcessField(cmd, "run") m.ProcessField(cmd, "run")
m.Push("arg", kit.Format(kit.Split(val))) m.Push("arg", kit.Format(val))
} }
func (m *Message) ProcessCommandOpt(arg ...string) { func (m *Message) ProcessCommandOpt(arg ...string) {
m.Push("opt", kit.Format(m.OptionSimple(arg...))) m.Push("opt", kit.Format(m.OptionSimple(arg...)))
@ -523,3 +531,24 @@ func (m *Message) IsCliUA() bool {
} }
return false 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
}

View File

@ -61,11 +61,11 @@ func init() {
}}, }},
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) { cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
m.Option(cli.CMD_DIR, m.Option(cli.PWD)) 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) m.ProcessCommandOpt(cli.PWD)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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 { if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 {
m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT) m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)

View File

@ -77,7 +77,7 @@ func init() {
m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGOUT) 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) { }, 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.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},

View File

@ -67,7 +67,7 @@ func init() {
}}, }},
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) { cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
m.Option(cli.CMD_DIR, m.Option(cli.PWD)) 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) m.ProcessCommandOpt(cli.PWD)
}}, }},
FAVOR: {Name: "favor zone=some@key type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) { 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) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.OptionPage(kit.Slice(arg, _sync_index)...) 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.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
m.PushAction(cli.SYSTEM, FAVOR) m.PushAction(cli.SYSTEM, FAVOR)
m.StatusTimeCountTotal(_sync_count(m)) m.StatusTimeCountTotal(_sync_count(m))

View File

@ -45,11 +45,11 @@ func init() {
}}, }},
nfs.DIR: {Name: "dir", Help: "目录", Hand: func(m *ice.Message, arg ...string) { nfs.DIR: {Name: "dir", Help: "目录", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_ROOT, m.Option(TO)) m.Option(nfs.DIR_ROOT, m.Option(TO))
m.ProcessCommand(nfs.DIR, "", arg...) m.ProcessCommand(nfs.DIR, []string{}, arg...)
m.ProcessCommandOpt(TO) m.ProcessCommandOpt(TO)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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.Cmdy(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(nfs.DIR, mdb.REVERT, mdb.REMOVE) m.PushAction(nfs.DIR, mdb.REVERT, mdb.REMOVE)
}}, }},

View File

@ -45,7 +45,7 @@ func init() {
m.Cmdy(mdb.PRUNES, m.Prefix(CACHE), "", mdb.HASH, kit.SSH_STEP, "100") 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) { }, 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.Cmdy(mdb.SELECT, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},

View File

@ -48,7 +48,7 @@ func init() {
} }
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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 { if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 {
m.Action(mdb.CREATE) m.Action(mdb.CREATE)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)

View File

@ -53,7 +53,7 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.OptionPage(kit.Slice(arg, _sync_index)...) 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.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
m.StatusTimeCountTotal(_sync_count(m)) m.StatusTimeCountTotal(_sync_count(m))
m.PushAction(FAVOR) m.PushAction(FAVOR)

View File

@ -80,7 +80,7 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { // 仓库列表 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.Cmdy(mdb.SELECT, m.Prefix(REPOS), "", mdb.HASH)
m.Sort(kit.MDB_NAME) m.Sort(kit.MDB_NAME)
return return

View File

@ -49,7 +49,7 @@ func init() {
m.Echo(msg.Append(TOKEN)) m.Echo(msg.Append(TOKEN))
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) { }, 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) m.Cmdy(mdb.SELECT, m.Prefix(APP), "", mdb.HASH, APPID, arg)
}}, }},
}, },

View File

@ -31,7 +31,7 @@ func init() {
m.Cmdy(mdb.IMPORT, m.Prefix(SCRIPT), "", mdb.HASH) m.Cmdy(mdb.IMPORT, m.Prefix(SCRIPT), "", mdb.HASH)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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.Cmdy(mdb.SELECT, m.Prefix(SCRIPT), "", mdb.HASH, kit.MDB_NAME, arg)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},

View File

@ -65,14 +65,14 @@ func init() {
} }
}}, }},
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) { 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))), kit.Select("./", path.Dir(m.Option(kit.MDB_FILE))),
path.Base(m.Option(kit.MDB_FILE)), path.Base(m.Option(kit.MDB_FILE)),
m.Option(kit.MDB_LINE), m.Option(kit.MDB_LINE),
}), arg...) }, arg...)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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 { if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 {
m.Action(mdb.CREATE) m.Action(mdb.CREATE)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)

View File

@ -58,7 +58,7 @@ func init() {
m.Cmdy(mdb.IMPORT, m.Prefix(INPUT), "", mdb.LIST) m.Cmdy(mdb.IMPORT, m.Prefix(INPUT), "", mdb.LIST)
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, 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) m.Cmdy(mdb.SELECT, m.Prefix(INPUT), "", mdb.LIST, kit.MDB_ID, arg)
}}, }},
}, },

View File

@ -77,7 +77,7 @@ func init() {
m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGOUT) 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) { }, 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.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
}}, }},

View File

@ -43,7 +43,7 @@ func init() {
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.OptionPage(kit.Slice(arg, _sync_index)...) 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.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
m.StatusTimeCountTotal(_sync_count(m)) m.StatusTimeCountTotal(_sync_count(m))
}}, }},

View File

@ -71,7 +71,7 @@ var Index = &ice.Context{Name: VIM, Help: "编辑器",
code.PREFIX, kit.Dict( code.PREFIX, kit.Dict(
"\"", "comment", "\"", "comment",
), ),
"_keyword", kit.Dict( code.PREPARE, kit.Dict(
code.KEYWORD, kit.Simple( code.KEYWORD, kit.Simple(
"source", "finish", "source", "finish",
"set", "let", "end", "set", "let", "end",

View File

@ -26,7 +26,7 @@ func init() {
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, m.OptionSimple(kit.MDB_TEXT)) 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) { }, 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.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TEXT, arg)
m.Table(func(index int, value map[string]string, head []string) { 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])) m.PushImages(cli.QRCODE, kit.MergeURL("https://open.weixin.qq.com/qr/code", aaa.USERNAME, value[kit.MDB_TEXT]))

View File

@ -31,7 +31,7 @@ func init() {
m.Cmdy(mdb.DELETE, m.Prefix(MENU), "", mdb.ZONE, m.OptionSimple(kit.MDB_ZONE)) 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) { }, 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 { if m.Cmdy(mdb.SELECT, m.Prefix(MENU), "", mdb.ZONE, arg); len(arg) == 0 {
m.PushAction(mdb.REMOVE) m.PushAction(mdb.REMOVE)
} }

View File

@ -198,7 +198,14 @@ func (c *Context) Merge(s *Context) *Context {
} }
for k, a := range v.Action { 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 { if a.Hand == nil {
continue continue
} }