1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-26 17:44:05 +08:00
This commit is contained in:
shaoying 2022-12-04 09:17:10 +08:00
parent d2027d19ea
commit 30fdb259c6
22 changed files with 185 additions and 197 deletions

View File

@ -75,7 +75,7 @@ func UserRole(m *ice.Message, username ice.Any) (role string) {
if username == "" { if username == "" {
return VOID return VOID
} }
if role = VOID; username == ice.Info.UserName { if role = VOID; username == ice.Info.Username {
return ROOT return ROOT
} }
return UserInfo(m, username, USERROLE, ice.MSG_USERROLE) return UserInfo(m, username, USERROLE, ice.MSG_USERROLE)
@ -85,12 +85,12 @@ func UserLogin(m *ice.Message, username, password string) bool {
return m.Cmdy(USER, LOGIN, username, password).Option(ice.MSG_USERNAME) != "" return m.Cmdy(USER, LOGIN, username, password).Option(ice.MSG_USERNAME) != ""
} }
func UserRoot(m *ice.Message, arg ...string) *ice.Message { func UserRoot(m *ice.Message, arg ...string) *ice.Message {
username := kit.Select(ice.Info.UserName, arg, 0) username := kit.Select(ice.Info.Username, arg, 0)
usernick := kit.Select(UserNick(m, username), arg, 1) usernick := kit.Select(UserNick(m, username), arg, 1)
userrole := kit.Select(ROOT, arg, 2) userrole := kit.Select(ROOT, arg, 2)
if len(arg) > 0 { if len(arg) > 0 {
m.Cmd(USER, mdb.CREATE, username, "", usernick, "", userrole) m.Cmd(USER, mdb.CREATE, username, "", usernick, "", userrole)
ice.Info.UserName = username ice.Info.Username = username
} }
return SessAuth(m, kit.Dict(USERNAME, username, USERNICK, usernick, USERROLE, userrole)) return SessAuth(m, kit.Dict(USERNAME, username, USERNICK, usernick, USERROLE, userrole))
} }

View File

@ -45,10 +45,10 @@ func _runtime_init(m *ice.Message) {
m.Conf(RUNTIME, kit.Keys(BOOT, PATHNAME), path.Base(name)) m.Conf(RUNTIME, kit.Keys(BOOT, PATHNAME), path.Base(name))
} }
m.Conf(RUNTIME, kit.Keys(BOOT, USERNAME), kit.Select(kit.UserName(), kit.Env(CTX_USER))) m.Conf(RUNTIME, kit.Keys(BOOT, USERNAME), kit.Select(kit.UserName(), kit.Env(CTX_USER)))
ice.Info.HostName = m.Conf(RUNTIME, kit.Keys(BOOT, HOSTNAME)) ice.Info.Hostname = m.Conf(RUNTIME, kit.Keys(BOOT, HOSTNAME))
ice.Info.PathName = m.Conf(RUNTIME, kit.Keys(BOOT, PATHNAME)) ice.Info.Pathname = m.Conf(RUNTIME, kit.Keys(BOOT, PATHNAME))
ice.Info.UserName = m.Conf(RUNTIME, kit.Keys(BOOT, USERNAME)) ice.Info.Username = m.Conf(RUNTIME, kit.Keys(BOOT, USERNAME))
aaa.UserRoot(ice.Pulse, ice.Info.UserName) aaa.UserRoot(ice.Pulse, ice.Info.Username)
msg := m.Cmd(nfs.DIR, _system_find(m, os.Args[0]), "time,path,size,hash") msg := m.Cmd(nfs.DIR, _system_find(m, os.Args[0]), "time,path,size,hash")
m.Conf(RUNTIME, kit.Keys(BOOT, ice.BIN), msg.Append(nfs.PATH)) m.Conf(RUNTIME, kit.Keys(BOOT, ice.BIN), msg.Append(nfs.PATH))
m.Conf(RUNTIME, kit.Keys(BOOT, nfs.SIZE), msg.Append(nfs.SIZE)) m.Conf(RUNTIME, kit.Keys(BOOT, nfs.SIZE), msg.Append(nfs.SIZE))
@ -156,9 +156,9 @@ func init() {
HOSTINFO: {Hand: func(m *ice.Message, arg ...string) { _runtime_hostinfo(m) }}, HOSTINFO: {Hand: func(m *ice.Message, arg ...string) { _runtime_hostinfo(m) }},
HOSTNAME: {Hand: func(m *ice.Message, arg ...string) { HOSTNAME: {Hand: func(m *ice.Message, arg ...string) {
if len(arg) > 0 { if len(arg) > 0 {
ice.Info.HostName = m.Conf(RUNTIME, kit.Keys(BOOT, HOSTNAME), m.Conf(RUNTIME, kit.Keys(NODE, mdb.NAME), arg[0])) ice.Info.Hostname = m.Conf(RUNTIME, kit.Keys(BOOT, HOSTNAME), m.Conf(RUNTIME, kit.Keys(NODE, mdb.NAME), arg[0]))
} }
m.Echo(ice.Info.HostName) m.Echo(ice.Info.Hostname)
}}, }},
USERINFO: {Hand: func(m *ice.Message, arg ...string) { m.Split(m.Cmdx(SYSTEM, "who"), "user term time") }}, USERINFO: {Hand: func(m *ice.Message, arg ...string) { m.Split(m.Cmdx(SYSTEM, "who"), "user term time") }},
PROCINFO: {Hand: func(m *ice.Message, arg ...string) { PROCINFO: {Hand: func(m *ice.Message, arg ...string) {

View File

@ -256,19 +256,19 @@ func AutoConfig(args ...ice.Any) *ice.Action {
cs[m.CommandKey()] = &ice.Config{Value: kit.Data(args...)} cs[m.CommandKey()] = &ice.Config{Value: kit.Data(args...)}
ice.Info.Load(m, m.CommandKey()) ice.Info.Load(m, m.CommandKey())
} }
if cs := m.Target().Commands; cs[m.CommandKey()] == nil { if cmd := m.Target().Commands[m.CommandKey()]; cmd == nil {
return return
} else if cs[m.CommandKey()].Actions[INSERT] != nil { } else if cmd.Actions[INSERT] != nil {
if inputs := []ice.Any{}; cs[m.CommandKey()].Meta[INSERT] == nil { if inputs := []ice.Any{}; cmd.Meta[INSERT] == nil {
kit.Fetch(kit.Filters(kit.Simple(m.Config(SHORT), kit.Split(ListField(m))), "", TIME, ID), func(k string) { inputs = append(inputs, k) }) kit.Fetch(kit.Filters(kit.Simple(m.Config(SHORT), kit.Split(ListField(m))), "", TIME, ID), func(k string) { inputs = append(inputs, k) })
m.Design(INSERT, "添加", inputs...) m.Design(INSERT, "添加", inputs...)
} }
if inputs := []ice.Any{}; cs[m.CommandKey()].Meta[CREATE] == nil { if inputs := []ice.Any{}; cmd.Meta[CREATE] == nil {
kit.Fetch(kit.Filters(kit.Split(kit.Select(m.Config(SHORT), m.Config(FIELDS))), TIME, HASH, COUNT), func(k string) { inputs = append(inputs, k) }) kit.Fetch(kit.Filters(kit.Split(kit.Select(m.Config(SHORT), m.Config(FIELDS))), TIME, HASH, COUNT), func(k string) { inputs = append(inputs, k) })
m.Design(CREATE, "创建", inputs...) m.Design(CREATE, "创建", inputs...)
} }
} else if cs[m.CommandKey()].Actions[CREATE] != nil { } else if cmd.Actions[CREATE] != nil {
if inputs := []ice.Any{}; cs[m.CommandKey()].Meta[CREATE] == nil { if inputs := []ice.Any{}; cmd.Meta[CREATE] == nil {
kit.Fetch(kit.Filters(kit.Split(HashField(m)), TIME, HASH), func(k string) { inputs = append(inputs, k) }) kit.Fetch(kit.Filters(kit.Split(HashField(m)), TIME, HASH), func(k string) { inputs = append(inputs, k) })
m.Design(CREATE, "创建", inputs...) m.Design(CREATE, "创建", inputs...)
} }

View File

@ -97,8 +97,10 @@ const (
TAR = "tar" TAR = "tar"
TEMPLATE = "template" TEMPLATE = "template"
VERSION = "version"
MASTER = "master" MASTER = "master"
BRANCH = "branch" BRANCH = "branch"
REMOTE = "remote"
REPOS = "repos" REPOS = "repos"
) )
const ( const (

View File

@ -55,7 +55,7 @@ func _dream_show(m *ice.Message, name string) {
defer m.Sleep3s() defer m.Sleep3s()
m.Options(cli.CMD_DIR, kit.Path(p), cli.CMD_ENV, kit.Simple( m.Options(cli.CMD_DIR, kit.Path(p), cli.CMD_ENV, kit.Simple(
cli.CTX_OPS, "http://localhost:"+m.CmdAppend(SERVE, tcp.PORT), cli.CTX_OPS, "http://localhost:"+m.CmdAppend(SERVE, tcp.PORT),
cli.PATH, cli.BinPath(kit.Path(p, ice.BIN)), cli.USER, ice.Info.UserName, cli.PATH, cli.BinPath(kit.Path(p, ice.BIN)), cli.USER, ice.Info.Username,
kit.EnvSimple(cli.HOME, cli.TERM, cli.SHELL), m.Configv(cli.ENV), kit.EnvSimple(cli.HOME, cli.TERM, cli.SHELL), m.Configv(cli.ENV),
), cli.CMD_OUTPUT, path.Join(p, ice.BIN_BOOT_LOG)) ), cli.CMD_OUTPUT, path.Join(p, ice.BIN_BOOT_LOG))
defer m.Options(cli.CMD_DIR, "", cli.CMD_ENV, "", cli.CMD_OUTPUT, "") defer m.Options(cli.CMD_DIR, "", cli.CMD_ENV, "", cli.CMD_OUTPUT, "")

View File

@ -100,7 +100,7 @@ func PushPodCmd(m *ice.Message, cmd string, arg ...string) {
m.Cmd(SPACE, ice.OptionFields(mdb.TYPE, mdb.NAME), func(value ice.Maps) { m.Cmd(SPACE, ice.OptionFields(mdb.TYPE, mdb.NAME), func(value ice.Maps) {
switch value[mdb.TYPE] { switch value[mdb.TYPE] {
case SERVER, WORKER: case SERVER, WORKER:
if value[mdb.NAME] == ice.Info.HostName { if value[mdb.NAME] == ice.Info.Hostname {
break break
} }
m.Cmd(SPACE, value[mdb.NAME], kit.Select(m.PrefixKey(), cmd), arg).Table(func(index int, val ice.Maps, head []string) { m.Cmd(SPACE, value[mdb.NAME], kit.Select(m.PrefixKey(), cmd), arg).Table(func(index int, val ice.Maps, head []string) {

View File

@ -22,7 +22,7 @@ func _serve_start(m *ice.Message) {
if m.Option(aaa.USERNAME) != "" { if m.Option(aaa.USERNAME) != "" {
aaa.UserRoot(m, m.Option(aaa.USERNAME), m.Option(aaa.USERNICK)) aaa.UserRoot(m, m.Option(aaa.USERNAME), m.Option(aaa.USERNICK))
} }
if cli.NodeInfo(m, kit.Select(ice.Info.HostName, m.Option("nodename")), SERVER); m.Option(tcp.PORT) == tcp.RANDOM { if cli.NodeInfo(m, kit.Select(ice.Info.Hostname, m.Option("nodename")), SERVER); m.Option(tcp.PORT) == tcp.RANDOM {
m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.RIGHT)) m.Option(tcp.PORT, m.Cmdx(tcp.PORT, aaa.RIGHT))
} }
m.Target().Start(m, m.OptionSimple(tcp.HOST, tcp.PORT)...) m.Target().Start(m, m.OptionSimple(tcp.HOST, tcp.PORT)...)
@ -153,7 +153,7 @@ const SERVE = "serve"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
SERVE: {Name: "serve name auto start", Help: "服务器", Actions: ice.MergeActions(ice.Actions{ SERVE: {Name: "serve name auto start", Help: "服务器", Actions: ice.MergeActions(ice.Actions{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { cli.NodeInfo(m, ice.Info.PathName, WORKER) }}, ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) { cli.NodeInfo(m, ice.Info.Pathname, WORKER) }},
cli.START: {Name: "start dev name=web proto=http host port=9020 nodename username usernick", Hand: func(m *ice.Message, arg ...string) { cli.START: {Name: "start dev name=web proto=http host port=9020 nodename username usernick", Hand: func(m *ice.Message, arg ...string) {
_serve_start(m) _serve_start(m)
}}, }},

View File

@ -171,7 +171,7 @@ func init() {
m.Cmd(SPACE, m.Option(mdb.NAME), ice.EXIT) m.Cmd(SPACE, m.Option(mdb.NAME), ice.EXIT)
}}, }},
SPACE_LOGIN: {Hand: func(m *ice.Message, arg ...string) { SPACE_LOGIN: {Hand: func(m *ice.Message, arg ...string) {
if ice.Info.UserName == aaa.VOID { if ice.Info.Username == aaa.VOID {
m.Option(ice.MSG_USERROLE, aaa.TECH) m.Option(ice.MSG_USERROLE, aaa.TECH)
} else { } else {
m.Option(ice.MSG_USERROLE, kit.Select(m.Option(ice.MSG_USERROLE), m.CmdAppend(aaa.USER, m.Option(ice.MSG_USERNAME), aaa.USERROLE))) m.Option(ice.MSG_USERROLE, kit.Select(m.Option(ice.MSG_USERROLE), m.CmdAppend(aaa.USER, m.Option(ice.MSG_USERNAME), aaa.USERROLE)))

View File

@ -38,7 +38,7 @@ func init() {
m.ProcessLocation(web.MergeURL2(m, ice.PS)) m.ProcessLocation(web.MergeURL2(m, ice.PS))
}}, }},
}, gdb.EventAction(web.SPACE_OPEN), aaa.RoleAction(CONFIRM)), Hand: func(m *ice.Message, arg ...string) { }, gdb.EventAction(web.SPACE_OPEN), aaa.RoleAction(CONFIRM)), Hand: func(m *ice.Message, arg ...string) {
m.Echo("请授权: %s 访问设备: %s", arg[0], ice.Info.HostName).Echo(ice.NL).EchoButton(CONFIRM) m.Echo("请授权: %s 访问设备: %s", arg[0], ice.Info.Hostname).Echo(ice.NL).EchoButton(CONFIRM)
}}, }},
}) })
} }

View File

@ -5,63 +5,34 @@ import (
"strings" "strings"
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/ssh"
"shylinux.com/x/icebergs/base/tcp"
"shylinux.com/x/icebergs/base/web" "shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
func _defs_list(m *ice.Message) string { func _defs_list(m *ice.Message) string {
return m.OptionDefault(mdb.LIST, kit.Join([]string{mdb.LIST, ice.Maps{ return m.OptionDefault(mdb.LIST, ice.Maps{
"Zone": "zone id auto insert", "Zone": "zone id auto insert",
"Hash": "hash auto create", "Hash": "hash auto create",
"Data": "path auto", "Data": "path auto",
"Lang": "path auto", "Lang": "path auto",
"Code": "port path auto start order build download", "Code": "port path auto start order build download",
}[m.Option(mdb.TYPE)]}, ice.SP)) }[m.Option(mdb.TYPE)])
} }
func _autogen_source(m *ice.Message, main, file string) { func _autogen_source(m *ice.Message, main, file string) {
main = kit.ExtChange(main, SHY) main = kit.ExtChange(main, SHY)
m.Cmd(nfs.DEFS, main, `title "{{.Option "name"}}"`+ice.NL) m.Cmd(nfs.DEFS, main, `title "{{.Option "name"}}"`+ice.NL)
m.Cmd(nfs.PUSH, main, ice.NL, ssh.SOURCE+ice.PS+strings.TrimPrefix(file, ice.SRC+ice.PS)+ice.NL) m.Cmd(nfs.PUSH, main, ssh.SOURCE+ice.PS+strings.TrimPrefix(file, ice.SRC+ice.PS)+ice.NL)
}
func _autogen_script(m *ice.Message, dir string) {
m.Cmd(nfs.DEFS, dir, `chapter "{{.Option "name"}}"
field {{.Option "key"}}
`)
}
func _autogen_module(m *ice.Message, dir string) {
m.Cmd(nfs.DEFS, dir, `package {{.Option "zone"}}
import (
"shylinux.com/x/ice"
)
type {{.Option "name"}} struct {
ice.{{.Option "type"}}
list string {{.Option "text"}}
}
func (s {{.Option "name"}}) List(m *ice.Message, arg ...string) {
s.{{.Option "type"}}.List(m, arg...)
}
func init() { ice.Cmd("{{.Option "key"}}", {{.Option "name"}}{}) }
`)
} }
func _autogen_script(m *ice.Message, file string) { m.Cmd(nfs.DEFS, file, _script_template) }
func _autogen_module(m *ice.Message, file string) { m.Cmd(nfs.DEFS, file, _module_template) }
func _autogen_import(m *ice.Message, main string, ctx string, mod string) { func _autogen_import(m *ice.Message, main string, ctx string, mod string) {
m.Cmd(nfs.DEFS, main, `package main m.Cmd(nfs.DEFS, main, _main_template)
import (
"shylinux.com/x/ice"
)
func main() { print(ice.Run()) }
`)
begin, done, list := false, false, []string{} begin, done, list := false, false, []string{}
m.Cmd(nfs.CAT, main, func(line string, index int) { m.Cmd(nfs.CAT, main, func(line string, index int) {
if begin && !done && strings.HasPrefix(line, ")") { if begin && !done && strings.HasPrefix(line, ")") {
@ -82,51 +53,30 @@ func _autogen_version(m *ice.Message) {
if mod := _autogen_mod(m, ice.GO_MOD); !nfs.ExistsFile(m, ".git") { if mod := _autogen_mod(m, ice.GO_MOD); !nfs.ExistsFile(m, ".git") {
m.Cmdy(cli.SYSTEM, GIT, ice.INIT) m.Cmdy(cli.SYSTEM, GIT, ice.INIT)
m.Cmd(cli.SYSTEM, GIT, "remote", "add", "origin", "https://"+mod) m.Cmd(cli.SYSTEM, GIT, "remote", "add", "origin", "https://"+mod)
m.Cmd("web.code.git.repos", mdb.CREATE, "repos", "https://"+mod, mdb.NAME, path.Base(mod), nfs.PATH, nfs.PWD)
m.Cmd(cli.SYSTEM, GIT, "add", ice.GO_MOD, ice.SRC, ice.ETC_MISS_SH) m.Cmd(cli.SYSTEM, GIT, "add", ice.GO_MOD, ice.SRC, ice.ETC_MISS_SH)
m.Cmd(nfs.DEFS, ".gitignore", kit.Format(` m.Cmd(nfs.DEFS, ".gitignore", _git_ignore)
src/binpack.go m.Cmd("web.code.git.repos", mdb.CREATE, nfs.REPOS, "https://"+mod, mdb.NAME, path.Base(mod), nfs.PATH, nfs.PWD)
src/version.go
etc/
bin/
var/
usr/
.*
`))
} }
m.Cmd(nfs.DEFS, ice.SRC_BINPACK_GO, `package main`+ice.NL)
m.Cmd(nfs.DEFS, ice.SRC_BINPACK_GO, kit.Format(`package main m.Cmd(nfs.SAVE, ice.SRC_VERSION_GO, kit.Format(_version_template, _autogen_gits(m, nfs.MODULE, _autogen_mod(m, ice.GO_MOD), tcp.HOSTNAME, ice.Info.Hostname, aaa.USERNAME, ice.Info.Username)))
`))
m.Cmd(nfs.SAVE, ice.SRC_VERSION_GO, kit.Format(`package main
import ice "shylinux.com/x/icebergs"
func init() {
ice.Info.Make = ice.MakeInfo{
%s
}
}
`, _autogen_gits(m, "Module", _autogen_mod(m, ice.GO_MOD), "HostName", ice.Info.HostName, "UserName", ice.Info.UserName)))
m.Cmdy(nfs.DIR, ice.SRC_MAIN_GO)
m.Cmdy(nfs.DIR, ice.SRC_VERSION_GO)
m.Cmdy(nfs.DIR, ice.SRC_BINPACK_GO) m.Cmdy(nfs.DIR, ice.SRC_BINPACK_GO)
m.Cmdy(nfs.DIR, ice.SRC_VERSION_GO)
m.Cmdy(nfs.DIR, ice.SRC_MAIN_GO)
} }
func _autogen_gits(m *ice.Message, arg ...string) string { func _autogen_gits(m *ice.Message, arg ...string) string {
res := []string{} res := []string{}
kit.Fetch(_autogen_git(m, arg...), func(k string, v ice.Any) { kit.Fetch(_autogen_git(m, arg...), func(k string, v string) {
res = append(res, kit.Format(` %s: "%s",`, k, v)) res = append(res, kit.Format(` %s: "%s",`, kit.Capital(k), strings.TrimSpace(v)))
}) })
return kit.Join(res, ice.NL) return kit.Join(res, ice.NL)
} }
func _autogen_git(m *ice.Message, arg ...string) ice.Map { func _autogen_git(m *ice.Message, arg ...string) ice.Map {
return kit.Dict("Path", kit.Path(""), "Time", m.Time(), arg, return kit.Dict(nfs.PATH, kit.Path(""), mdb.TIME, m.Time(), arg,
"Hash", strings.TrimSpace(m.Cmdx(cli.SYSTEM, GIT, "log", "-n1", `--pretty=%H`)), mdb.HASH, m.Cmdx(cli.SYSTEM, GIT, "log", "-n1", `--pretty=%H`),
"Remote", strings.TrimSpace(m.Cmdx(cli.SYSTEM, GIT, "config", "remote.origin.url")), nfs.REMOTE, m.Cmdx(cli.SYSTEM, GIT, "config", "remote.origin.url"),
"Branch", strings.TrimSpace(m.Cmdx(cli.SYSTEM, GIT, "rev-parse", "--abbrev-ref", "HEAD")), nfs.BRANCH, m.Cmdx(cli.SYSTEM, GIT, "rev-parse", "--abbrev-ref", "HEAD"),
"Version", strings.TrimSpace(m.Cmdx(cli.SYSTEM, GIT, "describe", "--tags")), nfs.VERSION, m.Cmdx(cli.SYSTEM, GIT, "describe", "--tags"),
"Domain", kit.Split(m.Option(ice.MSG_USERWEB), "?")[0], web.DOMAIN, kit.Split(m.Option(ice.MSG_USERWEB), "?")[0],
) )
} }
func _autogen_mod(m *ice.Message, file string) (mod string) { func _autogen_mod(m *ice.Message, file string) (mod string) {
@ -136,12 +86,10 @@ func _autogen_mod(m *ice.Message, file string) (mod string) {
} else { } else {
host = path.Join(host, "x", path.Base(kit.Path(""))) host = path.Join(host, "x", path.Base(kit.Path("")))
} }
m.Cmd(nfs.DEFS, file, kit.Format(`module %s m.Cmd(nfs.DEFS, file, kit.Format(`module %s
go 1.11 go 1.11
`, host)) `, host))
m.Cmd(nfs.CAT, file, func(line string) { m.Cmd(nfs.CAT, file, func(line string) {
if strings.HasPrefix(line, "module") { if strings.HasPrefix(line, "module") {
mod = kit.Split(line, ice.SP)[1] mod = kit.Split(line, ice.SP)[1]
@ -154,54 +102,55 @@ const AUTOGEN = "autogen"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
AUTOGEN: {Name: "autogen path auto create binpack script relay", Help: "生成", Actions: ice.Actions{ AUTOGEN: {Name: "autogen path auto module binpack script relay", Help: "生成", Actions: ice.Actions{
mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) { mdb.INPUTS: {Hand: func(m *ice.Message, arg ...string) {
switch arg[0] { switch arg[0] {
case cli.MAIN: case cli.MAIN:
m.Option(nfs.DIR_ROOT, m.Option(nfs.PATH)) m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_ROOT, m.Option(nfs.PATH), nfs.DIR_REG, `.*\.go$`)).RenameAppend(nfs.PATH, arg[0])
m.Cmdy(nfs.DIR, nfs.PWD, nfs.DIR_CLI_FIELDS, kit.Dict(nfs.DIR_REG, `.*\.go$`)).RenameAppend(nfs.PATH, arg[0])
} }
}}, }},
mdb.CREATE: {Name: "create name*=hi help type=Zone,Hash,Data,Code,Lang main*=main.go@key zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { nfs.MODULE: {Name: "module name*=hi help type*=Zone,Hash,Data,Code,Lang main*=main.go@key zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
m.OptionDefault(mdb.ZONE, m.Option(mdb.NAME), mdb.HELP, m.Option(mdb.NAME)) m.OptionDefault(mdb.ZONE, m.Option(mdb.NAME), mdb.HELP, m.Option(mdb.NAME))
m.OptionDefault(mdb.KEY, Prefix(m.Option(mdb.ZONE), m.Option(mdb.NAME))) m.OptionDefault(mdb.KEY, Prefix(m.Option(mdb.ZONE), m.Option(mdb.NAME)))
m.Option(mdb.TEXT, kit.Format("`name:\"%s\" help:\"%s\"`", _defs_list(m), m.Option(mdb.HELP))) m.Option(mdb.TEXT, kit.Format("`name:\"list %s\" help:\"%s\"`", _defs_list(m), m.Option(mdb.HELP)))
nfs.OptionFiles(m, nfs.DiskFile) nfs.OptionFiles(m, nfs.DiskFile)
if p := path.Join(m.Option(nfs.PATH), m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), SHY)); !nfs.ExistsFile(m, p) { if p := path.Join(ice.SRC, m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), SHY)); !nfs.ExistsFile(m, p) {
_autogen_source(m, path.Join(m.Option(nfs.PATH), m.Option(cli.MAIN)), p) _autogen_source(m, path.Join(ice.SRC, m.Option(cli.MAIN)), p)
_autogen_script(m, p) _autogen_script(m, p)
} }
if p := path.Join(m.Option(nfs.PATH), m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), GO)); !nfs.ExistsFile(m, p) { if p := path.Join(ice.SRC, m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), GO)); !nfs.ExistsFile(m, p) {
_autogen_import(m, path.Join(ice.SRC, m.Option(cli.MAIN)), m.Option(mdb.ZONE), _autogen_mod(m, ice.GO_MOD))
_autogen_module(m, p) _autogen_module(m, p)
_autogen_import(m, path.Join(m.Option(nfs.PATH), m.Option(cli.MAIN)), m.Option(mdb.ZONE), _autogen_mod(m, ice.GO_MOD))
} }
m.Option(nfs.FILE, path.Join(m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), GO))) m.Option(nfs.FILE, path.Join(m.Option(mdb.ZONE), kit.Keys(m.Option(mdb.NAME), GO)))
_autogen_version(m.Spawn()) _autogen_version(m.Spawn())
}}, }},
nfs.SCRIPT: {Name: "script", Help: "脚本", Hand: func(m *ice.Message, arg ...string) { nfs.SCRIPT: {Help: "脚本", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(nfs.DEFS, ice.ETC_MISS_SH, _miss_script) m.Cmd(nfs.DEFS, ice.ETC_MISS_SH, _miss_template)
defer m.Cmdy(nfs.CAT, ice.ETC_MISS_SH) defer m.Cmdy(nfs.CAT, ice.ETC_MISS_SH)
m.Cmdy(nfs.DIR, ice.ETC_MISS_SH) m.Cmdy(nfs.DIR, ice.ETC_MISS_SH)
m.Cmdy(nfs.DIR, ice.GO_MOD) m.Cmdy(nfs.DIR, ice.GO_MOD)
m.Cmdy(nfs.DIR, ice.GO_SUM) m.Cmdy(nfs.DIR, ice.GO_SUM)
}}, }},
BINPACK: {Name: "binpack", Help: "打包:生成 src/binpack.go", Hand: func(m *ice.Message, arg ...string) { BINPACK: {Help: "打包", Hand: func(m *ice.Message, arg ...string) {
_autogen_version(m)
if m.Cmd(BINPACK, mdb.CREATE); nfs.ExistsFile(m, ice.USR_RELEASE) && m.Option(ice.MSG_USERPOD) == "" { if m.Cmd(BINPACK, mdb.CREATE); nfs.ExistsFile(m, ice.USR_RELEASE) && m.Option(ice.MSG_USERPOD) == "" {
m.Cmd(nfs.COPY, path.Join(ice.USR_RELEASE, "conf.go"), path.Join(ice.USR_ICEBERGS, "conf.go")) const (
cli.SystemCmds(m, `cat src/binpack.go|sed 's/package main/package ice/g' > usr/release/binpack.go`) CONF_GO = "conf.go"
m.Cmdy(nfs.DIR, "usr/release/binpack.go") BINPACK_GO = "binpack.go"
m.Cmdy(nfs.DIR, "usr/release/conf.go") )
m.Cmd(nfs.COPY, ice.USR_RELEASE+CONF_GO, ice.USR_ICEBERGS+CONF_GO)
cli.SystemCmds(m, kit.Format(`cat %s|sed 's/package main/package ice/g' > %s`, ice.SRC_BINPACK_GO, ice.USR_RELEASE+BINPACK_GO))
m.Cmdy(nfs.DIR, ice.USR_RELEASE+BINPACK_GO)
m.Cmdy(nfs.DIR, ice.USR_RELEASE+CONF_GO)
} }
_autogen_version(m)
m.Cmdy(nfs.CAT, ice.SRC_VERSION_GO) m.Cmdy(nfs.CAT, ice.SRC_VERSION_GO)
}}, }},
RELAY: {Name: "relay alias username host port list", Help: "跳板", Hand: func(m *ice.Message, arg ...string) { RELAY: {Name: "relay alias username host port init", Help: "跳板", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(COMPILE, RELAY) m.Cmdy(COMPILE, RELAY)
m.Cmd(nfs.LINK, path.Join(ice.USR_PUBLISH, m.Option(mdb.ALIAS)), RELAY) m.Cmdy(nfs.LINK, ice.USR_PUBLISH+m.Option(mdb.ALIAS), ice.USR_PUBLISH+RELAY)
m.Cmd(nfs.SAVE, path.Join(kit.Env(cli.HOME), ".ssh/"+m.Option(mdb.ALIAS)+".json"), m.Cmd(nfs.SAVE, path.Join(kit.Env(cli.HOME), ".ssh/"+m.Option(mdb.ALIAS)+".json"),
kit.Formats(kit.Dict(m.OptionSimple("username,host,port,list")))) kit.Formats(kit.Dict(m.OptionSimple("username,host,port,init"))))
}}, }},
}, Hand: func(m *ice.Message, arg ...string) { }, Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(nfs.CAT, kit.Select(path.Base(ice.SRC_VERSION_GO), arg, 0), kit.Dict(nfs.DIR_ROOT, ice.SRC)) m.Cmdy(nfs.CAT, kit.Select(path.Base(ice.SRC_VERSION_GO), arg, 0), kit.Dict(nfs.DIR_ROOT, ice.SRC))
@ -209,7 +158,7 @@ func init() {
}) })
} }
var _miss_script = `#! /bin/sh var _miss_template = `#! /bin/sh
if [ -f $PWD/.ish/plug.sh ]; then source $PWD/.ish/plug.sh; elif [ -f $HOME/.ish/plug.sh ]; then source $HOME/.ish/plug.sh; else if [ -f $PWD/.ish/plug.sh ]; then source $PWD/.ish/plug.sh; elif [ -f $HOME/.ish/plug.sh ]; then source $HOME/.ish/plug.sh; else
ctx_temp=$(mktemp); if curl -h &>/dev/null; then curl -o $ctx_temp -fsSL https://shylinux.com; else wget -O $ctx_temp -q http://shylinux.com; fi; source $ctx_temp intshell ctx_temp=$(mktemp); if curl -h &>/dev/null; then curl -o $ctx_temp -fsSL https://shylinux.com; else wget -O $ctx_temp -q http://shylinux.com; fi; source $ctx_temp intshell
@ -222,3 +171,52 @@ ish_miss_prepare_operate
ish_miss_make; if [ -n "$*" ]; then ish_miss_serve "$@"; fi ish_miss_make; if [ -n "$*" ]; then ish_miss_serve "$@"; fi
` `
var _main_template = `package main
import (
"shylinux.com/x/ice"
)
func main() { print(ice.Run()) }
`
var _module_template = `package {{.Option "zone"}}
import (
"shylinux.com/x/ice"
)
type {{.Option "name"}} struct {
ice.{{.Option "type"}}
list string {{.Option "text"}}
}
func (s {{.Option "name"}}) List(m *ice.Message, arg ...string) {
s.{{.Option "type"}}.List(m, arg...)
}
func init() { ice.Cmd("{{.Option "key"}}", {{.Option "name"}}{}) }
`
var _version_template = `package main
import ice "shylinux.com/x/icebergs"
func init() {
ice.Info.Make = ice.MakeInfo{
%s
}
}
`
var _script_template = `chapter "{{.Option "name"}}"
field {{.Option "key"}}
`
var _git_ignore = `
src/binpack.go
src/version.go
etc/
bin/
var/
usr/
.*
`

View File

@ -17,15 +17,12 @@ import (
func _bench_http(m *ice.Message, target string, arg ...string) { func _bench_http(m *ice.Message, target string, arg ...string) {
nconn := kit.Int64(kit.Select("10", m.Option(NCONN))) nconn := kit.Int64(kit.Select("10", m.Option(NCONN)))
nreqs := kit.Int64(kit.Select("100", m.Option(NREQS))) nreqs := kit.Int64(kit.Select("100", m.Option(NREQS)))
m.Echo("nconn: %d total: %d\n", nconn, nreqs*nconn)
list := []*http.Request{} list := []*http.Request{}
for _, v := range strings.Split(target, ice.NL) { for _, v := range strings.Split(target, ice.NL) {
switch ls := kit.Split(v); ls[0] { switch ls := kit.Split(v); ls[0] {
case http.MethodPost: // POST,url,file case http.MethodPost: // POST,url,file
if f, e := nfs.OpenFile(m, ls[2]); m.Assert(e) { if f, e := nfs.OpenFile(m, ls[2]); m.Assert(e) {
defer f.Close() defer f.Close()
if req, err := http.NewRequest(http.MethodPost, ls[1], f); m.Assert(err) { if req, err := http.NewRequest(http.MethodPost, ls[1], f); m.Assert(err) {
list = append(list, req) list = append(list, req)
} }
@ -36,13 +33,12 @@ func _bench_http(m *ice.Message, target string, arg ...string) {
} }
} }
} }
var ndata int64 var ndata int64
if s, e := bench.HTTP(nconn, nreqs, list, func(req *http.Request, res *http.Response) { if s, e := bench.HTTP(nconn, nreqs, list, func(req *http.Request, res *http.Response) {
n, _ := io.Copy(ioutil.Discard, res.Body) n, _ := io.Copy(ioutil.Discard, res.Body)
atomic.AddInt64(&ndata, n) atomic.AddInt64(&ndata, n)
}); m.Assert(e) { }); m.Assert(e) {
m.Echo("ndata: %s\n", kit.FmtSize(ndata)).Echo(s.Show()) m.Echo("nconn: %d total: %d ndata: %s\n", nconn, nreqs*nconn, kit.FmtSize(ndata)).Echo(s.Show())
m.ProcessInner() m.ProcessInner()
} }
} }
@ -62,7 +58,7 @@ const BENCH = "bench"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
BENCH: {Name: "bench zone id auto insert", Help: "性能压测", Actions: ice.MergeActions(ice.Actions{ BENCH: {Name: "bench zone id auto insert", Help: "性能压测", Actions: ice.MergeActions(ice.Actions{
mdb.INSERT: {Name: "insert zone=some type=http,redis name=demo text='http://localhost:9020' nconn=3 nreqs=10", Help: "添加"}, mdb.INSERT: {Name: "insert zone*=some type*=http,redis name=demo text*='http://localhost:9020' nconn=3 nreqs=10"},
ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) { ice.RUN: {Name: "run", Help: "执行", Hand: func(m *ice.Message, arg ...string) {
switch m.Option(mdb.TYPE) { switch m.Option(mdb.TYPE) {
case HTTP: case HTTP:
@ -71,7 +67,7 @@ func init() {
_bench_redis(m, m.Option(mdb.TEXT)) _bench_redis(m, m.Option(mdb.TEXT))
} }
}}, }},
}, mdb.ZoneAction(mdb.SHORT, mdb.ZONE, mdb.FIELD, "time,id,type,name,text,nconn,nreqs")), Hand: func(m *ice.Message, arg ...string) { }, mdb.ZoneAction(mdb.FIELD, "time,id,type,name,text,nconn,nreqs")), Hand: func(m *ice.Message, arg ...string) {
mdb.ZoneSelect(m, arg...).PushAction(kit.Select(mdb.REMOVE, ice.RUN, len(arg) > 0)) mdb.ZoneSelect(m, arg...).PushAction(kit.Select(mdb.REMOVE, ice.RUN, len(arg) > 0))
}}, }},
}) })

View File

@ -15,10 +15,10 @@ import (
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )
func _binpack_file(m *ice.Message, w io.Writer, arg ...string) { // file name func _binpack_file(m *ice.Message, w io.Writer, arg ...string) {
if f, e := nfs.OpenFile(m, arg[0]); !m.Warn(e, ice.ErrNotFound, arg[0]) { if f, e := nfs.OpenFile(m, arg[0]); !m.Warn(e, ice.ErrNotFound, arg[0]) {
defer f.Close() defer f.Close()
if b, _ := ioutil.ReadAll(f); len(b) > 0 { if b, e := ioutil.ReadAll(f); !m.Warn(e, ice.ErrNotValid, arg[0]) && len(b) > 0 {
fmt.Fprintf(w, " \"%s\": \"%s\",\n", kit.Select(arg[0], arg, 1), base64.StdEncoding.EncodeToString(b)) fmt.Fprintf(w, " \"%s\": \"%s\",\n", kit.Select(arg[0], arg, 1), base64.StdEncoding.EncodeToString(b))
} }
} }
@ -40,11 +40,11 @@ func _binpack_dir(m *ice.Message, w io.Writer, dir string) {
func _binpack_can(m *ice.Message, w io.Writer, dir string) { func _binpack_can(m *ice.Message, w io.Writer, dir string) {
for _, k := range []string{ice.FAVICON_ICO, ice.PROTO_JS, ice.FRAME_JS} { for _, k := range []string{ice.FAVICON_ICO, ice.PROTO_JS, ice.FRAME_JS} {
_binpack_file(m, w, path.Join(dir, k), path.Join(ice.USR_VOLCANOS, k)) _binpack_file(m, w, path.Join(dir, k))
} }
for _, k := range []string{LIB, PAGE, PANEL, PLUGIN, "publish/client/nodejs/"} { for _, k := range []string{LIB, PAGE, PANEL, PLUGIN, "publish/client/nodejs/"} {
nfs.DirDeepAll(m, dir, k, func(value ice.Maps) { nfs.DirDeepAll(m, dir, k, func(value ice.Maps) {
_binpack_file(m, w, path.Join(dir, value[nfs.PATH]), path.Join(ice.USR_VOLCANOS, value[nfs.PATH])) _binpack_file(m, w, path.Join(dir, value[nfs.PATH]))
}) })
} }
fmt.Fprintln(w) fmt.Fprintln(w)
@ -54,50 +54,25 @@ func _binpack_all(m *ice.Message) {
if w, p, e := nfs.CreateFile(m, ice.SRC_BINPACK_GO); m.Assert(e) { if w, p, e := nfs.CreateFile(m, ice.SRC_BINPACK_GO); m.Assert(e) {
defer w.Close() defer w.Close()
defer m.Echo(p) defer m.Echo(p)
fmt.Fprintln(w, _binpack_template)
fmt.Fprintln(w, `package main defer fmt.Fprintln(w, _binpack_template_end)
if m.Option(ice.MSG_USERPOD) == "" {
import ( if nfs.ExistsFile(m, ice.USR_VOLCANOS) {
"encoding/base64" _binpack_can(m, w, ice.USR_VOLCANOS)
}
ice "shylinux.com/x/icebergs" if nfs.ExistsFile(m, ice.USR_INTSHELL) {
"shylinux.com/x/icebergs/base/nfs" _binpack_dir(m, w, ice.USR_INTSHELL)
) }
func init() {
`)
defer fmt.Fprintln(w, `}`)
defer fmt.Fprintln(w, `
nfs.PackFile.RemoveAll(ice.SRC)
for k, v := range pack {
if b, e := base64.StdEncoding.DecodeString(v); e == nil {
nfs.PackFile.WriteFile(k, b)
}
}
`)
fmt.Fprintln(w, ` pack := ice.Maps{`)
defer fmt.Fprintln(w, ` }`)
if nfs.ExistsFile(m, ice.USR_VOLCANOS) && m.Option(ice.MSG_USERPOD) == "" {
_binpack_can(m, w, ice.USR_VOLCANOS)
}
if nfs.ExistsFile(m, ice.USR_INTSHELL) && m.Option(ice.MSG_USERPOD) == "" {
_binpack_dir(m, w, ice.USR_INTSHELL)
} }
_binpack_dir(m, w, ice.SRC) _binpack_dir(m, w, ice.SRC)
_binpack_file(m, w, ice.ETC_MISS_SH) _binpack_file(m, w, ice.ETC_MISS_SH)
_binpack_file(m, w, ice.ETC_INIT_SHY) _binpack_file(m, w, ice.ETC_INIT_SHY)
_binpack_file(m, w, ice.ETC_EXIT_SHY) _binpack_file(m, w, ice.ETC_EXIT_SHY)
fmt.Fprintln(w) fmt.Fprintln(w)
_binpack_file(m, w, ice.LICENSE) _binpack_file(m, w, ice.LICENSE)
_binpack_file(m, w, ice.MAKEFILE) _binpack_file(m, w, ice.MAKEFILE)
_binpack_file(m, w, ice.README_MD) _binpack_file(m, w, ice.README_MD)
fmt.Fprintln(w) fmt.Fprintln(w)
mdb.HashSelects(m).Sort(nfs.PATH).Tables(func(value ice.Maps) { mdb.HashSelects(m).Sort(nfs.PATH).Tables(func(value ice.Maps) {
if s, e := nfs.StatFile(m, value[nfs.PATH]); e == nil { if s, e := nfs.StatFile(m, value[nfs.PATH]); e == nil {
if s.IsDir() { if s.IsDir() {
@ -107,7 +82,6 @@ func init() {
} }
} }
}) })
list := map[string]bool{} list := map[string]bool{}
ctx.TravelCmd(m, func(key, file, line string) { ctx.TravelCmd(m, func(key, file, line string) {
dir := path.Dir(file) dir := path.Dir(file)
@ -118,7 +92,6 @@ func init() {
return return
} }
list[dir] = true list[dir] = true
m.Cmd(nfs.DIR, dir, nfs.PATH, kit.Dict(nfs.DIR_ROOT, nfs.PWD, nfs.DIR_REG, `.*\.(sh|shy|js)$`)).Tables(func(value ice.Maps) { m.Cmd(nfs.DIR, dir, nfs.PATH, kit.Dict(nfs.DIR_ROOT, nfs.PWD, nfs.DIR_REG, `.*\.(sh|shy|js)$`)).Tables(func(value ice.Maps) {
if list[value[nfs.PATH]] { if list[value[nfs.PATH]] {
return return
@ -137,12 +110,31 @@ const BINPACK = "binpack"
func init() { func init() {
Index.MergeCommands(ice.Commands{ Index.MergeCommands(ice.Commands{
BINPACK: {Name: "binpack path auto create insert", Help: "打包", Actions: ice.MergeActions(ice.Actions{ BINPACK: {Name: "binpack path auto create insert", Help: "打包", Actions: ice.MergeActions(ice.Actions{
mdb.CREATE: {Name: "create", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create", Hand: func(m *ice.Message, arg ...string) { _binpack_all(m) }},
_binpack_all(m) mdb.INSERT: {Name: "insert path*", Hand: func(m *ice.Message, arg ...string) { mdb.HashCreate(m) }},
}},
mdb.INSERT: {Name: "insert path", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
mdb.HashCreate(m, nfs.PATH, m.Option(nfs.PATH))
}},
}, mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path"))}, }, mdb.HashAction(mdb.SHORT, nfs.PATH, mdb.FIELD, "time,path"))},
}) })
} }
var _binpack_template = `package main
import (
"encoding/base64"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/nfs"
)
func init() {
pack := ice.Maps{
`
var _binpack_template_end = `
}
nfs.PackFile.RemoveAll(ice.SRC)
for k, v := range pack {
if b, e := base64.StdEncoding.DecodeString(v); e == nil {
nfs.PackFile.WriteFile(k, b)
}
}
}
`

View File

@ -22,7 +22,7 @@ func _css_stat(m *ice.Message, block string, stats map[string]int) {
m.Copy(msg) m.Copy(msg)
} }
func _css_show(m *ice.Message, arg ...string) { func _css_show(m *ice.Message, arg ...string) {
block := "" // block := ""
stats_key := map[string]int{} stats_key := map[string]int{}
stats_value := map[string]int{} stats_value := map[string]int{}
m.Cmd(nfs.CAT, path.Join(arg[2], arg[1]), func(line string) { m.Cmd(nfs.CAT, path.Join(arg[2], arg[1]), func(line string) {
@ -31,7 +31,7 @@ func _css_show(m *ice.Message, arg ...string) {
} }
switch { switch {
case strings.HasSuffix(line, "{"): case strings.HasSuffix(line, "{"):
block = strings.TrimSuffix(line, "{") // block = strings.TrimSuffix(line, "{")
case strings.HasSuffix(line, "}"): case strings.HasSuffix(line, "}"):
if line == "}" { if line == "}" {
break break

View File

@ -144,8 +144,8 @@ func init() {
web.ToastSuccess(m) web.ToastSuccess(m)
m.ProcessInner() m.ProcessInner()
}}, }},
AUTOGEN: {Name: "create name=h2 help=示例 type=Zone,Hash,Data,Code main=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) { AUTOGEN: {Name: "create name*=h2 help=示例 type*=Zone,Hash,Data,Code main*=main.go zone key", Help: "模块", Hand: func(m *ice.Message, arg ...string) {
m.Cmdy(AUTOGEN, mdb.CREATE, arg) m.Cmdy(AUTOGEN, nfs.MODULE, arg)
}}, }},
COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) { COMPILE: {Name: "compile", Help: "编译", Hand: func(m *ice.Message, arg ...string) {
cmds := []string{COMPILE, ice.SRC_MAIN_GO, ice.BIN_ICE_BIN} cmds := []string{COMPILE, ice.SRC_MAIN_GO, ice.BIN_ICE_BIN}

View File

@ -84,7 +84,7 @@ func init() {
} }
m.Push(arg[0], "bash", "sh") m.Push(arg[0], "bash", "sh")
case mdb.NAME: case mdb.NAME:
m.Push(arg[0], ice.Info.HostName, path.Base(m.Option(mdb.TYPE))) m.Push(arg[0], ice.Info.Hostname, path.Base(m.Option(mdb.TYPE)))
} }
}}, }},
mdb.CREATE: {Name: "create type=sh name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) { mdb.CREATE: {Name: "create type=sh name text", Help: "创建", Hand: func(m *ice.Message, arg ...string) {

12
info.go
View File

@ -9,17 +9,17 @@ type MakeInfo struct {
Remote string Remote string
Branch string Branch string
Version string Version string
HostName string Hostname string
UserName string Username string
} }
var Info = struct { var Info = struct {
Make MakeInfo Make MakeInfo
HostName string Hostname string
PathName string Pathname string
UserName string Username string
PassWord string Password string
Domain string Domain string
NodeType string NodeType string

View File

@ -8,7 +8,6 @@ import (
"shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits" kit "shylinux.com/x/toolkits"
) )

View File

@ -52,7 +52,7 @@ func init() {
}}, }},
ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) { ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
mdb.ZoneInsert(m, m.OptionSimple(mdb.HASH), mdb.TYPE, CMD, mdb.TEXT, m.Option(CMD)) mdb.ZoneInsert(m, m.OptionSimple(mdb.HASH), mdb.TYPE, CMD, mdb.TEXT, m.Option(CMD))
if w, ok := mdb.HashTarget(m, m.Option(mdb.HASH), nil).(io.Writer); ok { if w, ok := mdb.HashSelectTarget(m, m.Option(mdb.HASH), nil).(io.Writer); ok {
w.Write([]byte(m.Option(CMD) + ice.NL)) w.Write([]byte(m.Option(CMD) + ice.NL))
m.Sleep300ms() m.Sleep300ms()
} }

View File

@ -35,7 +35,7 @@ func _ssh_open(m *ice.Message, arg ...string) {
c.Write([]byte(fmt.Sprintf("#height:%d,width:%d\n", h, w))) c.Write([]byte(fmt.Sprintf("#height:%d,width:%d\n", h, w)))
// 初始命令 // 初始命令
for _, item := range kit.Simple(m.Optionv(mdb.LIST)) { for _, item := range kit.Simple(m.Optionv("init")) {
m.Sleep300ms() m.Sleep300ms()
c.Write([]byte(item + ice.NL)) c.Write([]byte(item + ice.NL))
} }
@ -161,13 +161,13 @@ func init() {
m.Sleep300ms() m.Sleep300ms()
}}, }},
SESSION: {Name: "session", Help: "会话", Hand: func(m *ice.Message, arg ...string) { SESSION: {Name: "session", Help: "会话", Hand: func(m *ice.Message, arg ...string) {
if c, e := _ssh_session(m, mdb.HashTarget(m, m.Option(mdb.NAME), nil).(*ssh.Client)); m.Assert(e) { if c, e := _ssh_session(m, mdb.HashSelectTarget(m, m.Option(mdb.NAME), nil).(*ssh.Client)); m.Assert(e) {
defer c.Wait() defer c.Wait()
c.Shell() c.Shell()
} }
}}, }},
ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) { ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
client := mdb.HashTarget(m, m.Option(mdb.NAME), nil).(*ssh.Client) client := mdb.HashSelectTarget(m, m.Option(mdb.NAME), nil).(*ssh.Client)
if s, e := client.NewSession(); m.Assert(e) { if s, e := client.NewSession(); m.Assert(e) {
defer s.Close() defer s.Close()
if b, e := s.CombinedOutput(m.Option(ice.CMD)); m.Assert(e) { if b, e := s.CombinedOutput(m.Option(ice.CMD)); m.Assert(e) {
@ -175,7 +175,7 @@ func init() {
} }
} }
}}, }},
}, mdb.HashStatusAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,status,username,host,port")), Hand: func(m *ice.Message, arg ...string) { }, mdb.StatusHashAction(mdb.SHORT, mdb.NAME, mdb.FIELD, "time,name,status,username,host,port")), Hand: func(m *ice.Message, arg ...string) {
if mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) { if mdb.HashSelect(m, arg...).Tables(func(value ice.Maps) {
m.PushButton(kit.Select("", "command,session", value[mdb.STATUS] == tcp.OPEN), mdb.REMOVE) m.PushButton(kit.Select("", "command,session", value[mdb.STATUS] == tcp.OPEN), mdb.REMOVE)
}); len(arg) == 0 { }); len(arg) == 0 {

View File

@ -42,7 +42,7 @@ func init() {
}}, }},
mdb.IMPORT: {Name: "import key=.ssh/id_rsa pub=.ssh/id_rsa.pub", Help: "导入", Hand: func(m *ice.Message, arg ...string) { mdb.IMPORT: {Name: "import key=.ssh/id_rsa pub=.ssh/id_rsa.pub", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.Conf("", kit.Keys(mdb.HASH, path.Base(m.Option("key"))), kit.Data(mdb.TIME, m.Time(), m.Conf("", kit.Keys(mdb.HASH, path.Base(m.Option("key"))), kit.Data(mdb.TIME, m.Time(),
"title", kit.Format("%s@%s", ice.Info.UserName, ice.Info.HostName), "title", kit.Format("%s@%s", ice.Info.Username, ice.Info.Hostname),
PRIVATE, m.Cmdx(nfs.CAT, kit.HomePath(m.Option("key"))), PRIVATE, m.Cmdx(nfs.CAT, kit.HomePath(m.Option("key"))),
PUBLIC, m.Cmdx(nfs.CAT, kit.HomePath(m.Option("pub"))), PUBLIC, m.Cmdx(nfs.CAT, kit.HomePath(m.Option("pub"))),
)) ))

View File

@ -15,6 +15,7 @@ import (
ice "shylinux.com/x/icebergs" ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/aaa" "shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli" "shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/nfs"
psh "shylinux.com/x/icebergs/base/ssh" psh "shylinux.com/x/icebergs/base/ssh"
@ -169,7 +170,7 @@ func init() {
mdb.HashModify(m, m.Option(tcp.PORT), mdb.STATUS, tcp.OPEN) mdb.HashModify(m, m.Option(tcp.PORT), mdb.STATUS, tcp.OPEN)
} else { } else {
mdb.HashCreate(m.Spawn(), mdb.STATUS, tcp.OPEN, arg) mdb.HashCreate(m.Spawn(), mdb.STATUS, tcp.OPEN, arg)
m.Cmd("", nfs.LOAD, m.OptionSimple(AUTHKEY)) m.Cmd("", ctx.LOAD, m.OptionSimple(AUTHKEY))
} }
m.Go(func() { m.Go(func() {
@ -185,12 +186,12 @@ func init() {
mdb.TYPE, ls[0], mdb.NAME, ls[len(ls)-1], mdb.TEXT, strings.Join(ls[1:len(ls)-1], "+")) mdb.TYPE, ls[0], mdb.NAME, ls[len(ls)-1], mdb.TEXT, strings.Join(ls[1:len(ls)-1], "+"))
} }
}}, }},
nfs.LOAD: {Name: "load authkey=.ssh/authorized_keys", Help: "加载", Hand: func(m *ice.Message, arg ...string) { ctx.LOAD: {Name: "load authkey=.ssh/authorized_keys", Help: "加载", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(nfs.CAT, kit.HomePath(m.Option(AUTHKEY)), func(pub string) { m.Cmd(nfs.CAT, kit.HomePath(m.Option(AUTHKEY)), func(pub string) {
m.Cmd(SERVICE, mdb.INSERT, mdb.TEXT, pub) m.Cmd(SERVICE, mdb.INSERT, mdb.TEXT, pub)
}) })
}}, }},
nfs.SAVE: {Name: "save authkey=.ssh/authorized_keys", Help: "保存", Hand: func(m *ice.Message, arg ...string) { ctx.SAVE: {Name: "save authkey=.ssh/authorized_keys", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
list := []string{} list := []string{}
mdb.ZoneSelectCB(m, m.Option(tcp.PORT), func(value ice.Maps) { mdb.ZoneSelectCB(m, m.Option(tcp.PORT), func(value ice.Maps) {
list = append(list, fmt.Sprintf("%s %s %s", value[mdb.TYPE], value[mdb.TEXT], value[mdb.NAME])) list = append(list, fmt.Sprintf("%s %s %s", value[mdb.TYPE], value[mdb.TEXT], value[mdb.NAME]))
@ -205,9 +206,9 @@ func init() {
m.EchoScript(string(buf)) m.EchoScript(string(buf))
} }
}}, }},
}, mdb.HashStatusAction()), Hand: func(m *ice.Message, arg ...string) { }, mdb.StatusHashAction()), Hand: func(m *ice.Message, arg ...string) {
if len(arg) == 0 { // 服务列表 if len(arg) == 0 { // 服务列表
mdb.HashSelect(m, arg...).PushAction(aaa.INVITE, mdb.INSERT, nfs.LOAD, nfs.SAVE) mdb.HashSelect(m, arg...).PushAction(aaa.INVITE, mdb.INSERT, ctx.LOAD, ctx.SAVE)
return return
} }

View File

@ -58,7 +58,7 @@ func init() {
}}, }},
ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) { ctx.COMMAND: {Name: "command cmd=pwd", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
m.Cmd("", mdb.INSERT, m.OptionSimple(mdb.HASH), mdb.TYPE, CMD, mdb.TEXT, m.Option(CMD)) m.Cmd("", mdb.INSERT, m.OptionSimple(mdb.HASH), mdb.TYPE, CMD, mdb.TEXT, m.Option(CMD))
w := mdb.HashTarget(m, m.Option(mdb.HASH), nil).(io.Writer) w := mdb.HashSelectTarget(m, m.Option(mdb.HASH), nil).(io.Writer)
w.Write([]byte(m.Option(CMD) + ice.NL)) w.Write([]byte(m.Option(CMD) + ice.NL))
m.Sleep300ms() m.Sleep300ms()
}}, }},