mirror of
https://shylinux.com/x/icebergs
synced 2025-04-26 09:34:05 +08:00
opt init.go
This commit is contained in:
parent
aa94fbf78a
commit
3c7ac779c3
@ -15,7 +15,7 @@ func init() {
|
|||||||
SEARCH: {Name: "search", Help: "搜索", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TYPE)},
|
SEARCH: {Name: "search", Help: "搜索", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TYPE)},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
SEARCH: {Name: "search type word text", Help: "搜索", Action: map[string]*ice.Action{
|
SEARCH: {Name: "search type word text auto", Help: "搜索", Action: map[string]*ice.Action{
|
||||||
CREATE: {Name: "create type cmd ctx", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
CREATE: {Name: "create type cmd ctx", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Rich(SEARCH, nil, kit.Dict(kit.MDB_TYPE, arg[0], kit.MDB_NAME, kit.Select(arg[0], arg, 1), kit.MDB_TEXT, kit.Select("", arg, 2)))
|
m.Rich(SEARCH, nil, kit.Dict(kit.MDB_TYPE, arg[0], kit.MDB_NAME, kit.Select(arg[0], arg, 1), kit.MDB_TEXT, kit.Select("", arg, 2)))
|
||||||
}},
|
}},
|
||||||
|
@ -73,13 +73,20 @@ func init() {
|
|||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
CHANNEL: {Name: "channel hash id auto 清理", Help: "通道", Action: map[string]*ice.Action{
|
CHANNEL: {Name: "channel hash id auto 清理", Help: "通道", Action: map[string]*ice.Action{
|
||||||
|
mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmdy(mdb.DELETE, CHANNEL, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||||
|
}},
|
||||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.PRUNES, CHANNEL, "", mdb.HASH, kit.MDB_STATUS, tcp.CLOSE)
|
m.Cmdy(mdb.PRUNES, CHANNEL, "", mdb.HASH, kit.MDB_STATUS, tcp.CLOSE)
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
m.Option(mdb.FIELDS, "time,hash,status,username,hostname,hostport,tty,count")
|
m.Option(mdb.FIELDS, "time,hash,status,username,hostname,hostport,tty,count")
|
||||||
m.Cmdy(mdb.SELECT, CHANNEL, "", mdb.HASH)
|
if m.Cmdy(mdb.SELECT, CHANNEL, "", mdb.HASH); len(arg) == 0 {
|
||||||
|
m.Table(func(index int, value map[string]string, head []string) {
|
||||||
|
m.PushButton(kit.Select("", "删除", value[kit.MDB_STATUS] == tcp.CLOSE))
|
||||||
|
})
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,13 +79,19 @@ func init() {
|
|||||||
})
|
})
|
||||||
}},
|
}},
|
||||||
|
|
||||||
|
mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmdy(mdb.DELETE, CONNECT, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||||
|
}},
|
||||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.PRUNES, CONNECT, "", mdb.HASH, kit.MDB_STATUS, tcp.CLOSE)
|
m.Cmdy(mdb.PRUNES, CONNECT, "", mdb.HASH, kit.MDB_STATUS, tcp.CLOSE)
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Option(mdb.FIELDS, kit.Select("time,hash,status,username,host,port", mdb.DETAIL, len(arg) > 0))
|
m.Option(mdb.FIELDS, kit.Select("time,hash,status,username,host,port", mdb.DETAIL, len(arg) > 0))
|
||||||
m.Cmdy(mdb.SELECT, CONNECT, "", mdb.HASH, kit.MDB_HASH, arg)
|
if m.Cmdy(mdb.SELECT, CONNECT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
|
||||||
m.PushAction("会话")
|
m.Table(func(index int, value map[string]string, head []string) {
|
||||||
|
m.PushButton(kit.Select("", "删除", value[kit.MDB_STATUS] == tcp.CLOSE))
|
||||||
|
})
|
||||||
|
}
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
|
@ -108,7 +108,7 @@ func (f *Frame) prompt(m *ice.Message, list ...string) *Frame {
|
|||||||
for _, v := range list {
|
for _, v := range list {
|
||||||
switch v {
|
switch v {
|
||||||
case "count":
|
case "count":
|
||||||
fmt.Fprintf(f.stdout, "%d", f.count+1)
|
fmt.Fprintf(f.stdout, "%d", f.count)
|
||||||
case "time":
|
case "time":
|
||||||
fmt.Fprintf(f.stdout, time.Now().Format("15:04:05"))
|
fmt.Fprintf(f.stdout, time.Now().Format("15:04:05"))
|
||||||
case "target":
|
case "target":
|
||||||
@ -227,15 +227,19 @@ func (f *Frame) parse(m *ice.Message, line string) string {
|
|||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
func (f *Frame) scan(m *ice.Message, line string, r io.Reader) *Frame {
|
func (f *Frame) scan(m *ice.Message, h, line string, r io.Reader) *Frame {
|
||||||
m.Option("ssh.return", func() { f.exit = true })
|
m.Option("ssh.return", func() { f.exit = true })
|
||||||
f.ps1 = kit.Simple(m.Confv("prompt", "meta.PS1"))
|
f.ps1 = kit.Simple(m.Confv("prompt", "meta.PS1"))
|
||||||
f.ps2 = kit.Simple(m.Confv("prompt", "meta.PS2"))
|
f.ps2 = kit.Simple(m.Confv("prompt", "meta.PS2"))
|
||||||
ps := f.ps1
|
ps := f.ps1
|
||||||
|
|
||||||
|
f.count = 1
|
||||||
m.I, m.O = r, f.stdout
|
m.I, m.O = r, f.stdout
|
||||||
bio := bufio.NewScanner(r)
|
bio := bufio.NewScanner(r)
|
||||||
for f.prompt(m, ps...); bio.Scan() && !f.exit; f.prompt(m, ps...) {
|
for f.prompt(m, ps...); bio.Scan() && !f.exit; f.prompt(m, ps...) {
|
||||||
|
m.Cmdx(mdb.INSERT, SOURCE, kit.Keys(kit.MDB_HASH, h), mdb.LIST, kit.MDB_TEXT, bio.Text())
|
||||||
|
f.count++
|
||||||
|
|
||||||
if len(bio.Text()) == 0 {
|
if len(bio.Text()) == 0 {
|
||||||
continue // 空行
|
continue // 空行
|
||||||
}
|
}
|
||||||
@ -253,10 +257,6 @@ func (f *Frame) scan(m *ice.Message, line string, r io.Reader) *Frame {
|
|||||||
line = ""
|
line = ""
|
||||||
continue // 注释
|
continue // 注释
|
||||||
}
|
}
|
||||||
// if line = f.history(m, line); line == "" {
|
|
||||||
// // 历史命令
|
|
||||||
// continue
|
|
||||||
// }
|
|
||||||
if ps = f.ps1; f.stdout == os.Stdout {
|
if ps = f.ps1; f.stdout == os.Stdout {
|
||||||
// 清空格式
|
// 清空格式
|
||||||
f.printf(m, "\033[0m")
|
f.printf(m, "\033[0m")
|
||||||
@ -304,7 +304,12 @@ func (f *Frame) Start(m *ice.Message, arg ...string) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
f.scan(m, "", r)
|
if f.source == STDIO {
|
||||||
|
f.scan(m, STDIO, "", r)
|
||||||
|
} else {
|
||||||
|
h := m.Cmdx(mdb.INSERT, SOURCE, "", mdb.HASH, kit.MDB_NAME, f.source)
|
||||||
|
f.scan(m, h, "", r)
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
func (f *Frame) Close(m *ice.Message, arg ...string) bool {
|
func (f *Frame) Close(m *ice.Message, arg ...string) bool {
|
||||||
@ -324,15 +329,36 @@ const (
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{
|
Index.Merge(&ice.Context{
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
SOURCE: {Name: SOURCE, Help: "加载脚本", Value: kit.Data()},
|
SOURCE: {Name: SOURCE, Help: "加载脚本", Value: kit.Dict(
|
||||||
|
kit.MDB_HASH, kit.Dict(STDIO, kit.Data(kit.MDB_TIME, "2020-10-01 15:04:05", kit.MDB_NAME, STDIO)),
|
||||||
|
)},
|
||||||
PROMPT: {Name: PROMPT, Help: "命令提示", Value: kit.Data(
|
PROMPT: {Name: PROMPT, Help: "命令提示", Value: kit.Data(
|
||||||
"PS1", []interface{}{"\033[33;44m", "count", "[", "time", "]", "\033[5m", "target", "\033[0m", "\033[44m", ">", "\033[0m ", "\033[?25h", "\033[32m"},
|
"PS1", []interface{}{"\033[33;44m", "count", "[", "time", "]", "\033[5m", "target", "\033[0m", "\033[44m", ">", "\033[0m ", "\033[?25h", "\033[32m"},
|
||||||
"PS2", []interface{}{"count", " ", "target", "> "},
|
"PS2", []interface{}{"count", " ", "target", "> "},
|
||||||
)},
|
)},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
SOURCE: {Name: "source file", Help: "脚本解析", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
SOURCE: {Name: "source hash id auto", Help: "脚本解析", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Starts(strings.Replace(arg[0], ".", "_", -1), arg[0], arg[0:]...)
|
if len(arg) > 0 && strings.HasSuffix(arg[0], ".shy") {
|
||||||
|
m.Starts(strings.Replace(arg[0], ".", "_", -1), arg[0], arg[0:]...)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(arg) == 0 {
|
||||||
|
m.Option(mdb.FIELDS, "time,hash,name,count")
|
||||||
|
m.Cmdy(mdb.SELECT, SOURCE, "", mdb.HASH)
|
||||||
|
m.Sort(kit.MDB_NAME)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if arg[0] == STDIO {
|
||||||
|
m.Option("_control", "page")
|
||||||
|
} else {
|
||||||
|
m.Option("cache.limit", "-1")
|
||||||
|
}
|
||||||
|
m.Option(mdb.FIELDS, kit.Select("time,id,text", mdb.DETAIL, len(arg) > 1))
|
||||||
|
m.Cmdy(mdb.SELECT, SOURCE, kit.Keys(kit.MDB_HASH, arg[0]), mdb.LIST, kit.MDB_ID, arg[1:])
|
||||||
|
m.Sort(kit.MDB_ID)
|
||||||
}},
|
}},
|
||||||
TARGET: {Name: "target name", Help: "当前模块", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
TARGET: {Name: "target name", Help: "当前模块", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Search(arg[0], func(p *ice.Context, s *ice.Context, key string) {
|
m.Search(arg[0], func(p *ice.Context, s *ice.Context, key string) {
|
||||||
|
@ -164,8 +164,8 @@ func init() {
|
|||||||
if m.Richs(SERVICE, "", m.Option(tcp.PORT), func(key string, value map[string]interface{}) {
|
if m.Richs(SERVICE, "", m.Option(tcp.PORT), func(key string, value map[string]interface{}) {
|
||||||
kit.Value(value, "meta.status", tcp.OPEN)
|
kit.Value(value, "meta.status", tcp.OPEN)
|
||||||
}) == nil {
|
}) == nil {
|
||||||
m.Cmd(mdb.INSERT, SERVICE, "", mdb.HASH, kit.MDB_STATUS, tcp.OPEN,
|
m.Cmd(mdb.INSERT, SERVICE, "", mdb.HASH, tcp.PORT, m.Option(tcp.PORT),
|
||||||
tcp.PORT, m.Option(tcp.PORT), "private", m.Option("private"), "auth", m.Option("auth"), arg)
|
"private", m.Option("private"), "auth", m.Option("auth"), kit.MDB_STATUS, tcp.OPEN, arg)
|
||||||
m.Cmd(SERVICE, mdb.IMPORT, kit.MDB_FILE, m.Option("auth"))
|
m.Cmd(SERVICE, mdb.IMPORT, kit.MDB_FILE, m.Option("auth"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -73,13 +73,20 @@ func init() {
|
|||||||
m.Cmdy(SESSION, m.Option(kit.MDB_HASH))
|
m.Cmdy(SESSION, m.Option(kit.MDB_HASH))
|
||||||
}},
|
}},
|
||||||
|
|
||||||
|
mdb.DELETE: {Name: "delete", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmdy(mdb.DELETE, SESSION, "", mdb.HASH, kit.MDB_HASH, m.Option(kit.MDB_HASH))
|
||||||
|
}},
|
||||||
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
mdb.PRUNES: {Name: "prunes", Help: "清理", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.PRUNES, SESSION, "", mdb.HASH, kit.MDB_STATUS, tcp.CLOSE)
|
m.Cmdy(mdb.PRUNES, SESSION, "", mdb.HASH, kit.MDB_STATUS, tcp.CLOSE)
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
m.Option(mdb.FIELDS, "time,hash,status,count,connect")
|
m.Option(mdb.FIELDS, "time,hash,status,count,connect")
|
||||||
m.Cmdy(mdb.SELECT, SESSION, "", mdb.HASH, kit.MDB_HASH, arg)
|
if m.Cmdy(mdb.SELECT, SESSION, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
|
||||||
|
m.Table(func(index int, value map[string]string, head []string) {
|
||||||
|
m.PushButton(kit.Select("", "删除", value[kit.MDB_STATUS] == tcp.CLOSE))
|
||||||
|
})
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +28,11 @@ var Index = &ice.Context{Name: SSH, Help: "终端模块", Commands: map[string]*
|
|||||||
m.Richs(CONNECT, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
m.Richs(CONNECT, "", kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
||||||
kit.Value(value, "status", tcp.CLOSE)
|
kit.Value(value, "status", tcp.CLOSE)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
m.Richs(SOURCE, "", STDIO, func(key string, value map[string]interface{}) {
|
||||||
|
m.Conf(SOURCE, kit.Keys(kit.MDB_HASH), "")
|
||||||
|
m.Conf(SOURCE, kit.Keys(kit.MDB_HASH, key), value)
|
||||||
|
})
|
||||||
m.Save()
|
m.Save()
|
||||||
}},
|
}},
|
||||||
}}
|
}}
|
||||||
|
@ -5,6 +5,8 @@ refer `
|
|||||||
源码 https://github.com/openssh/openssh-portable
|
源码 https://github.com/openssh/openssh-portable
|
||||||
`
|
`
|
||||||
|
|
||||||
|
field "脚本" ssh.source
|
||||||
|
|
||||||
field "服务" ssh.service
|
field "服务" ssh.service
|
||||||
field "通道" ssh.channel
|
field "通道" ssh.channel
|
||||||
field "连接" ssh.connect
|
field "连接" ssh.connect
|
||||||
|
@ -55,14 +55,11 @@ func init() {
|
|||||||
CLIENT: {Name: CLIENT, Help: "客户端", Value: kit.Data()},
|
CLIENT: {Name: CLIENT, Help: "客户端", Value: kit.Data()},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
CLIENT: {Name: "client hash auto 连接 清理", Help: "客户端", Action: map[string]*ice.Action{
|
CLIENT: {Name: "client hash auto 清理", Help: "客户端", Action: map[string]*ice.Action{
|
||||||
DIAL: {Name: "dial port=9010 host=", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
|
DIAL: {Name: "dial port=9010 host=", Help: "连接", Hand: func(m *ice.Message, arg ...string) {
|
||||||
c, e := net.Dial(TCP, m.Option(HOST)+":"+m.Option(PORT))
|
c, e := net.Dial(TCP, m.Option(HOST)+":"+m.Option(PORT))
|
||||||
h := m.Option(kit.MDB_HASH)
|
h := m.Cmdx(mdb.INSERT, CLIENT, "", mdb.HASH, PORT, m.Option(PORT), HOST, m.Option(HOST),
|
||||||
if h == "" {
|
kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_STATUS, kit.Select(ERROR, OPEN, e == nil), kit.MDB_ERROR, kit.Format(e))
|
||||||
h = m.Cmdx(mdb.INSERT, CLIENT, "", mdb.HASH, HOST, m.Option(HOST), PORT, m.Option(PORT),
|
|
||||||
kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_STATUS, kit.Select(ERROR, OPEN, e == nil), kit.MDB_ERROR, kit.Format(e))
|
|
||||||
}
|
|
||||||
|
|
||||||
c = &Conn{m: m, h: h, s: &Stat{}, Conn: c}
|
c = &Conn{m: m, h: h, s: &Stat{}, Conn: c}
|
||||||
if e == nil {
|
if e == nil {
|
||||||
@ -96,8 +93,11 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Option(mdb.FIELDS, kit.Select("time,hash,status,name,host,port,error,nread,nwrite", mdb.DETAIL, len(arg) > 0))
|
m.Option(mdb.FIELDS, kit.Select("time,hash,status,name,host,port,error,nread,nwrite", mdb.DETAIL, len(arg) > 0))
|
||||||
m.Cmdy(mdb.SELECT, CLIENT, "", mdb.HASH, kit.MDB_HASH, arg)
|
if m.Cmdy(mdb.SELECT, CLIENT, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
|
||||||
m.PushAction("删除")
|
m.Table(func(index int, value map[string]string, head []string) {
|
||||||
|
m.PushButton(kit.Select("", "删除", value[kit.MDB_STATUS] == CLOSE))
|
||||||
|
})
|
||||||
|
}
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
|
@ -13,11 +13,16 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func _port_list(m *ice.Message, port string, dir string) {
|
func _port_list(m *ice.Message, port string, dir string) {
|
||||||
if m.Cmdy(nfs.DIR, path.Join("var/daemon", port, dir)); port == "" {
|
if m.Option(nfs.DIR_ROOT, path.Join("var/daemon", port)); port != "" {
|
||||||
m.Table(func(index int, value map[string]string, head []string) {
|
m.Cmdy(nfs.DIR, dir)
|
||||||
m.Push(PORT, path.Base(value["path"]))
|
return
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m.Cmd(nfs.DIR, "./").Table(func(index int, value map[string]string, head []string) {
|
||||||
|
m.Push(kit.MDB_TIME, value[kit.MDB_TIME])
|
||||||
|
m.Push(kit.MDB_SIZE, value[kit.MDB_SIZE])
|
||||||
|
m.Push(PORT, path.Base(value[kit.MDB_PATH]))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
func _port_right(m *ice.Message, begin string) string {
|
func _port_right(m *ice.Message, begin string) string {
|
||||||
current := kit.Int(kit.Select(m.Conf(PORT, "meta.current"), begin))
|
current := kit.Int(kit.Select(m.Conf(PORT, "meta.current"), begin))
|
||||||
|
@ -49,13 +49,11 @@ func init() {
|
|||||||
SERVER: {Name: SERVER, Help: "服务器", Value: kit.Data()},
|
SERVER: {Name: SERVER, Help: "服务器", Value: kit.Data()},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
SERVER: {Name: "server hash auto 监听 清理", Help: "服务器", Action: map[string]*ice.Action{
|
SERVER: {Name: "server hash auto 清理", Help: "服务器", Action: map[string]*ice.Action{
|
||||||
LISTEN: {Name: "LISTEN host= port=9010", Help: "监听", Hand: func(m *ice.Message, arg ...string) {
|
LISTEN: {Name: "LISTEN port=9010 host=", Help: "监听", Hand: func(m *ice.Message, arg ...string) {
|
||||||
l, e := net.Listen(TCP, m.Option(HOST)+":"+m.Option(PORT))
|
l, e := net.Listen(TCP, m.Option(HOST)+":"+m.Option(PORT))
|
||||||
h := m.Option(kit.MDB_HASH)
|
h := m.Cmdx(mdb.INSERT, SERVER, "", mdb.HASH, PORT, m.Option(PORT), HOST, m.Option(HOST),
|
||||||
if h == "" {
|
kit.MDB_NAME, m.Option(kit.MDB_NAME), kit.MDB_STATUS, kit.Select(ERROR, OPEN, e == nil), kit.MDB_ERROR, kit.Format(e))
|
||||||
h = m.Cmdx(mdb.INSERT, SERVER, "", mdb.HASH, kit.MDB_NAME, m.Option(kit.MDB_NAME), HOST, m.Option(HOST), PORT, m.Option(PORT), kit.MDB_STATUS, kit.Select(ERROR, OPEN, e == nil), kit.MDB_ERROR, kit.Format(e))
|
|
||||||
}
|
|
||||||
|
|
||||||
l = &Listener{m: m, h: h, s: &Stat{}, Listener: l}
|
l = &Listener{m: m, h: h, s: &Stat{}, Listener: l}
|
||||||
if e == nil {
|
if e == nil {
|
||||||
@ -108,8 +106,11 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Option(mdb.FIELDS, kit.Select("time,hash,status,name,host,port,error,nconn", mdb.DETAIL, len(arg) > 0))
|
m.Option(mdb.FIELDS, kit.Select("time,hash,status,name,host,port,error,nconn", mdb.DETAIL, len(arg) > 0))
|
||||||
m.Cmdy(mdb.SELECT, SERVER, "", mdb.HASH, kit.MDB_HASH, arg)
|
if m.Cmdy(mdb.SELECT, SERVER, "", mdb.HASH, kit.MDB_HASH, arg); len(arg) == 0 {
|
||||||
m.PushAction("删除")
|
m.Table(func(index int, value map[string]string, head []string) {
|
||||||
|
m.PushButton(kit.Select("", "删除", value[kit.MDB_STATUS] == CLOSE))
|
||||||
|
})
|
||||||
|
}
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
}, nil)
|
}, nil)
|
||||||
|
7
conf.go
7
conf.go
@ -103,10 +103,3 @@ const ( // RENDER
|
|||||||
RENDER_DOWNLOAD = "_download"
|
RENDER_DOWNLOAD = "_download"
|
||||||
RENDER_TEMPLATE = "_template"
|
RENDER_TEMPLATE = "_template"
|
||||||
)
|
)
|
||||||
|
|
||||||
const ( // TODO
|
|
||||||
EXPORT_LABEL = "lab"
|
|
||||||
EXPORT_GROUP = "grp"
|
|
||||||
FIELD_RELOAD = "field.reload"
|
|
||||||
FIELD_DETAIL = "field.detail"
|
|
||||||
)
|
|
||||||
|
65
init.go
65
init.go
@ -3,16 +3,13 @@ package ice
|
|||||||
import (
|
import (
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
|
|
||||||
"fmt"
|
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Frame struct {
|
type Frame struct{ code int }
|
||||||
code int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *Frame) Spawn(m *Message, c *Context, arg ...string) Server {
|
func (f *Frame) Spawn(m *Message, c *Context, arg ...string) Server {
|
||||||
return &Frame{}
|
return &Frame{}
|
||||||
@ -59,7 +56,6 @@ func (f *Frame) Close(m *Message, arg ...string) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
var wait = make(chan bool, 1)
|
|
||||||
var Index = &Context{Name: "ice", Help: "冰山模块",
|
var Index = &Context{Name: "ice", Help: "冰山模块",
|
||||||
Caches: map[string]*Cache{
|
Caches: map[string]*Cache{
|
||||||
CTX_FOLLOW: {Value: ""},
|
CTX_FOLLOW: {Value: ""},
|
||||||
@ -70,19 +66,14 @@ var Index = &Context{Name: "ice", Help: "冰山模块",
|
|||||||
"help": {Value: map[string]interface{}{
|
"help": {Value: map[string]interface{}{
|
||||||
"index": []interface{}{
|
"index": []interface{}{
|
||||||
"^_^ 欢迎使用冰山框架 ^_^",
|
"^_^ 欢迎使用冰山框架 ^_^",
|
||||||
"^_^ Welcome to Icebergs world ^_^",
|
"^_^ Welcome to Icebergs World ^_^",
|
||||||
"",
|
"",
|
||||||
"Meet: shylinuxc@gmail.com",
|
"More: shylinuxc@gmail.com",
|
||||||
"More: https://shylinux.com",
|
"More: https://shylinux.com",
|
||||||
"More: https://github.com/shylinux/icebergs",
|
"More: https://github.com/shylinux/icebergs",
|
||||||
"",
|
"",
|
||||||
},
|
},
|
||||||
}},
|
}},
|
||||||
"task": {Value: kit.Dict(
|
|
||||||
kit.MDB_STORE, "var/data",
|
|
||||||
kit.MDB_LIMIT, "110",
|
|
||||||
kit.MDB_LEAST, "100",
|
|
||||||
)},
|
|
||||||
},
|
},
|
||||||
Commands: map[string]*Command{
|
Commands: map[string]*Command{
|
||||||
CTX_INIT: {Hand: func(m *Message, c *Context, cmd string, arg ...string) {
|
CTX_INIT: {Hand: func(m *Message, c *Context, cmd string, arg ...string) {
|
||||||
@ -95,34 +86,19 @@ var Index = &Context{Name: "ice", Help: "冰山模块",
|
|||||||
}},
|
}},
|
||||||
"init": {Name: "init", Help: "启动", Hand: func(m *Message, c *Context, cmd string, arg ...string) {
|
"init": {Name: "init", Help: "启动", Hand: func(m *Message, c *Context, cmd string, arg ...string) {
|
||||||
m.root.Cmd(CTX_INIT)
|
m.root.Cmd(CTX_INIT)
|
||||||
|
|
||||||
m.target.root.wg = &sync.WaitGroup{}
|
m.target.root.wg = &sync.WaitGroup{}
|
||||||
for _, k := range kit.Split(kit.Select("gdb,log,ssh")) {
|
for _, k := range kit.Split(kit.Select("gdb,log,ssh,mdb")) {
|
||||||
m.Start(k)
|
m.Start(k)
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Cmd("ssh.source", "etc/init.shy", "init.shy", "启动配置")
|
m.Cmd("ssh.source", "etc/init.shy", "init.shy", "启动配置")
|
||||||
m.Cmdy(arg)
|
m.Cmdy(arg)
|
||||||
}},
|
}},
|
||||||
"help": {Name: "help", Help: "帮助", Hand: func(m *Message, c *Context, cmd string, arg ...string) {
|
"help": {Name: "help", Help: "帮助", Hand: func(m *Message, c *Context, cmd string, arg ...string) {
|
||||||
m.Echo(strings.Join(kit.Simple(m.Confv("help", "index")), "\n"))
|
m.Echo(strings.Join(kit.Simple(m.Confv("help", "index")), "\n"))
|
||||||
}},
|
}},
|
||||||
"name": {Name: "name", Help: "命名", Hand: func(m *Message, c *Context, cmd string, arg ...string) {
|
|
||||||
for k, v := range names {
|
|
||||||
m.Push("key", k)
|
|
||||||
switch v := v.(type) {
|
|
||||||
case *Context:
|
|
||||||
m.Push("value", v.Name)
|
|
||||||
default:
|
|
||||||
m.Push("value", "")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
m.Sort("key")
|
|
||||||
}},
|
|
||||||
"exit": {Name: "exit", Help: "结束", Hand: func(m *Message, c *Context, cmd string, arg ...string) {
|
"exit": {Name: "exit", Help: "结束", Hand: func(m *Message, c *Context, cmd string, arg ...string) {
|
||||||
m.root.target.server.(*Frame).code = kit.Int(kit.Select("0", arg, 0))
|
m.root.target.server.(*Frame).code = kit.Int(kit.Select("0", arg, 0))
|
||||||
m.Cmd("ssh.source", "etc/exit.shy", "exit.shy", "退出配置")
|
m.Cmd("ssh.source", "etc/exit.shy", "exit.shy", "退出配置")
|
||||||
|
|
||||||
m.root.Cmd(CTX_EXIT)
|
m.root.Cmd(CTX_EXIT)
|
||||||
}},
|
}},
|
||||||
CTX_EXIT: {Hand: func(m *Message, c *Context, cmd string, arg ...string) {
|
CTX_EXIT: {Hand: func(m *Message, c *Context, cmd string, arg ...string) {
|
||||||
@ -138,26 +114,21 @@ var Index = &Context{Name: "ice", Help: "冰山模块",
|
|||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
var Pulse = &Message{
|
var Pulse = &Message{
|
||||||
time: time.Now(), code: 0,
|
time: time.Now(), code: 0,
|
||||||
meta: map[string][]string{},
|
meta: map[string][]string{},
|
||||||
data: map[string]interface{}{},
|
data: map[string]interface{}{},
|
||||||
|
|
||||||
source: Index, target: Index, Hand: true,
|
source: Index, target: Index, Hand: true,
|
||||||
messages: []*Message{}, message: nil, root: nil,
|
|
||||||
}
|
}
|
||||||
|
var wait = make(chan bool, 1)
|
||||||
var Log func(*Message, string, string)
|
|
||||||
var Loop func()
|
|
||||||
|
|
||||||
func Run(arg ...string) string {
|
func Run(arg ...string) string {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
arg = os.Args[1:]
|
arg = os.Args[1:]
|
||||||
}
|
}
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
// arg = append(arg, "web.space", "connect", "self")
|
arg = append(arg, "help")
|
||||||
arg = append(arg, "web.serve", "dev")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
frame := &Frame{}
|
frame := &Frame{}
|
||||||
@ -168,20 +139,21 @@ func Run(arg ...string) string {
|
|||||||
Pulse.Option("cache.limit", "30")
|
Pulse.Option("cache.limit", "30")
|
||||||
Pulse.Option("begin_time", Pulse.Time())
|
Pulse.Option("begin_time", Pulse.Time())
|
||||||
|
|
||||||
if frame.Begin(Pulse.Spawns(), arg...).Start(Pulse, arg...) {
|
switch kit.Select("", arg, 0) {
|
||||||
if Loop != nil {
|
case "space", "serve":
|
||||||
Loop()
|
if _log_disable = false; frame.Begin(Pulse.Spawns(), arg...).Start(Pulse, arg...) {
|
||||||
|
frame.Close(Pulse.Spawns(), arg...)
|
||||||
|
}
|
||||||
|
|
||||||
|
<-wait
|
||||||
|
os.Exit(frame.code)
|
||||||
|
default:
|
||||||
|
if m := Pulse.Cmdy(arg); m.Result() == "" {
|
||||||
|
m.Table()
|
||||||
}
|
}
|
||||||
frame.Close(Pulse.Spawns(), arg...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if Pulse.Result() == "" {
|
return Pulse.Result()
|
||||||
Pulse.Table(nil)
|
|
||||||
}
|
|
||||||
fmt.Printf(Pulse.Result())
|
|
||||||
<-wait
|
|
||||||
os.Exit(frame.code)
|
|
||||||
return ""
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var names = map[string]interface{}{}
|
var names = map[string]interface{}{}
|
||||||
@ -195,6 +167,7 @@ func Name(name string, value interface{}) string {
|
|||||||
}
|
}
|
||||||
panic(NewError(4, ErrNameExists, name, "last:", last))
|
panic(NewError(4, ErrNameExists, name, "last:", last))
|
||||||
}
|
}
|
||||||
|
|
||||||
names[name] = value
|
names[name] = value
|
||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
|
20
logs.go
20
logs.go
@ -14,12 +14,32 @@ var ErrNotAuth = "not auth: "
|
|||||||
var ErrNotJoin = "not join: "
|
var ErrNotJoin = "not join: "
|
||||||
var ErrNotFound = "not found: "
|
var ErrNotFound = "not found: "
|
||||||
var ErrStart = "err start: "
|
var ErrStart = "err start: "
|
||||||
|
var ErrNameExists = "name already exists:"
|
||||||
|
|
||||||
|
var _log_disable = true
|
||||||
|
|
||||||
|
type Error struct {
|
||||||
|
Arg []interface{}
|
||||||
|
FileLine string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Error) Error() string {
|
||||||
|
return e.FileLine + " " + strings.Join(kit.Simple(e.Arg), " ")
|
||||||
|
}
|
||||||
|
func NewError(n int, arg ...interface{}) *Error {
|
||||||
|
return &Error{Arg: arg, FileLine: kit.FileLine(n, 3)}
|
||||||
|
}
|
||||||
|
|
||||||
|
var Log func(*Message, string, string)
|
||||||
|
|
||||||
func (m *Message) log(level string, str string, arg ...interface{}) *Message {
|
func (m *Message) log(level string, str string, arg ...interface{}) *Message {
|
||||||
if str = strings.TrimSpace(kit.Format(str, arg...)); Log != nil {
|
if str = strings.TrimSpace(kit.Format(str, arg...)); Log != nil {
|
||||||
// 日志模块
|
// 日志模块
|
||||||
Log(m, level, str)
|
Log(m, level, str)
|
||||||
}
|
}
|
||||||
|
if _log_disable {
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
// 日志颜色
|
// 日志颜色
|
||||||
prefix, suffix := "", ""
|
prefix, suffix := "", ""
|
||||||
|
17
misc.go
17
misc.go
@ -102,22 +102,11 @@ func (m *Message) PushAction(list ...interface{}) {
|
|||||||
m.PushRender(kit.MDB_ACTION, kit.MDB_BUTTON, strings.Join(kit.Simple(list...), ","))
|
m.PushRender(kit.MDB_ACTION, kit.MDB_BUTTON, strings.Join(kit.Simple(list...), ","))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
func (m *Message) PushButton(key string, arg ...string) {
|
||||||
|
m.PushRender("action", "button", key, arg...)
|
||||||
|
}
|
||||||
func (m *Message) PushDetail(value interface{}, arg ...interface{}) *Message {
|
func (m *Message) PushDetail(value interface{}, arg ...interface{}) *Message {
|
||||||
return m.Push("detail", value, arg...)
|
return m.Push("detail", value, arg...)
|
||||||
}
|
}
|
||||||
|
|
||||||
var BinPack = map[string][]byte{}
|
var BinPack = map[string][]byte{}
|
||||||
|
|
||||||
var ErrNameExists = "name already exists:"
|
|
||||||
|
|
||||||
type Error struct {
|
|
||||||
Arg []interface{}
|
|
||||||
FileLine string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (e *Error) Error() string {
|
|
||||||
return e.FileLine + " " + strings.Join(kit.Simple(e.Arg), " ")
|
|
||||||
}
|
|
||||||
func NewError(n int, arg ...interface{}) *Error {
|
|
||||||
return &Error{Arg: arg, FileLine: kit.FileLine(n, 3)}
|
|
||||||
}
|
|
||||||
|
@ -25,7 +25,7 @@ func init() {
|
|||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
CACHE: {Name: "cache hash auto 添加 清理", Help: "爬虫缓存", Action: map[string]*ice.Action{
|
CACHE: {Name: "cache hash auto 添加 清理", Help: "爬虫缓存", Action: map[string]*ice.Action{
|
||||||
mdb.CREATE: {Name: "create link type name text", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Option("_process", "_progress")
|
m.Option("_process", "_progress")
|
||||||
if m.Cmdy(mdb.SELECT, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_LINK, m.Option(kit.MDB_LINK)); len(m.Appendv(kit.MDB_TOTAL)) > 0 {
|
if m.Cmdy(mdb.SELECT, m.Prefix(CACHE), "", mdb.HASH, kit.MDB_LINK, m.Option(kit.MDB_LINK)); len(m.Appendv(kit.MDB_TOTAL)) > 0 {
|
||||||
return // 已经下载
|
return // 已经下载
|
||||||
|
2
type.go
2
type.go
@ -143,7 +143,7 @@ func (c *Context) Register(s *Context, x Server, name ...string) *Context {
|
|||||||
}
|
}
|
||||||
s.Merge(s, x)
|
s.Merge(s, x)
|
||||||
|
|
||||||
Pulse.Log("register", "%s <- %s", c.Name, s.Name)
|
// Pulse.Log("register", "%s <- %s", c.Name, s.Name)
|
||||||
if c.contexts == nil {
|
if c.contexts == nil {
|
||||||
c.contexts = map[string]*Context{}
|
c.contexts = map[string]*Context{}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user