1
0
forked from x/icebergs

opt conf.go

This commit is contained in:
harveyshao 2021-10-14 13:04:06 +08:00
parent c7551a6dbd
commit 2d23491876
32 changed files with 166 additions and 180 deletions

View File

@ -19,7 +19,7 @@ func _cat_ext(name string) string {
}
func _cat_right(m *ice.Message, name string) bool {
switch strings.Split(name, "/")[0] {
case kit.SSH_ETC, kit.SSH_VAR:
case ice.ETC, ice.VAR:
if m.Warn(m.Option(ice.MSG_USERROLE) == aaa.VOID, ice.ErrNotRight, "of", name) {
return false
}

View File

@ -2,8 +2,6 @@ package ssh
import (
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/tcp"
kit "shylinux.com/x/toolkits"
)
const SSH = "ssh"
@ -11,12 +9,6 @@ const SSH = "ssh"
var Index = &ice.Context{Name: SSH, Help: "终端模块", Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Load()
m.Richs(SESSION, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
kit.Value(value, kit.Keym(kit.MDB_STATUS), tcp.CLOSE)
})
m.Richs(CHANNEL, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
kit.Value(value, kit.Keym(kit.MDB_STATUS), tcp.CLOSE)
})
}},
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if f, ok := m.Target().Server().(*Frame); ok {
@ -28,7 +20,6 @@ var Index = &ice.Context{Name: SSH, Help: "终端模块", Commands: map[string]*
func init() {
ice.Index.Register(Index, &Frame{},
CONNECT, SESSION, SERVICE, CHANNEL,
SOURCE, TARGET, PROMPT, PRINTF, SCREEN, RETURN,
)
}

View File

@ -99,11 +99,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[kit.SSH_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = kit.Format(s), size, total
value[kit.MDB_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = kit.Format(s), size, total
})
default:
if s != step && s%10 == 0 {
m.Log_IMPORT(kit.MDB_FILE, p, kit.SSH_STEP, s,
m.Log_IMPORT(kit.MDB_FILE, p, kit.MDB_STEP, s,
kit.MDB_SIZE, kit.FmtSize(int64(size)), kit.MDB_TOTAL, kit.FmtSize(int64(total)))
}
}

View File

@ -76,7 +76,7 @@ func _dream_show(m *ice.Message, name string) {
m.Option(cli.CMD_DIR, p)
m.Optionv(cli.CMD_ENV, kit.Simple(
"ctx_dev", "http://:"+m.Cmd(SERVE).Append(tcp.PORT),
cli.PATH, kit.Path(path.Join(p, kit.SSH_BIN))+":"+kit.Path(kit.SSH_BIN)+":"+os.Getenv(cli.PATH),
cli.PATH, kit.Path(path.Join(p, ice.BIN))+":"+kit.Path(ice.BIN)+":"+os.Getenv(cli.PATH),
"USER", ice.Info.UserName, m.Confv(DREAM, kit.Keym(cli.ENV)),
))
// 启动任务
@ -140,7 +140,7 @@ func init() {
Configs: map[string]*ice.Config{
DREAM: {Name: DREAM, Help: "梦想家", Value: kit.Data(kit.MDB_PATH, ice.USR_LOCAL_WORK,
cli.CMD, []interface{}{"ice.bin", SPACE, tcp.DIAL},
cli.ENV, kit.Dict(cli.CTX_LOG, ice.BIN_BOOTLOG),
cli.ENV, kit.Dict(cli.CTX_LOG, ice.BIN_BOOT_LOG),
"miss", `#!/bin/bash
if [ "$ISH_CONF_PRE" = "" ]; then
[ -f $PWD/.ish/plug.sh ] || [ -f $HOME/.ish/plug.sh ] || git clone ${ISH_CONF_HUB_PROXY:="https://"}shylinux.com/x/intshell $PWD/.ish

View File

@ -67,7 +67,7 @@ func _serve_main(m *ice.Message, w http.ResponseWriter, r *http.Request) bool {
msg := m.Spawn()
msg.W, msg.R = w, r
repos := kit.Select(ice.INTSHELL, ice.VOLCANOS, strings.Contains(r.Header.Get("User-Agent"), "Mozilla/5.0"))
Render(msg, ice.RENDER_DOWNLOAD, path.Join(m.Conf(SERVE, kit.Keym(repos, kit.SSH_PATH)), m.Conf(SERVE, kit.Keym(repos, kit.SSH_INDEX))))
Render(msg, ice.RENDER_DOWNLOAD, path.Join(m.Conf(SERVE, kit.Keym(repos, kit.MDB_PATH)), m.Conf(SERVE, kit.Keym(repos, kit.MDB_INDEX))))
return false
}
@ -246,12 +246,12 @@ func init() {
"x", true, ice.PUBLISH, true,
), LOGHEADERS, false,
kit.SSH_STATIC, kit.Dict("/", ice.USR_VOLCANOS),
ice.VOLCANOS, kit.Dict(kit.MDB_PATH, ice.USR_VOLCANOS, kit.SSH_INDEX, "page/index.html",
"static", kit.Dict("/", ice.USR_VOLCANOS),
ice.VOLCANOS, kit.Dict(kit.MDB_PATH, ice.USR_VOLCANOS, kit.MDB_INDEX, "page/index.html",
kit.SSH_REPOS, "https://shylinux.com/x/volcanos", kit.SSH_BRANCH, kit.SSH_MASTER,
), ice.PUBLISH, ice.USR_PUBLISH,
ice.INTSHELL, kit.Dict(kit.MDB_PATH, ice.USR_INTSHELL, kit.SSH_INDEX, ice.INDEX_SH,
ice.INTSHELL, kit.Dict(kit.MDB_PATH, ice.USR_INTSHELL, kit.MDB_INDEX, ice.INDEX_SH,
kit.SSH_REPOS, "https://shylinux.com/x/intshell", kit.SSH_BRANCH, kit.SSH_MASTER,
), ice.REQUIRE, ".ish/pluged",
)},

View File

@ -37,7 +37,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] {
case kit.SSH_ETC, kit.SSH_VAR: // 私有文件
case ice.ETC, ice.VAR: // 私有文件
if m.Option(ice.MSG_USERROLE) == aaa.VOID {
m.Render(STATUS, http.StatusUnauthorized, ice.ErrNotRight)
return // 没有权限

35
conf.go
View File

@ -3,6 +3,7 @@ package ice
const (
SP = " "
NL = "\n"
PT = "."
OK = "ok"
TRUE = "true"
@ -11,15 +12,29 @@ const (
FAILURE = "failure"
INIT = "init"
EXIT = "exit"
SAVE = "save"
LOAD = "load"
AUTO = "auto"
HELP = "help"
SAVE = "save"
EXIT = "exit"
ICE = "ice"
SHY = "shy"
DEV = "dev"
WEB = "web"
ICE = "ice"
RUN = "run"
POD = "pod"
CTX = "ctx"
CMD = "cmd"
ARG = "arg"
OPT = "opt"
SRC = "src"
ETC = "etc"
BIN = "bin"
VAR = "var"
USR = "usr"
)
const ( // MOD
MOD_DIR = 0750
@ -75,10 +90,11 @@ const ( // DIR
VAR_TRASH = "var/trash"
BIN_ICE_SH = "bin/ice.sh"
BIN_ICE_BIN = "bin/ice.bin"
BIN_BOOTLOG = "bin/boot.log"
BIN_BOOT_LOG = "bin/boot.log"
ETC_INIT_SHY = "etc/init.shy"
ETC_EXIT_SHY = "etc/exit.shy"
ETC_MISS_SH = "etc/miss.sh"
ETC_PATH = "etc/path"
SRC_HELP = "src/help"
SRC_MAIN_SHY = "src/main.shy"
@ -104,8 +120,8 @@ const ( // MSG
MSG_OUTPUT = "_output"
MSG_ARGS = "_args"
MSG_DAEMON = "_daemon"
MSG_UPLOAD = "_upload"
MSG_DAEMON = "_daemon"
MSG_ACTION = "_action"
MSG_STATUS = "_status"
@ -126,11 +142,12 @@ const ( // MSG
MSG_USERDATA = "user.data"
MSG_USERNICK = "user.nick"
MSG_USERNAME = "user.name"
MSG_USERZONE = "user.zone"
MSG_USERROLE = "user.role"
MSG_USERZONE = "user.zone"
MSG_LANGUAGE = "user.lang"
MSG_TITLE = "sess.title"
MSG_TOPIC = "sess.topic"
MSG_RIVER = "sess.river"
MSG_STORM = "sess.storm"
MSG_LOCAL = "sess.local"
@ -152,13 +169,13 @@ const ( // RENDER
RENDER_IMAGES = "_images"
RENDER_VIDEOS = "_videos"
RENDER_TEMPLATE = "_template"
RENDER_DOWNLOAD = "_download"
RENDER_REDIRECT = "_redirect"
RENDER_DOWNLOAD = "_download"
)
const ( // PROCESS
PROCESS_LOCATION = "_location"
PROCESS_REWRITE = "_rewrite"
PROCESS_REFRESH = "_refresh"
PROCESS_REWRITE = "_rewrite"
PROCESS_DISPLAY = "_display"
PROCESS_FIELD = "_field"
PROCESS_INNER = "_inner"
@ -173,8 +190,8 @@ const ( // PROCESS
)
const ( // Err
ErrWarn = "warn: "
ErrExpire = "expire: "
ErrExists = "exists: "
ErrExpire = "expire: "
ErrNotLogin = "not login: "
ErrNotFound = "not found: "
ErrNotRight = "not right: "

View File

@ -89,9 +89,6 @@ func init() {
SHARE: {Name: "share type", Help: "共享", Hand: func(m *ice.Message, arg ...string) {
_header_share(m, arg...)
}},
GRANT: {Name: "grant space", Help: "授权", Hand: func(m *ice.Message, arg ...string) {
_header_grant(m, arg...)
}},
aaa.LOGIN: {Name: "login", Help: "密码登录", Hand: func(m *ice.Message, arg ...string) {
if aaa.UserLogin(m, arg[0], arg[1]) {
@ -127,5 +124,11 @@ func init() {
}
m.Echo(m.Conf(HEADER, kit.Keym(TITLE)))
}},
HEADER: {Name: "header", Help: "标题栏", Action: map[string]*ice.Action{
GRANT: {Name: "grant space", Help: "授权", Hand: func(m *ice.Message, arg ...string) {
_header_grant(m, arg...)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
}},
}})
}

View File

@ -157,12 +157,12 @@ func init() {
}
m.Option("tag", kit.Format("`name:\"%s\" help:\"%s\"`", m.Option("list"), m.Option("help")))
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_ZONE), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) {
if p := path.Join(ice.SRC, m.Option(kit.MDB_ZONE), kit.Keys(m.Option(kit.MDB_NAME), SHY)); !kit.FileExists(p) {
_autogen_script(m, p)
_autogen_source(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_NAME))
}
if p := path.Join(kit.SSH_SRC, m.Option(kit.MDB_ZONE), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) {
if p := path.Join(ice.SRC, m.Option(kit.MDB_ZONE), kit.Keys(m.Option(kit.MDB_NAME), GO)); !kit.FileExists(p) {
_autogen_module(m, p)
_autogen_import(m, m.Option(kit.MDB_MAIN), m.Option(kit.MDB_ZONE), _autogen_mod(m, ice.GO_MOD))
}
@ -171,7 +171,7 @@ func init() {
switch arg[0] {
case kit.MDB_MAIN:
m.Option(nfs.DIR_REG, `.*\.go`)
m.Cmdy(nfs.DIR, kit.SSH_SRC, "path,size,time")
m.Cmdy(nfs.DIR, ice.SRC, "path,size,time")
m.RenameAppend(kit.MDB_PATH, arg[0])
}
}},
@ -183,7 +183,7 @@ func init() {
_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], "/") {
if m.Option(nfs.DIR_ROOT, ice.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

@ -37,7 +37,7 @@ func _install_download(m *ice.Message) {
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
value[kit.MDB_STEP], value[kit.MDB_SIZE], value[kit.MDB_TOTAL] = n, size, total
toast(name, size, total)
p = n
}

View File

@ -24,7 +24,7 @@ func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
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))
dir := m.Conf(web.SERVE, kit.Keym(ice.VOLCANOS, kit.MDB_PATH))
css, _, e := kit.Create(path.Join(dir, "page/cache.css"))
m.Assert(e)
defer css.Close()

View File

@ -35,6 +35,11 @@ const (
PROMPT = "prompt"
)
const (
SSH_SHELL = "shell"
SSH_BREAK = "break"
)
const SPARK = "spark"
func init() {
@ -43,13 +48,13 @@ func init() {
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
ice.AddRender(ice.RENDER_SCRIPT, func(m *ice.Message, cmd string, args ...interface{}) string {
arg := kit.Simple(args...)
if len(arg) == 1 && arg[0] != kit.SSH_BREAK {
arg = []string{kit.SSH_SHELL, arg[0]}
if len(arg) == 1 && arg[0] != SSH_BREAK {
arg = []string{SSH_SHELL, arg[0]}
}
list := []string{kit.Format(`<div class="story" data-type="spark" data-name="%s">`, arg[0])}
for _, l := range strings.Split(strings.Join(arg[1:], "\n"), "\n") {
switch list = append(list, "<div>"); arg[0] {
case kit.SSH_SHELL:
case SSH_SHELL:
list = append(list, "<label>", "$ ", "</label>")
default:
list = append(list, "<label>", "&gt; ", "</label>")

20
exec.go
View File

@ -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("chain", msg.FormatChain())
m.Log(kit.MDB_CHAIN, msg.FormatChain())
m.Log(LOG_WARN, "catch: %s %s", e, fileline)
m.Log("stack", msg.FormatStack())
m.Log(kit.MDB_STACK, msg.FormatStack())
m.Log(LOG_WARN, "catch: %s %s", e, fileline)
if len(hand) > 1 { // 捕获异常
m.TryCatch(msg, silent, hand[1:]...)
@ -79,7 +79,7 @@ func (m *Message) Done(b bool) bool {
func (m *Message) Call(sync bool, cb func(*Message) *Message) *Message {
wait := make(chan bool, 2)
p := kit.Select("10s", m.Option("timeout"))
p := kit.Select("10s", m.Option(kit.MDB_TIMEOUT))
t := time.AfterFunc(kit.Duration(p), func() {
m.Warn(true, "%s timeout %v", p, m.Detailv())
wait <- false
@ -126,9 +126,9 @@ func (m *Message) Go(cb interface{}, args ...interface{}) *Message {
func (m *Message) Watch(key string, arg ...string) *Message {
if len(arg) == 0 {
arg = append(arg, m.Prefix("auto"))
arg = append(arg, m.Prefix(AUTO))
}
m.Cmd("gdb.event", "action", "listen", "event", key, "cmd", strings.Join(arg, " "))
m.Cmd("gdb.event", "action", "listen", "event", key, CMD, strings.Join(arg, SP))
return m
}
func (m *Message) Event(key string, arg ...string) *Message {
@ -137,8 +137,8 @@ func (m *Message) Event(key string, arg ...string) *Message {
}
func (m *Message) Right(arg ...interface{}) bool {
return m.Option(MSG_USERROLE) == "root" || !m.Warn(m.Cmdx("aaa.role", "right",
m.Option(MSG_USERROLE), strings.ReplaceAll(kit.Keys(arg...), "/", ".")) != "ok",
ErrNotRight, m.Option(MSG_USERROLE), " of ", strings.Join(kit.Simple(arg), "."), " at ", kit.FileLine(2, 3))
m.Option(MSG_USERROLE), strings.ReplaceAll(kit.Keys(arg...), "/", PT)) != OK,
ErrNotRight, m.Option(MSG_USERROLE), " of ", strings.Join(kit.Simple(arg), PT), " at ", kit.FileLine(2, 3))
}
func (m *Message) Space(arg interface{}) []string {
if arg == nil || arg == "" || kit.Format(arg) == m.Conf("cli.runtime", "node.name") {
@ -147,9 +147,9 @@ func (m *Message) Space(arg interface{}) []string {
return []string{"web.space", kit.Format(arg)}
}
func (m *Message) PodCmd(arg ...interface{}) bool {
if pod := m.Option("pod"); pod != "" {
m.Option("pod", "")
if m.Option("_upload") != "" {
if pod := m.Option(POD); pod != "" {
m.Option(POD, "")
if m.Option(MSG_UPLOAD) != "" {
msg := m.Cmd("cache", "upload")
m.Option(MSG_UPLOAD, msg.Append(kit.MDB_HASH), msg.Append(kit.MDB_NAME), msg.Append(kit.MDB_SIZE))
}

4
go.mod
View File

@ -4,8 +4,6 @@ go 1.11
require (
github.com/gorilla/websocket v1.4.2
github.com/kr/pty v1.1.8
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2
shylinux.com/x/toolkits v0.3.4
shylinux.com/x/toolkits v0.3.5
)

19
go.sum
View File

@ -1,19 +1,4 @@
github.com/creack/pty v1.1.7 h1:6pwm8kMQKCmgUg0ZHTm5+/YvRK0s3THD/28+T6/kk4A=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e h1:MRM5ITcdelLK2j1vwZ3Je0FKVCfqOLp5zO6trqMLYs0=
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e/go.mod h1:XV66xRDqSt+GTGFMVlhk3ULuV0y9ZmzeVGR4mloJI3M=
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w=
golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
shylinux.com/x/toolkits v0.3.3 h1:yNH54CANAv7cPT264tpnDt9G2BVfGwLC9y3rxtU6pkg=
shylinux.com/x/toolkits v0.3.3/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA=
shylinux.com/x/toolkits v0.3.5 h1:J0KlCuIPiJc074+5T0nUJawp3MJGH8VQKzqlpRsVQ70=
shylinux.com/x/toolkits v0.3.5/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA=

12
init.go
View File

@ -17,7 +17,7 @@ func (f *Frame) Spawn(m *Message, c *Context, arg ...string) Server {
return &Frame{}
}
func (f *Frame) Begin(m *Message, arg ...string) Server {
m.Log(LOG_BEGIN, "ice")
m.Log(LOG_BEGIN, ICE)
defer m.Cost("begin ice")
list := map[*Context]*Message{m.target: m}
@ -31,7 +31,7 @@ func (f *Frame) Begin(m *Message, arg ...string) Server {
return f
}
func (f *Frame) Start(m *Message, arg ...string) bool {
m.Log(LOG_START, "ice")
m.Log(LOG_START, ICE)
defer m.Cost("start ice")
m.Cap(CTX_STATUS, CTX_START)
@ -41,11 +41,9 @@ func (f *Frame) Start(m *Message, arg ...string) bool {
return true
}
func (f *Frame) Close(m *Message, arg ...string) bool {
m.TryCatch(m, true, func(m *Message) {
m.target.wg.Wait()
})
m.TryCatch(m, true, func(m *Message) { m.target.wg.Wait() })
m.Log(LOG_CLOSE, "ice")
m.Log(LOG_CLOSE, ICE)
defer m.Cost("close ice")
list := map[*Context]*Message{m.target: m}
@ -59,7 +57,7 @@ func (f *Frame) Close(m *Message, arg ...string) bool {
}
var Index = &Context{Name: "ice", Help: "冰山模块", Caches: map[string]*Cache{
CTX_FOLLOW: {Value: "ice"}, CTX_STREAM: {Value: "shy"}, CTX_STATUS: {Value: CTX_BEGIN},
CTX_FOLLOW: {Value: ICE}, CTX_STREAM: {Value: SHY}, CTX_STATUS: {Value: CTX_BEGIN},
}, Configs: map[string]*Config{
HELP: {Value: kit.Data("index", _help)},
}, Commands: map[string]*Command{

71
logs.go
View File

@ -2,7 +2,6 @@ package ice
import (
"encoding/json"
"fmt"
"runtime"
"strings"
"time"
@ -52,8 +51,8 @@ func (m *Message) log(level string, str string, arg ...interface{}) *Message {
}
// 输出日志
log.Info(fmt.Sprintf("%02d %9s %s%s %s%s", m.code,
fmt.Sprintf("%4s->%-4s", m.source.Name, m.target.Name), prefix, level, str, suffix))
log.Info(kit.Format("%02d %9s %s%s %s%s", m.code,
kit.Format("%4s->%-4s", m.source.Name, m.target.Name), prefix, level, str, suffix))
return m
}
func (m *Message) join(arg ...interface{}) string {
@ -146,7 +145,7 @@ func (m *Message) FormatStack() string {
frame, more := frames.Next()
file := strings.Split(frame.File, "/")
name := strings.Split(frame.Function, "/")
meta = append(meta, fmt.Sprintf("\n%s:%d\t%s", file[len(file)-1], frame.Line, name[len(name)-1]))
meta = append(meta, kit.Format("\n%s:%d\t%s", file[len(file)-1], frame.Line, name[len(name)-1]))
if !more {
break
}
@ -163,16 +162,16 @@ func (m *Message) FormatChain() string {
for i := len(ms) - 1; i >= 0; i-- {
msg := ms[i]
meta = append(meta, fmt.Sprintf("%s ", msg.Format("prefix")))
meta = append(meta, kit.Format("%s ", msg.Format("prefix")))
if len(msg.meta[MSG_DETAIL]) > 0 {
meta = append(meta, fmt.Sprintf("detail:%d %v", len(msg.meta[MSG_DETAIL]), msg.meta[MSG_DETAIL]))
meta = append(meta, kit.Format("%s:%d %v", MSG_DETAIL, len(msg.meta[MSG_DETAIL]), msg.meta[MSG_DETAIL]))
}
if len(msg.meta[MSG_OPTION]) > 0 {
meta = append(meta, fmt.Sprintf("option:%d %v\n", len(msg.meta[MSG_OPTION]), msg.meta[MSG_OPTION]))
meta = append(meta, kit.Format("%s:%d %v\n", MSG_OPTION, len(msg.meta[MSG_OPTION]), msg.meta[MSG_OPTION]))
for _, k := range msg.meta[MSG_OPTION] {
if v, ok := msg.meta[k]; ok {
meta = append(meta, fmt.Sprintf(" %s: %d %v\n", k, len(v), v))
meta = append(meta, kit.Format(" %s: %d %v\n", k, len(v), v))
}
}
} else {
@ -180,30 +179,30 @@ func (m *Message) FormatChain() string {
}
if len(msg.meta[MSG_APPEND]) > 0 {
meta = append(meta, fmt.Sprintf(" append:%d %v\n", len(msg.meta[MSG_APPEND]), msg.meta[MSG_APPEND]))
meta = append(meta, kit.Format(" %s:%d %v\n", MSG_APPEND, len(msg.meta[MSG_APPEND]), msg.meta[MSG_APPEND]))
for _, k := range msg.meta[MSG_APPEND] {
if v, ok := msg.meta[k]; ok {
meta = append(meta, fmt.Sprintf(" %s: %d %v\n", k, len(v), v))
meta = append(meta, kit.Format(" %s: %d %v\n", k, len(v), v))
}
}
}
if len(msg.meta[MSG_RESULT]) > 0 {
meta = append(meta, fmt.Sprintf(" result:%d %v\n", len(msg.meta[MSG_RESULT]), msg.meta[MSG_RESULT]))
meta = append(meta, kit.Format(" %s:%d %v\n", MSG_RESULT, len(msg.meta[MSG_RESULT]), msg.meta[MSG_RESULT]))
}
}
return strings.Join(meta, "")
}
func (m *Message) FormatTime() string {
return m.Format("time")
return m.Format(kit.MDB_TIME)
}
func (m *Message) FormatMeta() string {
return m.Format("meta")
return m.Format(kit.MDB_META)
}
func (m *Message) FormatSize() string {
return m.Format("size")
return m.Format(kit.MDB_SIZE)
}
func (m *Message) FormatCost() string {
return m.Format("cost")
return m.Format(kit.MDB_COST)
}
func (m *Message) Format(key interface{}) string {
switch key := key.(type) {
@ -211,33 +210,31 @@ func (m *Message) Format(key interface{}) string {
json.Unmarshal(key, &m.meta)
case string:
switch key {
case "cost":
case kit.MDB_COST:
return kit.FmtTime(kit.Int64(time.Since(m.time)))
case "meta":
case kit.MDB_SIZE:
if len(m.meta[MSG_APPEND]) == 0 {
return kit.Format("%dx%d", 0, 0)
} else {
return kit.Format("%dx%d", len(m.meta[m.meta[MSG_APPEND][0]]), len(m.meta[MSG_APPEND]))
}
case kit.MDB_META:
return kit.Format(m.meta)
case "size":
if len(m.meta["append"]) == 0 {
return fmt.Sprintf("%dx%d", 0, 0)
case kit.MDB_SHIP:
return kit.Format("%s->%s", m.source.Name, m.target.Name)
case kit.MDB_PREFIX:
return kit.Format("%s %d %s->%s", m.Time(), m.code, m.source.Name, m.target.Name)
case MSG_APPEND:
if len(m.meta[MSG_APPEND]) == 0 {
return kit.Format("%dx%d %s", 0, 0, "[]")
} else {
return fmt.Sprintf("%dx%d", len(m.meta[m.meta["append"][0]]), len(m.meta["append"]))
}
case "append":
if len(m.meta["append"]) == 0 {
return fmt.Sprintf("%dx%d %s", 0, 0, "[]")
} else {
return fmt.Sprintf("%dx%d %s", len(m.meta[m.meta["append"][0]]), len(m.meta["append"]), kit.Format(m.meta["append"]))
return kit.Format("%dx%d %s", len(m.meta[m.meta[MSG_APPEND][0]]), len(m.meta[MSG_APPEND]), kit.Format(m.meta[MSG_APPEND]))
}
case "time":
return m.Time()
case "ship":
return fmt.Sprintf("%s->%s", m.source.Name, m.target.Name)
case "prefix":
return fmt.Sprintf("%s %d %s->%s", m.Time(), m.code, m.source.Name, m.target.Name)
case "chain":
case kit.MDB_CHAIN:
return m.FormatChain()
case "stack":
case kit.MDB_STACK:
return m.FormatStack()
}
}
@ -245,7 +242,7 @@ func (m *Message) Format(key interface{}) string {
}
func (m *Message) Formats(key string) string {
switch key {
case "meta":
case kit.MDB_META:
return kit.Formats(m.meta)
}
return m.Format(key)

24
meta.go
View File

@ -9,13 +9,6 @@ import (
kit "shylinux.com/x/toolkits"
)
func (m *Message) SetResult(arg ...interface{}) *Message {
m.Set(MSG_RESULT)
if len(arg) > 0 {
m.Echo(kit.Format(arg[0]), arg[1:]...)
}
return m
}
func (m *Message) Set(key string, arg ...string) *Message {
switch key {
case MSG_DETAIL, MSG_RESULT:
@ -304,7 +297,7 @@ func (m *Message) Table(cbs ...func(index int, value map[string]string, head []s
}
//计算列宽
space := kit.Select(" ", m.Option("table.space"))
space := kit.Select(SP, m.Option("table.space"))
depth, width := 0, map[string]int{}
for _, k := range m.meta[MSG_APPEND] {
if len(m.meta[k]) > depth {
@ -319,8 +312,8 @@ func (m *Message) Table(cbs ...func(index int, value map[string]string, head []s
}
// 回调函数
rows := kit.Select("\n", m.Option("table.row_sep"))
cols := kit.Select(" ", m.Option("table.col_sep"))
rows := kit.Select(NL, m.Option("table.row_sep"))
cols := kit.Select(SP, m.Option("table.col_sep"))
compact := m.Option("table.compact") == TRUE
cb := func(value map[string]string, field []string, index int) bool {
for i, v := range field {
@ -374,8 +367,7 @@ func (m *Message) Detailv(arg ...interface{}) []string {
}
func (m *Message) Optionv(key string, arg ...interface{}) interface{} {
if len(arg) > 0 {
// 写数据
if kit.IndexOf(m.meta[MSG_OPTION], key) == -1 {
if kit.IndexOf(m.meta[MSG_OPTION], key) == -1 { // 写数据
m.meta[MSG_OPTION] = append(m.meta[MSG_OPTION], key)
}
@ -391,7 +383,7 @@ func (m *Message) Optionv(key string, arg ...interface{}) interface{} {
m.data[key] = str
}
if key == MSG_FIELDS {
for _, k := range kit.Split(strings.Join(m.meta[key], ",")) {
for _, k := range kit.Split(kit.Join(m.meta[key])) {
delete(m.meta, k)
}
}
@ -399,12 +391,10 @@ func (m *Message) Optionv(key string, arg ...interface{}) interface{} {
for msg := m; msg != nil; msg = msg.message {
if list, ok := msg.data[key]; ok {
// 读数据
return list
return list // 读数据
}
if list, ok := msg.meta[key]; ok {
// 读选项
return list
return list // 读选项
}
}
return nil

23
misc.go
View File

@ -31,7 +31,7 @@ func (m *Message) CSV(text string, head ...string) *Message {
}
func (m *Message) Parse(meta string, key string, arg ...string) *Message {
list := []string{}
for _, line := range kit.Split(strings.Join(arg, " "), "\n") {
for _, line := range kit.Split(strings.Join(arg, SP), NL) {
ls := kit.Split(line)
for i := 0; i < len(ls); i++ {
if strings.HasPrefix(ls[i], "#") {
@ -157,11 +157,6 @@ func (m *Message) cmd(arg ...interface{}) *Message {
case Option:
opts[val.Name] = val.Value
case *Sort:
defer func() { m.Sort(val.Fields, val.Method) }()
case Sort:
defer func() { m.Sort(val.Fields, val.Method) }()
default:
if reflect.Func == reflect.TypeOf(val).Kind() {
cbs = val
@ -183,7 +178,7 @@ func (m *Message) cmd(arg ...interface{}) *Message {
ok := false
run := func(msg *Message, ctx *Context, cmd *Command, key string, arg ...string) {
if ok = true; cbs != nil {
msg.Option(list[0]+".cb", cbs)
msg.Option(kit.Keycb(list[0]), cbs)
}
for k, v := range opts {
msg.Option(k, v)
@ -242,7 +237,7 @@ func (c *Context) _cmd(m *Message, cmd *Command, key string, k string, h *Action
return m
}
if k == "run" && m.Warn(!m.Right(arg), ErrNotRight, arg) {
if k == RUN && m.Warn(!m.Right(arg), ErrNotRight, arg) {
return m
}
@ -250,8 +245,8 @@ func (c *Context) _cmd(m *Message, cmd *Command, key string, k string, h *Action
if len(h.List) > 0 && k != "search" {
order := false
for i, v := range h.List {
name := kit.Format(kit.Value(v, "name"))
value := kit.Format(kit.Value(v, "value"))
name := kit.Format(kit.Value(v, kit.MDB_NAME))
value := kit.Format(kit.Value(v, kit.MDB_VALUE))
if i == 0 && len(arg) > 0 && arg[0] != name {
order = true
@ -285,13 +280,13 @@ func (c *Context) split(name string) (list []interface{}) {
)
item, button := kit.Dict(), false
ls := kit.Split(name, " ", ":=@")
ls := kit.Split(name, SP, ":=@")
for i := 1; i < len(ls); i++ {
switch ls[i] {
case "text":
list = append(list, kit.List(kit.MDB_TYPE, TEXTAREA, kit.MDB_NAME, "text")...)
case "auto":
list = append(list, kit.List(kit.MDB_TYPE, BUTTON, kit.MDB_NAME, "list", kit.MDB_VALUE, "auto")...)
list = append(list, kit.List(kit.MDB_TYPE, BUTTON, kit.MDB_NAME, "list", kit.MDB_VALUE, AUTO)...)
list = append(list, kit.List(kit.MDB_TYPE, BUTTON, kit.MDB_NAME, "back")...)
button = true
case "page":
@ -307,7 +302,7 @@ func (c *Context) split(name string) (list []interface{}) {
i++
case "=":
if value := kit.Select("", ls, i+1); strings.Contains(value, ",") {
vs := strings.Split(value, ",")
vs := kit.Split(value)
if strings.Count(value, vs[0]) > 1 {
item["values"] = vs[1:]
} else {
@ -320,7 +315,7 @@ func (c *Context) split(name string) (list []interface{}) {
}
i++
case "@":
item["action"] = kit.Select("", ls, i+1)
item[kit.MDB_ACTION] = kit.Select("", ls, i+1)
i++
default:

View File

@ -30,7 +30,7 @@ func init() {
h := m.Cmdx(mdb.INSERT, m.Prefix(CACHE), "", mdb.HASH, m.OptionSimple("type,name,text,link"))
value := kit.GetMeta(m.Confm(CACHE, kit.Keys(kit.MDB_HASH, h)))
m.Option(kit.Keycb(web.DOWNLOAD), func(size, total int) {
value[kit.MDB_TOTAL], value[kit.MDB_SIZE], value[kit.SSH_STEP] = total, size, kit.Format(size*100/total)
value[kit.MDB_TOTAL], value[kit.MDB_SIZE], value[kit.MDB_STEP] = total, size, kit.Format(size*100/total)
})
msg := m.Cmd("web.spide", web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option(kit.MDB_LINK))
@ -42,7 +42,7 @@ func init() {
m.Cmdy(mdb.DELETE, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
}},
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.PRUNES, m.Prefix(CACHE), "", mdb.HASH, kit.SSH_STEP, "100")
m.Cmdy(mdb.PRUNES, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_STEP, "100")
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Fields(len(arg), m.Conf(CACHE, kit.META_FIELD))

View File

@ -16,7 +16,7 @@ func _repos_path(name string) string {
if strings.Contains(name, ":\\") {
return name
}
return kit.Select(path.Join(kit.SSH_USR, name), "./", name == path.Base(kit.Pwd()))
return kit.Select(path.Join(ice.USR, name), "./", name == path.Base(kit.Pwd()))
}
func _repos_insert(m *ice.Message, name string, dir string) {
if s, e := os.Stat(m.Option(cli.CMD_DIR, path.Join(dir, ".git"))); e == nil && s.IsDir() {
@ -52,14 +52,14 @@ func init() {
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Conf(REPOS, kit.MDB_HASH, "")
_repos_insert(m, path.Base(kit.Pwd()), kit.Pwd())
m.Cmd(nfs.DIR, kit.SSH_USR, "name,path").Table(func(index int, value map[string]string, head []string) {
m.Cmd(nfs.DIR, ice.USR, "name,path").Table(func(index int, value map[string]string, head []string) {
_repos_insert(m, value[kit.MDB_NAME], value[kit.MDB_PATH])
})
}},
REPOS: {Name: "repos name path auto create", Help: "代码库", Action: map[string]*ice.Action{
mdb.CREATE: {Name: "create repos branch name path", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
m.Option(kit.MDB_NAME, kit.Select(strings.TrimSuffix(path.Base(m.Option(kit.SSH_REPOS)), ".git"), m.Option(kit.MDB_NAME)))
m.Option(kit.MDB_PATH, kit.Select(path.Join(kit.SSH_USR, m.Option(kit.MDB_NAME)), m.Option(kit.MDB_PATH)))
m.Option(kit.MDB_PATH, kit.Select(path.Join(ice.USR, m.Option(kit.MDB_NAME)), m.Option(kit.MDB_PATH)))
m.Option(kit.SSH_REPOS, kit.Select(m.Conf(REPOS, kit.Keym(kit.SSH_REPOS))+"/"+m.Option(kit.MDB_NAME), m.Option(kit.SSH_REPOS)))
if s, e := os.Stat(path.Join(m.Option(kit.MDB_PATH), ".git")); e == nil && s.IsDir() {

View File

@ -30,6 +30,8 @@ func _spide_go(m *ice.Message, file string) {
case "w", "e":
return
ls[0] = "-" + ls[0] + ":" + strings.TrimPrefix(ls[len(ls)-1], "type:")
case "-":
return
case "m":
if strings.HasPrefix(ls[5], "ctype") {
ls[0] = strings.TrimPrefix(ls[5], "ctype:") + ":" + ls[0]
@ -74,9 +76,9 @@ func init() {
}
if arg[0] == path.Base(kit.Pwd()) {
m.Option(nfs.DIR_ROOT, path.Join(kit.SSH_SRC))
m.Option(nfs.DIR_ROOT, path.Join(ice.SRC))
} else {
m.Option(nfs.DIR_ROOT, path.Join(kit.SSH_USR, arg[0]))
m.Option(nfs.DIR_ROOT, path.Join(ice.USR, arg[0]))
}
if len(arg) == 1 { // 目录列表

View File

@ -6,13 +6,13 @@ import (
"os/exec"
"strings"
"golang.org/x/crypto/ssh"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/tcp"
kit "shylinux.com/x/toolkits"
"golang.org/x/crypto/ssh"
)
func _ssh_exec(m *ice.Message, cmd string, arg []string, env []string, input io.Reader, output io.Writer, done func()) {
@ -71,6 +71,11 @@ func init() {
CHANNEL: {Name: "channel", Help: "通道", Value: kit.Data()},
},
Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Richs(CHANNEL, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
kit.Value(value, kit.Keym(kit.MDB_STATUS), tcp.CLOSE)
})
}},
CHANNEL: {Name: "channel hash id auto command prunes", Help: "通道", Action: map[string]*ice.Action{
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, CHANNEL, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))

View File

@ -3,12 +3,12 @@ package ssh
import (
"io"
"golang.org/x/crypto/ssh"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/tcp"
kit "shylinux.com/x/toolkits"
"golang.org/x/crypto/ssh"
)
func _ssh_session(m *ice.Message, h string, client *ssh.Client) (*ssh.Session, error) {
@ -62,6 +62,11 @@ func init() {
SESSION: {Name: SESSION, Help: "会话", Value: kit.Data()},
},
Commands: map[string]*ice.Command{
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
m.Richs(SESSION, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
kit.Value(value, kit.Keym(kit.MDB_STATUS), tcp.CLOSE)
})
}},
SESSION: {Name: "session hash id auto command prunes", Help: "会话", Action: map[string]*ice.Action{
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(mdb.DELETE, SESSION, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))

View File

@ -10,11 +10,6 @@ import (
kit "shylinux.com/x/toolkits"
)
type Sort struct {
Fields string
Method string
}
type Option struct {
Name string
Value interface{}
@ -61,7 +56,7 @@ func (m *Message) OptionSimple(key ...string) (res []string) {
}
func (m *Message) OptionTemplate() string {
res := []string{`class="story"`}
for _, key := range kit.Split("style") {
for _, key := range kit.Split(kit.MDB_STYLE) {
if m.Option(key) != "" {
res = append(res, kit.Format(`s="%s"`, key, m.Option(key)))
}
@ -71,12 +66,12 @@ func (m *Message) OptionTemplate() string {
res = append(res, kit.Format(`data-%s="%s"`, key, m.Option(key)))
}
}
kit.Fetch(m.Optionv("extra"), func(key string, value string) {
kit.Fetch(m.Optionv(kit.MDB_EXTRA), func(key string, value string) {
if value != "" {
res = append(res, kit.Format(`data-%s="%s"`, key, value))
}
})
return strings.Join(res, " ")
return kit.Join(res, SP)
}
func (m *Message) Fields(length int, fields ...string) string {
@ -89,7 +84,7 @@ func (m *Message) Upload(dir string) {
m.Cmdy("web.cache", "watch", up[0], p)
} else {
// 下拉文件
m.Cmdy("web.spide", "dev", "save", p, "GET",
m.Cmdy("web.spide", DEV, SAVE, p, "GET",
kit.MergeURL2(m.Option(MSG_USERWEB), path.Join("/share/cache", up[0])))
}
}
@ -164,25 +159,25 @@ func (m *Message) ProcessRefresh300ms() { m.ProcessRefresh("300ms") }
func (m *Message) ProcessRefresh3s() { m.ProcessRefresh("3s") }
func (m *Message) ProcessDisplay(arg ...interface{}) {
m.Process(PROCESS_DISPLAY)
m.Option("_display", arg...)
m.Option(MSG_DISPLAY, arg...)
}
func (m *Message) ProcessCommand(cmd string, val []string, arg ...string) {
if len(arg) > 0 && arg[0] == "run" {
if len(arg) > 0 && arg[0] == RUN {
m.Cmdy(cmd, arg[1:])
return
}
m.Cmdy("command", cmd)
m.ProcessField(cmd, "run")
m.Push("arg", kit.Format(val))
m.ProcessField(cmd, RUN)
m.Push(ARG, kit.Format(val))
}
func (m *Message) ProcessCommandOpt(arg ...string) {
m.Push("opt", kit.Format(m.OptionSimple(arg...)))
m.Push(OPT, kit.Format(m.OptionSimple(arg...)))
}
func (m *Message) ProcessField(arg ...interface{}) {
m.Process(PROCESS_FIELD)
m.Option("_prefix", arg...)
m.Option(FIELD_PREFIX, arg...)
}
func (m *Message) ProcessInner() { m.Process(PROCESS_INNER) }
func (m *Message) ProcessAgain() { m.Process(PROCESS_AGAIN) }

View File

@ -32,7 +32,7 @@ func Render(m *Message, cmd string, args ...interface{}) string {
list = append(list, kit.Format(`<input type="button" name="%s" value="%s">`,
k, kit.Select(k, kit.Value(m._cmd.Meta, kit.Keys("_trans", k)), m.Option(MSG_LANGUAGE) != "en")))
}
return kit.Join(list, " ")
return kit.Join(list, SP)
case RENDER_IMAGES: // src [size]
return kit.Format(`<img src="%s" height=%s>`, arg[0], kit.Select("120", arg, 1))
@ -94,9 +94,9 @@ func (m *Message) PushAction(list ...interface{}) {
})
}
func (m *Message) PushPodCmd(cmd string, arg ...string) {
if strings.Contains(m.OptionFields(), "pod") {
if strings.Contains(m.OptionFields(), POD) {
m.Table(func(index int, value map[string]string, head []string) {
m.Push("pod", m.Option(MSG_USERPOD))
m.Push(POD, m.Option(MSG_USERPOD))
})
}
@ -107,7 +107,7 @@ func (m *Message) PushPodCmd(cmd string, arg ...string) {
break
}
m.Cmd("web.space", value[kit.MDB_NAME], m.Prefix(cmd), arg).Table(func(index int, val map[string]string, head []string) {
val["pod"] = kit.Keys(value[kit.MDB_NAME], val["pod"])
val[POD] = kit.Keys(value[kit.MDB_NAME], val[POD])
m.Push("", val, head)
})
}
@ -117,13 +117,13 @@ func (m *Message) PushSearch(args ...interface{}) {
data := kit.Dict(args...)
for _, k := range kit.Split(m.OptionFields()) {
switch k {
case "pod":
case POD:
m.Push(k, "")
// m.Push(k, kit.Select(m.Option(MSG_USERPOD), data[kit.SSH_POD]))
case "ctx":
case CTX:
m.Push(k, m.Prefix())
case "cmd":
m.Push(k, kit.Format(data["cmd"]))
case CMD:
m.Push(k, kit.Format(data[CMD]))
case kit.MDB_TIME:
m.Push(k, kit.Select(m.Time(), data[k]))
default:
@ -139,7 +139,7 @@ func (m *Message) PushSearchWeb(cmd string, name string) {
if value[kit.MDB_NAME] == "" {
text = kit.MergeURL(value[kit.MDB_TEXT] + url.QueryEscape(name))
}
m.PushSearch("cmd", cmd, kit.MDB_TYPE, kit.Select("", value[kit.MDB_TYPE]), kit.MDB_NAME, name, kit.MDB_TEXT, text)
m.PushSearch(CMD, cmd, kit.MDB_TYPE, kit.Select("", value[kit.MDB_TYPE]), kit.MDB_NAME, name, kit.MDB_TEXT, text)
})
}
@ -193,5 +193,5 @@ func (m *Message) RenderDownload(args ...interface{}) *Message {
return m.Render(RENDER_DOWNLOAD, args...)
}
func (m *Message) RenderIndex(serve, repos string, file ...string) *Message {
return m.RenderDownload(path.Join(m.Conf(serve, kit.Keym(repos, kit.SSH_PATH)), kit.Select(m.Conf(serve, kit.Keym(repos, kit.SSH_INDEX)), path.Join(file...))))
return m.RenderDownload(path.Join(m.Conf(serve, kit.Keym(repos, kit.MDB_PATH)), kit.Select(m.Conf(serve, kit.Keym(repos, kit.MDB_INDEX)), path.Join(file...))))
}

View File

@ -140,7 +140,7 @@ func (c *Context) Merge(s *Context) *Context {
}
kit.Value(v.Meta, kit.Keys("_trans", k), help[0])
if len(help) > 1 {
kit.Value(v.Meta, kit.Keys("title", k), help[1])
kit.Value(v.Meta, kit.Keys(kit.MDB_TITLE, k), help[1])
}
if a.Hand == nil {
continue