1
0
mirror of https://shylinux.com/x/ContextOS synced 2025-04-25 16:58:06 +08:00

opt missyou dream

This commit is contained in:
shaoying 2019-11-23 06:05:59 +08:00
parent 0e44340ceb
commit 39e7945187
6 changed files with 88 additions and 115 deletions

View File

@ -8,14 +8,12 @@ ctx_url=$ctx_dev"/code/zsh"
ctx_get=${ctx_get:="wget -q"}
ctx_curl=${ctx_curl:="curl"}
ctx_head=${ctx_head:="Content-Type: application/json"}
ctx_sync=${ctx_sync:=""}
ctx_sid=${ctx_sid:=""}
ctx_silent=${ctx_silent:=""}
ctx_err=${ctx_err:="/dev/null"}
ctx_welcome=${ctx_welcome:="^_^ Welcome to Context world ^_^"}
ctx_goodbye=${ctx_goodbye:="^_^ Goodbye to Context world ^_^"}
ctx_bind=${ctx_bind:="bind -x"}
ctx_null=${ctx_null:="false"}
ShyRight() {
[ "$1" = "" ] && return 1
@ -27,6 +25,9 @@ ShyRight() {
ShyEcho() {
ShyRight "$ctx_silent" || echo "$@"
}
ShyLog() {
echo "$@" > $ctx_err
}
ShyWord() {
echo "$*"|sed -e 's/\ /%20/g' -e 's/\n/\\n/g'
@ -64,11 +65,8 @@ ShyPost() {
ShyDownload() {
${ctx_curl} -s "${ctx_url}" -F "cmd=download" -F "arg=$1" -F "sid=$ctx_sid"
}
ShyUpdate() {
${ctx_curl} -s "${ctx_dev}/publish/$1" > $1
}
ShyUpload() {
${ctx_curl} -s "${ctx_url}" -F "cmd=upload" -F "sid=$ctx_sid" -F "upload=@$1"
${ctx_curl} -s "${ctx_url}" -F "cmd=upload" -F "upload=@$1" -F "sid=$ctx_sid"
}
ShyBench() {
${ctx_curl} -s "${ctx_dev}/publish/boot.sh" | sh -s installs context
@ -107,9 +105,8 @@ ShyLogin() {
}
ShyFavor() {
[ "$READLINE_LINE" != "" ] && set $READLINE_LINE && READLINE_LINE=""
[ "$1" != "" ] && ctx_tab=$1
[ "$2" != "" ] && ctx_note=$2
ShyPost cmd favor arg "`history|tail -n2|head -n1`" tab "${ctx_tab}" note "${ctx_note}"
[ "$1" != "" ] && ctx_tab=$1; [ "$2" != "" ] && ctx_note=$2
ShyPost cmd favor arg "`history|tail -n1|head -n1`" tab "${ctx_tab}" note "${ctx_note}"
}
ShyFavors() {
[ "$READLINE_LINE" != "" ] && set $READLINE_LINE && READLINE_LINE=""
@ -119,17 +116,12 @@ ShySync() {
[ "$ctx_sid" = "" ] && ShyLogin
case "$1" in
"historys") tail -n0 -f $HISTFILE | while true; do read line
line=`ShyLine $line`
ShyPost arg "$line" cmd history FORMAT "$HISTTIMEFORMAT"
echo $line
done
;;
"history")
ctx_end=`history|tail -n1|awk '{print $1}'`
ctx_tail=`expr $ctx_end - $ctx_begin`
ShyEcho "sync $ctx_begin-$ctx_end count $ctx_tail to $ctx_dev"
history|tail -n $ctx_tail |while read line; do
ctx_begin=${ctx_begin:=$ctx_end}
ctx_count=`expr $ctx_end - $ctx_begin`
ShyEcho "sync $ctx_begin-$ctx_end count $ctx_count to $ctx_dev"
history|tail -n $ctx_count |while read line; do
ShySends historys sub "$line"
done
ctx_begin=$ctx_end
@ -140,29 +132,14 @@ ShySync() {
ShySyncs() {
case "$1" in
"base")
ShySync df
ShySync env
ShySync free
ShySync df &>/dev/null
ShySync env &>/dev/null
ShySync free &>/dev/null
ShySync history
;;
*)
esac
}
ShyHistory() {
case "$SHELL" in
"/bin/zsh")
ShySync df
ShySync env
ShySync free
ShySync historys &>/dev/null &
ctx_sync=$!
;;
*) ;;
esac
}
ShyRecord() {
script $1
}
ShyHelp() {
ShyPost cmd help arg "$@"
}
@ -171,7 +148,6 @@ ShyInit() {
case "$SHELL" in
"/bin/zsh")
ctx_bind=${ctx_null}
PROMPT='%![%*]%c$ '
;;
*)
@ -182,17 +158,21 @@ ShyInit() {
;;
esac
${ctx_bind} '"\C-g\C-r":ShySyncs base'
${ctx_bind} '"\C-g\C-f":ShyFavor'
${ctx_bind} '"\C-gf":ShyFavor'
${ctx_bind} '"\C-gF":ShyFavors'
if bind &>/dev/null; then
bind -x '"\C-G\C-R":ShySyncs base'
bind -x '"\C-G\C-F":ShyFavor'
bind -x '"\C-Gf":ShyFavor'
bind -x '"\C-GF":ShyFavors'
elif bindkey &>/dev/null; then
bindkey -s '\C-G\C-R' 'ShySyncs base\n'
setopt nosharehistory
fi
echo ${ctx_welcome}
echo "url: ${ctx_url}"
echo "pid: $$"
echo "pane: $TMUX_PANE"
echo "begin: ${ctx_begin}"
echo "share: ${ctx_share}"
echo "pane: $TMUX_PANE"
}
ShyInit && trap ShyLogout EXIT

View File

@ -253,8 +253,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
},
}, Help: "服务升级"},
"missyou": {Name: "missyou", Value: map[string]interface{}{
"path": "usr/local/work",
"local": "usr/local",
"path": "usr/local/work", "local": "usr/local",
}, Help: "任务管理"},
"imq": {Name: "imq", Value: map[string]interface{}{
"data": map[string]interface{}{
@ -1209,7 +1208,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
}},
"missyou": {Name: "missyou [topic] [name [action]]", Help: "任务管理", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
// 任务主题
topic := "hello"
topic := "index"
if len(arg) > 0 && (arg[0] == "" || m.Cmds("nfs.path", path.Join(m.Conf("cli.project", "plugin.path"), arg[0]))) {
topic, arg = arg[0], arg[1:]
}
@ -1220,14 +1219,14 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
name := strings.TrimSuffix(value["name"], "/")
m.Push("create_time", value["time"])
m.Push("you", name)
m.Push("status", kit.Select("stop", "start", m.Confs("nfs.node", name)))
m.Push("status", kit.Select("stop", "start", m.Confs("ssh.node", name)))
})
m.Sort("you", "str_r").Sort("status").Table()
return
}
// 任务命名
if !strings.Contains(arg[0], "-") {
if m.Option("topic", topic); !strings.Contains(arg[0], "-") {
arg[0] = m.Time("20060102-") + arg[0]
}
@ -1235,8 +1234,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
if m.Option("dream", arg[0]); m.Confs("ssh.node", arg[0]) {
switch kit.Select("", arg, 1) {
case "stop":
m.Cmdy("ssh._route", arg[0], "context", "cli", "quit", 0)
m.Cmd("web.code.dream", "exit", arg[0])
m.Cmdy("ssh._route", arg[0], "cli.quit", 0)
default:
m.Echo(arg[0])
}
@ -1253,7 +1251,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
"cmd_dir", p,
"cmd_daemon", "true",
"cmd_env", "PATH", os.Getenv("PATH"),
"cmd_env", "ctx_type", m.Option("topic", kit.Select(topic, arg, 1)),
"cmd_env", "ctx_type", m.Option("topic"),
"cmd_env", "ctx_home", m.Conf("runtime", "boot.ctx_home"),
"cmd_env", "ctx_ups", fmt.Sprintf("127.0.0.1%s", m.Conf("runtime", "boot.ssh_port")),
"cmd_env", "ctx_box", fmt.Sprintf("http://127.0.0.1%s", m.Conf("runtime", "boot.web_port")),

View File

@ -245,22 +245,25 @@ func (m *Message) Result(arg ...interface{}) string {
}
func (m *Message) Push(key interface{}, arg ...interface{}) *Message {
keys := []string{}
switch key := key.(type) {
case string:
keys = strings.Split(key, " ")
case []string:
keys = key
}
for _, key := range keys {
switch m.Option("table.format") {
case "table":
m.Add("append", "key", key)
key = "value"
}
return m.Add("append", key, arg...)
case []string:
for _, key := range key {
switch m.Option("table.format") {
case "table":
m.Add("append", "key", key)
key = "value"
}
m.Add("append", key, kit.Select(" ", kit.Format(kit.Chain(arg[0], key))))
switch value := arg[0].(type) {
case map[string]interface{}:
m.Add("append", key, kit.Select(" ", kit.Format(kit.Chain(value, key))))
default:
m.Add("append", key, arg...)
}
}
return m

View File

@ -120,9 +120,9 @@ var Index = &ctx.Context{Name: "code", Help: "代码中心",
"dream": {Name: "dream", Help: "使命必达", Value: map[string]interface{}{
"layout": map[string]interface{}{
"three": []interface{}{
"rename-window -t $dream:1 source",
"split-window -t $dream:1.1",
"split-window -v -t $dream:1.2",
"rename-window -t $dream:1 source",
"select-layout -t $dream:1 main-horizontal",
"new-window -t $dream:2 -n docker",
@ -137,24 +137,21 @@ var Index = &ctx.Context{Name: "code", Help: "代码中心",
},
},
"topic": map[string]interface{}{
"hello": map[string]interface{}{
"index": map[string]interface{}{
"ship": []interface{}{"tip", "miss.md", "task", "feed"},
"git": []interface{}{"clone https://github.com/shylinux/context"},
"layout": []interface{}{},
"tmux": []interface{}{
"split-window -t $dream:1.1",
"new-window -t $dream:2",
"split-window -t $dream:2.1",
"new-window -t $dream:3",
"split-window -t $dream:3.1",
"layout": []interface{}{"three"}, "tmux": []interface{}{
"send-keys -t $dream.1.1 pwd",
},
},
},
"share": map[string]interface{}{},
"share": map[string]interface{}{"meta": map[string]interface{}{
"fields": "river dream favor story stage order expire",
}},
}},
},
Commands: map[string]*ctx.Command{
"dream": {Name: "dream", Help: "使命必达", Hand: func(m *ctx.Message, c *ctx.Context, cmd string, arg ...string) (e error) {
"dream": {Name: "dream init name [topic]", Help: "使命必达", Hand: func(m *ctx.Message, c *ctx.Context, cmd string, arg ...string) (e error) {
switch arg[0] {
case "init":
// 检查会话
@ -162,71 +159,53 @@ var Index = &ctx.Context{Name: "code", Help: "代码中心",
if !m.Cmds(tmux, "has-session", "-t", arg[1]) {
break
}
topic := kit.Select("hello", kit.Select(m.Option("topic"), arg, 2))
// 下载代码
home := path.Join(m.Conf("missyou", "path"), arg[1], m.Conf("missyou", "local"))
topic := kit.Select("index", kit.Select(m.Option("topic"), arg, 2))
git := kit.Trans(m.Confv("prefix", "git"), "cmd_dir", home)
m.Confm("dream", []string{"topic", topic, "git"}, func(index int, value string) {
value = strings.Replace(value, "$dream", arg[1], -1)
m.Cmdx(git, strings.Split(value, " "))
m.Cmd(git, strings.Split(value, " "))
})
// 创建终端
m.Cmds(tmux, "set-environment", "-g", "ctx_share", m.Cmdx("dream", "share"))
m.Cmds(tmux, "new-session", "-ds", arg[1], "cmd_dir", home, "cmd_env", "TMUX", "")
m.Cmds(tmux, "set-environment", "-t", arg[1], "ctx_share", m.Cmdx("dream", "share"))
m.Confm("dream", []string{"layout", m.Conf("dream", []string{"topic", m.Option("topic"), "layout", "0"})}, func(index int, value string) {
share := m.Cmdx("dream", "share", topic)
m.Cmd(tmux, "set-environment", "-g", "ctx_share", share)
m.Cmd(tmux, "new-session", "-ds", arg[1], "cmd_dir", home, "cmd_env", "TMUX", "")
m.Cmd(tmux, "set-environment", "-t", arg[1], "ctx_share", share)
m.Confm("dream", []string{"layout", m.Conf("dream", []string{"topic", topic, "layout", "0"})}, func(index int, value string) {
value = strings.Replace(value, "$dream", arg[1], -1)
m.Cmdx(tmux, strings.Split(value, " "), "cmd_dir", home)
m.Cmd(tmux, strings.Split(value, " "), "cmd_dir", home)
})
m.Confm("dream", []string{"topic", topic, "tmux"}, func(index int, value string) {
value = strings.Replace(value, "$dream", arg[1], -1)
m.Cmdx(tmux, strings.Split(value, " "), "cmd_dir", home)
m.Cmd(tmux, strings.Split(value, " "), "cmd_dir", home)
})
m.Echo(share)
arg = []string{"share", topic}
fallthrough
case "share":
topic := kit.Select("hello", kit.Select(m.Option("topic"), arg, 1))
if len(arg) == 1 {
m.Confm("dream", []string{"topic", kit.Select("hello", topic), "ship"}, func(index int, value string) {
// 模板参数
topic := kit.Select("index", kit.Select(m.Option("topic"), arg, 1))
m.Confm("dream", []string{"topic", topic, "ship"}, func(index int, value string) {
if len(arg) < index+3 {
arg = append(arg, value)
})
}
for i := 0; i < 10; i++ {
h := kit.Hashs("uniq")[:6]
if m.Confs("dream", []string{"share", "hash", h}) {
continue
} else if arg[index+2] == "" {
arg[index+2] = value
}
m.Conf("dream", []string{"share", "hash", h}, map[string]interface{}{
"river": m.Option("river"),
"dream": m.Option("dream"),
"favor": kit.Select("tip", arg, 1),
"story": kit.Select("miss.md", arg, 2),
"stage": kit.Select("task", arg, 3),
"order": kit.Select("feed", arg, 4),
"expire": m.Time("10m", "stamp"),
})
m.Echo(h)
break
}
case "bind":
m.Confm("dream", []string{"share", "hash", arg[1]}, func(value map[string]interface{}) {
m.Conf("login", []string{"hash", m.Option("sid"), "ship"}, value)
})
// 共享链接
h := kit.ShortKey(m.Confm("dream", []string{"share", "hash"}), 6)
m.Confv("dream", []string{"share", "hash", h}, map[string]interface{}{
"river": m.Option("river"), "dream": m.Option("dream"),
"favor": arg[2], "story": arg[3], "stage": arg[4], "order": arg[5],
"expire": m.Time("10m", "stamp"),
})
m.Echo(h)
case "list":
m.Confm("dream", "share.hash", func(key string, value map[string]interface{}) {
m.Push("key", key)
m.Push("river", value["river"])
m.Push("dream", value["dream"])
m.Push("favor", value["favor"])
m.Push("story", value["story"])
m.Push("stage", value["stage"])
m.Push("order", value["order"])
m.Push("expire", value["expire"])
m.Push("key", key).Push(m.Conf("dream", "share.meta.fields"), value)
})
m.Table()

View File

@ -43,6 +43,9 @@ func Duration(arg ...string) time.Duration {
return d
}
func Hash(arg ...interface{}) (string, []string) {
if len(arg) == 0 {
arg = append(arg, "uniq")
}
args := []string{}
for _, v := range Trans(arg...) {
switch v {

View File

@ -289,3 +289,13 @@ func Short(arg interface{}, l int) string {
}
return ""
}
func ShortKey(list map[string]interface{}, min int, arg ...interface{}) string {
h := Hashs(arg...)
for i := min; i < len(h); i++ {
if _, ok := list[h[:i]]; !ok {
return h[:i]
}
}
return h
}