1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-27 09:48:28 +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) {
m.Fields(len(arg) == 0, "time,hash,username,userrole,ip")
m.Fields(len(arg), "time,hash,username,userrole,ip")
m.Cmdy(mdb.SELECT, SESS, "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE)
}},

View File

@ -75,7 +75,7 @@ func init() {
m.Cmdy(mdb.DELETE, TOTP, "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,name,secret,period,number")
m.Fields(len(arg), "time,name,secret,period,number")
m.Cmd(mdb.SELECT, TOTP, "", mdb.HASH, kit.MDB_NAME, arg).Table(func(index int, value map[string]string, head []string) {
m.Push(kit.MDB_TIME, m.Time())
m.Push(kit.MDB_NAME, value[kit.MDB_NAME])

View File

@ -138,7 +138,7 @@ func init() {
}
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,username,userzone,usernick")
m.Fields(len(arg), "time,username,userzone,usernick")
m.Cmdy(mdb.SELECT, USER, "", mdb.HASH, USERNAME, arg)
m.Table(func(index int, value map[string]string, head []string) {
m.Push(USERROLE, UserRole(m, value[USERNAME]))

View File

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

View File

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

View File

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

View File

@ -52,7 +52,7 @@ func init() {
}
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,hash,status,fileline")
m.Fields(len(arg), "time,hash,status,fileline")
m.Cmdy(mdb.SELECT, ROUTINE, "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(INNER, mdb.REMOVE)
}},

View File

@ -62,7 +62,7 @@ func init() {
m.Cmdy(mdb.DELETE, SIGNAL, "", mdb.HASH, SIGNAL, m.Option(SIGNAL))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,signal,name,cmd")
m.Fields(len(arg), "time,signal,name,cmd")
m.Cmdy(mdb.SELECT, SIGNAL, "", mdb.HASH, SIGNAL, arg)
m.PushAction(ACTION, mdb.REMOVE)
m.Sort(SIGNAL)

View File

@ -69,13 +69,13 @@ func init() {
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
m.Fields(len(arg) == 0, "time,hash,delay,interval,order,next,cmd")
m.Fields(len(arg), "time,hash,delay,interval,order,next,cmd")
m.Cmdy(mdb.SELECT, TIMER, "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE)
return
}
m.Fields(len(arg) == 1, "time,id,res")
m.Fields(len(arg[1:]), "time,id,res")
m.Cmdy(mdb.SELECT, TIMER, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
}},
},

View File

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

View File

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

View File

@ -64,7 +64,7 @@ func init() {
mdb.NextPage(m, _tail_count(m, arg[0]), kit.Slice(arg, 2)...)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) < 2 || (len(arg) > 1 && arg[1] == ""), kit.Select("time,name,count,name,file", "time,id,file,text", len(arg) > 0 && arg[0] != ""))
m.Fields(len(kit.Slice(arg, 0, 2)), "time,name,count,name,file", "time,id,file,text")
m.Option(mdb.CACHE_FILTER, kit.Select("", arg, 4))
m.Option(mdb.CACHE_OFFEND, kit.Select("0", arg, 3))
m.Option(mdb.CACHE_LIMIT, kit.Select("10", arg, 2))

View File

@ -57,7 +57,7 @@ func init() {
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
m.Fields(len(arg) == 0, "time,hash,file,from")
m.Fields(len(arg), "time,hash,file,from")
m.Cmdy(mdb.SELECT, TRASH, "", mdb.HASH)
m.PushAction(mdb.REVERT, mdb.REMOVE)
return

View File

@ -94,7 +94,7 @@ func init() {
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { // 通道列表
m.Fields(len(arg) == 0, "time,hash,status,username,hostport,tty,count")
m.Fields(len(arg), "time,hash,status,username,hostport,tty,count")
if m.Cmdy(mdb.SELECT, CHANNEL, "", mdb.HASH); len(arg) == 0 {
m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", ctx.COMMAND, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE)
@ -104,7 +104,7 @@ func init() {
}
// 通道命令
m.Fields(len(arg) == 1, "time,id,type,text")
m.Fields(len(arg[1:]), "time,id,type,text")
m.Cmdy(mdb.SELECT, CHANNEL, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
m.PushAction(mdb.REPEAT)
}},

View File

@ -211,7 +211,7 @@ func init() {
m.Echo(h)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,hash,status,username,host,port")
m.Fields(len(arg), "time,hash,status,username,host,port")
if m.Cmdy(mdb.SELECT, CONNECT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", SESSION, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE)

View File

@ -384,7 +384,7 @@ func init() {
}
if len(arg) == 0 { // 脚本列表
m.Fields(len(arg) == 0, "time,hash,name,count")
m.Fields(len(arg), "time,hash,name,count")
m.Cmdy(mdb.SELECT, SOURCE, "", mdb.HASH)
m.Sort(kit.MDB_NAME)
return
@ -397,7 +397,7 @@ func init() {
}
// 命令列表
m.Fields(len(arg) == 1 || arg[1] == "", "time,id,text")
m.Fields(len(arg[1:]), "time,id,text")
m.Cmdy(mdb.SELECT, SOURCE, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
m.PushAction(mdb.REPEAT)
}},

View File

@ -170,14 +170,14 @@ func init() {
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { // 服务列表
m.Fields(len(arg) == 0, "time,port,status,private,authkey,count")
m.Fields(len(arg), "time,port,status,private,authkey,count")
m.Cmdy(mdb.SELECT, SERVICE, "", mdb.HASH)
m.PushAction(mdb.IMPORT, mdb.INSERT, mdb.EXPORT, aaa.INVITE)
return
}
// 公钥列表
m.Fields(len(arg) == 1, "time,id,type,name,text")
m.Fields(len(arg[1:]), "time,id,type,name,text")
m.Cmdy(mdb.SELECT, SERVICE, kit.Keys(kit.MDB_HASH, kit.Hashs(arg[0])), mdb.LIST, kit.MDB_ID, arg[1:])
}},
},

View File

@ -85,7 +85,7 @@ func init() {
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 {
m.Fields(len(arg) == 0, "time,hash,status,count,connect")
m.Fields(len(arg), "time,hash,status,count,connect")
if m.Cmdy(mdb.SELECT, SESSION, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", ctx.COMMAND, value[kit.MDB_STATUS] == tcp.OPEN), mdb.REMOVE)
@ -94,7 +94,7 @@ func init() {
return
}
m.Fields(len(arg) == 1, "time,id,type,text")
m.Fields(len(arg[1:]), "time,id,type,text")
m.Cmdy(mdb.SELECT, SESSION, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", mdb.REPEAT, value[kit.MDB_TYPE] == CMD))

View File

@ -92,7 +92,7 @@ func init() {
m.Cmdy(mdb.PRUNES, CLIENT, "", mdb.HASH, kit.MDB_STATUS, CLOSE)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,hash,status,type,name,host,port,error,nread,nwrite")
m.Fields(len(arg), "time,hash,status,type,name,host,port,error,nread,nwrite")
if m.Cmdy(mdb.SELECT, CLIENT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == OPEN))

View File

@ -94,7 +94,7 @@ func init() {
m.Cmdy(mdb.PRUNES, SERVER, "", mdb.HASH, kit.MDB_STATUS, CLOSE)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,hash,status,type,name,host,port,error,nconn")
m.Fields(len(arg), "time,hash,status,type,name,host,port,error,nconn")
if m.Cmdy(mdb.SELECT, SERVER, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(kit.Select("", mdb.REMOVE, value[kit.MDB_STATUS] == CLOSE))

View File

@ -168,7 +168,7 @@ func init() {
}
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,hash,size,type,name,text")
m.Fields(len(arg), "time,hash,size,type,name,text")
if m.Cmdy(mdb.SELECT, CACHE, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
return
}

View File

@ -39,7 +39,7 @@ func Render(msg *ice.Message, cmd string, args ...interface{}) {
RenderCookie(msg, arg[0], arg[1:]...)
case ice.RENDER_DOWNLOAD: // file [type [name]]
msg.W.Header().Set("Content-Disposition", fmt.Sprintf("filename=%s", kit.Select(path.Base(arg[0]), arg, 2)))
msg.W.Header().Set("Content-Disposition", fmt.Sprintf("filename=%s", kit.Select(path.Base(kit.Select(arg[0], msg.Option("filename"))), arg, 2)))
if RenderType(msg.W, arg[0], kit.Select("", arg, 1)); !ice.Dump(msg.W, arg[0], nil) {
http.ServeFile(msg.W, msg.R, kit.Path(arg[0]))
}

View File

@ -253,7 +253,7 @@ func init() {
}
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,status,name,port,dev")
m.Fields(len(arg), "time,status,name,port,dev")
m.Cmdy(mdb.SELECT, SERVE, "", mdb.HASH, kit.MDB_NAME, arg)
}},

View File

@ -151,7 +151,7 @@ func init() {
)))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, "time,hash,type,name,text,userrole,username,river,storm")
m.Fields(len(arg), "time,hash,type,name,text,userrole,username,river,storm")
m.Cmdy(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE)
@ -169,7 +169,7 @@ func init() {
}
}},
"/share/": {Name: "/share/", Help: "共享链", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(true, "time,hash,userrole,username,river,storm,type,name,text")
m.Fields(0, "time,hash,userrole,username,river,storm,type,name,text")
msg := m.Cmd(mdb.SELECT, SHARE, "", mdb.HASH, kit.MDB_HASH, kit.Select(m.Option(SHARE), arg, 0))
list := []string{SHARE, kit.Select(m.Option(SHARE), arg, 0)}

View File

@ -17,7 +17,9 @@ import (
)
func _space_list(m *ice.Message, space string) {
m.Fields(space == "", "time,type,name,text")
if space == "" {
m.Fields(0, "time,type,name,text")
}
m.Cmdy(mdb.SELECT, SPACE, "", mdb.HASH, kit.MDB_NAME, space)
if space == "" {

View File

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

View File

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

View File

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

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))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, m.Conf(FILES, kit.META_FIELD))
m.Fields(len(arg), m.Conf(FILES, kit.META_FIELD))
m.Cmd(mdb.SELECT, m.Prefix(FILES), "", mdb.HASH, kit.MDB_HASH, arg).Table(func(index int, value map[string]string, head []string) {
link := kit.MergeURL("/share/cache/"+value[kit.MDB_DATA], "pod", m.Option(ice.MSG_USERPOD))
m.Push("", value, kit.Split(m.Option(ice.MSG_FIELDS)))

View File

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

View File

@ -1,19 +1,21 @@
package code
import (
"path"
"strings"
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
"github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits"
"path"
"strings"
)
func _autogen_script(m *ice.Message, dir string) {
if b, e := kit.Render(m.Conf(AUTOGEN, kit.Keym(SHY)), m); m.Assert(e) {
if b, e := kit.Render(`chapter "{{.Option "name"}}"
field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}}
`, m); m.Assert(e) {
m.Cmd(nfs.DEFS, dir, string(b))
}
}
@ -41,7 +43,7 @@ func _autogen_module(m *ice.Message, dir string, ctx string, from string) (list
list = append(list, line)
})
m.Cmd(nfs.SAVE, dir, strings.Join(list, "\n"))
m.Cmd(nfs.SAVE, dir, strings.Join(list, ice.MOD_NL))
return
}
func _autogen_import(m *ice.Message, main string, ctx string, mod string) (list []string) {
@ -51,7 +53,7 @@ func _autogen_import(m *ice.Message, main string, ctx string, mod string) (list
}
})
m.Cmd(nfs.SAVE, main, strings.Join(list, "\n"))
m.Cmd(nfs.SAVE, main, strings.Join(list, ice.MOD_NL))
return
}
func _autogen_mod(m *ice.Message, file string) (mod string) {
@ -107,56 +109,47 @@ func _autogen_miss(m *ice.Message) {
const AUTOGEN = "autogen"
func init() {
Index.Merge(&ice.Context{
Commands: map[string]*ice.Command{
AUTOGEN: {Name: "autogen path auto create binpack script", Help: "生成", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) {
_autogen_script(m, p)
_autogen_source(m, m.Option(kit.MDB_NAME))
}
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
AUTOGEN: {Name: "autogen path auto create binpack script", Help: "生成", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create main=src/main.go@key name=hi@key from=usr/icebergs/misc/bash/bash.go@key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) {
_autogen_script(m, p)
_autogen_source(m, m.Option(kit.MDB_NAME))
}
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) {
_autogen_module(m, p, m.Option(kit.MDB_NAME), m.Option(kit.MDB_FROM))
_autogen_import(m, m.Option(kit.MDB_MAIN), m.Option(kit.MDB_NAME), _autogen_mod(m, "go.mod"))
}
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case kit.MDB_MAIN:
m.Option(nfs.DIR_REG, `.*\.go`)
m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time")
m.RenameAppend(kit.MDB_PATH, arg[0])
case kit.MDB_FROM:
m.Option(nfs.DIR_DEEP, true)
m.Option(nfs.DIR_REG, `.*\.go`)
m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time")
m.Cmdy(nfs.DIR, "usr/icebergs/misc/", "path,size,time")
m.RenameAppend(kit.MDB_PATH, arg[0])
}
}},
BINPACK: {Name: "binpack", Help: "打包", Hand: func(m *ice.Message, arg ...string) {
_autogen_version(m)
m.Cmd(BINPACK, mdb.CREATE)
}},
"script": {Name: "script", Help: "脚本", Hand: func(m *ice.Message, arg ...string) {
_autogen_miss(m)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if m.Option(nfs.DIR_ROOT, kit.SSH_SRC); len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
m.Cmdy(nfs.DIR, kit.Select("./", arg, 0))
} else {
m.Cmdy(nfs.CAT, arg[0])
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_NAME), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) {
_autogen_module(m, p, m.Option(kit.MDB_NAME), m.Option(kit.MDB_FROM))
_autogen_import(m, m.Option(kit.MDB_MAIN), m.Option(kit.MDB_NAME), _autogen_mod(m, ice.GO_MOD))
}
}},
},
Configs: map[string]*ice.Config{
AUTOGEN: {Name: AUTOGEN, Help: "生成", Value: kit.Data(
SHY, `chapter "{{.Option "name"}}"
field "{{.Option "name"}}" web.code.{{.Option "name"}}.{{.Option "name"}}
`,
)},
},
})
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case kit.MDB_MAIN:
m.Option(nfs.DIR_REG, `.*\.go`)
m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time")
m.RenameAppend(kit.MDB_PATH, arg[0])
case kit.MDB_FROM:
m.Option(nfs.DIR_REG, `.*\.go`)
m.Option(nfs.DIR_DEEP, ice.TRUE)
m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time")
m.Cmdy(nfs.DIR, "usr/icebergs/misc/", "path,size,time")
m.RenameAppend(kit.MDB_PATH, arg[0])
}
}},
BINPACK: {Name: "binpack", Help: "打包:生成 src/binpack.go", Hand: func(m *ice.Message, arg ...string) {
_autogen_version(m)
m.Cmd(BINPACK, mdb.CREATE)
}},
"script": {Name: "script", Help: "脚本:生成 etc/miss.sh", Hand: func(m *ice.Message, arg ...string) {
_autogen_miss(m)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if m.Option(nfs.DIR_ROOT, kit.SSH_SRC); len(arg) == 0 || strings.HasSuffix(arg[0], "/") {
m.Cmdy(nfs.DIR, kit.Select("./", arg, 0))
} else {
m.Cmdy(nfs.CAT, arg[0])
}
}},
}})
}

View File

@ -1,14 +1,6 @@
package code
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits"
"github.com/shylinux/toolkits/util/bench"
"io"
"io/ioutil"
"net/http"
@ -16,6 +8,13 @@ import (
"path"
"strings"
"sync/atomic"
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits"
"github.com/shylinux/toolkits/util/bench"
)
func _bench_http(m *ice.Message, name, target string, arg ...string) {
@ -55,11 +54,14 @@ func _bench_http(m *ice.Message, name, target string, arg ...string) {
func _bench_redis(m *ice.Message, name, target string, arg ...string) {
}
const (
HTTP = "http"
REDIS = "redis"
)
const (
NCONN = "nconn"
NREQS = "nreqs"
)
const BENCH = "bench"
func init() {
@ -68,37 +70,37 @@ func init() {
BENCH: {Name: BENCH, Help: "性能压测", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE)},
},
Commands: map[string]*ice.Command{
"/bench": {Name: "/bench cmd...", Help: "性能压测", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmdy(m.Optionv("cmd"))
}},
BENCH: {Name: "bench zone id auto insert", Help: "性能压测", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, arg)
}},
mdb.INSERT: {Name: "insert zone type=http,redis name text nconn=3 nreqs=10", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
mdb.INSERT: {Name: "insert zone=some type=http,redis name=demo text nconn=3 nreqs=10", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, kit.MDB_ZONE, arg[1])
m.Cmdy(mdb.INSERT, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, arg[2:])
m.Cmdy(mdb.INSERT, BENCH, "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:])
}},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.MODIFY, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
m.Cmdy(mdb.MODIFY, BENCH, "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg)
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, BENCH, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE))
m.Cmdy(mdb.DELETE, BENCH, "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
}},
cli.RUN: {Name: "run", Help: "行", Hand: func(m *ice.Message, arg ...string) {
cli.RUN: {Name: "run", Help: "行", Hand: func(m *ice.Message, arg ...string) {
switch m.Option(kit.MDB_TYPE) {
case "http":
case HTTP:
_bench_http(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT))
case "redis":
case REDIS:
_bench_redis(m, m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT))
}
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(mdb.FIELDS, kit.Select("time,count,zone", kit.Select("time,id,type,name,text,nconn,nreqs", mdb.DETAIL, len(arg) > 1), len(arg) > 0))
m.Fields(len(arg), "time,zone,count", "time,id,type,name,text,nconn,nreqs")
m.Cmdy(mdb.SELECT, BENCH, "", mdb.ZONE, arg)
m.PushAction(kit.Select(mdb.REMOVE, cli.RUN, len(arg) > 0))
}},
"/bench": {Name: "/bench cmd...", Help: "性能压测", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmdy(m.Optionv("cmd"))
}},
"test": {Name: "test path func auto run case", Help: "测试用例", Action: map[string]*ice.Action{
"run": {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {

View File

@ -1,23 +1,23 @@
package code
import (
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits"
"fmt"
"io/ioutil"
"os"
"path"
"strings"
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits"
)
func _pack_write(o *os.File, arg ...string) {
for _, v := range arg {
o.WriteString(v)
}
o.WriteString("\n")
o.WriteString(ice.MOD_NL)
}
func _pack_file(m *ice.Message, file string) string {
list := ""
@ -35,9 +35,9 @@ func _pack_file(m *ice.Message, file string) string {
return "[]byte{}"
}
func _pack_dir(m *ice.Message, pack *os.File, dir string) {
m.Option(nfs.DIR_ROOT, dir)
m.Option(nfs.DIR_DEEP, "true")
m.Option(nfs.DIR_DEEP, ice.TRUE)
m.Option(nfs.DIR_TYPE, nfs.CAT)
m.Option(nfs.DIR_ROOT, dir)
m.Cmd(nfs.DIR, "./").Table(func(index int, value map[string]string, head []string) {
switch strings.Split(value[kit.MDB_PATH], "/")[0] {
@ -48,15 +48,15 @@ func _pack_dir(m *ice.Message, pack *os.File, dir string) {
pack.WriteString(fmt.Sprintf(" \"%s\": %s,\n",
path.Join(dir, value[kit.MDB_PATH]), _pack_file(m, path.Join(dir, value[kit.MDB_PATH]))))
})
pack.WriteString("\n")
pack.WriteString(ice.MOD_NL)
}
func _pack_volcanos(m *ice.Message, pack *os.File, dir string) {
m.Option(nfs.DIR_ROOT, dir)
m.Option(nfs.DIR_DEEP, "true")
m.Option(nfs.DIR_DEEP, ice.TRUE)
m.Option(nfs.DIR_TYPE, nfs.CAT)
m.Option(nfs.DIR_ROOT, dir)
for _, k := range []string{"favicon.ico", "proto.js", "frame.js"} {
for _, k := range []string{ice.FAVICON, ice.PROTO_JS, ice.FRAME_JS} {
pack.WriteString(fmt.Sprintf(" \"/%s\": %s,\n", k, _pack_file(m, path.Join(dir, k))))
}
for _, k := range []string{"lib", "page", "panel", "plugin"} {
@ -65,55 +65,50 @@ func _pack_volcanos(m *ice.Message, pack *os.File, dir string) {
value[kit.MDB_PATH], _pack_file(m, path.Join(dir, value[kit.MDB_PATH]))))
})
}
pack.WriteString("\n")
pack.WriteString(ice.MOD_NL)
}
func _pack_contexts(m *ice.Message, pack *os.File) {
_pack_dir(m, pack, "src")
pack.WriteString("\n")
pack.WriteString(ice.MOD_NL)
}
const BINPACK = "binpack"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
BINPACK: {Name: BINPACK, Help: "binpack", Value: kit.Data()},
},
Commands: map[string]*ice.Command{
BINPACK: {Name: "binpack path auto create", Help: "打包", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
if pack, p, e := kit.Create("src/binpack.go"); m.Assert(e) {
defer pack.Close()
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
BINPACK: {Name: "binpack path auto create", Help: "打包", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
if pack, p, e := kit.Create(ice.SRC_BINPACK); m.Assert(e) {
defer pack.Close()
_pack_write(pack, `package main`)
_pack_write(pack, "")
_pack_write(pack, `import (`)
_pack_write(pack, ` ice "github.com/shylinux/icebergs"`)
_pack_write(pack, `)`)
_pack_write(pack, "")
_pack_write(pack, `package main`)
_pack_write(pack, "")
_pack_write(pack, `import (`)
_pack_write(pack, ` ice "github.com/shylinux/icebergs"`)
_pack_write(pack, `)`)
_pack_write(pack, "")
_pack_write(pack, `func init() {`)
_pack_write(pack, ` ice.Info.BinPack = map[string][]byte{`)
_pack_write(pack, `func init() {`)
_pack_write(pack, ` ice.Info.BinPack = map[string][]byte{`)
_pack_volcanos(m, pack, "usr/volcanos")
_pack_dir(m, pack, "usr/learning")
// _pack_dir(m, pack, "usr/icebergs")
// _pack_dir(m, pack, "usr/toolkits")
_pack_dir(m, pack, "usr/intshell")
// _pack_contexts(m, pack)
_pack_volcanos(m, pack, ice.USR_VOLCANOS)
_pack_dir(m, pack, ice.USR_LEARNING)
// _pack_dir(m, pack, ice.USR_ICEBERGS)
// _pack_dir(m, pack, ice.USR_TOOLKITS)
_pack_dir(m, pack, ice.USR_INTSHELL)
// _pack_contexts(m, pack)
_pack_write(pack, ` }`)
_pack_write(pack, `}`)
m.Echo(p)
}
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
for k, v := range ice.Info.BinPack {
m.Push(kit.MDB_NAME, k)
m.Push(kit.MDB_SIZE, len(v))
_pack_write(pack, ` }`)
_pack_write(pack, `}`)
m.Echo(p)
}
m.Sort(kit.MDB_NAME)
}},
},
})
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
for k, v := range ice.Info.BinPack {
m.Push(kit.MDB_NAME, k)
m.Push(kit.MDB_SIZE, len(v))
}
m.Sort(kit.MDB_NAME)
}},
}})
}

View File

@ -37,46 +37,40 @@ func _c_help(m *ice.Message, section, key string) string {
return string(res)
}
const H = "h"
const C = "c"
const CC = "cc"
const MAN1 = "man1"
const MAN2 = "man2"
const MAN3 = "man3"
const MAN8 = "man8"
const (
H = "h"
CC = "cc"
MAN1 = "man1"
MAN2 = "man2"
MAN3 = "man3"
MAN8 = "man8"
)
const (
FIND = "find"
GREP = "grep"
MAN = "man"
)
const C = "c"
func init() {
Index.Register(&ice.Context{Name: C, Help: "系统",
Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(mdb.PLUGIN, mdb.CREATE, CC, m.Prefix(C))
m.Cmd(mdb.RENDER, mdb.CREATE, CC, m.Prefix(C))
m.Cmd(mdb.SEARCH, mdb.CREATE, CC, m.Prefix(C))
m.Cmd(mdb.PLUGIN, mdb.CREATE, C, m.Prefix(C))
m.Cmd(mdb.RENDER, mdb.CREATE, C, m.Prefix(C))
m.Cmd(mdb.ENGINE, mdb.CREATE, C, m.Prefix(C))
m.Cmd(mdb.SEARCH, mdb.CREATE, C, m.Prefix(C))
m.Cmd(mdb.PLUGIN, mdb.CREATE, H, m.Prefix(C))
m.Cmd(mdb.RENDER, mdb.CREATE, H, m.Prefix(C))
m.Cmd(mdb.SEARCH, mdb.CREATE, H, m.Prefix(C))
for _, k := range []string{MAN1, MAN2, MAN3, MAN8} {
m.Cmd(mdb.PLUGIN, mdb.CREATE, k, m.Prefix(MAN))
m.Cmd(mdb.RENDER, mdb.CREATE, k, m.Prefix(MAN))
m.Cmd(mdb.SEARCH, mdb.CREATE, k, m.Prefix(MAN))
for _, k := range []string{H, C, CC} {
for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.ENGINE, mdb.SEARCH} {
m.Cmd(cmd, mdb.CREATE, k, m.Prefix(C))
}
}
for _, k := range []string{MAN1, MAN2, MAN3, MAN8} {
for _, cmd := range []string{mdb.PLUGIN, mdb.RENDER, mdb.SEARCH} {
m.Cmd(cmd, mdb.CREATE, k, m.Prefix(MAN))
}
}
LoadPlug(m, C)
}},
C: {Name: C, Help: "系统", Action: map[string]*ice.Action{
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) {
m.Echo(m.Conf(C, "meta.plug"))
m.Echo(m.Conf(C, kit.Keym(PLUG)))
}},
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
@ -84,7 +78,10 @@ func init() {
mdb.ENGINE: {Hand: func(m *ice.Message, arg ...string) {
m.Option(cli.CMD_DIR, arg[2])
name := strings.TrimSuffix(arg[1], path.Ext(arg[1])) + ".bin"
m.Cmd(cli.SYSTEM, "gcc", arg[1], "-o", name)
if msg := m.Cmd(cli.SYSTEM, "gcc", arg[1], "-o", name); msg.Append(cli.CMD_CODE) != "0" {
m.Copy(msg)
return
}
m.Cmdy(cli.SYSTEM, "./"+name)
}},
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
@ -92,16 +89,17 @@ func init() {
return
}
m.Option(cli.CMD_DIR, kit.Select("src", arg, 2))
_go_find(m, kit.Select("main", arg, 1))
_go_find(m, kit.Select(kit.MDB_MAIN, arg, 1))
m.Cmdy(mdb.SEARCH, MAN2, arg[1:])
m.Cmdy(mdb.SEARCH, MAN3, arg[1:])
_c_tags(m, kit.Select("main", arg, 1))
_go_grep(m, kit.Select("main", arg, 1))
_c_tags(m, kit.Select(kit.MDB_MAIN, arg, 1))
_go_grep(m, kit.Select(kit.MDB_MAIN, arg, 1))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
}},
MAN: {Name: MAN, Help: "手册", Action: map[string]*ice.Action{
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) {
m.Echo(m.Conf(MAN, "meta.plug"))
m.Echo(m.Conf(MAN, kit.Keym(PLUG)))
}},
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
m.Echo(_c_help(m, strings.TrimPrefix(arg[0], MAN), strings.TrimSuffix(arg[1], "."+arg[0])))
@ -111,11 +109,11 @@ func init() {
return
}
for _, i := range []string{"1", "2", "3", "8"} {
if text := _c_help(m, i, kit.Select("main", arg, 1)); text != "" {
if text := _c_help(m, i, kit.Select(kit.MDB_MAIN, arg, 1)); text != "" {
for _, k := range kit.Split(m.Option(mdb.FIELDS)) {
switch k {
case kit.MDB_FILE:
m.Push(k, arg[1]+".man"+i)
m.Push(k, kit.Keys(arg[1], MAN+i))
case kit.MDB_LINE:
m.Push(k, 1)
case kit.MDB_TEXT:
@ -130,8 +128,67 @@ func init() {
}},
},
Configs: map[string]*ice.Config{
C: {Name: C, Help: "系统", Value: kit.Data(
PLUG, kit.Dict(
SPLIT, kit.Dict(
"space", " ",
"operator", "{[(.,:;!|<>)]}",
),
PREFIX, kit.Dict(
"//", COMMENT,
"/*", COMMENT,
"*", COMMENT,
),
PREPARE, kit.Dict(
KEYWORD, kit.Simple(
"#include",
"#define",
"#ifndef",
"#ifdef",
"#else",
"#endif",
"if",
"else",
"for",
"while",
"do",
"break",
"continue",
"switch",
"case",
"default",
"return",
"typedef",
"sizeof",
"extern",
"static",
"const",
),
DATATYPE, kit.Simple(
"union",
"struct",
"unsigned",
"double",
"void",
"long",
"char",
"int",
),
FUNCTION, kit.Simple(
"assert",
"zmalloc",
),
CONSTANT, kit.Simple(
"NULL", "-1", "0", "1", "2",
),
),
KEYWORD, kit.Dict(),
),
)},
MAN: {Name: MAN, Help: "手册", Value: kit.Data(
"plug", kit.Dict(
PLUG, kit.Dict(
PREFIX, kit.Dict(
"NAME", COMMENT,
"LIBRARY", COMMENT,
@ -144,63 +201,6 @@ func init() {
),
),
)},
C: {Name: C, Help: "系统", Value: kit.Data(
"plug", kit.Dict(
SPLIT, kit.Dict(
"space", " ",
"operator", "{[(.,:;!|<>)]}",
),
PREFIX, kit.Dict(
"//", COMMENT,
"/*", COMMENT,
"*", COMMENT,
),
KEYWORD, kit.Dict(
"#include", KEYWORD,
"#define", KEYWORD,
"#ifndef", KEYWORD,
"#ifdef", KEYWORD,
"#else", KEYWORD,
"#endif", KEYWORD,
"if", KEYWORD,
"else", KEYWORD,
"for", KEYWORD,
"while", KEYWORD,
"do", KEYWORD,
"break", KEYWORD,
"continue", KEYWORD,
"switch", KEYWORD,
"case", KEYWORD,
"default", KEYWORD,
"return", KEYWORD,
"typedef", KEYWORD,
"extern", KEYWORD,
"static", KEYWORD,
"const", KEYWORD,
"sizeof", KEYWORD,
"union", DATATYPE,
"struct", DATATYPE,
"unsigned", DATATYPE,
"double", DATATYPE,
"void", DATATYPE,
"long", DATATYPE,
"char", DATATYPE,
"int", DATATYPE,
"assert", FUNCTION,
"zmalloc", FUNCTION,
"NULL", STRING,
"-1", STRING,
"0", STRING,
"1", STRING,
"2", STRING,
),
),
)},
},
}, nil)
}

View File

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

View File

@ -1,13 +1,12 @@
chapter "源码"
field "后端" web.code.binpack
field "前端" web.code.webpack
field "安装" web.code.install
field "后端" web.code.binpack
field "生成" web.code.autogen
field "编译" web.code.compile
field "发布" web.code.publish
field "升级" web.code.upgrade
field "发布" web.code.publish
field "安装" web.code.install
field "编辑" web.code.vimer
field "查看" web.code.inner
@ -21,37 +20,3 @@ field "脚本" web.code.shy
field "后端" web.code.go
field "前端" web.code.js
return
vimer.go
inner.go
favor.go
bench.go
pprof.go
c.go
sh.go
shy.go
go.go
js.go
autogen.go
compile.go
publish.go
upgrade.go
webpack.go
binpack.go
install.go
code.go
code.shy
csdn.go
github.go
section "python"
refer `
官网 https://www.python.org/
源码 https://www.python.org/downloads/source/
文档 https://docs.python.org/3/reference/index.html
`

View File

@ -1,15 +1,15 @@
package code
import (
"os"
"path"
"strings"
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
kit "github.com/shylinux/toolkits"
"os"
"path"
"strings"
)
const COMPILE = "compile"
@ -18,18 +18,17 @@ func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
COMPILE: {Name: COMPILE, Help: "编译", Value: kit.Data(
kit.MDB_PATH, "usr/publish", kit.SSH_ENV, kit.Dict(
kit.MDB_PATH, ice.USR_PUBLISH, kit.SSH_ENV, kit.Dict(
"CGO_ENABLED", "0", "GOCACHE", os.Getenv("GOCACHE"),
"HOME", os.Getenv("HOME"), "PATH", os.Getenv("PATH"),
cli.HOME, os.Getenv(cli.HOME), cli.PATH, os.Getenv(cli.PATH),
"GOPROXY", "https://goproxy.cn,direct", "GOPRIVATE", "github.com",
), "go", []interface{}{"go", "build"},
), GO, []interface{}{GO, cli.BUILD},
)},
},
Commands: map[string]*ice.Command{
COMPILE: {Name: "compile arch=amd64,386,arm os=linux,darwin,windows src=src/main.go@key 执行:button", Help: "编译", Action: map[string]*ice.Action{
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_REG, `.*\.go$`)
m.Cmdy(nfs.DIR, "src", "path,size,time")
m.Cmdy(nfs.DIR, "src", "path,size,time", ice.Option{nfs.DIR_REG, `.*\.go$`})
m.Sort(kit.MDB_PATH)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
@ -38,12 +37,12 @@ func init() {
return
}
main := "src/main.go"
main := ice.SRC_MAIN_GO
goos := m.Conf(cli.RUNTIME, "host.GOOS")
arch := m.Conf(cli.RUNTIME, "host.GOARCH")
for _, k := range arg {
switch k {
case "linux", "darwin", "windows":
case cli.LINUX, cli.DARWIN, cli.WINDOWS:
goos = k
case "amd64", "386", "arm":
arch = k
@ -51,22 +50,24 @@ func init() {
main = k
}
}
_autogen_version(m)
_autogen_version(m.Spawn())
// 编译目标
file := path.Join(kit.Select("", m.Conf(cmd, kit.META_PATH), m.Option(cli.CMD_DIR) == ""), kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != "src/main.go"), goos, arch))
file := path.Join(kit.Select("", m.Conf(COMPILE, kit.META_PATH), m.Option(cli.CMD_DIR) == ""),
kit.Keys(kit.Select("ice", path.Base(strings.TrimSuffix(main, ".go")), main != ice.SRC_MAIN_GO), goos, arch))
// 编译参数
m.Optionv(cli.CMD_ENV, kit.Simple(m.Confv(COMPILE, "meta.env"), "GOARCH", arch, "GOOS", goos))
if msg := m.Cmd(cli.SYSTEM, m.Confv(COMPILE, "meta.go"), "-o", file, main, "src/version.go", "src/binpack.go"); msg.Append(cli.CMD_CODE) != "0" {
m.Optionv(cli.CMD_ENV, kit.Simple(m.Confv(COMPILE, kit.Keym(cli.ENV)), "GOARCH", arch, "GOOS", goos))
if msg := m.Cmd(cli.SYSTEM, m.Confv(COMPILE, kit.Keym(GO)),
"-o", file, main, ice.SRC_VERSION, ice.SRC_BINPACK); msg.Append(cli.CMD_CODE) != "0" {
m.Copy(msg)
return
}
m.Log_EXPORT("source", main, "target", file)
m.Push(kit.MDB_TIME, m.Time())
m.PushDownload(kit.MDB_LINK, file)
m.Echo(file)
m.Log_EXPORT(cli.SOURCE, main, cli.TARGET, file)
m.Cmdy(nfs.DIR, file)
m.EchoDownload(file)
m.StatusTimeCount()
}},
},
})

View File

@ -6,61 +6,52 @@ import (
kit "github.com/shylinux/toolkits"
)
func _sub_key(m *ice.Message, topic string) string {
return kit.Keys(kit.MDB_HASH, kit.Hashs(topic))
}
const FAVOR = "favor"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TOPIC)},
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_ZONE, kit.MDB_FIELD, "time,id,type,name,text,path,file,line",
)},
},
Commands: map[string]*ice.Command{
FAVOR: {Name: "favor topic id auto insert export import", Help: "收藏夹", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, FAVOR, "", mdb.HASH, arg)
FAVOR: {Name: "favor zone id auto insert export import", Help: "收藏夹", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, arg)
}},
mdb.INSERT: {Name: "insert topic=数据结构 type=go name=hi text=hello path file line", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, FAVOR, "", mdb.HASH, kit.MDB_TOPIC, arg[1])
m.Cmdy(mdb.INSERT, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:])
mdb.INSERT: {Name: "insert zone=数据结构 type=go name=hi text=hello path file line", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_ZONE, arg[1])
m.Cmdy(mdb.INSERT, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:])
}},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.MODIFY, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
m.Cmdy(mdb.MODIFY, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg)
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, FAVOR, "", mdb.HASH, kit.MDB_TOPIC, m.Option(kit.MDB_TOPIC))
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
}},
mdb.EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.Option(mdb.FIELDS, "topic,id,time,type,name,text,path,file,line")
m.Cmdy(mdb.EXPORT, FAVOR, "", mdb.ZONE)
m.OptionFields(kit.MDB_ZONE, m.Conf(FAVOR, kit.META_FIELD))
m.Cmdy(mdb.EXPORT, m.Prefix(FAVOR), "", mdb.ZONE)
}},
mdb.IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.Option(mdb.FIELDS, kit.MDB_TOPIC)
m.Cmdy(mdb.IMPORT, FAVOR, "", mdb.ZONE)
m.OptionFields(kit.MDB_ZONE)
m.Cmdy(mdb.IMPORT, m.Prefix(FAVOR), "", mdb.ZONE)
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case kit.MDB_TOPIC:
m.Cmdy(mdb.INPUTS, FAVOR, "", mdb.HASH, arg)
case kit.MDB_ZONE:
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.HASH, arg)
default:
m.Cmdy(mdb.INPUTS, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, arg)
m.Cmdy(mdb.INPUTS, m.Prefix(FAVOR), "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg)
}
}},
INNER: {Name: "inner", Help: "源代码", Hand: func(m *ice.Message, arg ...string) {
if len(arg) > 0 && arg[0] == mdb.RENDER {
m.Cmdy(INNER, arg[1:])
return
}
m.ShowPlugin("", m.Prefix(), INNER, INNER, mdb.RENDER)
m.Push(kit.SSH_ARG, kit.Format([]string{m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE), m.Option(kit.MDB_LINE)}))
INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
m.ProcessCommand(INNER, m.OptionSplit("path,file,line"), arg...)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(mdb.FIELDS, kit.Select("time,count,topic", kit.Select("time,id,type,name,text,path,file,line", mdb.DETAIL, len(arg) > 1), len(arg) > 0))
m.Cmdy(mdb.SELECT, FAVOR, "", mdb.ZONE, arg)
m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg)
m.PushAction(kit.Select(mdb.REMOVE, INNER, len(arg) > 0))
}},
},

View File

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

View File

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

View File

@ -15,135 +15,156 @@ import (
kit "github.com/shylinux/toolkits"
)
const PREPARE = "prepare"
func _install_download(m *ice.Message) {
link := m.Option(kit.MDB_LINK)
name := path.Base(link)
file := path.Join(kit.Select(m.Conf(INSTALL, kit.META_PATH), m.Option(kit.MDB_PATH)), name)
defer m.Cmdy(nfs.DIR, file)
if _, e := os.Stat(file); e == nil {
return // 文件存在
}
// 创建文件
m.Cmd(nfs.SAVE, file, "")
m.GoToast(web.DOWNLOAD, func(toast func(string, int, int)) {
// 进度
m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name, kit.MDB_LINK, link)
m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) {
value = kit.GetMeta(value)
p := 0
m.Optionv(kit.Keycb(web.DOWNLOAD), func(size int, total int) {
if n := size * 100 / total; p != n {
value[kit.SSH_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = n, size, total
toast(name, size, total)
p = n
}
})
})
// 下载
msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, link)
m.Cmd(nfs.LINK, file, msg.Append(kit.MDB_FILE))
// 解压
m.Option(cli.CMD_DIR, path.Dir(file))
m.Cmd(cli.SYSTEM, "tar", "xvf", name)
})
}
func _install_build(m *ice.Message, arg ...string) {
p := m.Option(cli.CMD_DIR, path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK))))
pp := kit.Path(path.Join(p, "_install"))
// 推流
web.PushStream(m)
// 配置
switch cb := m.Optionv(PREPARE).(type) {
case func(string):
cb(p)
default:
if msg := m.Cmd(cli.SYSTEM, "./configure", "--prefix="+pp, arg[1:]); msg.Append(cli.CMD_CODE) != "0" {
m.Echo(msg.Append(cli.CMD_ERR))
return
}
}
// 编译
if msg := m.Cmd(cli.SYSTEM, "make", "-j8"); msg.Append(cli.CMD_CODE) != "0" {
m.Echo(msg.Append(cli.CMD_ERR))
return
}
// 安装
if msg := m.Cmd(cli.SYSTEM, "make", "PREFIX="+pp, "install"); msg.Append(cli.CMD_CODE) != "0" {
m.Echo(msg.Append(cli.CMD_ERR))
return
}
m.Toast(ice.SUCCESS, cli.BUILD)
m.ProcessHold()
}
func _install_spawn(m *ice.Message, arg ...string) {
port := m.Cmdx(tcp.PORT, aaa.RIGHT)
target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), port)
source := path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK)))
m.Cmd(nfs.DIR, path.Join(source, kit.Select("_install", m.Option("install")))).Table(func(index int, value map[string]string, head []string) {
m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[kit.MDB_PATH], "/"), target)
})
m.Echo(target)
}
func _install_start(m *ice.Message, arg ...string) {
p := m.Option(cli.CMD_DIR, m.Cmdx(INSTALL, cli.SPAWN))
args := []string{}
switch cb := m.Optionv(PREPARE).(type) {
case func(string) []string:
args = append(args, cb(p)...)
}
m.Cmdy(cli.DAEMON, arg[1:], args)
}
func _install_package(m *ice.Message, arg ...string) {
m.Fields(len(arg), "time,name,path")
m.Cmdy(mdb.SELECT, INSTALL, "", mdb.HASH)
}
func _install_service(m *ice.Message, arg ...string) {
arg = kit.Split(path.Base(arg[0]), "-.")[:1]
m.Fields(len(arg[1:]), "time,port,status,pid,cmd,dir")
m.Cmd(mdb.SELECT, cli.DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) {
if strings.Contains(value[cli.CMD], "bin/"+arg[0]) {
m.Push("", value, kit.Split(m.Option(mdb.FIELDS)))
}
})
m.Appendv(tcp.PORT, []string{})
m.Table(func(index int, value map[string]string, head []string) {
m.Push(tcp.PORT, path.Base(value[nfs.DIR]))
})
}
const (
PREPARE = "prepare"
)
const INSTALL = "install"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_PATH, ice.USR_INSTALL)},
INSTALL: {Name: INSTALL, Help: "安装", Value: kit.Data(
kit.MDB_SHORT, kit.MDB_NAME, kit.MDB_PATH, ice.USR_INSTALL,
)},
},
Commands: map[string]*ice.Command{
INSTALL: {Name: "install name port path auto download", Help: "安装", Meta: kit.Dict(), Action: map[string]*ice.Action{
web.DOWNLOAD: {Name: "download link path", Help: "下载", Hand: func(m *ice.Message, arg ...string) {
link := m.Option(kit.MDB_LINK)
name := path.Base(link)
file := path.Join(kit.Select(m.Conf(INSTALL, kit.META_PATH), m.Option(kit.MDB_PATH)), name)
defer m.Cmdy(nfs.DIR, file)
if _, e := os.Stat(file); e == nil {
return // 文件存在
}
// 创建文件
m.Cmd(nfs.SAVE, file, "")
m.GoToast("download", func(toast func(string, int, int)) {
// 进度
m.Cmd(mdb.INSERT, INSTALL, "", mdb.HASH, kit.MDB_NAME, name, kit.MDB_LINK, link)
m.Richs(INSTALL, "", name, func(key string, value map[string]interface{}) {
value = kit.GetMeta(value)
p := 0
m.Optionv(kit.Keycb(web.DOWNLOAD), func(size int, total int) {
if n := size * 100 / total; p != n {
value[kit.SSH_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = n, size, total
toast(name, size, total)
p = n
}
})
})
// 下载
msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, link)
m.Cmd(nfs.LINK, file, msg.Append(kit.MDB_FILE))
// 解压
m.Option(cli.CMD_DIR, path.Dir(file))
m.Cmd(cli.SYSTEM, "tar", "xvf", name)
})
_install_download(m)
}},
cli.BUILD: {Name: "build link", Help: "构建", Hand: func(m *ice.Message, arg ...string) {
p := m.Option(cli.CMD_DIR, path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK))))
pp := kit.Path(path.Join(p, "_install"))
// 推流
web.PushStream(m)
// 配置
switch cb := m.Optionv(PREPARE).(type) {
case func(string):
cb(p)
default:
if msg := m.Cmd(cli.SYSTEM, "./configure", "--prefix="+pp, arg[1:]); msg.Append(cli.CMD_CODE) != "0" {
m.Echo(msg.Append(cli.CMD_ERR))
return
}
}
// 编译
if msg := m.Cmd(cli.SYSTEM, "make", "-j8"); msg.Append(cli.CMD_CODE) != "0" {
m.Echo(msg.Append(cli.CMD_ERR))
return
}
// 安装
if msg := m.Cmd(cli.SYSTEM, "make", "PREFIX="+pp, "install"); msg.Append(cli.CMD_CODE) != "0" {
m.Echo(msg.Append(cli.CMD_ERR))
return
}
m.Toast(ice.SUCCESS, cli.BUILD)
m.ProcessHold()
_install_build(m, arg...)
}},
cli.SPAWN: {Name: "spawn link", Help: "新建", Hand: func(m *ice.Message, arg ...string) {
port := m.Cmdx(tcp.PORT, aaa.RIGHT)
target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), port)
source := path.Join(m.Conf(INSTALL, kit.META_PATH), kit.TrimExt(m.Option(kit.MDB_LINK)))
m.Cmd(nfs.DIR, path.Join(source, kit.Select("_install", m.Option("install")))).Table(func(index int, value map[string]string, head []string) {
m.Cmd(cli.SYSTEM, "cp", "-r", strings.TrimSuffix(value[kit.MDB_PATH], "/"), target)
})
m.Echo(target)
_install_spawn(m, arg...)
}},
cli.START: {Name: "start link cmd", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
p := m.Option(cli.CMD_DIR, m.Cmdx(INSTALL, cli.SPAWN))
args := []string{}
switch cb := m.Optionv(PREPARE).(type) {
case func(string) []string:
args = append(args, cb(p)...)
}
m.Cmdy(cli.DAEMON, arg[1:], args)
_install_start(m, arg...)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { // 源码列表
m.Fields(len(arg) == 0, "time,name,path")
m.Cmdy(mdb.SELECT, INSTALL, "", mdb.HASH)
return
switch len(arg) {
case 0: // 源码列表
_install_package(m, arg...)
case 1: // 服务列表
_install_service(m, arg...)
default: // 目录列表
m.Option(nfs.DIR_ROOT, path.Join(m.Conf(cli.DAEMON, kit.META_PATH), arg[1]))
m.Cmdy(nfs.CAT, kit.Select("./", arg, 2))
}
if len(arg) == 1 { // 服务列表
arg = kit.Split(path.Base(arg[0]), "-.")[:1]
m.Fields(len(arg) == 1, "time,port,status,pid,cmd,dir")
m.Cmd(mdb.SELECT, cli.DAEMON, "", mdb.HASH).Table(func(index int, value map[string]string, head []string) {
if strings.Contains(value[cli.CMD], "bin/"+arg[0]) {
m.Push("", value, kit.Split(m.Option(mdb.FIELDS)))
}
})
m.Appendv(tcp.PORT, []string{})
m.Table(func(index int, value map[string]string, head []string) {
m.Push(tcp.PORT, path.Base(value[nfs.DIR]))
})
return
}
// 目录列表
m.Option(nfs.DIR_ROOT, path.Join(m.Conf(cli.DAEMON, kit.META_PATH), arg[1]))
m.Cmdy(nfs.CAT, kit.Select("./", arg, 2))
}},
},
})

View File

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

View File

@ -1,6 +1,10 @@
package code
import (
"net/http"
_ "net/http/pprof"
"strings"
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/cli"
@ -9,10 +13,6 @@ import (
"github.com/shylinux/icebergs/base/tcp"
"github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits"
"net/http"
_ "net/http/pprof"
"strings"
)
const (
@ -27,80 +27,76 @@ func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
PPROF: {Name: PPROF, Help: "性能分析", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE,
PPROF, []string{"go", "tool", "pprof"},
PPROF, []string{GO, "tool", PPROF},
)},
},
Commands: map[string]*ice.Command{
"/pprof/": {Name: "/pprof/", Help: "性能分析", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.R.URL.Path = strings.Replace("/code"+m.R.URL.Path, "code", "debug", 1)
http.DefaultServeMux.ServeHTTP(m.W, m.R)
m.Render(ice.RENDER_VOID)
}},
PPROF: {Name: "pprof zone id auto create", Help: "性能分析", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create zone binnary service seconds", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
mdb.CREATE: {Name: "create zone=some binnary service seconds=3", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, PPROF, "", mdb.HASH, arg)
}},
mdb.INSERT: {Name: "insert zone type name text", Help: "插入", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.INSERT, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, arg[2:])
m.Cmdy(mdb.INSERT, PPROF, "", mdb.HASH, kit.MDB_ZONE, arg[1])
m.Cmdy(mdb.INSERT, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE), arg[2:])
}},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
if m.Option(kit.MDB_ID) != "" {
m.Cmdy(mdb.MODIFY, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
} else {
m.Cmdy(mdb.MODIFY, PPROF, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE), arg)
}
m.Cmdy(mdb.MODIFY, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg)
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, PPROF, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE))
m.Cmdy(mdb.DELETE, PPROF, "", mdb.HASH, m.OptionSimple(kit.MDB_ZONE))
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch arg[0] {
case "binnary":
case BINNARY:
m.Cmd(nfs.DIR, "bin/", "path,size,time").Table(func(index int, value map[string]string, head []string) {
m.Push("binnary", value["path"])
m.Push(BINNARY, value["path"])
m.Push("", value, []string{"size,time"})
})
case "service":
case SERVICE:
m.Cmd(web.SPIDE).Table(func(index int, value map[string]string, head []string) {
m.Push("service", kit.MergeURL2(value["client.url"], "/debug/pprof/profile"))
m.Push(SERVICE, kit.MergeURL2(value["client.url"], "/debug/pprof/profile"))
})
}
}},
cli.RUN: {Name: "run", Help: "行", Hand: func(m *ice.Message, arg ...string) {
cli.RUN: {Name: "run", Help: "行", Hand: func(m *ice.Message, arg ...string) {
msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option(SERVICE), SECONDS, m.Option(SECONDS))
cmd := kit.Simple(m.Confv(PPROF, "meta.pprof"), "-text", m.Option(BINNARY), msg.Append(kit.MDB_FILE))
res := strings.Split(m.Cmdx(cli.SYSTEM, cmd), "\n")
cmd := kit.Simple(m.Confv(PPROF, kit.Keym(PPROF)), "-text", m.Option(BINNARY), msg.Append(kit.MDB_FILE))
res := strings.Split(m.Cmdx(cli.SYSTEM, cmd), ice.MOD_NL)
if len(res) > 20 {
res = res[:20]
}
m.Cmd(mdb.INSERT, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_TEXT, strings.Join(res, "\n"), kit.MDB_FILE, msg.Append(kit.MDB_FILE))
m.Echo(strings.Join(res, "\n"))
m.Cmd(mdb.INSERT, PPROF, "", mdb.ZONE, m.Option(kit.MDB_ZONE),
kit.MDB_TEXT, strings.Join(res, ice.MOD_NL), kit.MDB_FILE, msg.Append(kit.MDB_FILE))
m.Echo(strings.Join(res, ice.MOD_NL))
m.ProcessInner()
}},
web.SERVE: {Name: "serve", Help: "展示", Hand: func(m *ice.Message, arg ...string) {
u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
p := u.Hostname() + ":" + m.Cmdx(tcp.PORT, aaa.RIGHT)
m.Cmd(cli.DAEMON, m.Confv(PPROF, "meta.pprof"), "-http="+p, m.Option(BINNARY), m.Option(kit.MDB_FILE))
m.Cmd(cli.DAEMON, m.Confv(PPROF, kit.Keym(PPROF)), "-http="+p, m.Option(BINNARY), m.Option(kit.MDB_FILE))
m.Echo("http://%s/ui/top", p)
m.ProcessInner()
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(mdb.FIELDS, kit.Select("time,count,zone,binnary,service,seconds", kit.Select("time,id,text,binnary,file", mdb.DETAIL, len(arg) > 1), len(arg) > 0))
m.Cmdy(mdb.SELECT, PPROF, "", mdb.ZONE, arg)
if len(arg) == 0 {
m.Fields(len(arg), "time,zone,count,binnary,service,seconds", "time,id,text,file")
if m.Cmdy(mdb.SELECT, PPROF, "", mdb.ZONE, arg); len(arg) == 0 {
m.PushAction(cli.RUN, mdb.REMOVE)
} else {
m.Table(func(index int, value map[string]string, head []string) {
m.PushDownload(kit.MDB_LINK, "pprof.pd.gz", value[kit.MDB_FILE])
m.PushButton(web.SERVE)
})
return
}
}},
"/pprof/": {Name: "/pprof/", Help: "性能分析", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.R.URL.Path = strings.Replace("/code"+m.R.URL.Path, "code", "debug", 1)
http.DefaultServeMux.ServeHTTP(m.W, m.R)
m.Render(ice.RENDER_VOID)
m.Table(func(index int, value map[string]string, head []string) {
m.PushDownload(kit.MDB_LINK, "pprof.pd.gz", value[kit.MDB_FILE])
m.PushButton(web.SERVE)
})
}},
},
})

View File

@ -8,6 +8,7 @@ import (
"strings"
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/aaa"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/mdb"
"github.com/shylinux/icebergs/base/nfs"
@ -43,22 +44,12 @@ const PUBLISH = "publish"
func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data(
kit.MDB_PATH, "usr/publish", ice.CONTEXTS, _contexts,
SH, `#!/bin/bash
echo "hello world"
`,
JS, `Volcanos("onengine", {_init: function(can, sub) {
can.base.Log("hello volcanos world")
}, river: {
}})
`,
)},
},
Commands: map[string]*ice.Command{
PUBLISH: {Name: "publish path auto dream volcanos icebergs intshell", Help: "发布", Action: map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Prefix(PUBLISH))
m.Conf(PUBLISH, kit.Keym(ice.CONTEXTS), _contexts)
}},
PUBLISH: {Name: "publish path auto create volcanos icebergs intshell dream", Help: "发布", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create file", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
_publish_file(m, m.Option(kit.MDB_FILE))
}},
@ -67,22 +58,23 @@ echo "hello world"
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "miss") }()
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.ETC_MISS)
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.GO_MOD)
m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_JS), m.Conf(PUBLISH, kit.Keym(JS)))
m.Cmd(nfs.DEFS, "usr/volcanos/page/cache.css", "")
m.Cmd(nfs.DEFS, "usr/volcanos/page/cache.js", "")
m.Option(nfs.DIR_DEEP, true)
m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_JS), m.Conf(PUBLISH, kit.Keym(JS)))
m.Cmd(nfs.DEFS, path.Join(ice.USR_VOLCANOS, "page/cache.css"), "")
m.Cmd(nfs.DEFS, path.Join(ice.USR_VOLCANOS, "page/cache.js"), "")
m.Option(nfs.DIR_DEEP, ice.TRUE)
m.Option(nfs.DIR_REG, `.*\.(html|css|js)$`)
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
m.Cmdy(nfs.DIR, "./", "time,size,line,path,link")
}},
ice.ICEBERGS: {Name: "icebergs", Help: "冰山架", Hand: func(m *ice.Message, arg ...string) {
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "base") }()
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_SH)
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE_BIN)
m.Cmd(PUBLISH, mdb.CREATE, kit.MDB_FILE, ice.BIN_ICE)
p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH))
ls := strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), "\n")
ls := strings.Split(strings.TrimSpace(m.Cmd(cli.SYSTEM, "bash", "-c", "ls |xargs file |grep executable").Append(cli.CMD_OUT)), ice.MOD_NL)
for _, ls := range ls {
if file := strings.TrimSpace(strings.Split(ls, ":")[0]); file != "" {
if s, e := os.Stat(path.Join(p, file)); e == nil {
@ -99,17 +91,14 @@ echo "hello world"
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS, "tmux") }()
m.Cmd(nfs.DEFS, path.Join(m.Conf(PUBLISH, kit.META_PATH), ice.ORDER_SH), m.Conf(PUBLISH, kit.Keym(SH)))
m.Option(nfs.DIR_DEEP, true)
m.Option(nfs.DIR_DEEP, ice.TRUE)
m.Option(nfs.DIR_REG, ".*\\.(sh|vim|conf)$")
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
m.Cmdy(nfs.DIR, "./", "time,size,line,path,link")
}},
ice.CONTEXTS: {Name: "contexts", Help: "环境", Hand: func(m *ice.Message, arg ...string) {
u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
host := u.Host
if strings.Contains(host, "localhost") {
host = strings.Replace(host, "localhost", m.Cmd(tcp.HOST).Append(tcp.IP), 1)
}
host := m.ReplaceLocalhost(u.Host)
m.Option("httphost", fmt.Sprintf("%s://%s:%s", u.Scheme, strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1)))
m.Option("hostport", fmt.Sprintf("%s:%s", strings.Split(host, ":")[0], kit.Select(kit.Select("80", "443", u.Scheme == "https"), strings.Split(host, ":"), 1)))
@ -127,23 +116,37 @@ echo "hello world"
}
}
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH))
os.Remove(path.Join(p, m.Option(kit.MDB_PATH)))
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(web.DREAM, mdb.INPUTS, arg)
}},
web.DREAM: {Name: "dream name=hi repos", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(web.DREAM, tcp.START, arg)
m.Process(ice.PROCESS_OPEN, kit.MergeURL(m.Option(ice.MSG_USERWEB),
kit.SSH_POD, kit.Keys(m.Option(ice.MSG_USERPOD), m.Option(kit.MDB_NAME))))
}},
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(web.DREAM, mdb.INPUTS, arg)
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
p := m.Option(cli.CMD_DIR, m.Conf(PUBLISH, kit.META_PATH))
os.Remove(path.Join(p, m.Option(kit.MDB_PATH)))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time,size,path,link")
m.Cmdy(nfs.DIR, kit.Select("", arg, 0), "time,size,path,action,link")
}},
},
Configs: map[string]*ice.Config{
PUBLISH: {Name: PUBLISH, Help: "发布", Value: kit.Data(
kit.MDB_PATH, "usr/publish", ice.CONTEXTS, _contexts,
SH, `#!/bin/bash
echo "hello world"
`,
JS, `Volcanos("onengine", {_init: function(can, sub) {
can.base.Log("hello volcanos world")
}, river: {
}})
`,
)},
},
})
}

View File

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

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

View File

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

View File

@ -1,12 +1,12 @@
package code
import (
"os"
ice "github.com/shylinux/icebergs"
"github.com/shylinux/icebergs/base/cli"
"github.com/shylinux/icebergs/base/web"
kit "github.com/shylinux/toolkits"
"os"
)
const UPGRADE = "upgrade"
@ -15,19 +15,23 @@ func init() {
Index.Merge(&ice.Context{
Configs: map[string]*ice.Config{
UPGRADE: {Name: UPGRADE, Help: "升级", Value: kit.Dict(kit.MDB_HASH, kit.Dict(
kit.MDB_PATH, "usr/upgrade", "system", kit.Dict(kit.MDB_LIST, kit.List(
kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.sh", kit.MDB_PATH, "bin/ice.sh",
kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.bin", kit.MDB_PATH, "bin/ice.bin",
cli.SYSTEM, kit.Dict(kit.MDB_LIST, kit.List(
kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.sh", kit.MDB_PATH, ice.BIN_ICE,
kit.MDB_INPUT, "bin", kit.MDB_FILE, "ice.bin", kit.MDB_PATH, ice.BIN_ICE_BIN,
)),
cli.SOURCE, kit.Dict(kit.MDB_LIST, kit.List(
kit.MDB_INPUT, "txt", kit.MDB_FILE, "main.go", kit.MDB_PATH, ice.SRC_MAIN_GO,
kit.MDB_INPUT, "txt", kit.MDB_FILE, "miss.sh", kit.MDB_PATH, ice.ETC_MISS_SH,
kit.MDB_INPUT, "txt", kit.MDB_FILE, "go.mod", kit.MDB_PATH, ice.GO_MOD,
)),
))},
},
Commands: map[string]*ice.Command{
UPGRADE: {Name: "upgrade item:select=system 执行:button", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select("system", arg, 0)), "", "", func(index int, value map[string]interface{}) {
m.Option("exit", "true")
if value[kit.MDB_FILE] == "ice.bin" {
// 程序文件
UPGRADE: {Name: "upgrade item=system,source 执行:button", Help: "升级", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Grows(cmd, kit.Keys(kit.MDB_HASH, kit.Select(cli.SYSTEM, arg, 0)), "", "", func(index int, value map[string]interface{}) {
if value[kit.MDB_PATH] == ice.BIN_ICE_BIN { // 程序文件
value[kit.MDB_FILE] = kit.Keys("ice", m.Conf(cli.RUNTIME, "host.GOOS"), m.Conf(cli.RUNTIME, "host.GOARCH"))
m.Option("exit", ice.TRUE)
}
// 下载文件
@ -35,7 +39,7 @@ func init() {
m.Cmd(web.STORY, web.WATCH, msg.Append(kit.MDB_FILE), value[kit.MDB_PATH])
os.Chmod(kit.Format(value[kit.MDB_PATH]), 0770)
})
if m.Option("exit") == "true" {
if m.Option("exit") == ice.TRUE {
m.Sleep("1s").Go(func() { m.Cmd("exit", 1) })
}
}},

View File

@ -16,7 +16,7 @@ const VIMER = "vimer"
func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
VIMER: {Name: "vimer path=src/ file=main.go line=1 刷新:button=auto save", Help: "编辑器", Meta: kit.Dict(
"display", "/plugin/local/code/vimer.js", "style", "editor",
ice.Display("/plugin/local/code/vimer.js", "editor"),
), Action: map[string]*ice.Action{
mdb.ENGINE: {Name: "engine", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
if m.Cmdy(mdb.ENGINE, arg); len(m.Resultv()) > 0 || len(m.Appendv(ice.MSG_APPEND)) > 0 {
@ -32,6 +32,8 @@ func init() {
nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.SAVE, path.Join(m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE)))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Cmdy(INNER, arg) }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Cmdy(INNER, arg)
}},
}})
}

View File

@ -15,7 +15,7 @@ const WEBPACK = "webpack"
func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
WEBPACK: {Name: "webpack path auto create", Help: "打包", Action: map[string]*ice.Action{
WEBPACK: {Name: "webpack path auto create prunes", Help: "打包", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create name=demo", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
dir := m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.SSH_PATH))
css, _, e := kit.Create(path.Join(dir, "page/cache.css"))
@ -32,8 +32,7 @@ func init() {
for _, k := range []string{"lib", "panel", "plugin"} {
m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) {
switch kit.Ext(value[kit.MDB_PATH]) {
case CSS:
if kit.Ext(value[kit.MDB_PATH]) == CSS {
js.WriteString(`Volcanos.meta.cache["` + path.Join("/", value[kit.MDB_PATH]) + "\"] = []\n")
css.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH]))
}
@ -41,8 +40,7 @@ func init() {
}
for _, k := range []string{"lib", "panel", "plugin"} {
m.Cmd(nfs.DIR, k).Table(func(index int, value map[string]string, head []string) {
switch kit.Ext(value[kit.MDB_PATH]) {
case JS:
if kit.Ext(value[kit.MDB_PATH]) == JS {
js.WriteString(`_can_name = "` + path.Join("/", value[kit.MDB_PATH]) + "\";\n")
js.WriteString(m.Cmdx(nfs.CAT, value[kit.MDB_PATH]))
}
@ -54,7 +52,7 @@ func init() {
js.WriteString(m.Cmdx(nfs.CAT, k))
}
if f, _, e := kit.Create("usr/publish/webpack/" + m.Option(kit.MDB_NAME) + ".js"); m.Assert(e) {
if f, _, e := kit.Create(path.Join(ice.USR_PUBLISH, WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), JS))); m.Assert(e) {
defer f.Close()
f.WriteString("\n")
@ -64,13 +62,13 @@ func init() {
}
m.Option(nfs.DIR_ROOT, "")
if f, p, e := kit.Create("usr/publish/webpack/" + m.Option(kit.MDB_NAME) + ".html"); m.Assert(e) {
if f, p, e := kit.Create(path.Join(ice.USR_PUBLISH, WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), HTML))); m.Assert(e) {
f.WriteString(fmt.Sprintf(_pack,
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/cache.css")),
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/index.css")),
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, ice.PROTO_JS)),
m.Cmdx(nfs.CAT, path.Join(ice.USR_PUBLISH, "webpack/"+m.Option(kit.MDB_NAME)+".js")),
m.Cmdx(nfs.CAT, path.Join(ice.USR_PUBLISH, path.Join(WEBPACK, kit.Keys(m.Option(kit.MDB_NAME), JS)))),
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/cache.js")),
m.Cmdx(nfs.CAT, path.Join(ice.USR_VOLCANOS, "page/index.js")),
@ -78,14 +76,16 @@ func init() {
m.Echo(p)
}
}},
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.css"), "")
m.Cmd(nfs.SAVE, path.Join(ice.USR_VOLCANOS, "page/cache.js"), "")
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
m.Option(nfs.DIR_TYPE, nfs.CAT)
m.Option(nfs.DIR_DEEP, true)
m.Option(nfs.DIR_TYPE, nfs.CAT)
m.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.META_PATH))
m.Cmdy(nfs.DIR, WEBPACK).Table(func(index int, value map[string]string, head []string) {
m.PushDownload(kit.MDB_LINK, path.Join(m.Option(nfs.DIR_ROOT), value[kit.MDB_PATH]))
})
m.Cmdy(nfs.DIR, WEBPACK, "time,size,path,action,link")
}},
}})
}
@ -93,8 +93,13 @@ func init() {
const _pack = `
<!DOCTYPE html>
<head>
<link rel="apple-touch-icon-precomposed" href="/publish/app.png"/>
<link rel="apple-touch-startup-image" href="/publish/splash.png"/>
<meta name="apple-mobile-web-app-capable" content="yes"/>
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"/>
<meta name="viewport" content="width=device-width,initial-scale=0.8,user-scalable=no">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=0.7,user-scalable=no">
<title>volcanos</title>
<style type="text/css">%s</style>
<style type="text/css">%s</style>

View File

@ -12,7 +12,7 @@ import (
func _plan_list(m *ice.Message, begin_time, end_time time.Time) *ice.Message {
m.Option(mdb.CACHE_LIMIT, "100")
m.Fields(true, "begin_time,close_time,zone,id,level,status,score,type,name,text,extra")
m.Fields(0, "begin_time,close_time,zone,id,level,status,score,type,name,text,extra")
m.Option(kit.Keycb(mdb.SELECT), func(key string, fields []string, value, val map[string]interface{}) {
begin, _ := time.ParseInLocation(ice.MOD_TIME, kit.Format(value[BEGIN_TIME]), time.Local)
if begin_time.After(begin) || begin.After(end_time) {

View File

@ -57,18 +57,6 @@ func _task_action(m *ice.Message, status interface{}, action ...string) string {
return strings.Join(action, ",")
}
func _task_list(m *ice.Message, zone string, id string) *ice.Message {
if zone == "" {
m.Fields(zone == "", "time,zone,count")
defer func() { m.PushAction(mdb.REMOVE) }()
} else {
m.Fields(id == "", "begin_time,id,status,level,score,type,name,text")
defer m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(_task_action(m, value[STATUS]))
})
}
return m.Cmdy(mdb.SELECT, TASK, "", mdb.ZONE, zone, id)
}
func _task_create(m *ice.Message, zone string) {
m.Cmdy(mdb.INSERT, TASK, "", mdb.HASH, kit.MDB_ZONE, zone)
}
@ -217,7 +205,14 @@ func init() {
_task_modify(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), STATUS, FINISH)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
_task_list(m, kit.Select("", arg, 0), kit.Select("", arg, 1))
m.Fields(len(arg), "time,zone,count", "begin_time,id,status,level,score,type,name,text")
if m.Cmdy(mdb.SELECT, TASK, "", mdb.ZONE, arg); len(arg) == 0 {
m.PushAction(mdb.REMOVE)
} else {
m.Table(func(index int, value map[string]string, head []string) {
m.PushButton(_task_action(m, value[STATUS]))
})
}
}},
},
})

43
misc.go
View File

@ -131,14 +131,19 @@ func Render(m *Message, cmd string, args ...interface{}) string {
if arg[0] == "" {
return ""
}
list := []string{}
if m.Option(MSG_USERPOD) != "" {
list = append(list, kit.SSH_POD, m.Option(MSG_USERPOD))
}
if len(arg) == 1 {
arg[0] = kit.MergeURL2(m.Option(MSG_USERWEB), path.Join(kit.Select("", "/share/local",
!strings.HasPrefix(arg[0], "/")), arg[0]), kit.SSH_POD, m.Option(MSG_USERPOD))
!strings.HasPrefix(arg[0], "/")), arg[0]), list)
} else {
arg[1] = kit.MergeURL2(m.Option(MSG_USERWEB), path.Join(kit.Select("", "/share/local",
!strings.HasPrefix(arg[1], "/")), arg[1]), kit.SSH_POD, m.Option(MSG_USERPOD))
!strings.HasPrefix(arg[1], "/")), arg[1]), list, "filename", arg[0])
}
return fmt.Sprintf(`<a href="%s" download="%s">%s</a>`, kit.Select(arg[0], arg, 1), path.Base(arg[0]), arg[0])
arg[0] = m.ReplaceLocalhost(arg[0])
return fmt.Sprintf(`<a href="%s" download="%s">%s</a>`, m.ReplaceLocalhost(kit.Select(arg[0], arg, 1)), path.Base(arg[0]), arg[0])
case RENDER_ANCHOR: // [name] link
return fmt.Sprintf(`<a href="%s" target="_blank">%s</a>`, kit.Select(arg[0], arg, 1), arg[0])
@ -236,6 +241,9 @@ func (m *Message) EchoImages(src string, arg ...string) *Message {
func (m *Message) EchoQRCode(text string, arg ...string) *Message { // text [size]
return m.Echo(Render(m, RENDER_QRCODE, text, arg))
}
func (m *Message) EchoDownload(arg ...interface{}) { // [name] file
m.Echo(Render(m, RENDER_DOWNLOAD, arg...))
}
func (m *Message) SortInt(key string) { m.Sort(key, "int") }
func (m *Message) SortIntR(key string) { m.Sort(key, "int_r") }
@ -312,8 +320,8 @@ func (m *Message) OptionLoad(file string) *Message {
}
return m
}
func (m *Message) Fields(condition bool, fields string) string {
return m.Option(MSG_FIELDS, kit.Select(kit.Select("detail", fields, condition), m.Option(MSG_FIELDS)))
func (m *Message) Fields(length int, fields ...string) string {
return m.Option(MSG_FIELDS, kit.Select(kit.Select("detail", fields, length), m.Option(MSG_FIELDS)))
}
func (m *Message) Upload(dir string) {
up := kit.Simple(m.Optionv(MSG_UPLOAD))
@ -391,7 +399,7 @@ func (m *Message) ProcessRefresh(delay string) {
func (m *Message) ProcessRefresh30ms() { m.ProcessRefresh("30ms") }
func (m *Message) ProcessRefresh300ms() { m.ProcessRefresh("300ms") }
func (m *Message) ProcessRefresh3s() { m.ProcessRefresh("3s") }
func (m *Message) ProcessCommand(cmd, val string, arg ...string) {
func (m *Message) ProcessCommand(cmd string, val []string, arg ...string) {
if len(arg) > 0 && arg[0] == "run" {
m.Cmdy(cmd, arg[1:])
return
@ -399,7 +407,7 @@ func (m *Message) ProcessCommand(cmd, val string, arg ...string) {
m.Cmdy("command", cmd)
m.ProcessField(cmd, "run")
m.Push("arg", kit.Format(kit.Split(val)))
m.Push("arg", kit.Format(val))
}
func (m *Message) ProcessCommandOpt(arg ...string) {
m.Push("opt", kit.Format(m.OptionSimple(arg...)))
@ -523,3 +531,24 @@ func (m *Message) IsCliUA() bool {
}
return false
}
func (m *Message) ReplaceLocalhost(url string) string {
if strings.Contains(url, "://localhost") {
return strings.Replace(url, "localhost", m.Cmd("tcp.host").Append("ip"), 1)
}
return url
}
func Display(file string, arg ...string) map[string]string {
if file != "" && !strings.HasPrefix(file, "/") {
ls := strings.Split(kit.FileLine(2, 100), "usr")
file = kit.Select(file+".js", file, strings.HasSuffix(file, ".js"))
file = path.Join("/require/github.com/shylinux", path.Dir(ls[len(ls)-1]), file)
}
return map[string]string{kit.MDB_DISPLAY: file, kit.MDB_STYLE: kit.Select("", arg, 0)}
}
func (m *Message) OptionSplit(fields ...string) (res []string) {
for _, k := range strings.Split(strings.Join(fields, ","), ",") {
res = append(res, m.Option(k))
}
return res
}

View File

@ -61,11 +61,11 @@ func init() {
}},
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
m.Option(cli.CMD_DIR, m.Option(cli.PWD))
m.ProcessCommand(cli.SYSTEM, m.Option(kit.MDB_TEXT), arg...)
m.ProcessCommand(cli.SYSTEM, kit.Split(m.Option(kit.MDB_TEXT)), arg...)
m.ProcessCommandOpt(cli.PWD)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) < 2, kit.Select(m.Conf(FAVOR, kit.META_FIELD), "time,zone,count", len(arg) == 0))
m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD))
if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 {
m.Action(mdb.CREATE, mdb.EXPORT, mdb.IMPORT)
m.PushAction(mdb.REMOVE)

View File

@ -77,7 +77,7 @@ func init() {
m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGOUT)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, m.Conf(SESS, kit.META_FIELD))
m.Fields(len(arg), m.Conf(SESS, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE)
}},

View File

@ -67,7 +67,7 @@ func init() {
}},
cli.SYSTEM: {Name: "system", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
m.Option(cli.CMD_DIR, m.Option(cli.PWD))
m.ProcessCommand(cli.SYSTEM, m.Option(kit.MDB_TEXT), arg...)
m.ProcessCommand(cli.SYSTEM, kit.Split(m.Option(kit.MDB_TEXT)), arg...)
m.ProcessCommandOpt(cli.PWD)
}},
FAVOR: {Name: "favor zone=some@key type name text pwd", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
@ -75,7 +75,7 @@ func init() {
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.OptionPage(kit.Slice(arg, _sync_index)...)
m.Fields(len(arg) == 0 || arg[0] == "", m.Conf(SYNC, kit.META_FIELD))
m.Fields(len(kit.Slice(arg, 0, 1)), m.Conf(SYNC, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
m.PushAction(cli.SYSTEM, FAVOR)
m.StatusTimeCountTotal(_sync_count(m))

View File

@ -45,11 +45,11 @@ func init() {
}},
nfs.DIR: {Name: "dir", Help: "目录", Hand: func(m *ice.Message, arg ...string) {
m.Option(nfs.DIR_ROOT, m.Option(TO))
m.ProcessCommand(nfs.DIR, "", arg...)
m.ProcessCommand(nfs.DIR, []string{}, arg...)
m.ProcessCommandOpt(TO)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, m.Conf(TRASH, kit.META_FIELD))
m.Fields(len(arg), m.Conf(TRASH, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(TRASH), "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(nfs.DIR, mdb.REVERT, mdb.REMOVE)
}},

View File

@ -45,7 +45,7 @@ func init() {
m.Cmdy(mdb.PRUNES, m.Prefix(CACHE), "", mdb.HASH, kit.SSH_STEP, "100")
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, m.Conf(CACHE, kit.META_FIELD))
m.Fields(len(arg), m.Conf(CACHE, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE)
}},

View File

@ -48,7 +48,7 @@ func init() {
}
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) < 2, kit.Select(m.Conf(FAVOR, kit.META_FIELD), "time,zone,count", len(arg) == 0))
m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD))
if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 {
m.Action(mdb.CREATE)
m.PushAction(mdb.REMOVE)

View File

@ -53,7 +53,7 @@ func init() {
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.OptionPage(kit.Slice(arg, _sync_index)...)
m.Fields(len(arg) == 0 || arg[0] == "", m.Conf(SYNC, kit.META_FIELD))
m.Fields(len(kit.Slice(arg, 0, 1)), m.Conf(SYNC, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
m.StatusTimeCountTotal(_sync_count(m))
m.PushAction(FAVOR)

View File

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

View File

@ -49,7 +49,7 @@ func init() {
m.Echo(msg.Append(TOKEN))
}},
}, Hand: func(m *ice.Message, c *ice.Context, key string, arg ...string) {
m.Fields(len(arg) == 0, m.Conf(APP, kit.META_FIELD))
m.Fields(len(arg), m.Conf(APP, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(APP), "", mdb.HASH, APPID, arg)
}},
},

View File

@ -31,7 +31,7 @@ func init() {
m.Cmdy(mdb.IMPORT, m.Prefix(SCRIPT), "", mdb.HASH)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, m.Conf(SCRIPT, kit.META_FIELD))
m.Fields(len(arg), m.Conf(SCRIPT, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(SCRIPT), "", mdb.HASH, kit.MDB_NAME, arg)
m.PushAction(mdb.REMOVE)
}},

View File

@ -65,14 +65,14 @@ func init() {
}
}},
code.INNER: {Name: "inner", Help: "源码", Hand: func(m *ice.Message, arg ...string) {
m.ProcessCommand(code.INNER, kit.Format([]string{
m.ProcessCommand(code.INNER, []string{
kit.Select("./", path.Dir(m.Option(kit.MDB_FILE))),
path.Base(m.Option(kit.MDB_FILE)),
m.Option(kit.MDB_LINE),
}), arg...)
}, arg...)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) < 2, kit.Select(m.Conf(FAVOR, kit.META_FIELD), "time,zone,count", len(arg) == 0))
m.Fields(len(arg), "time,zone,count", m.Conf(FAVOR, kit.META_FIELD))
if m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.ZONE, arg); len(arg) == 0 {
m.Action(mdb.CREATE)
m.PushAction(mdb.REMOVE)

View File

@ -58,7 +58,7 @@ func init() {
m.Cmdy(mdb.IMPORT, m.Prefix(INPUT), "", mdb.LIST)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, m.Conf(INPUT, kit.META_FIELD))
m.Fields(len(arg), m.Conf(INPUT, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(INPUT), "", mdb.LIST, kit.MDB_ID, arg)
}},
},

View File

@ -77,7 +77,7 @@ func init() {
m.Cmdy(mdb.PRUNES, m.Prefix(SESS), "", mdb.HASH, kit.MDB_STATUS, aaa.LOGOUT)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, m.Conf(SESS, kit.META_FIELD))
m.Fields(len(arg), m.Conf(SESS, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(SESS), "", mdb.HASH, kit.MDB_HASH, arg)
m.PushAction(mdb.REMOVE)
}},

View File

@ -43,7 +43,7 @@ func init() {
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.OptionPage(kit.Slice(arg, _sync_index)...)
m.Fields(len(arg) == 0 || arg[0] == "", m.Conf(SYNC, kit.META_FIELD))
m.Fields(len(kit.Slice(arg, 0, 1)), m.Conf(SYNC, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(SYNC), "", mdb.LIST, kit.MDB_ID, arg)
m.StatusTimeCountTotal(_sync_count(m))
}},

View File

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

View File

@ -26,7 +26,7 @@ func init() {
m.Cmdy(mdb.DELETE, m.Prefix(FAVOR), "", mdb.HASH, m.OptionSimple(kit.MDB_TEXT))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) == 0, m.Conf(FAVOR, kit.META_FIELD))
m.Fields(len(arg), m.Conf(FAVOR, kit.META_FIELD))
m.Cmdy(mdb.SELECT, m.Prefix(FAVOR), "", mdb.HASH, kit.MDB_TEXT, arg)
m.Table(func(index int, value map[string]string, head []string) {
m.PushImages(cli.QRCODE, kit.MergeURL("https://open.weixin.qq.com/qr/code", aaa.USERNAME, value[kit.MDB_TEXT]))

View File

@ -31,7 +31,7 @@ func init() {
m.Cmdy(mdb.DELETE, m.Prefix(MENU), "", mdb.ZONE, m.OptionSimple(kit.MDB_ZONE))
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg) < 2, kit.Select(m.Conf(MENU, kit.META_FIELD), "time,zone,count", len(arg) == 0))
m.Fields(len(arg), "time,zone,count", m.Conf(MENU, kit.META_FIELD))
if m.Cmdy(mdb.SELECT, m.Prefix(MENU), "", mdb.ZONE, arg); len(arg) == 0 {
m.PushAction(mdb.REMOVE)
}

View File

@ -198,7 +198,14 @@ func (c *Context) Merge(s *Context) *Context {
}
for k, a := range v.Action {
kit.Value(v.Meta, kit.Keys("trans", k), a.Help)
help := strings.SplitN(a.Help, "", 2)
if len(help) == 1 || help[1] == "" {
help = strings.SplitN(help[0], ":", 2)
}
kit.Value(v.Meta, kit.Keys("trans", k), help[0])
if len(help) > 1 {
kit.Value(v.Meta, kit.Keys("title", k), help[1])
}
if a.Hand == nil {
continue
}