mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 01:24:05 +08:00
add app
This commit is contained in:
parent
10bf2d3e37
commit
8e23a29c0a
@ -9,9 +9,7 @@ const ENGINE = "engine"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
ENGINE: {Name: ENGINE, Help: "引擎", Value: kit.Data(
|
||||
SHORT, TYPE, FIELD, "time,type,name,text",
|
||||
)},
|
||||
ENGINE: {Name: ENGINE, Help: "引擎", Value: kit.Data(SHORT, TYPE, FIELD, "time,type,name,text")},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
ENGINE: {Name: "engine type name text auto", Help: "引擎", Action: ice.MergeAction(map[string]*ice.Action{
|
||||
CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -168,7 +168,7 @@ func HashAction(args ...interface{}) map[string]*ice.Action {
|
||||
m.Cmdy(MODIFY, m.PrefixKey(), "", HASH, m.OptionSimple(_key(m)), arg)
|
||||
}},
|
||||
EXPORT: {Name: "export", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.OptionFields(m.Config(kit.META_FIELD))
|
||||
m.OptionFields(m.Config(FIELD))
|
||||
m.Cmdy(EXPORT, m.PrefixKey(), "", HASH, arg)
|
||||
}},
|
||||
IMPORT: {Name: "import", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
|
||||
@ -205,9 +205,9 @@ func HashPrunes(m *ice.Message, cb func(map[string]string) bool) *ice.Message {
|
||||
}
|
||||
return kit.Select(HASH, m.Config(SHORT))
|
||||
}
|
||||
before := kit.Time(kit.Select(m.Time("-72h"), m.Option(kit.MDB_BEFORE)))
|
||||
expire := kit.Time(kit.Select(m.Time("-72h"), m.Option(EXPIRE)))
|
||||
m.Cmd(m.CommandKey()).Table(func(index int, value map[string]string, head []string) {
|
||||
if kit.Time(value[TIME]) > before {
|
||||
if kit.Time(value[TIME]) > expire {
|
||||
return
|
||||
}
|
||||
if cb != nil && cb(value) {
|
||||
|
@ -24,32 +24,36 @@ const (
|
||||
META = "meta"
|
||||
)
|
||||
const (
|
||||
ID = "id"
|
||||
KEY = "key"
|
||||
TIME = "time"
|
||||
// ZONE = "zone"
|
||||
TYPE = "type"
|
||||
NAME = "name"
|
||||
TEXT = "text"
|
||||
ID = kit.MDB_ID
|
||||
KEY = kit.MDB_KEY
|
||||
TIME = kit.MDB_TIME
|
||||
// ZONE = kit.MDB_ZONE
|
||||
TYPE = kit.MDB_TYPE
|
||||
NAME = kit.MDB_NAME
|
||||
TEXT = kit.MDB_TEXT
|
||||
|
||||
LINK = "link"
|
||||
SCAN = "scan"
|
||||
SHOW = "show"
|
||||
HELP = "help"
|
||||
FILE = "file"
|
||||
DATA = "data"
|
||||
LINK = kit.MDB_LINK
|
||||
SCAN = kit.MDB_SCAN
|
||||
SHOW = kit.MDB_SHOW
|
||||
HELP = kit.MDB_HELP
|
||||
DATA = kit.MDB_DATA
|
||||
FILE = kit.MDB_FILE
|
||||
|
||||
SHORT = "short"
|
||||
FIELD = "field"
|
||||
TOTAL = "total"
|
||||
COUNT = "count"
|
||||
LIMIT = "limit"
|
||||
INDEX = "index"
|
||||
VALUE = "value"
|
||||
EXTRA = "extra"
|
||||
EXPIRE = "expire"
|
||||
STATUS = "status"
|
||||
STREAM = "stream"
|
||||
SHORT = kit.MDB_SHORT
|
||||
FIELD = kit.MDB_FIELD
|
||||
TOTAL = kit.MDB_TOTAL
|
||||
COUNT = kit.MDB_COUNT
|
||||
LIMIT = kit.MDB_LIMIT
|
||||
LEAST = kit.MDB_LEAST
|
||||
STORE = kit.MDB_STORE
|
||||
FSIZE = kit.MDB_FSIZE
|
||||
|
||||
INDEX = kit.MDB_INDEX
|
||||
VALUE = kit.MDB_VALUE
|
||||
EXTRA = kit.MDB_EXTRA
|
||||
EXPIRE = kit.MDB_EXPIRE
|
||||
STATUS = kit.MDB_STATUS
|
||||
STREAM = kit.MDB_STREAM
|
||||
|
||||
FOREACH = "*"
|
||||
RANDOMS = "%"
|
||||
|
@ -9,9 +9,7 @@ const PLUGIN = "plugin"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
PLUGIN: {Name: "plugin", Help: "插件", Value: kit.Data(
|
||||
SHORT, TYPE, FIELD, "time,type,name,text",
|
||||
)},
|
||||
PLUGIN: {Name: "plugin", Help: "插件", Value: kit.Data(SHORT, TYPE, FIELD, "time,type,name,text")},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
PLUGIN: {Name: "plugin type name text auto", Help: "插件", Action: map[string]*ice.Action{
|
||||
CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -9,9 +9,7 @@ const RENDER = "render"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
RENDER: {Name: "render", Help: "渲染", Value: kit.Data(
|
||||
SHORT, TYPE, FIELD, "time,type,name,text",
|
||||
)},
|
||||
RENDER: {Name: "render", Help: "渲染", Value: kit.Data(SHORT, TYPE, FIELD, "time,type,name,text")},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
RENDER: {Name: "render type name text auto", Help: "渲染", Action: map[string]*ice.Action{
|
||||
CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
|
@ -9,9 +9,7 @@ const SEARCH = "search"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
SEARCH: {Name: "search", Help: "搜索", Value: kit.Data(
|
||||
SHORT, TYPE, FIELD, "time,type,name,text",
|
||||
)},
|
||||
SEARCH: {Name: "search", Help: "搜索", Value: kit.Data(SHORT, TYPE, FIELD, "time,type,name,text")},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
SEARCH: {Name: "search type word text auto", Help: "搜索", Action: map[string]*ice.Action{
|
||||
CREATE: {Name: "create type name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||
@ -26,8 +24,7 @@ func init() {
|
||||
})
|
||||
}
|
||||
if HashSelect(msg, arg...); len(arg) == 0 {
|
||||
m.Copy(msg)
|
||||
m.Sort(TYPE)
|
||||
m.Copy(msg).Sort(TYPE)
|
||||
} else if len(arg) == 1 {
|
||||
m.Copy(msg)
|
||||
}
|
||||
|
@ -28,9 +28,7 @@ func _cache_save(m *ice.Message, kind, name, text string, arg ...string) { // fi
|
||||
size := kit.Int(kit.Select(kit.Format(len(text)), arg, 1))
|
||||
file := kit.Select("", arg, 0)
|
||||
text = kit.Select(file, text)
|
||||
h := m.Cmdx(mdb.INSERT, CACHE, "", mdb.HASH,
|
||||
mdb.TYPE, kind, mdb.NAME, name, mdb.TEXT, text,
|
||||
nfs.FILE, file, nfs.SIZE, size)
|
||||
h := m.Cmdx(mdb.INSERT, CACHE, "", mdb.HASH, kit.SimpleKV("", kind, name, text), nfs.FILE, file, nfs.SIZE, size)
|
||||
|
||||
// 返回结果
|
||||
m.Push(mdb.TIME, m.Time())
|
||||
@ -40,7 +38,7 @@ func _cache_save(m *ice.Message, kind, name, text string, arg ...string) { // fi
|
||||
m.Push(nfs.SIZE, size)
|
||||
m.Push(nfs.FILE, file)
|
||||
m.Push(mdb.HASH, h)
|
||||
m.Push(DATA, h)
|
||||
m.Push(mdb.DATA, h)
|
||||
}
|
||||
func _cache_watch(m *ice.Message, key, file string) {
|
||||
mdb.HashSelect(m.Spawn(), key).Table(func(index int, value map[string]string, head []string) {
|
||||
@ -100,12 +98,11 @@ func _cache_download(m *ice.Message, r *http.Response) (file, size string) {
|
||||
case []string:
|
||||
m.Richs(cb[0], cb[1], cb[2], func(key string, value map[string]interface{}) {
|
||||
value = kit.GetMeta(value)
|
||||
value[mdb.VALUE], value[mdb.COUNT], value[mdb.TOTAL] = kit.Format(s), size, total
|
||||
value[mdb.COUNT], value[mdb.TOTAL], value[mdb.VALUE] = size, total, kit.Format(s)
|
||||
})
|
||||
default:
|
||||
if s != step && s%10 == 0 {
|
||||
m.Log_IMPORT(nfs.FILE, p, mdb.VALUE, s,
|
||||
mdb.COUNT, kit.FmtSize(int64(size)), mdb.TOTAL, kit.FmtSize(int64(total)))
|
||||
m.Log_IMPORT(nfs.FILE, p, mdb.VALUE, s, mdb.COUNT, kit.FmtSize(int64(size)), mdb.TOTAL, kit.FmtSize(int64(total)))
|
||||
}
|
||||
}
|
||||
step = s
|
||||
@ -141,8 +138,8 @@ func init() {
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
CACHE: {Name: CACHE, Help: "缓存池", Value: kit.Data(
|
||||
mdb.SHORT, mdb.TEXT, mdb.FIELD, "time,hash,size,type,name,text",
|
||||
kit.MDB_STORE, ice.VAR_DATA, nfs.PATH, ice.VAR_FILE, kit.MDB_FSIZE, "200000",
|
||||
mdb.LIMIT, "50", kit.MDB_LEAST, "30",
|
||||
mdb.STORE, ice.VAR_DATA, nfs.PATH, ice.VAR_FILE, mdb.FSIZE, "200000",
|
||||
mdb.LIMIT, "50", mdb.LEAST, "30",
|
||||
)},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
"/cache/": {Name: "/cache/", Help: "缓存池", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
|
@ -85,14 +85,9 @@ func CookieName(url string) string {
|
||||
}
|
||||
func RenderCookie(msg *ice.Message, value string, arg ...string) { // name path expire
|
||||
expire := time.Now().Add(kit.Duration(kit.Select(msg.Conf(aaa.SESS, "meta.expire"), arg, 2)))
|
||||
msg.Debug("what %v %v", value, arg)
|
||||
http.SetCookie(msg.W, &http.Cookie{Value: value,
|
||||
Name: kit.Select(ice.MSG_SESSID, arg, 0), Path: kit.Select("/", arg, 1), Expires: expire})
|
||||
}
|
||||
func RenderMeta(msg *ice.Message, name, content string) {
|
||||
msg.W.Write([]byte(kit.Format(`<meta name="%s" content="%s">`, name, content)))
|
||||
msg.W.Write([]byte(ice.NL))
|
||||
}
|
||||
func RenderType(w http.ResponseWriter, name, mime string) {
|
||||
if mime != "" {
|
||||
w.Header().Set(ContentType, mime)
|
||||
|
@ -19,7 +19,7 @@ import (
|
||||
)
|
||||
|
||||
func _share_link(m *ice.Message, p string, arg ...interface{}) string {
|
||||
p = kit.Select("", "/share/local/", !strings.HasPrefix(p, "/")) + p
|
||||
p = kit.Select("", "/share/local/", !strings.HasPrefix(p, ice.PS)) + p
|
||||
return tcp.ReplaceLocalhost(m, m.MergeURL2(p, arg...))
|
||||
}
|
||||
func _share_repos(m *ice.Message, repos string, arg ...string) {
|
||||
@ -36,7 +36,7 @@ func _share_proxy(m *ice.Message) {
|
||||
|
||||
case http.MethodPost: // 上传文件
|
||||
m.Cmdy(CACHE, UPLOAD)
|
||||
m.Cmdy(CACHE, WATCH, m.Option(kit.MDB_DATA), p)
|
||||
m.Cmdy(CACHE, WATCH, m.Option(mdb.DATA), p)
|
||||
m.RenderResult(m.Option(nfs.PATH))
|
||||
}
|
||||
}
|
||||
@ -55,7 +55,7 @@ func _share_cache(m *ice.Message, arg ...string) {
|
||||
}
|
||||
func _share_local(m *ice.Message, arg ...string) {
|
||||
p := path.Join(arg...)
|
||||
switch ls := strings.Split(p, "/"); ls[0] {
|
||||
switch ls := strings.Split(p, ice.PS); ls[0] {
|
||||
case ice.ETC, ice.VAR: // 私有文件
|
||||
if m.Option(ice.MSG_USERROLE) == aaa.VOID {
|
||||
m.Render(STATUS, http.StatusUnauthorized, ice.ErrNotRight)
|
||||
@ -134,10 +134,8 @@ func init() {
|
||||
m.ProcessInner()
|
||||
}},
|
||||
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if m.PodCmd(SHARE, arg) {
|
||||
if m.Length() > 0 {
|
||||
return
|
||||
}
|
||||
if m.PodCmd(SHARE, arg) && m.Length() > 0 {
|
||||
return
|
||||
}
|
||||
if mdb.HashSelect(m, arg...); len(arg) > 0 {
|
||||
link := _share_link(m, "/share/"+arg[0])
|
||||
@ -160,8 +158,7 @@ func init() {
|
||||
}},
|
||||
|
||||
"/share/toast/": {Name: "/share/toast/", Help: "推送流", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Cmdy(SPACE, m.Option("pod"), m.Optionv("cmds"))
|
||||
|
||||
m.Cmdy(SPACE, m.Option(ice.POD), m.Optionv("cmds"))
|
||||
}},
|
||||
"/share/repos/": {Name: "/share/repos/", Help: "代码库", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
_share_repos(m, path.Join(arg[0], arg[1], arg[2]), arg[3:]...)
|
||||
|
@ -162,93 +162,90 @@ const (
|
||||
const STORY = "story"
|
||||
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{
|
||||
Configs: map[string]*ice.Config{
|
||||
STORY: {Name: "story", Help: "故事会", Value: kit.Dict(
|
||||
mdb.META, kit.Dict(mdb.SHORT, DATA),
|
||||
HEAD, kit.Data(mdb.SHORT, STORY),
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
STORY: {Name: "story story auto", Help: "故事会", Action: map[string]*ice.Action{
|
||||
WRITE: {Name: "write type name text arg...", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
_story_write(m, arg[0], arg[1], arg[2], arg[3:]...)
|
||||
}},
|
||||
CATCH: {Name: "catch type name arg...", Help: "捕捉", Hand: func(m *ice.Message, arg ...string) {
|
||||
_story_catch(m, arg[0], arg[1], arg[2:]...)
|
||||
}},
|
||||
WATCH: {Name: "watch key name", Help: "释放", Hand: func(m *ice.Message, arg ...string) {
|
||||
_story_watch(m, arg[0], arg[1])
|
||||
}},
|
||||
INDEX: {Name: "index key", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
|
||||
_story_index(m, arg[0], false)
|
||||
}},
|
||||
HISTORY: {Name: "history name", Help: "历史", Hand: func(m *ice.Message, arg ...string) {
|
||||
_story_history(m, arg[0])
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
_story_list(m, kit.Select("", arg, 0), kit.Select("", arg, 1))
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
STORY: {Name: "story", Help: "故事会", Value: kit.Dict(
|
||||
mdb.META, kit.Dict(mdb.SHORT, DATA),
|
||||
HEAD, kit.Data(mdb.SHORT, STORY),
|
||||
)},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
STORY: {Name: "story story auto", Help: "故事会", Action: map[string]*ice.Action{
|
||||
WRITE: {Name: "write type name text arg...", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||
_story_write(m, arg[0], arg[1], arg[2], arg[3:]...)
|
||||
}},
|
||||
|
||||
"/story/": {Name: "/story/", Help: "故事会", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
switch arg[0] {
|
||||
case PULL:
|
||||
list := m.Cmd(STORY, INDEX, m.Option("begin")).Append("list")
|
||||
for i := 0; i < 10 && list != "" && list != m.Option("end"); i++ {
|
||||
if m.Richs(STORY, nil, list, func(key string, value map[string]interface{}) {
|
||||
// 节点信息
|
||||
m.Push("list", key)
|
||||
m.Push("node", kit.Format(value))
|
||||
m.Push("data", value["data"])
|
||||
m.Push("save", kit.Format(m.Richs(CACHE, nil, value["data"], nil)))
|
||||
list = kit.Format(value["prev"])
|
||||
}) == nil {
|
||||
break
|
||||
}
|
||||
CATCH: {Name: "catch type name arg...", Help: "捕捉", Hand: func(m *ice.Message, arg ...string) {
|
||||
_story_catch(m, arg[0], arg[1], arg[2:]...)
|
||||
}},
|
||||
WATCH: {Name: "watch key name", Help: "释放", Hand: func(m *ice.Message, arg ...string) {
|
||||
_story_watch(m, arg[0], arg[1])
|
||||
}},
|
||||
INDEX: {Name: "index key", Help: "索引", Hand: func(m *ice.Message, arg ...string) {
|
||||
_story_index(m, arg[0], false)
|
||||
}},
|
||||
HISTORY: {Name: "history name", Help: "历史", Hand: func(m *ice.Message, arg ...string) {
|
||||
_story_history(m, arg[0])
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
_story_list(m, kit.Select("", arg, 0), kit.Select("", arg, 1))
|
||||
}},
|
||||
"/story/": {Name: "/story/", Help: "故事会", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
switch arg[0] {
|
||||
case PULL:
|
||||
list := m.Cmd(STORY, INDEX, m.Option("begin")).Append("list")
|
||||
for i := 0; i < 10 && list != "" && list != m.Option("end"); i++ {
|
||||
if m.Richs(STORY, nil, list, func(key string, value map[string]interface{}) {
|
||||
// 节点信息
|
||||
m.Push("list", key)
|
||||
m.Push("node", kit.Format(value))
|
||||
m.Push("data", value["data"])
|
||||
m.Push("save", kit.Format(m.Richs(CACHE, nil, value["data"], nil)))
|
||||
list = kit.Format(value["prev"])
|
||||
}) == nil {
|
||||
break
|
||||
}
|
||||
m.Log(ice.LOG_EXPORT, "%s %s", m.Option("begin"), m.FormatSize())
|
||||
|
||||
case PUSH:
|
||||
if m.Richs(CACHE, nil, m.Option("data"), nil) == nil {
|
||||
// 导入缓存
|
||||
m.Log(ice.LOG_IMPORT, "%v: %v", m.Option("data"), m.Option("save"))
|
||||
m.Conf(CACHE, kit.Keys("hash", m.Option("data")), kit.UnMarshal(m.Option("save")))
|
||||
}
|
||||
|
||||
node := kit.UnMarshal(m.Option("node")).(map[string]interface{})
|
||||
if m.Richs(STORY, nil, m.Option("list"), nil) == nil {
|
||||
// 导入节点
|
||||
m.Log(ice.LOG_IMPORT, "%v: %v", m.Option("list"), m.Option("node"))
|
||||
m.Conf(STORY, kit.Keys("hash", m.Option("list")), node)
|
||||
}
|
||||
|
||||
if head := m.Richs(STORY, "head", m.Option("story"), nil); head == nil {
|
||||
// 自动创建
|
||||
h := m.Rich(STORY, "head", kit.Dict(
|
||||
"scene", node["scene"], "story", m.Option("story"),
|
||||
"count", node["count"], "list", m.Option("list"),
|
||||
))
|
||||
m.Log(ice.LOG_CREATE, "%v: %v", h, m.Option("story"))
|
||||
} else if head["list"] == kit.Format(node["prev"]) || head["list"] == kit.Format(node["pull"]) {
|
||||
// 快速合并
|
||||
head["list"] = m.Option("list")
|
||||
head["count"] = node["count"]
|
||||
head["time"] = node["time"]
|
||||
} else {
|
||||
// 推送失败
|
||||
}
|
||||
|
||||
case UPLOAD:
|
||||
// 上传数据
|
||||
m.Cmdy(CACHE, "upload")
|
||||
|
||||
case DOWNLOAD:
|
||||
// 下载数据
|
||||
m.Cmdy(STORY, INDEX, arg[1])
|
||||
m.Render(kit.Select(ice.RENDER_DOWNLOAD, ice.RENDER_RESULT, m.Append("file") == ""), m.Append("text"))
|
||||
}
|
||||
}},
|
||||
}})
|
||||
m.Log(ice.LOG_EXPORT, "%s %s", m.Option("begin"), m.FormatSize())
|
||||
|
||||
case PUSH:
|
||||
if m.Richs(CACHE, nil, m.Option("data"), nil) == nil {
|
||||
// 导入缓存
|
||||
m.Log(ice.LOG_IMPORT, "%v: %v", m.Option("data"), m.Option("save"))
|
||||
m.Conf(CACHE, kit.Keys("hash", m.Option("data")), kit.UnMarshal(m.Option("save")))
|
||||
}
|
||||
|
||||
node := kit.UnMarshal(m.Option("node")).(map[string]interface{})
|
||||
if m.Richs(STORY, nil, m.Option("list"), nil) == nil {
|
||||
// 导入节点
|
||||
m.Log(ice.LOG_IMPORT, "%v: %v", m.Option("list"), m.Option("node"))
|
||||
m.Conf(STORY, kit.Keys("hash", m.Option("list")), node)
|
||||
}
|
||||
|
||||
if head := m.Richs(STORY, "head", m.Option("story"), nil); head == nil {
|
||||
// 自动创建
|
||||
h := m.Rich(STORY, "head", kit.Dict(
|
||||
"scene", node["scene"], "story", m.Option("story"),
|
||||
"count", node["count"], "list", m.Option("list"),
|
||||
))
|
||||
m.Log(ice.LOG_CREATE, "%v: %v", h, m.Option("story"))
|
||||
} else if head["list"] == kit.Format(node["prev"]) || head["list"] == kit.Format(node["pull"]) {
|
||||
// 快速合并
|
||||
head["list"] = m.Option("list")
|
||||
head["count"] = node["count"]
|
||||
head["time"] = node["time"]
|
||||
} else {
|
||||
// 推送失败
|
||||
}
|
||||
|
||||
case UPLOAD:
|
||||
// 上传数据
|
||||
m.Cmdy(CACHE, "upload")
|
||||
|
||||
case DOWNLOAD:
|
||||
// 下载数据
|
||||
m.Cmdy(STORY, INDEX, arg[1])
|
||||
m.Render(kit.Select(ice.RENDER_DOWNLOAD, ice.RENDER_RESULT, m.Append("file") == ""), m.Append("text"))
|
||||
}
|
||||
}},
|
||||
}})
|
||||
}
|
||||
|
||||
func _story_pull(m *ice.Message, arg ...string) {
|
||||
|
@ -1,8 +1,6 @@
|
||||
package yac
|
||||
|
||||
import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
)
|
||||
import ice "shylinux.com/x/icebergs"
|
||||
|
||||
const YAC = "yac"
|
||||
|
||||
|
@ -30,7 +30,7 @@ func init() {
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
link := "/share/cache/" + value[mdb.DATA]
|
||||
if m.PushDownload(mdb.LINK, value[mdb.NAME], link); len(arg) > 0 && kit.ExtIsImage(value[mdb.NAME]) {
|
||||
m.PushImages(kit.MDB_IMAGE, link)
|
||||
m.PushImages("image", link)
|
||||
}
|
||||
})
|
||||
}},
|
||||
|
@ -98,7 +98,7 @@ func _install_order(m *ice.Message, arg ...string) {
|
||||
}
|
||||
func _install_spawn(m *ice.Message, arg ...string) {
|
||||
if kit.Int(m.Option(tcp.PORT)) >= 10000 {
|
||||
p := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), m.Option(tcp.PORT))
|
||||
p := path.Join(m.Conf(cli.DAEMON, kit.Keym(nfs.PATH)), m.Option(tcp.PORT))
|
||||
if _, e := os.Stat(p); e == nil {
|
||||
m.Echo(p)
|
||||
return
|
||||
@ -107,7 +107,7 @@ func _install_spawn(m *ice.Message, arg ...string) {
|
||||
m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.RIGHT))
|
||||
}
|
||||
|
||||
target := path.Join(m.Conf(cli.DAEMON, kit.META_PATH), m.Option(tcp.PORT))
|
||||
target := path.Join(m.Conf(cli.DAEMON, kit.Keym(nfs.PATH)), m.Option(tcp.PORT))
|
||||
source := path.Join(m.Config(nfs.PATH), kit.TrimExt(m.Option(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) {
|
||||
@ -187,7 +187,7 @@ func init() {
|
||||
_install_service(m, arg...)
|
||||
|
||||
default: // 目录列表
|
||||
m.Option(nfs.DIR_ROOT, path.Join(m.Conf(cli.DAEMON, kit.META_PATH), arg[1]))
|
||||
m.Option(nfs.DIR_ROOT, path.Join(m.Conf(cli.DAEMON, kit.Keym(nfs.PATH)), arg[1]))
|
||||
m.Cmdy(nfs.CAT, kit.Select(ice.PWD, arg, 2))
|
||||
}
|
||||
}},
|
||||
|
@ -45,7 +45,7 @@ func _publish_file(m *ice.Message, file string, arg ...string) string {
|
||||
|
||||
// 发布文件
|
||||
target := path.Join(m.Config(nfs.PATH), kit.Select(path.Base(file), arg, 0))
|
||||
m.Log_EXPORT(PUBLISH, target, kit.MDB_FROM, file)
|
||||
m.Log_EXPORT(PUBLISH, target, "from", file)
|
||||
m.Cmd(nfs.LINK, target, file)
|
||||
return target
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ func init() {
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
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.Option(nfs.DIR_ROOT, m.Conf(PUBLISH, kit.Keym(nfs.PATH)))
|
||||
|
||||
m.Cmdy(nfs.DIR, WEBPACK, "time,size,path,action,link")
|
||||
}},
|
||||
|
4
exec.go
4
exec.go
@ -18,9 +18,9 @@ func (m *Message) TryCatch(msg *Message, silent bool, hand ...func(msg *Message)
|
||||
default:
|
||||
fileline := kit.FileLine(4, 5)
|
||||
m.Log(LOG_WARN, "catch: %s %s", e, fileline)
|
||||
m.Log(kit.MDB_CHAIN, msg.FormatChain())
|
||||
m.Log("chain", msg.FormatChain())
|
||||
m.Log(LOG_WARN, "catch: %s %s", e, fileline)
|
||||
m.Log(kit.MDB_STACK, msg.FormatStack())
|
||||
m.Log("stack", msg.FormatStack())
|
||||
m.Log(LOG_WARN, "catch: %s %s", e, fileline)
|
||||
if len(hand) > 1 {
|
||||
m.TryCatch(msg, silent, hand[1:]...)
|
||||
|
@ -26,7 +26,7 @@ func _alpha_find(m *ice.Message, method, word string) {
|
||||
}
|
||||
|
||||
// 搜索词汇
|
||||
msg := m.Cmd(cli.SYSTEM, "grep", "-rih", word, m.Config(kit.MDB_STORE))
|
||||
msg := m.Cmd(cli.SYSTEM, "grep", "-rih", word, m.Config(mdb.STORE))
|
||||
msg.CSV(msg.Result(), kit.Split(m.Config(mdb.FIELD))...).Table(func(index int, value map[string]string, head []string) {
|
||||
if m.FieldsIsDetail() {
|
||||
m.Push(mdb.DETAIL, value, kit.Split(m.Config(mdb.FIELD)))
|
||||
@ -39,7 +39,7 @@ func _alpha_find(m *ice.Message, method, word string) {
|
||||
func _alpha_load(m *ice.Message, file, name string) {
|
||||
// 清空数据
|
||||
meta := m.Confm(ALPHA, mdb.META)
|
||||
m.Assert(os.RemoveAll(path.Join(kit.Format(meta[kit.MDB_STORE]), name)))
|
||||
m.Assert(os.RemoveAll(path.Join(kit.Format(meta[mdb.STORE]), name)))
|
||||
m.Conf(ALPHA, name, "")
|
||||
|
||||
// 缓存配置
|
||||
@ -48,7 +48,7 @@ func _alpha_load(m *ice.Message, file, name string) {
|
||||
|
||||
// 保存词库
|
||||
m.Conf(ALPHA, kit.Keys(name, kit.Keym(mdb.LIMIT)), 0)
|
||||
m.Conf(ALPHA, kit.Keys(name, kit.Keym(kit.MDB_LEAST)), 0)
|
||||
m.Conf(ALPHA, kit.Keys(name, kit.Keym(mdb.LEAST)), 0)
|
||||
m.Echo("%s: %d", name, m.Grow(ALPHA, name, kit.Dict(WORD, ice.SP)))
|
||||
}
|
||||
|
||||
@ -62,8 +62,8 @@ const ALPHA = "alpha"
|
||||
var Index = &ice.Context{Name: ALPHA, Help: "英汉词典", Configs: map[string]*ice.Config{
|
||||
ALPHA: {Name: ALPHA, Help: "英汉词典", Value: kit.Data(
|
||||
nfs.REPOS, "word-dict", mdb.FIELD, "word,translation,definition",
|
||||
kit.MDB_STORE, path.Join(ice.USR_LOCAL_EXPORT, ALPHA), kit.MDB_FSIZE, "300000",
|
||||
mdb.LIMIT, "50000", kit.MDB_LEAST, "1000",
|
||||
mdb.STORE, path.Join(ice.USR_LOCAL_EXPORT, ALPHA), mdb.FSIZE, "300000",
|
||||
mdb.LIMIT, "50000", mdb.LEAST, "1000",
|
||||
)},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
ALPHA: {Name: "alpha method=word,line word auto", Help: "英汉", Action: map[string]*ice.Action{
|
||||
|
@ -25,7 +25,7 @@ func _input_find(m *ice.Message, method, word, limit string) {
|
||||
}
|
||||
|
||||
// 搜索词汇
|
||||
res := m.Cmdx(cli.SYSTEM, "grep", "-rn", word, m.Config(kit.MDB_STORE))
|
||||
res := m.Cmdx(cli.SYSTEM, "grep", "-rn", word, m.Config(mdb.STORE))
|
||||
bio := csv.NewReader(bytes.NewBufferString(strings.Replace(res, ":", ",", -1)))
|
||||
|
||||
for i := 0; i < kit.Int(limit); i++ {
|
||||
@ -49,11 +49,11 @@ func _input_load(m *ice.Message, file string, libs ...string) {
|
||||
|
||||
// 清空数据
|
||||
lib := kit.Select(path.Base(file), libs, 0)
|
||||
m.Assert(os.RemoveAll(path.Join(m.Config(kit.MDB_STORE), lib)))
|
||||
m.Assert(os.RemoveAll(path.Join(m.Config(mdb.STORE), lib)))
|
||||
m.Cmd(mdb.DELETE, m.PrefixKey(), "", mdb.HASH, mdb.ZONE, lib)
|
||||
prefix := kit.Keys(mdb.HASH, m.Rich(m.PrefixKey(), "", kit.Data(
|
||||
kit.MDB_STORE, path.Join(m.Config(kit.MDB_STORE), lib),
|
||||
m.ConfigSimple(kit.MDB_FSIZE, mdb.LIMIT, kit.MDB_LEAST),
|
||||
mdb.STORE, path.Join(m.Config(mdb.STORE), lib),
|
||||
m.ConfigSimple(mdb.FSIZE, mdb.LIMIT, mdb.LEAST),
|
||||
mdb.ZONE, lib, mdb.COUNT, 0,
|
||||
)))
|
||||
|
||||
@ -71,7 +71,7 @@ func _input_load(m *ice.Message, file string, libs ...string) {
|
||||
|
||||
// 保存词库
|
||||
m.Conf(m.PrefixKey(), kit.Keys(prefix, kit.Keym(mdb.LIMIT)), 0)
|
||||
m.Conf(m.PrefixKey(), kit.Keys(prefix, kit.Keym(kit.MDB_LEAST)), 0)
|
||||
m.Conf(m.PrefixKey(), kit.Keys(prefix, kit.Keym(mdb.LEAST)), 0)
|
||||
n := m.Grow(m.PrefixKey(), prefix, kit.Dict(TEXT, "成功", CODE, "z", WEIGHT, "0"))
|
||||
m.Log_IMPORT(m.PrefixKey(), lib, mdb.COUNT, n)
|
||||
m.Echo("%s: %d", lib, n)
|
||||
@ -80,10 +80,10 @@ func _input_load(m *ice.Message, file string, libs ...string) {
|
||||
func _input_push(m *ice.Message, lib, text, code, weight string) {
|
||||
if m.Richs(m.PrefixKey(), "", lib, nil) == nil {
|
||||
m.Rich(m.PrefixKey(), "", kit.Data(
|
||||
kit.MDB_STORE, path.Join(m.Config(kit.MDB_STORE), lib),
|
||||
kit.MDB_FSIZE, m.Config(kit.MDB_FSIZE),
|
||||
mdb.STORE, path.Join(m.Config(mdb.STORE), lib),
|
||||
mdb.FSIZE, m.Config(mdb.FSIZE),
|
||||
mdb.LIMIT, m.Config(mdb.LIMIT),
|
||||
kit.MDB_LEAST, m.Config(kit.MDB_LEAST),
|
||||
mdb.LEAST, m.Config(mdb.LEAST),
|
||||
mdb.ZONE, lib,
|
||||
))
|
||||
}
|
||||
@ -91,7 +91,7 @@ func _input_push(m *ice.Message, lib, text, code, weight string) {
|
||||
m.Richs(m.PrefixKey(), "", lib, func(key string, value map[string]interface{}) {
|
||||
prefix := kit.Keys(mdb.HASH, key)
|
||||
m.Conf(m.PrefixKey(), kit.Keys(prefix, kit.Keym(mdb.LIMIT)), 0)
|
||||
m.Conf(m.PrefixKey(), kit.Keys(prefix, kit.Keym(kit.MDB_LEAST)), 0)
|
||||
m.Conf(m.PrefixKey(), kit.Keys(prefix, kit.Keym(mdb.LEAST)), 0)
|
||||
n := m.Grow(m.PrefixKey(), prefix, kit.Dict(TEXT, text, CODE, code, WEIGHT, weight))
|
||||
m.Log_IMPORT(CODE, code, TEXT, text)
|
||||
m.Echo("%s: %d", lib, n)
|
||||
@ -128,7 +128,7 @@ func _input_list(m *ice.Message, lib string) {
|
||||
m.Option(nfs.DIR_DEEP, true)
|
||||
m.Option(nfs.DIR_TYPE, nfs.CAT)
|
||||
m.Richs(m.PrefixKey(), "", lib, func(key string, value map[string]interface{}) {
|
||||
m.Cmdy(nfs.DIR, kit.Value(value, kit.Keym(kit.MDB_STORE)), "time size line path")
|
||||
m.Cmdy(nfs.DIR, kit.Value(value, kit.Keym(mdb.STORE)), "time size line path")
|
||||
})
|
||||
}
|
||||
|
||||
|
@ -14,9 +14,9 @@ const WUBI = "wubi"
|
||||
func init() {
|
||||
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
|
||||
WUBI: {Name: WUBI, Help: "输入法", Value: kit.Data(
|
||||
kit.MDB_STORE, path.Join(ice.USR_LOCAL_EXPORT, INPUT, WUBI), kit.MDB_FSIZE, "200000",
|
||||
mdb.STORE, path.Join(ice.USR_LOCAL_EXPORT, INPUT, WUBI), mdb.FSIZE, "200000",
|
||||
mdb.SHORT, "zone", nfs.REPOS, "wubi-dict",
|
||||
mdb.LIMIT, "5000", kit.MDB_LEAST, "1000",
|
||||
mdb.LIMIT, "5000", mdb.LEAST, "1000",
|
||||
)},
|
||||
}, Commands: map[string]*ice.Command{
|
||||
WUBI: {Name: "wubi method=word,line code auto", Help: "五笔", Action: map[string]*ice.Action{
|
||||
|
@ -8,6 +8,7 @@ import (
|
||||
"shylinux.com/x/icebergs/base/cli"
|
||||
"shylinux.com/x/icebergs/base/ctx"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/nfs"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
)
|
||||
@ -78,7 +79,7 @@ func init() {
|
||||
m.Cmdy(cli.SYSTEM, TMUX, "new-window", "-t", m.Option(SESSION), "-dn", m.Option(mdb.NAME))
|
||||
|
||||
} else { // 创建会话
|
||||
m.Option(cli.CMD_DIR, path.Join(m.Conf(web.DREAM, kit.META_PATH), m.Option(mdb.NAME)))
|
||||
m.Option(cli.CMD_DIR, path.Join(m.Conf(web.DREAM, kit.Keym(nfs.PATH)), m.Option(mdb.NAME)))
|
||||
ls := kit.Split(m.Option(mdb.NAME), "-_")
|
||||
name := ls[len(ls)-1]
|
||||
|
||||
|
@ -1,210 +0,0 @@
|
||||
package docker
|
||||
|
||||
import (
|
||||
"path"
|
||||
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/base/cli"
|
||||
"shylinux.com/x/icebergs/base/gdb"
|
||||
"shylinux.com/x/icebergs/base/mdb"
|
||||
"shylinux.com/x/icebergs/base/tcp"
|
||||
"shylinux.com/x/icebergs/base/web"
|
||||
"shylinux.com/x/icebergs/core/code"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
|
||||
"strings"
|
||||
)
|
||||
|
||||
func MOD(str string) string { return str }
|
||||
func CMD(str string) string { return str }
|
||||
func ARG(str string) string { return str }
|
||||
|
||||
var DOCKER = MOD("docker")
|
||||
var (
|
||||
IMAGE = CMD("image")
|
||||
CONTAINER = CMD("container")
|
||||
COMMAND = CMD("command")
|
||||
)
|
||||
var (
|
||||
ALPINE = ARG("alpine")
|
||||
CENTOS = ARG("centos")
|
||||
)
|
||||
var (
|
||||
_REPOSITORY = ARG("REPOSITORY")
|
||||
_TAG = ARG("TAG")
|
||||
|
||||
_CONTAINER_ID = ARG("CONTAINER_ID")
|
||||
_IMAGE_ID = ARG("IMAGE_ID")
|
||||
)
|
||||
|
||||
var _docker = []string{cli.SYSTEM, DOCKER}
|
||||
var _image = []string{cli.SYSTEM, DOCKER, IMAGE}
|
||||
var _container = []string{cli.SYSTEM, DOCKER, CONTAINER}
|
||||
|
||||
var Index = &ice.Context{Name: DOCKER, Help: "虚拟机",
|
||||
Configs: map[string]*ice.Config{
|
||||
DOCKER: {Name: DOCKER, Help: "虚拟机", Value: kit.Data(
|
||||
"path", "usr/docker",
|
||||
"repos", CENTOS, "build", []interface{}{
|
||||
"home",
|
||||
// "mount",
|
||||
},
|
||||
ALPINE, []interface{}{
|
||||
`sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories`,
|
||||
`apk add curl`,
|
||||
},
|
||||
CENTOS, []interface{}{
|
||||
`curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo`,
|
||||
`yum makecache`,
|
||||
},
|
||||
)},
|
||||
IMAGE: {Name: IMAGE, Help: "镜像", Value: kit.Data(
|
||||
"action", []interface{}{"build", "push", "pull", "start", "clear"},
|
||||
)},
|
||||
CONTAINER: {Name: CONTAINER, Help: "容器", Value: kit.Data(
|
||||
"action", []interface{}{"open", "start", "stop", "restart", "clear"},
|
||||
)},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
IMAGE: {Name: "image IMAGE_ID=auto auto 清理:button", Help: "镜像管理", Meta: kit.Dict(
|
||||
"detail", []string{"运行", "清理", "删除"},
|
||||
), Action: map[string]*ice.Action{
|
||||
web.PULL: {Name: "pull", Help: "更新", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(_image, "pull", m.Option(_REPOSITORY))
|
||||
}},
|
||||
web.PUSH: {Name: "push", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(_image, "push", m.Option(_REPOSITORY))
|
||||
}},
|
||||
gdb.BUILD: {Name: "build", Help: "生成", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd(cli.SYSTEM, "rm", "-r", "usr/docker/meta/demo/")
|
||||
m.Cmd(cli.SYSTEM, "rm", "-r", "usr/docker/meta/volcanos/")
|
||||
m.Cmd(cli.SYSTEM, "cp", "-r", "usr/demo/", "usr/docker/meta/demo/")
|
||||
m.Cmd(cli.SYSTEM, "cp", "-r", "usr/volcanos/", "usr/docker/meta/volcanos/")
|
||||
m.Cmdy(_docker, "build", m.Conf(DOCKER, "meta.path"), "-t", m.Option(_REPOSITORY),
|
||||
"-f", path.Join(m.Conf(DOCKER, "meta.path"), m.Option(_REPOSITORY)),
|
||||
)
|
||||
}},
|
||||
gdb.START: {Name: "start", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(_docker, "run", "-dt", "-p", m.Cmdx(tcp.PORT, "get")+":9020", m.Option(_REPOSITORY)+":"+m.Option(_TAG))
|
||||
}},
|
||||
gdb.PRUNE: {Name: "prune", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(_image, "prune", "-f")
|
||||
}},
|
||||
gdb.CLEAR: {Name: "clear", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(_image, "rm", m.Option(_IMAGE_ID))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) > 0 {
|
||||
// 容器详情
|
||||
res := m.Cmdx(_image, "inspect", arg[0])
|
||||
m.PushDetail(kit.KeyValue(nil, "", kit.Parse(nil, "", kit.Split(res)...)))
|
||||
return
|
||||
}
|
||||
|
||||
// 镜像列表
|
||||
m.Split(strings.Replace(m.Cmdx(_docker, "images"), "IMAGE ID", _IMAGE_ID, 1), "index", " ", "\n")
|
||||
m.Sort(_REPOSITORY)
|
||||
|
||||
// 镜像操作
|
||||
m.PushAction(m.Confv(IMAGE, "meta.action"))
|
||||
}},
|
||||
CONTAINER: {Name: "container CONTAINER_ID=auto auto 清理:button", Help: "容器管理", Meta: kit.Dict(
|
||||
"detail", []string{"进入", "启动", "停止", "重启", "清理", "编辑", "删除"},
|
||||
), Action: map[string]*ice.Action{
|
||||
gdb.OPEN: {Name: "open", Help: "进入", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmd("web.code.tmux", m.Option("NAMES"))
|
||||
m.Cmdy(cli.SYSTEM, "tmux", "new-window", "-t", m.Option("NAMES"), "-n", m.Option("NAMES"),
|
||||
"-PF", "#{session_name}:#{window_name}.1", "docker exec -it "+m.Option("NAMES")+" sh")
|
||||
}},
|
||||
gdb.START: {Name: "start", Help: "启动", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(_container, "start", m.Option(_CONTAINER_ID))
|
||||
}},
|
||||
gdb.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(_container, "stop", m.Option(_CONTAINER_ID))
|
||||
}},
|
||||
gdb.RESTART: {Name: "restart", Help: "重启", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(_container, "restart", m.Option(_CONTAINER_ID))
|
||||
}},
|
||||
gdb.CHANGE: {Name: "change", Help: "更改", Hand: func(m *ice.Message, arg ...string) {
|
||||
switch arg[0] {
|
||||
case "NAMES":
|
||||
m.Cmdy(_container, "rename", m.Option(_CONTAINER_ID), arg[1])
|
||||
}
|
||||
}},
|
||||
gdb.PRUNE: {Name: "prune", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(_container, "prune", "-f")
|
||||
}},
|
||||
gdb.CLEAR: {Name: "clear", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||
m.Cmdy(_container, "rm", m.Option(_CONTAINER_ID))
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) > 0 {
|
||||
// 容器详情
|
||||
res := m.Cmdx(_container, "inspect", arg[0])
|
||||
m.PushDetail(kit.KeyValue(nil, "", kit.Parse(nil, "", kit.Split(res)...)))
|
||||
return
|
||||
}
|
||||
|
||||
// 容器列表
|
||||
m.Split(strings.Replace(m.Cmdx(_docker, "ps", "-a"), "CONTAINER ID", _CONTAINER_ID, 1), "index", " ", "\n")
|
||||
m.Sort("NAMES")
|
||||
m.Table(func(index int, value map[string]string, head []string) {
|
||||
if strings.TrimSpace(value["PORTS"]) == "" {
|
||||
return
|
||||
}
|
||||
ls := strings.Split(value["PORTS"], "->")
|
||||
ls = strings.Split(ls[0], ":")
|
||||
u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
|
||||
p := kit.Format("http://%s:%s", u.Hostname(), ls[1])
|
||||
m.Echo("%s\n", m.Cmdx(mdb.RENDER, web.RENDER.A, p, p))
|
||||
})
|
||||
|
||||
// 容器操作
|
||||
m.PushAction(m.Confv(CONTAINER, "meta.action"))
|
||||
}},
|
||||
COMMAND: {Name: "command NAMES=auto cmd... auto", Help: "命令管理", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) < 2 {
|
||||
m.Cmdy(CONTAINER)
|
||||
return
|
||||
}
|
||||
m.Echo(m.Cmdx(_container, "exec", arg[0], kit.Split(kit.Select("pwd", arg, 1), " ", " ")))
|
||||
}},
|
||||
|
||||
gdb.INIT: {Name: "init", Help: "初始化", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Watch(web.DREAM_START)
|
||||
}},
|
||||
gdb.AUTO: {Name: "auto", Help: "自动化", Action: map[string]*ice.Action{
|
||||
web.DREAM_START: {Hand: func(m *ice.Message, arg ...string) {
|
||||
if cli.IsSuccess(m.Cmd(_container, "start", arg[0])) {
|
||||
// 重启容器
|
||||
return
|
||||
}
|
||||
|
||||
args := []string{"--name", arg[0],
|
||||
"-e", "ctx_user=" + cli.UserName,
|
||||
"-e", "ctx_dev=" + m.Conf(cli.RUNTIME, "conf.ctx_dev"),
|
||||
}
|
||||
kit.Fetch(m.Confv(DOCKER, "meta.build"), func(index int, value string) {
|
||||
switch value {
|
||||
case "home":
|
||||
args = append(args, "-w", "/root")
|
||||
case "mount":
|
||||
p := kit.Path(m.Conf(web.DREAM, "meta.path"), arg[0])
|
||||
args = append(args, "--mount", kit.Format("type=bind,source=%s,target=/root", p))
|
||||
}
|
||||
})
|
||||
|
||||
// 创建容器
|
||||
repos := m.Conf(DOCKER, "meta.repos")
|
||||
pid := m.Cmdx(_docker, "run", "-dt", args, repos)
|
||||
m.Log_CREATE(repos, arg[0], "pid", pid)
|
||||
|
||||
kit.Fetch(m.Confv(DOCKER, kit.Keys("meta", repos)), func(index int, value string) {
|
||||
m.Logs("cmd", value, "res", m.Cmdx(_container, "exec", arg[0], kit.Split(value)))
|
||||
})
|
||||
}},
|
||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}},
|
||||
},
|
||||
}
|
||||
|
||||
func init() { code.Index.Register(Index, nil) }
|
@ -1,72 +0,0 @@
|
||||
package md
|
||||
|
||||
import (
|
||||
ice "shylinux.com/x/icebergs"
|
||||
"shylinux.com/x/icebergs/core/wiki"
|
||||
kit "shylinux.com/x/toolkits"
|
||||
|
||||
"io/ioutil"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
"github.com/gomarkdown/markdown"
|
||||
)
|
||||
|
||||
/*
|
||||
func (m *Message) Prefile(favor string, id string) map[string]string {
|
||||
// TODO
|
||||
res := map[string]string{}
|
||||
m.Option("render", "")
|
||||
m.Option("_action", "")
|
||||
m.Cmd("web.favor", kit.Select(m.Option("favor"), favor), id).Table(func(index int, value map[string]string, head []string) {
|
||||
res[value["key"]] = value["value"]
|
||||
})
|
||||
|
||||
res["content"] = m.Cmdx("cli.system", "sed", "-n", kit.Format("%d,%dp", kit.Int(res["extra.row"]), kit.Int(res["extra.row"])+3), res["extra.buf"])
|
||||
return res
|
||||
}
|
||||
*/
|
||||
var Index = &ice.Context{Name: "md", Help: "md",
|
||||
Caches: map[string]*ice.Cache{},
|
||||
Configs: map[string]*ice.Config{
|
||||
"note": {Name: "note", Help: "笔记", Value: kit.Data(
|
||||
"path", "", "head", "time size line path",
|
||||
)},
|
||||
|
||||
"md": {Name: "md", Help: "md", Value: kit.Data(kit.MDB_SHORT, "name")},
|
||||
},
|
||||
Commands: map[string]*ice.Command{
|
||||
ice.ICE_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}},
|
||||
ice.ICE_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}},
|
||||
|
||||
"md": {Name: "md", Help: "md", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Echo("hello world")
|
||||
}},
|
||||
|
||||
"note": {Name: "note file", Help: "文档", Meta: kit.Dict(
|
||||
ice.Display("inner"),
|
||||
), List: kit.List(
|
||||
kit.MDB_INPUT, "text", "name", "path", "value", "README.md", "action", "auto",
|
||||
kit.MDB_INPUT, "button", "name", "执行", "action", "auto",
|
||||
kit.MDB_INPUT, "button", "name", "返回", "cb", "Last",
|
||||
), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if len(arg) > 0 && strings.HasSuffix(arg[0], ".md") {
|
||||
arg[0] = path.Join(m.Conf("note", "meta.path"), arg[0])
|
||||
}
|
||||
m.Cmdy(kit.Select("_tree", "_text", len(arg) > 0 && strings.HasSuffix(arg[0], ".md")), arg)
|
||||
}},
|
||||
"_tree": {Name: "_tree [path [true]]", Help: "文库", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
m.Option("dir_reg", ".*\\.md")
|
||||
m.Option("dir_deep", kit.Select("", arg, 1))
|
||||
m.Cmdy("nfs.dir", kit.Select(m.Conf("note", "meta.path"), arg, 0), m.Conf("note", "meta.head"))
|
||||
}},
|
||||
"_text": {Name: "_text file", Help: "文章", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||
if b, e := ioutil.ReadFile(arg[0]); m.Assert(e) {
|
||||
data := markdown.ToHTML(b, nil, nil)
|
||||
m.Echo(string(data))
|
||||
}
|
||||
}},
|
||||
},
|
||||
}
|
||||
|
||||
func init() { wiki.Index.Register(Index, nil) }
|
@ -1,9 +0,0 @@
|
||||
Volcanos("onimport", {help: "导入数据", list: [],
|
||||
"init": function(can, msg, cb, output, action, option) {},
|
||||
})
|
||||
Volcanos("onaction", {help: "控件菜单", list: []})
|
||||
Volcanos("onchoice", {help: "控件交互", list: ["刷新"]
|
||||
"刷新": function(event, can, value, cmd, target) {},
|
||||
})
|
||||
Volcanos("ondetail", {help: "控件详情", list: []})
|
||||
Volcanos("onexport", {help: "导出数据", list: []})
|
@ -1 +0,0 @@
|
||||
title "md"
|
@ -13,8 +13,8 @@ import (
|
||||
)
|
||||
|
||||
func _vim_pkg(m *ice.Message, url string) string {
|
||||
p := path.Join(m.Conf(code.INSTALL, kit.META_PATH), path.Base(url))
|
||||
return kit.Path(m.Conf(code.INSTALL, kit.META_PATH), strings.Split(m.Cmdx(cli.SYSTEM, "sh", "-c", kit.Format("tar tf %s| head -n1", p)), "/")[0])
|
||||
p := path.Join(m.Conf(code.INSTALL, kit.Keym(nfs.PATH)), path.Base(url))
|
||||
return kit.Path(m.Conf(code.INSTALL, kit.Keym(nfs.PATH)), strings.Split(m.Cmdx(cli.SYSTEM, "sh", "-c", kit.Format("tar tf %s| head -n1", p)), "/")[0])
|
||||
}
|
||||
|
||||
const VIM = "vim"
|
||||
|
Loading…
x
Reference in New Issue
Block a user