1
0
forked from x/ContextOS

mac pro ctx

This commit is contained in:
shaoying 2018-07-29 02:58:36 +08:00
parent 5ca0bca18b
commit 72aa85d5a2
9 changed files with 363 additions and 479 deletions

View File

@ -1,7 +1,8 @@
~file1
history load etc/history.txt
~shell1
alias import nfs
return
~file1
history load etc/history.txt
source etc/local.shy
config debug on

View File

@ -126,6 +126,8 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
Configs: map[string]*ctx.Config{
"rootname": &ctx.Config{Name: "根用户名", Value: "root", Help: "根用户名"},
"expire": &ctx.Config{Name: "会话超时(s)", Value: "7200", Help: "会话超时"},
"cert": &ctx.Config{Name: "证书文件", Value: "etc/cert.pem", Help: "证书文件"},
"key": &ctx.Config{Name: "私钥文件", Value: "etc/key.pem", Help: "私钥文件"},
},
Commands: map[string]*ctx.Command{
"login": &ctx.Command{Name: "login [sessid]|[[group] username password]]", Help: "用户登录", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
@ -153,7 +155,7 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
m.Append("username", m.Cap("username"))
m.Append("userrole", m.Cap("group"))
m.Appendv("aaa", m)
m.Sesss("aaa", m)
m.Sess("aaa", m)
case 2, 3:
group, username, password := arg[0], arg[0], arg[1]
if len(arg) == 3 {
@ -179,7 +181,7 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
m.Append("username", msg.Cap("username"))
m.Append("userrole", msg.Cap("group"))
m.Appendv("aaa", msg)
m.Sesss("aaa", msg)
m.Sess("aaa", msg)
}
// }}}
}},
@ -192,7 +194,7 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
return
}
group := m.Sesss("aaa").Cap("group")
group := m.Sess("aaa").Cap("group")
m.Travel(func(msg *ctx.Message, i int) bool {
aaa := msg.Target().Server.(*AAA)
if aaa.share == nil {

View File

@ -90,7 +90,7 @@ func (cli *CLI) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{
// }}}
func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
cli.Message = m
yac := m.Sesss("yac")
yac := m.Sess("yac")
if yac.Cap("status") != "start" {
yac.Target().Start(yac)
yac.Cmd("train", "void", "void", "[\t ]+")
@ -190,6 +190,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
"nshell": &ctx.Cache{Name: "nshell", Value: "0", Help: "终端数量"},
},
Configs: map[string]*ctx.Config{
"init.shy": &ctx.Config{Name: "init.shy", Value: "etc/init.shy", Help: "启动脚本"},
"cli_name": &ctx.Config{Name: "cli_name", Value: "shell", Help: "模块命名", Hand: func(m *ctx.Message, x *ctx.Config, arg ...string) string {
if len(arg) > 0 { // {{{
return arg[0]
@ -211,7 +212,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
if _, ok := m.Target().Server.(*CLI); m.Assert(ok) { // {{{
m.Start(m.Confx("cli_name", arg, 2), m.Confx("cli_help", arg, 3), key, arg[0])
if len(arg) < 2 || arg[1] != "async" {
m.Target().Wait()
m.Wait()
}
} // }}}
}},

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,6 @@ import ( // {{{
"contexts"
"fmt"
Log "log"
"os"
"strconv"
"strings"
"time"
@ -44,16 +43,7 @@ func (log *LOG) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{
log.Configs["flag_action"] = &ctx.Config{Name: "输出类型", Value: "true", Help: "模块日志类型"}
log.Configs["flag_name"] = &ctx.Config{Name: "输出名称", Value: "true", Help: "模块日志输出消息源模块与消息目的模块"}
log.Configs["bench.log"] = &ctx.Config{Name: "日志文件", Value: "var/bench.log", Help: "模块日志输出的文件", Hand: func(m *ctx.Message, x *ctx.Config, arg ...string) string {
if len(arg) > 0 {
if nfs := m.Sesss("nfs"); nfs != nil {
os.Create(arg[0])
log.nfs = nfs.Cmd("open", arg[0], "", "日志文件")
}
return arg[0]
}
return x.Value
}}
log.Configs["bench.log"] = &ctx.Config{Name: "日志文件", Value: "var/bench.log", Help: "模块日志输出的文件"}
return log
}
@ -61,6 +51,7 @@ func (log *LOG) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{
// }}}
func (log *LOG) Start(m *ctx.Message, arg ...string) bool { // {{{
log.Message = m
log.nfs = m.Sess("nfs").Cmd("append", m.Confx("bench.log", arg, 0), "", "日志文件")
return false
}
@ -167,10 +158,10 @@ var Index = &ctx.Context{Name: "log", Help: "日志中心",
cmd := strings.Join(arg[1:], "")
if log.nfs != nil {
if log.nfs.Options("log", false); color > 0 {
log.nfs.Cmd("write", fmt.Sprintf("%s\033[%dm%s%s %s\033[0m\n", date, color, code, action, cmd))
if color > 0 {
m.Spawn(log.nfs.Target()).Cmd("write", fmt.Sprintf("%s\033[%dm%s%s %s\033[0m\n", date, color, code, action, cmd))
} else {
log.nfs.Cmd("write", fmt.Sprintf("%s%s%s %s\n", date, code, action, cmd))
m.Spawn(log.nfs.Target()).Cmd("write", fmt.Sprintf("%s%s%s %s\n", date, code, action, cmd))
}
}
} // }}}

View File

@ -529,7 +529,7 @@ func (nfs *NFS) Read(p []byte) (n int, err error) { // {{{
func (nfs *NFS) Spawn(m *ctx.Message, c *ctx.Context, arg ...string) ctx.Server { // {{{
nfs.Message = m
if len(arg) > 0 && (arg[0] == "scan" || arg[0] == "open") {
if len(arg) > 0 && (arg[0] == "scan" || arg[0] == "open" || arg[0] == "append") {
c.Caches = map[string]*ctx.Cache{
"pos": &ctx.Cache{Name: "pos", Value: "0", Help: "pos"},
"size": &ctx.Cache{Name: "size", Value: "0", Help: "size"},
@ -629,22 +629,25 @@ func (nfs *NFS) Start(m *ctx.Message, arg ...string) bool { // {{{
return true
}
if len(arg) > 0 && arg[0] == "open" {
if len(arg) > 0 && (arg[0] == "open" || arg[0] == "append") {
nfs.out = m.Optionv("out").(*os.File)
nfs.in = m.Optionv("in").(*os.File)
s, e := nfs.in.Stat()
m.Assert(e)
m.Capi("size", int(s.Size()))
m.Cap("stream", arg[1])
if arg[0] == "append" {
m.Capi("pos", int(s.Size()))
}
return false
}
m.Sesss("nfs", m)
m.Sess("nfs", m)
nfs.Message = m
if socket, ok := m.Data["io"]; ok {
m.Cap("stream", m.Source().Name)
// m.Sesss("aaa", "aaa").Cmd("login", "demo", "demo")
// m.Sess("aaa", "aaa").Cmd("login", "demo", "demo")
m.Options("stdio", false)
nfs.io = socket.(io.ReadWriteCloser)
@ -666,7 +669,7 @@ func (nfs *NFS) Start(m *ctx.Message, arg ...string) bool { // {{{
for {
line, e := nfs.Reader.ReadString('\n')
if msg == nil {
msg = m.Sesss("ssh")
msg = m.Sess("ssh")
m.Cap("target", msg.Target().Name)
}
@ -976,6 +979,18 @@ var Index = &ctx.Context{Name: "nfs", Help: "存储中心",
m.Echo(m.Target().Name)
// }}}
}},
"append": &ctx.Command{
Name: "append filename [nfs_name [nfs_help]]",
Help: "打开文件, filename: 文件名, nfs_name: 模块名, nfs_help: 模块帮助",
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
if m.Has("io") { // {{{
} else if f, e := os.OpenFile(arg[0], os.O_RDWR|os.O_CREATE|os.O_APPEND, os.ModePerm); m.Assert(e) {
m.Put("option", "in", f).Put("option", "out", f)
}
m.Start(m.Confx("nfs_name", arg, 1), m.Confx("nfs_help", arg, 2), "append", arg[0])
m.Echo(m.Target().Name)
// }}}
}},
"read": &ctx.Command{Name: "read [buf_size [pos]]", Help: "读取文件, buf_size: 读取大小, pos: 读取位置", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
if nfs, ok := m.Target().Server.(*NFS); m.Assert(ok) && nfs.in != nil { // {{{
n, e := strconv.Atoi(m.Confx("buf_size", arg, 0))

View File

@ -53,7 +53,7 @@ func (ssh *SSH) Close(m *ctx.Message, arg ...string) bool { // {{{
if m.Target() == Index {
go func() {
m.Target().Begin(m)
m.Sesss("nfs", "nfs")
m.Sess("nfs", "nfs")
for !m.Caps("stream") {
time.Sleep(time.Second * time.Duration(m.Confi("interval")))
go ssh.Message.Spawn(m.Target()).Copy(ssh.Message, "detail").Cmd()
@ -117,7 +117,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
m.Find("nfs").Call(func(file *ctx.Message) *ctx.Message {
sub := file.Spawn(m.Target())
sub.Start(fmt.Sprintf("host%d", Pulse.Capi("nhost", 1)), "远程主机")
m.Sesss("ssh", sub)
m.Sess("ssh", sub)
return sub
}, m.Meta["detail"])
m.Spawn(m.Target()).Cmd("save")
@ -130,7 +130,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
sub := file.Spawn(m.Target())
sub.Copy(m, "detail")
sub.Target().Start(sub)
m.Sesss("ssh", sub)
m.Sess("ssh", sub)
sub.Spawn(sub.Target()).Cmd("pwd", m.Conf("domain"))
return sub
@ -169,7 +169,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
m.Copy(msg, "result").Copy(msg, "append")
m.Back(m)
} else { //发送命令
ssh.Message.Sesss("nfs").CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message {
ssh.Message.Sess("nfs").CallBack(m.Options("stdio"), func(host *ctx.Message) *ctx.Message {
m.Back(m.Copy(host, "result").Copy(host, "append"))
return nil
}, "send", "send", arg)
@ -261,14 +261,14 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
}, c)
}},
"save": &ctx.Command{Name: "save", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
json := m.Sesss("nfs") // {{{
json := m.Sess("nfs") // {{{
json.Put("option", "data", map[string]string{"domain": m.Cap("domain")})
json.Cmd("json", m.Conf("domain.json"))
m.Sesss("nfs").Cmd("genqr", m.Conf("domain.png"), json.Result(0))
m.Sess("nfs").Cmd("genqr", m.Conf("domain.png"), json.Result(0))
// }}}
}},
"who": &ctx.Command{Name: "who", Help: "远程执行", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
aaa := m.Sesss("aaa") // {{{
aaa := m.Sess("aaa") // {{{
if aaa != nil {
m.Echo(aaa.Cap("group"))
}
@ -312,7 +312,7 @@ var Index = &ctx.Context{Name: "ssh", Help: "集群中心",
if len(arg) > 2 {
cmds = arg[2]
}
current := m.Sesss(arg[1], arg[1], "search").Target()
current := m.Sess(arg[1], arg[1], "search").Target()
if x, ok := current.Index[cmds]; ok {
current = x
} else if cmds != "" && cmds != "root" {

View File

@ -603,7 +603,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
msg.Option("current_module", m.Option("dir"))
msg.Option("current_domain", m.Option("domain"))
m.Add("option", "tmpl", v)
m.Sesss(v, msg)
m.Sess(v, msg)
}
}
m.Append("template", m.Conf("travel_main"), m.Conf("travel_tmpl"))
@ -632,7 +632,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
}
// 共享列表
share := m.Sesss("share", m.Target())
share := m.Sess("share", m.Target())
index := share.Target().Index
if index != nil && index[aaa.Append("userrole")] != nil {
for k, v := range index[aaa.Append("userrole")].Index {
@ -656,7 +656,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
fs, e := ioutil.ReadDir(m.Option("dir"))
m.Assert(e)
fs = append(fs, s)
list := m.Sesss("list", m.Target())
list := m.Sess("list", m.Target())
list.Option("dir", m.Option("dir"))
for _, v := range fs {
@ -712,7 +712,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
// 执行命令
switch m.Option("cmd") {
case "git":
git := m.Sesss("git", m.Target())
git := m.Sess("git", m.Target())
branch := m.Find("nfs").Cmd("git", "-C", m.Option("dir"), "branch")
git.Option("branch", branch.Result(0))

View File

@ -94,8 +94,8 @@ func (yac *YAC) train(m *ctx.Message, page, hash int, word []string) (int, []*Po
default:
x, ok := yac.page[word[i]]
if !ok {
if x = m.Sesss("lex").Cmd("parse", word[i], yac.name(s)).Resulti(0); x == 0 {
x = m.Sesss("lex").Cmd("train", word[i], len(yac.mat[s]), yac.name(s)).Resulti(0)
if x = m.Sess("lex").Cmd("parse", word[i], yac.name(s)).Resulti(0); x == 0 {
x = m.Sess("lex").Cmd("train", word[i], len(yac.mat[s]), yac.name(s)).Resulti(0)
}
}
c := byte(x)
@ -193,7 +193,7 @@ func (yac *YAC) parse(m *ctx.Message, out *ctx.Message, page int, void int, line
hash, word := 0, []string{}
for star, s := 0, page; s != 0 && len(line) > 0; {
//解析空白
lex := m.Sesss("lex")
lex := m.Sess("lex")
lex.Cmd("parse", line, yac.name(void))
if lex.Result(0) == "-1" {
break
@ -201,7 +201,7 @@ func (yac *YAC) parse(m *ctx.Message, out *ctx.Message, page int, void int, line
//解析单词
line = lex.Result(1)
lex = m.Sesss("lex")
lex = m.Sess("lex")
lex.Cmd("parse", line, yac.name(s))
if lex.Result(0) == "-1" {
break
@ -212,7 +212,7 @@ func (yac *YAC) parse(m *ctx.Message, out *ctx.Message, page int, void int, line
state := yac.mat[s][c]
if state != nil { //全局语法检查
if key := m.Sesss("lex").Cmd("parse", line, "key"); key.Resulti(0) == 0 || len(key.Result(2)) <= len(lex.Result(2)) {
if key := m.Sess("lex").Cmd("parse", line, "key"); key.Resulti(0) == 0 || len(key.Result(2)) <= len(lex.Result(2)) {
line, word = lex.Result(1), append(word, lex.Result(2))
} else {
state = nil
@ -308,7 +308,7 @@ func (yac *YAC) Start(m *ctx.Message, arg ...string) (close bool) { // {{{
yac.Message = m
if len(arg) > 0 && arg[0] == "parse" {
lex := m.Sesss("lex")
lex := m.Sess("lex")
if lex.Cap("status") != "start" {
lex.Target().Start(lex)
}
@ -326,7 +326,7 @@ func (yac *YAC) Start(m *ctx.Message, arg ...string) (close bool) { // {{{
}()
//加载文件
nfs := m.Sesss("nfs").Call(func(buf *ctx.Message) *ctx.Message {
nfs := m.Sess("nfs").Call(func(buf *ctx.Message) *ctx.Message {
out = buf
data <- buf.Detail(0) + "; "
<-next
@ -442,7 +442,7 @@ var Index = &ctx.Context{Name: "yac", Help: "语法中心",
yac.hand[hash] = arg[1]
}
// if m.Sesss("lex") == nil {
// if m.Sess("lex") == nil {
// lex := m.Sess("lex", "lex")
// if lex.Cap("status") == "start" {
// lex.Start(yac.Context.Name+"lex", "语法词法")