1
0
mirror of https://shylinux.com/x/icebergs synced 2025-05-02 19:47:02 +08:00
This commit is contained in:
IT 老营长 @云轩领航-创始人 2022-08-21 15:56:48 +08:00
parent f06013c0c2
commit 0fa74bd96e
13 changed files with 92 additions and 61 deletions

View File

@ -3,6 +3,7 @@ package cli
import (
"io"
"os/exec"
"strings"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/ctx"
@ -23,7 +24,7 @@ func _daemon_exec(m *ice.Message, cmd *exec.Cmd) {
cmd.Stderr = w
}
h := mdb.HashCreate(m, ice.CMD, kit.Join(cmd.Args, ice.SP),
h := mdb.HashCreate(m.Spawn(), ice.CMD, kit.Join(cmd.Args, ice.SP),
STATUS, START, DIR, cmd.Dir, ENV, kit.Select("", cmd.Env),
m.OptionSimple(CMD_INPUT, CMD_OUTPUT, CMD_ERRPUT, mdb.CACHE_CLEAR_ON_EXIT),
)
@ -128,15 +129,17 @@ func init() {
})
}},
}, mdb.HashStatusAction(mdb.FIELD, "time,hash,status,pid,cmd,dir,env")), Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) {
switch value[STATUS] {
case START:
m.PushButton(RESTART, STOP)
default:
m.PushButton(mdb.REMOVE)
if len(arg) == 0 || !strings.Contains(arg[0], ice.PS) {
if mdb.HashSelect(m, kit.Slice(arg, 0, 1)...).Tables(func(value ice.Maps) {
switch value[STATUS] {
case START:
m.PushButton(RESTART, STOP)
default:
m.PushButton(mdb.REMOVE)
}
}); len(arg) == 0 || m.Length() > 0 {
return
}
}); len(arg) == 0 || m.Length() > 0 {
return
}
if len(arg) == 1 {

View File

@ -37,8 +37,13 @@ func init() {
}
m.Cmd(FOREVER, STOP)
m.Cmdy(FOREVER, kit.Select(os.Args[0], nfs.PWD+ice.BIN_ICE_BIN, nfs.ExistsFile(m, ice.BIN_ICE_BIN)),
"serve", START, ice.DEV, "", aaa.USERNAME, aaa.ROOT, aaa.PASSWORD, aaa.ROOT, arg)
if len(arg) > 0 && arg[0] == "space" {
m.Cmdy(FOREVER, kit.Select(os.Args[0], nfs.PWD+ice.BIN_ICE_BIN, nfs.ExistsFile(m, ice.BIN_ICE_BIN)),
"space", "dial", ice.DEV, ice.OPS, arg[2:])
} else {
m.Cmdy(FOREVER, kit.Select(os.Args[0], nfs.PWD+ice.BIN_ICE_BIN, nfs.ExistsFile(m, ice.BIN_ICE_BIN)),
"serve", START, ice.DEV, "", aaa.USERNAME, aaa.ROOT, aaa.PASSWORD, aaa.ROOT, arg)
}
}},
RESTART: {Name: "restart", Help: "重启", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(gdb.SIGNAL, gdb.RESTART)
@ -62,6 +67,9 @@ func init() {
if logs.Println(); nfs.ExistsFile(m, "var/log/bench.log") {
nfs.Rename(m, "var/log/bench.log", kit.Format("var/log/bench.%s.log", logs.Now().Format("20060102-150405")))
}
if logs.Println(); nfs.ExistsFile(m, "var/log/error.log") {
nfs.Rename(m, "var/log/error.log", kit.Format("var/log/error.%s.log", logs.Now().Format("20060102-150405")))
}
}
}
}},

View File

@ -31,7 +31,7 @@ func _system_cmd(m *ice.Message, arg ...string) *exec.Cmd {
}
}
}
if _system_find(m, arg[0]) == "" {
if _system_find(m, arg[0]) == "" && !strings.Contains(arg[0], ice.PS) {
m.Cmd(MIRRORS, CMD, arg[0])
if file := _system_find(m, arg[0]); file != "" {
m.Logs(mdb.SELECT, "mirrors cmd", file)
@ -82,7 +82,7 @@ func _system_find(m *ice.Message, bin string, dir ...string) string {
}
for _, p := range dir {
if nfs.ExistsFile(m, path.Join(p, bin)) {
return kit.Path(path.Join(p, bin))
return kit.Path(p, bin)
}
}
return ""

View File

@ -26,13 +26,15 @@ func _hash_inputs(m *ice.Message, prefix, chain string, field, value string) {
defer RLock(m, prefix, chain)()
list := map[string]int{}
Richs(m, prefix, chain, FOREACH, func(val Map) {
Richs(m, prefix, chain, FOREACH, func(key string, val Map) {
val = kit.GetMeta(val)
list[kit.Format(val[field])] += kit.Int(kit.Select("1", val[COUNT]))
})
for k, i := range list {
m.Push(field, k)
m.Push(COUNT, i)
if k != "" {
m.Push(field, k)
m.Push(COUNT, i)
}
}
m.SortIntR(COUNT)
}
@ -203,6 +205,12 @@ func HashStatusCloseAction(args ...Any) ice.Actions {
})
}
func HashKey(m *ice.Message) string {
if m.Option(HASH) != "" {
return HASH
}
return HashShort(m)
}
func HashShort(m *ice.Message) string {
return kit.Select(HASH, m.Config(SHORT), m.Config(SHORT) != UNIQ)
}
@ -220,14 +228,18 @@ func HashCreate(m *ice.Message, arg ...Any) string {
func HashRemove(m *ice.Message, arg ...Any) *ice.Message {
args := kit.Simple(arg)
if len(args) == 0 {
args = m.OptionSimple(HashShort(m))
args = m.OptionSimple(HashKey(m))
} else if len(args) == 1 {
args = []string{HashShort(m), args[0]}
args = []string{HashKey(m), args[0]}
}
return m.Cmdy(DELETE, m.PrefixKey(), "", HASH, args)
}
func HashModify(m *ice.Message, arg ...Any) *ice.Message {
return m.Cmd(MODIFY, m.PrefixKey(), "", HASH, m.OptionSimple(HashShort(m)), HashArgs(m, arg...))
args := HashArgs(m, arg...)
if args[0] != HashShort(m) && args[0] != HASH {
args = append(m.OptionSimple(HashKey(m)), args...)
}
return m.Cmd(MODIFY, m.PrefixKey(), "", HASH, args)
}
func HashSelect(m *ice.Message, arg ...string) *ice.Message {
m.Fields(len(kit.Slice(arg, 0, 1)), HashField(m))

View File

@ -111,7 +111,7 @@ func (f *Frame) scan(m *ice.Message, h, line string) *Frame {
if m.I, m.O = f.stdin, f.stdout; h == STDIO {
gdb.Event(m, SOURCE_STDIO)
m.Sleep("1.1s")
m.Sleep("2.1s")
}
bio := bufio.NewScanner(f.stdin)

View File

@ -3,6 +3,7 @@ package tcp
import (
"net"
"path"
"strings"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa"
@ -76,7 +77,7 @@ func init() {
m.Push(mdb.TIME, value[mdb.TIME])
m.Push(PORT, port)
m.Push(nfs.SIZE, value[nfs.SIZE])
m.Push(ice.BIN, bin)
m.Push(ice.BIN, strings.TrimPrefix(bin, value[nfs.PATH]))
})
m.SortInt(PORT)
m.PushAction(nfs.TRASH)

View File

@ -49,14 +49,12 @@ func _dream_list(m *ice.Message) *ice.Message {
func _dream_show(m *ice.Message, name string) {
if m.Warn(name == "") {
return
return
}
if !strings.Contains(name, "-") || !strings.HasPrefix(name, "20") {
name = m.Time("20060102-") + name
}
defer m.ProcessOpen(MergePod(m, m.Option(mdb.NAME, name)))
defer m.Echo(MergePod(m, m.Option(mdb.NAME, name)))
// defer m.PushRefresh()
p := path.Join(ice.USR_LOCAL_WORK, name)
if pid := m.Cmdx(nfs.CAT, path.Join(p, ice.Info.PidPath)); pid != "" && nfs.ExistsFile(m, "/proc/"+pid) {
@ -102,8 +100,8 @@ func _dream_show(m *ice.Message, name string) {
m.Optionv(cli.CMD_OUTPUT, path.Join(p, ice.BIN_BOOT_LOG))
defer ToastProcess(m)()
bin := kit.Select(os.Args[0], cli.SystemFind(m, ice.ICE_BIN, kit.Path(path.Join(p, ice.BIN)), kit.Path(ice.BIN)))
m.Cmd(cli.DAEMON, bin, SPACE, tcp.DIAL, ice.DEV, ice.OPS, m.OptionSimple(mdb.NAME, RIVER))
bin := kit.Select(os.Args[0], cli.SystemFind(m, ice.ICE_BIN, nfs.PWD+path.Join(p, ice.BIN), nfs.PWD+ice.BIN))
m.Cmd(cli.DAEMON, bin, SPACE, tcp.DIAL, ice.DEV, ice.OPS, m.OptionSimple(mdb.NAME, RIVER), "daemon", "ops")
defer gdb.Event(m, DREAM_CREATE, m.OptionSimple(mdb.TYPE, mdb.NAME))
m.Option(cli.CMD_OUTPUT, "")
@ -150,8 +148,8 @@ func init() {
}},
cli.STOP: {Name: "stop", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(SPACE, mdb.MODIFY, m.OptionSimple(mdb.NAME), mdb.STATUS, cli.STOP)
m.Cmd(SPACE, m.Option(mdb.NAME), ice.EXIT)
m.ProcessRefresh3s()
m.Go(func() { m.Cmd(SPACE, m.Option(mdb.NAME), ice.EXIT) })
m.Sleep3s()
}},
DREAM_STOP: {Name: "dream.stop type name", Help: "停止", Hand: func(m *ice.Message, arg ...string) {
if m.CmdAppend(SPACE, m.Option(mdb.NAME), mdb.STATUS) == cli.STOP {
@ -186,7 +184,7 @@ fi
require miss.sh
ish_miss_prepare_compile
ish_miss_prepare_develop
ish_miss_prepare_install
ish_miss_prepare_operate
ish_miss_make; if [ -n "$*" ]; then ./bin/ice.bin forever serve "$@"; fi
ish_miss_make; if [ -n "$*" ]; then ish_miss_serve "$@"; fi
`

View File

@ -62,7 +62,7 @@ func _serve_rewrite(m *ice.Message) {
})
}
func _serve_domain(m *ice.Message) string {
if p := m.Config(DOMAIN); p != "" {
if p := ice.Info.Domain; p != "" {
return p
}
if p := m.R.Header.Get("X-Host"); p != "" {
@ -332,7 +332,7 @@ func init() {
Index.Merge(&ice.Context{Configs: ice.Configs{
SERVE: {Name: SERVE, Help: "服务器", Value: kit.Data(
mdb.SHORT, mdb.NAME, mdb.FIELD, "time,status,name,proto,host,port,dev",
DOMAIN, "", tcp.LOCALHOST, ice.TRUE, LOGHEADERS, ice.FALSE,
tcp.LOCALHOST, ice.TRUE, LOGHEADERS, ice.FALSE,
nfs.PATH, kit.Dict(ice.PS, ice.USR_VOLCANOS),
ice.VOLCANOS, kit.Dict(nfs.PATH, ice.USR_VOLCANOS, INDEX, "page/index.html",
nfs.REPOS, "https://shylinux.com/x/volcanos", nfs.BRANCH, nfs.MASTER,
@ -353,12 +353,13 @@ func init() {
}},
ssh.SOURCE_STDIO: {Name: "source.stdio", Help: "终端", Hand: func(m *ice.Message, arg ...string) {
m.Go(func() {
m.Sleep("1s")
m.Sleep("2s")
m.Cmd(ssh.PRINTF, kit.Dict(nfs.CONTENT, ice.Render(m, ice.RENDER_QRCODE, m.Cmdx(SPACE, DOMAIN))+ice.NL))
})
}},
DOMAIN: {Name: "domain", Help: "域名", Hand: func(m *ice.Message, arg ...string) {
ice.Info.Domain = m.Conf(SHARE, kit.Keym(DOMAIN, m.Config(DOMAIN, arg[0])))
m.Config(tcp.LOCALHOST, ice.FALSE)
ice.Info.Domain = arg[0]
}},
SPIDE: {Name: "spide", Help: "架构图", Hand: func(m *ice.Message, arg ...string) {
if len(arg) == 0 { // 模块列表

View File

@ -17,7 +17,7 @@ import (
)
func _space_domain(m *ice.Message) (link string) {
if link = m.Config(DOMAIN); link == "" {
if link = ice.Info.Domain; link == "" {
link = m.Cmd(SPACE, ice.OPS, cli.PWD).Append(mdb.LINK)
}
if link == "" {
@ -236,7 +236,9 @@ func _space_fork(m *ice.Message) {
case WORKER: // 工作节点
gdb.Event(m, DREAM_START, args)
defer gdb.Event(m, DREAM_STOP, args)
defer m.Cmd(DREAM, DREAM_STOP, args)
if m.Option("daemon") == "ops" {
defer m.Cmd(DREAM, DREAM_STOP, args)
}
default: // 服务节点
gdb.Event(m, SPACE_START, args)
defer gdb.Event(m, SPACE_STOP, args)
@ -321,7 +323,7 @@ func init() {
m.EchoQRCode(m.Option(ice.MSG_USERWEB))
}},
tcp.DIAL: {Name: "dial dev=ops name", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
_space_dial(m, m.Option(ice.DEV), kit.Select(ice.Info.NodeName, m.Option(mdb.NAME)))
_space_dial(m, m.Option(ice.DEV), kit.Select(ice.Info.NodeName, m.Option(mdb.NAME)), arg...)
}},
DOMAIN: {Name: "domain", Help: "域名", Hand: func(m *ice.Message, arg ...string) {
m.Echo(_space_domain(m))

View File

@ -24,15 +24,17 @@ func _xterm_socket(m *ice.Message, h, t string) {
m.Option(mdb.TEXT, t)
}
func _xterm_get(m *ice.Message, h string, must bool) *os.File {
t := mdb.HashSelectField(m, m.Option(mdb.HASH, h), mdb.TYPE)
if f, ok := mdb.HashTarget(m, h, func() ice.Any {
if !must {
return nil
}
ls := kit.Split(kit.Select("sh", m.Option(mdb.TYPE)))
ls := kit.Split(kit.Select("sh", t))
m.Logs(cli.DAEMON, ice.CMD, ls)
cmd := exec.Command(cli.SystemFind(m, ls[0]), ls[1:]...)
m.Logs(cli.DAEMON, ice.CMD, cmd.Path)
cmd.Env = append(os.Environ(), "TERM=xterm")
m.Option(mdb.HASH, h)
tty, err := pty.Start(cmd)
m.Assert(err)
@ -76,45 +78,41 @@ func init() {
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
switch mdb.HashInputs(m, arg); arg[0] {
case mdb.TYPE:
m.Push(arg[0], "python", "node", "bash", "sh")
m.Push(arg[0], "ice.bin source stdio", "node", "python", "bash", "sh")
case mdb.NAME:
m.Push(arg[0], path.Base(m.Option(mdb.TYPE)))
}
}},
mdb.CREATE: {Name: "create type name", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
mdb.HashCreate(m, arg, mdb.TEXT, m.Option(ice.MSG_DAEMON))
_xterm_get(m, m.Result(), true)
}},
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
if f := _xterm_get(m, m.Option(mdb.HASH), false); f != nil {
f.Close()
}
mdb.HashRemove(m, m.OptionSimple(mdb.HASH))
}},
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
mdb.HashModify(m, m.OptionSimple(mdb.HASH), arg)
}},
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
}},
"resize": {Name: "resize", Help: "大小", Hand: func(m *ice.Message, arg ...string) {
pty.Setsize(_xterm_get(m, m.Option(mdb.HASH), true), &pty.Winsize{Rows: uint16(kit.Int(m.Option("rows"))), Cols: uint16(kit.Int(m.Option("cols")))})
mdb.HashSelectDetail(m, m.Option(mdb.HASH), func(value ice.Map) {
if c, ok := value["_cmd"].(io.Closer); ok {
c.Close()
}
})
mdb.HashRemove(m)
}},
"rename": {Name: "rename", Help: "重命名", Hand: func(m *ice.Message, arg ...string) {
mdb.HashModify(m, arg)
}},
"resize": {Name: "resize", Help: "大小", Hand: func(m *ice.Message, arg ...string) {
pty.Setsize(_xterm_get(m, m.Option(mdb.HASH), true), &pty.Winsize{Rows: uint16(kit.Int(m.Option("rows"))), Cols: uint16(kit.Int(m.Option("cols")))})
}},
"select": {Name: "select", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
mdb.HashModify(m, mdb.TEXT, m.Option(ice.MSG_DAEMON))
_xterm_get(m, m.Option(mdb.HASH), true)
m.Cmd("", "input", arg)
}},
"input": {Name: "input", Help: "输入", Hand: func(m *ice.Message, arg ...string) {
mdb.HashModify(m, mdb.TIME, m.Time())
if b, e := base64.StdEncoding.DecodeString(strings.Join(arg, "")); m.Assert(e) {
if b, e := base64.StdEncoding.DecodeString(strings.Join(arg, "")); !m.Warn(e) {
_xterm_get(m, m.Option(mdb.HASH), true).Write(b)
mdb.HashModify(m, mdb.TIME, m.Time())
}
}},
}, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text,extra"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
mdb.HashSelect(m, kit.Slice(arg, 0, 1)...)
ctx.DisplayLocal(m, "")
}, mdb.HashAction(mdb.FIELD, "time,hash,type,name,text"), ctx.CmdAction()), Hand: func(m *ice.Message, arg ...string) {
ctx.DisplayLocal(mdb.HashSelect(m, kit.Slice(arg, 0, 1)...), "")
}},
})
}

View File

@ -18,7 +18,7 @@ const (
type compile struct {
ice.Code
regexp string `data:".*.java"`
linux string `data:"https://mirrors.tencent.com/repository/generic/konajdk/8/0/10/linux-x86_64/b1/TencentKona8.0.10.b1_jdk_linux-x86_64_8u332.tar.gz"`
linux string `data:"https://github.com/Tencent/TencentKona-8/releases/download/8.0.11-GA/TencentKona8.0.11.b2_jdk_linux-x86_64_8u345.tar.gz"`
list string `name:"list path auto listScript order install" help:"编译器"`
}

View File

@ -7,3 +7,8 @@ refer `
`
field web.code.java.compile
spark shell `
wget https://github.com/Tencent/TencentKona-8/releases/download/8.0.11-GA/TencentKona8.0.11.b2_jdk_linux-x86_64_8u345.tar.gz
tar xvf TencentKona8.0.11.b2_jdk_linux-x86_64_8u345.tar.gz && cd TencentKona-8.0.11-345/
`

View File

@ -117,8 +117,11 @@ func init() {
name = _tmux_key(m.Option(mdb.NAME), name)
_tmux_cmd(m, SPLIT_WINDOW, "-t", kit.Keys(name, "1"), "-p", "40")
_tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "2"), "ish_miss_log", ENTER)
_tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "1"), "vi etc/miss.sh", ENTER)
m.Go(func() {
m.Sleep("1s")
_tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "2"), "ish_miss_log", ENTER)
_tmux_cmd(m, SEND_KEYS, "-t", kit.Keys(name, "1"), "vi etc/miss.sh", ENTER)
})
_tmux_cmd(m, LINK_WINDOW, "-s", name, "-t", "miss:")
}