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

fix ctx.message

This commit is contained in:
shaoying 2019-09-21 10:57:51 +08:00
parent c599beac02
commit 8d95363595
9 changed files with 105 additions and 126 deletions

View File

@ -1,18 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIC9TCCAl4CCQCHSqshz+HyLTANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC
R0IxHzAdBgNVBAgTFlRlc3QgU3RhdGUgb3IgUHJvdmluY2UxFjAUBgNVBAcTDVRl
c3QgTG9jYWxpdHkxGjAYBgNVBAoTEU9yZ2FuaXphdGlvbiBOYW1lMSEwHwYDVQQL
ExhPcmdhbml6YXRpb25hbCBVbml0IE5hbWUxFDASBgNVBAMTC0NvbW1vbiBOYW1l
MSEwHwYJKoZIhvcNAQkBFhJ0ZXN0QGVtYWlsLmFkZHJlc3MwHhcNMTcxMDMxMTYw
NDM5WhcNMTcxMTMwMTYwNDM5WjCBvjELMAkGA1UEBhMCR0IxHzAdBgNVBAgTFlRl
c3QgU3RhdGUgb3IgUHJvdmluY2UxFjAUBgNVBAcTDVRlc3QgTG9jYWxpdHkxGjAY
BgNVBAoTEU9yZ2FuaXphdGlvbiBOYW1lMSEwHwYDVQQLExhPcmdhbml6YXRpb25h
bCBVbml0IE5hbWUxFDASBgNVBAMTC0NvbW1vbiBOYW1lMSEwHwYJKoZIhvcNAQkB
FhJ0ZXN0QGVtYWlsLmFkZHJlc3MwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGB
AOw3gvdtfKWkSEl2l30V7irBhkrD6IVd6AzxaAYL97giDglPvu7ng2PXYlF5pjjf
mxDYtjAGuq1itnN0LKRe6CjUOuGtC2KMlZ8121fQCNw8M6TLPSpDjVuzysaUb2ds
+OClb0uC8SmSy3bOCGsicI77yXvEuKFkm43ikyVounmRAgMBAAEwDQYJKoZIhvcN
AQELBQADgYEAkOk7DVR/XgJdMSXXGd/OtWmTfVp2sIyyy37zSoc4uRFWwPqbzLPf
NgUKGNHEYvJY7/bWQ3p2D+u1U2PUfv/t6SQcAu3Nkw7sd7PoeeDZcRau84NevgoR
HfQKirJQgZd0hKFwiBnDspYbi8IL2mHEJOlzw1priY9v8MVIscyFVbE=
-----END CERTIFICATE-----

View File

@ -1,15 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIICXwIBAAKBgQDsN4L3bXylpEhJdpd9Fe4qwYZKw+iFXegM8WgGC/e4Ig4JT77u
54Nj12JReaY435sQ2LYwBrqtYrZzdCykXugo1DrhrQtijJWfNdtX0AjcPDOkyz0q
Q41bs8rGlG9nbPjgpW9LgvEpkst2zghrInCO+8l7xLihZJuN4pMlaLp5kQIDAQAB
AoGBAOasYwG68pFTN6A95jupsdYg/EKAw82RYa1aBUp6X2N6JhjjvkHQ5ZcXWxTT
ZgZ+HhC6gFewCpaNIjzmwz2UzMJJ4empijEbJFuwZCq4M/Adca2BhduV2YIwqvi8
MHGmHMB81zYKA0E4j+vahJnn8aAqSoPnaM9MBw5vhggU5YodAkEA/IwRTVNOHmIm
1XCfvPoSpDBpSJh6V1mPyBuPs/2Fr52j+L+6qOhNML0O063az44/dR8RZytcaGYQ
7EByYbeCZwJBAO9ySW4TbDLRejSmFWHmflrnjV7s4DqE6OBbCRJF3aIleELYaTPC
Q0kOKRZTCr1PwopIdAOOOgaSWgsX75zU2UcCQQDMCwb3qLTXC4pArMwCzTE+gvat
drRx2qS2kr4aOF1ItF8E3TOcwIONO1K9aBv/0fgnUsCm0HvKxZwqpS9FEBVFAkEA
ntgeRlu0J3I3s72J6cxSflOlwRc7GRcatdsuhWS7xtk8knumLqPspwYx05F7SmMj
F0FBVSqA6+MiwME8P7oj+QJBAJFv2HKAaGElXkaJJzmQPHGJdGLUMb9oHXPtzcpz
HLtT2kHK1LlQqsOEacivPCKtnnLkX6Xsl8pMpe8EV43t718=
-----END RSA PRIVATE KEY-----

View File

@ -27,6 +27,78 @@ type CLI struct {
Context *ctx.Context
}
func format(m *ctx.Message, out *bytes.Buffer) {
switch m.Option("cmd_parse") {
case "format":
var data interface{}
if json.Unmarshal(out.Bytes(), &data) == nil {
if b, e := json.MarshalIndent(data, "", " "); e == nil {
m.Echo(string(b))
break
}
}
m.Echo(out.String())
case "json":
var data interface{}
if json.Unmarshal(out.Bytes(), &data) == nil {
msg := m.Spawn().Put("option", "data", data).Cmd("trans", "data", "")
m.Copy(msg, "append").Copy(msg, "result")
} else {
m.Echo(out.String())
}
case "csv":
data, e := csv.NewReader(out).ReadAll()
m.Assert(e)
for i := 1; i < len(data); i++ {
for j := 0; j < len(data[i]); j++ {
m.Add("append", data[0][j], data[i][j])
}
}
m.Table()
case "cli":
read := csv.NewReader(out)
read.Comma = ' '
read.TrimLeadingSpace = true
read.FieldsPerRecord = 4
data, e := read.ReadAll()
m.Assert(e)
for i := 1; i < len(data); i++ {
for j := 0; j < len(data[i]); j++ {
m.Add("append", data[0][j], data[i][j])
}
}
m.Table()
case "cut":
c := byte(kit.Select(" ", m.Optionv("cmd_parse"), 2)[0])
bio := bufio.NewScanner(out)
heads := []string{}
if h := kit.Select("", m.Optionv("cmd_parse"), 3); h != "" {
heads = strings.Split(h, " ")
} else if bio.Scan() {
heads = kit.Split(bio.Text(), c, kit.Int(kit.Select("-1", m.Optionv("cmd_parse"), 1)))
}
for bio.Scan() {
for i, v := range kit.Split(bio.Text(), c, len(heads)) {
m.Add("append", heads[i], v)
}
}
m.Table()
default:
var data interface{}
if json.Unmarshal(out.Bytes(), &data) == nil {
if b, e := json.MarshalIndent(data, "", " "); e == nil {
m.Echo(string(b))
break
}
}
m.Echo(out.String())
}
}
func (cli *CLI) schedule(m *ctx.Message) string {
first, timer := "", int64(1<<50)
for k, v := range m.Confv("timer", "list").(map[string]interface{}) {
@ -231,10 +303,10 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
"cmd_active(true/false): 是否交互",
"cmd_daemon(true/false): 是否守护",
"cmd_dir: 工作目录",
"cmd_env: 环境变量",
"cmd_env key value: 环境变量",
"cmd_log: 输出日志",
"cmd_temp: 缓存结果",
"cmd_parse: 解析结果",
"cmd_temp arg...: 缓存结果",
"cmd_parse format|json|csv|cli|cut [count sep]: 解析结果",
"cmd_error: 输出错误",
}, Form: map[string]int{
"cmd_timeout": 1,
@ -244,7 +316,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
"cmd_env": 2,
"cmd_log": 1,
"cmd_temp": -1,
"cmd_parse": 3,
"cmd_parse": 4,
"cmd_error": 0,
"cmd_select": -1,
"app_log": 1,
@ -370,81 +442,17 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
// 输出错误
if m.Has("cmd_error") {
m.Echo(err.String())
return
}
// 解析结果
if format(m, out); m.Has("cmd_select") {
m.Cmd("select", m.Meta["cmd_select"])
}
// 缓存结果
if m.Options("cmd_temp") {
m.Put("option", "data", out.String()).Cmdy("mdb.temp", "script", strings.Join(arg, " "), "data", "data", m.Meta["cmd_temp"])
return
}
// 解析结果
switch m.Option("cmd_parse") {
case "format":
var data interface{}
if json.Unmarshal(out.Bytes(), &data) == nil {
if b, e := json.MarshalIndent(data, "", " "); e == nil {
m.Echo(string(b))
break
}
}
m.Echo(out.String())
case "json":
var data interface{}
if json.Unmarshal(out.Bytes(), &data) == nil {
msg := m.Spawn().Put("option", "data", data).Cmd("trans", "data", "")
m.Copy(msg, "append").Copy(msg, "result")
} else {
m.Echo(out.String())
}
case "csv":
data, e := csv.NewReader(out).ReadAll()
m.Assert(e)
for i := 1; i < len(data); i++ {
for j := 0; j < len(data[i]); j++ {
m.Add("append", data[0][j], data[i][j])
}
}
m.Table()
case "cli":
read := csv.NewReader(out)
read.Comma = ' '
read.TrimLeadingSpace = true
read.FieldsPerRecord = 4
data, e := read.ReadAll()
m.Assert(e)
for i := 1; i < len(data); i++ {
for j := 0; j < len(data[i]); j++ {
m.Add("append", data[0][j], data[i][j])
}
}
m.Table()
case "cut":
bio := bufio.NewScanner(out)
bio.Scan()
c := byte(kit.Select(" ", m.Optionv("cmd_parse"), 2)[0])
for heads := kit.Split(bio.Text(), c, kit.Int(kit.Select("-1", m.Optionv("cmd_parse"), 1))); bio.Scan(); {
for i, v := range kit.Split(bio.Text(), c, len(heads)) {
m.Add("append", heads[i], v)
}
}
m.Table()
default:
var data interface{}
if json.Unmarshal(out.Bytes(), &data) == nil {
if b, e := json.MarshalIndent(data, "", " "); e == nil {
m.Echo(string(b))
break
}
}
m.Echo(out.String())
}
if m.Has("cmd_select") {
m.Cmd("select", m.Meta["cmd_select"])
}
})

View File

@ -4,5 +4,5 @@ var version = struct {
host string
self int
}{
"2019-09-20 16:49:11", "centos", 563,
"2019-09-21 10:07:14", "com.mac", 573,
}

View File

@ -750,12 +750,13 @@ var Index = &Context{Name: "ctx", Help: "模块中心", Server: &CTX{},
if ms[i] == nil {
continue
}
if m.Push("code", ms[i].code); ms[i].message != nil {
m.Push("message", ms[i].message.code)
if ms[i].message != nil {
m.Push("msg", ms[i].message.code)
} else {
m.Push("message", 0)
m.Push("msg", 0)
}
m.Push("code", ms[i].code)
m.Push("time", ms[i].Time())
m.Push("source", ms[i].source.Name)
m.Push("target", ms[i].target.Name)
@ -780,8 +781,7 @@ var Index = &Context{Name: "ctx", Help: "模块中心", Server: &CTX{},
case "free":
msg.Free()
default:
msg = msg.Spawn().Cmd(arg)
m.Copy(msg, "append").Copy(msg, "result")
m.Cmd(arg)
}
return
}},

View File

@ -1,14 +1,14 @@
package main
import (
"contexts/cli"
"contexts/ctx"
"toolkit"
"contexts/cli"
"contexts/ctx"
"toolkit"
"fmt"
"os"
"strings"
"time"
"fmt"
"os"
)
var Index = &ctx.Context{Name: "tmux", Help: "终端管理",
@ -185,7 +185,7 @@ var Index = &ctx.Context{Name: "tmux", Help: "终端管理",
time.Sleep(kit.Duration(m.Conf("mux", "cmd_timeout")))
list := strings.Split(m.Cmdx("cli.system", "tmux", "capture-pane", "-t", target, "-p"), "\n")
m.Log("info", "current %v", list)
for j := len(list)-1; j >= 0; j-- {
for j := len(list) - 1; j >= 0; j-- {
if list[j] != "" {
if list[j] == prompt {
i = 1000
@ -219,11 +219,14 @@ var Index = &ctx.Context{Name: "tmux", Help: "终端管理",
return
}},
"buf": &ctx.Command{Name: "buf", Help: "缓存管理", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
if len(arg) > 0 {
msg := m.Cmd(".buf")
arg[0] = msg.Meta[msg.Meta["append"][0]][0]
}
switch len(arg) {
case 0:
m.Cmdy("cli.system", "tmux", "list-buffer", "cmd_parse", "cut", 3, ":")
m.Meta["append"][0] = "cur"
m.Meta["cur"] = m.Meta["0"]
m.Cmdy("cli.system", "tmux", "list-buffer", "cmd_parse", "cut", 3, ":", "cur bytes text")
case 2:
m.Cmdy("cli.system", "tmux", "set-buffer", "-b", arg[0], arg[1])

View File

@ -235,6 +235,7 @@ fieldset.item {
}
fieldset.item.select {
background-color:gold;
border:solid 2px red;
}
fieldset.item>div.output {
overflow:auto;

View File

@ -724,18 +724,18 @@ function Plugin(page, pane, field, runs) {
var input = {type: "input", name: name, data: item}
switch (item.type) {
case "select":
item.className = "args"
kit.classList.add(item, "args")
input.type = "select", input.list = item.values.map(function(value) {
return {type: "option", value: value, inner: value}
})
input.value = item.value
break
case "textarea":
kit.classList.add(item, "args")
input.type = "textarea", item.style = "height:100px;"+"width:"+(pane.target.clientWidth-30)+"px"
item.className = "args"
// no break
case "text":
item.className = "args"
kit.classList.add(item, "args")
item.autocomplete = "off"
var count = kit.Selector(option, ".args").length

View File

@ -50,7 +50,7 @@ kit = toolkit = {
add: function(obj) {
var list = obj.className? obj.className.split(" "): []
for (var i = 1; i < arguments.length; i++) {
arguments[i] && list.push(arguments[i])
arguments[i] && list.indexOf(arguments[i]) == - 1 && list.push(arguments[i])
}
return obj.className = list.join(" ")
},