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

add cli.date

This commit is contained in:
shaoying 2019-09-19 19:15:05 +08:00
parent 5637eeca20
commit ff63b234cb
11 changed files with 131 additions and 51 deletions

View File

@ -58,7 +58,7 @@ main() {
trap HUP hup trap HUP hup
log "\nstarting..." log "\nstarting..."
while true; do while true; do
date && ${ctx_bin} "$@" && break date && ${ctx_bin} "$@" 2>error.log && break
log "\n\nrestarting..." && sleep 1 log "\n\nrestarting..." && sleep 1
done done
} }

View File

@ -13,3 +13,6 @@
~nfs ~nfs
source local.shy source local.shy
~cli
upgrade plugin context
upgrade plugin love

View File

@ -57,13 +57,10 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
Caches: map[string]*ctx.Cache{}, Caches: map[string]*ctx.Cache{},
Configs: map[string]*ctx.Config{ Configs: map[string]*ctx.Config{
"runtime": &ctx.Config{Name: "runtime", Value: map[string]interface{}{ "runtime": &ctx.Config{Name: "runtime", Value: map[string]interface{}{
"init": []interface{}{ "init": []interface{}{"ctx_log",
"ctx_log", "ctx_app", "ctx_bin", "ctx_cas", "ctx_ups", "ctx_box", "ctx_dev",
"ctx_ups", "ctx_box", "ctx_dev", "ctx_app", "ctx_bin", "ctx_root", "ctx_home",
"ctx_cas", "ctx_type", "ssh_port", "web_port",
"ctx_root", "ctx_home",
"ctx_type",
"web_port", "ssh_port",
}, },
"boot": map[string]interface{}{ "boot": map[string]interface{}{
"web_port": ":9095", "web_port": ":9095",
@ -139,7 +136,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
}, },
}, Help: "版本发布"}, }, Help: "版本发布"},
"upgrade": &ctx.Config{Name: "upgrade", Value: map[string]interface{}{ "upgrade": &ctx.Config{Name: "upgrade", Value: map[string]interface{}{
"install": []interface{}{"context", "tmux", "mind", "love"}, "install": []interface{}{"context", "love"},
"system": []interface{}{"boot.sh", "zone.sh", "user.sh", "node.sh", "init.shy", "common.shy", "exit.shy"}, "system": []interface{}{"boot.sh", "zone.sh", "user.sh", "node.sh", "init.shy", "common.shy", "exit.shy"},
"portal": []interface{}{"template.tar.gz", "librarys.tar.gz"}, "portal": []interface{}{"template.tar.gz", "librarys.tar.gz"},
"script": []interface{}{"test.php"}, "script": []interface{}{"test.php"},
@ -709,6 +706,66 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
} }
return return
}}, }},
"date": &ctx.Command{Name: "date", Help: "日历", Form: map[string]int{"space": 1, "format": 2, "count": 1, "nature": 1, "cmd": -1}, Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
if m.Has("cmd") {
m.Log("fino", "what %v", m.Meta["cmd"])
m.Cmdy(m.Meta["cmd"])
return
}
show := map[int]string{0: "周日", 1: "周一", 2: "周二", 3: "周三", 4: "周四", 5: "周五", 6: "周六"}
format, format_time := "", ""
if m.Has("format") {
format, format_time = kit.Select("%s", m.Meta["format"], 0), kit.Select("20060102", m.Meta["format"], 1)
}
space := m.Options("space")
now := kit.Times(m.Cmd("cli.time", arg).Append("datetime"))
n := kit.Int(kit.Select("1", m.Option("count")))
if m.Has("nature") {
n = 0
nature := kit.Times(m.Option("nature"))
for cur := now; cur.Before(nature); cur = cur.AddDate(0, 1, 0) {
n++
}
}
cur := now
for i := 0; i < n; i, now = i+1, now.AddDate(0, 1, 0) {
begin := time.Unix(now.Unix()-int64(now.Day()-1)*24*3600, 0)
last := time.Unix(begin.Unix()-int64(begin.Weekday())*24*3600, 0)
cur = last
if last.Month() != now.Month() {
for month := cur.Month(); cur.Month() == month; cur = cur.AddDate(0, 0, 1) {
if space || i == 0 {
m.Push(show[int(cur.Weekday())], "")
}
}
}
for month := cur.Month(); cur.Month() == month; cur = cur.AddDate(0, 0, 1) {
data := fmt.Sprintf("%d", cur.Day())
if cur.Day() == 1 {
if cur.Month() == 1 {
data = fmt.Sprintf("%d年", cur.Year())
} else {
data = fmt.Sprintf("%d月", cur.Month())
}
}
if format != "" {
data = fmt.Sprintf(format, cur.Format(format_time), data)
}
m.Push(show[int(cur.Weekday())], data)
}
if space || i == n-1 {
for ; cur.Weekday() > 0; cur = cur.AddDate(0, 0, 1) {
m.Push(show[int(cur.Weekday())], "")
}
}
}
m.Table()
return
}},
"proc": &ctx.Command{Name: "proc", Help: "进程管理", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) { "proc": &ctx.Command{Name: "proc", Help: "进程管理", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
m.Cmdy("cli.system", "ps", kit.Select("ax", arg, 0), "cmd_parse", "cut") m.Cmdy("cli.system", "ps", kit.Select("ax", arg, 0), "cmd_parse", "cut")
if len(arg) > 1 { if len(arg) > 1 {
@ -940,7 +997,7 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
m.Sort("file").Table() m.Sort("file").Table()
return return
}}, }},
"upgrade": &ctx.Command{Name: "upgrade project|bench|system|portal|plugin|restart|script", Help: "服务升级", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) { "upgrade": &ctx.Command{Name: "upgrade install|bench|system|portal|script|plugin|restart|package|project", Help: "服务升级", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
if len(arg) == 0 { if len(arg) == 0 {
m.Cmdy("ctx.config", "upgrade") m.Cmdy("ctx.config", "upgrade")
return return
@ -954,11 +1011,6 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
m.Cmd("cli.upgrade", "package", value) m.Cmd("cli.upgrade", "package", value)
}) })
case "project":
m.Cmd("cli.project", "init")
m.Cmd("cli.compile", "all")
m.Cmd("cli.publish")
case "script": case "script":
// 脚本列表 // 脚本列表
if len(arg) == 1 { if len(arg) == 1 {
@ -977,18 +1029,6 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
"missyou", miss, "save", path.Join(m.Conf("project", "script.path"), v)) "missyou", miss, "save", path.Join(m.Conf("project", "script.path"), v))
} }
case "restart":
m.Cmdy("cli.quit", "1")
case "package":
name := arg[1] + ".tar.gz"
p := path.Join(m.Conf("publish", "path"), name)
m.Cmd("web.get", "dev", fmt.Sprintf("publish/%s", name), "save", p,
"GOARCH", m.Conf("runtime", "host.GOARCH"), "GOOS", m.Conf("runtime", "host.GOOS"))
m.Cmd("cli.system", "tar", "-xvf", p, "-C", path.Dir(p))
case "plugin": case "plugin":
// 模块列表 // 模块列表
if arg = arg[1:]; len(arg) == 0 { if arg = arg[1:]; len(arg) == 0 {
@ -1013,6 +1053,9 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
// 查找脚本 // 查找脚本
p := m.Cmdx("nfs.path", path.Join(msg.Conf("project", "plugin.path"), arg[0], "index.shy")) p := m.Cmdx("nfs.path", path.Join(msg.Conf("project", "plugin.path"), arg[0], "index.shy"))
if p == "" {
p = m.Cmdx("nfs.path", path.Join(msg.Conf("publish", "path"), arg[0], "index.shy"))
}
if p == "" { if p == "" {
p = m.Cmdx("nfs.hash", m.Cmdx("web.get", "dev", fmt.Sprintf("publish/%s", arg[0]), p = m.Cmdx("nfs.hash", m.Cmdx("web.get", "dev", fmt.Sprintf("publish/%s", arg[0]),
"GOARCH", m.Conf("runtime", "host.GOARCH"), "GOARCH", m.Conf("runtime", "host.GOARCH"),
@ -1031,13 +1074,30 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
// 组件列表 // 组件列表
m.Confm("ssh.componet", arg[0], func(index int, value map[string]interface{}) { m.Confm("ssh.componet", arg[0], func(index int, value map[string]interface{}) {
m.Push("index", index) m.Push("index", index)
m.Push("name", value["componet_name"]) m.Push("name", value["name"])
m.Push("help", value["componet_help"]) m.Push("help", value["help"])
m.Push("ctx", value["componet_ctx"]) m.Push("ctx", value["ctx"])
m.Push("cmd", value["componet_cmd"]) m.Push("cmd", value["cmd"])
}) })
m.Table() m.Table()
case "restart":
m.Cmdy("cli.quit", "1")
case "package":
name := arg[1] + ".tar.gz"
p := path.Join(m.Conf("publish", "path"), name)
m.Cmd("web.get", "dev", fmt.Sprintf("publish/%s", name), "save", p,
"GOARCH", m.Conf("runtime", "host.GOARCH"), "GOOS", m.Conf("runtime", "host.GOOS"))
m.Cmd("cli.system", "tar", "-xvf", p, "-C", path.Dir(p))
case "project":
m.Cmd("cli.project", "init")
m.Cmd("cli.compile", "all")
m.Cmd("cli.publish")
default: default:
restart := false restart := false
for _, link := range kit.View([]string{arg[0]}, m.Confm("upgrade")) { for _, link := range kit.View([]string{arg[0]}, m.Confm("upgrade")) {

View File

@ -4,5 +4,5 @@ var version = struct {
host string host string
self int self int
}{ }{
"2019-09-19 08:57:38", "com.mac", 501, "2019-09-19 19:02:39", "centos", 562,
} }

View File

@ -153,26 +153,26 @@ func (m *Message) Format(arg ...interface{}) string {
for i := len(ms) - 1; i >= 0; i-- { for i := len(ms) - 1; i >= 0; i-- {
msg := ms[i] msg := ms[i]
meta = append(meta, fmt.Sprintf("%s\n", msg.Format("time", "ship"))) meta = append(meta, fmt.Sprintf("%s", msg.Format("time", "ship")))
if len(msg.Meta["detail"]) > 0 { if len(msg.Meta["detail"]) > 0 {
meta = append(meta, fmt.Sprintf(" detail: %d %v\n", len(msg.Meta["detail"]), msg.Meta["detail"])) meta = append(meta, fmt.Sprintf("detail:%d %v", len(msg.Meta["detail"]), msg.Meta["detail"]))
} }
if len(msg.Meta["option"]) > 0 { if len(msg.Meta["option"]) > 0 {
meta = append(meta, fmt.Sprintf("option:%d %v\n", len(msg.Meta["option"]), msg.Meta["option"])) meta = append(meta, fmt.Sprintf("option:%d %v\n", len(msg.Meta["option"]), msg.Meta["option"]))
for _, k := range msg.Meta["option"] { for _, k := range msg.Meta["option"] {
if _, ok := msg.Data[k]; ok { if v, ok := msg.Meta[k]; ok {
// meta = append(meta, fmt.Sprintf(" %s: %v\n", k, kit.Format(v)))
} else if v, ok := msg.Meta[k]; ok {
meta = append(meta, fmt.Sprintf(" %s: %d %v\n", k, len(v), v)) meta = append(meta, fmt.Sprintf(" %s: %d %v\n", k, len(v), v))
} }
} }
} else {
meta = append(meta, "\n")
} }
if len(msg.Meta["append"]) > 0 { if len(msg.Meta["append"]) > 0 {
meta = append(meta, fmt.Sprintf(" append:%d %v\n", len(msg.Meta["append"]), msg.Meta["append"])) meta = append(meta, fmt.Sprintf(" append:%d %v\n", len(msg.Meta["append"]), msg.Meta["append"]))
for _, k := range msg.Meta["append"] { for _, k := range msg.Meta["append"] {
if _, ok := msg.Data[k]; ok { if v, ok := msg.Meta[k]; ok {
// meta = append(meta, fmt.Sprintf(" %s: %v\n", k, kit.Format(v)))
} else if v, ok := msg.Meta[k]; ok {
meta = append(meta, fmt.Sprintf(" %s: %d %v\n", k, len(v), v)) meta = append(meta, fmt.Sprintf(" %s: %d %v\n", k, len(v), v))
} }
} }
@ -183,7 +183,7 @@ func (m *Message) Format(arg ...interface{}) string {
} }
case "stack": case "stack":
pc := make([]uintptr, 100) pc := make([]uintptr, 100)
pc = pc[:runtime.Callers(0, pc)] pc = pc[:runtime.Callers(5, pc)]
frames := runtime.CallersFrames(pc) frames := runtime.CallersFrames(pc)
for { for {

View File

@ -17,7 +17,7 @@ kit publish "发布" private \
kit upgrade "升级" private "ssh._route" _ "cli.upgrade" \ kit upgrade "升级" private "ssh._route" _ "cli.upgrade" \
text "" name pod imports plugin_pod \ text "" name pod imports plugin_pod \
select "" values script values restart values plugin values bench values portal values system action auto \ select "" values script values plugin values restart values package values bench values portal values system action auto \
text "" name see imports plugin_see \ text "" name see imports plugin_see \
button "升级" button "升级"

View File

@ -1,4 +1,15 @@
{init: function(run, field, option, output) { {init: function(run, field, option, output) {
kit.Log("hello world") return {
return {} show: function(event) {
run(event, ["", "", "cmd", "ssh.data", "show", "love"], function(msg) {
ctx.Table(msg, function(value) {
var ts = ".s"+value.when.split(" ")[0].split("-").join("")
kit.Selector(output, ts, function(item) {
item.parentNode.style.backgroundColor = "red"
item.parentNode.title = value.where
})
})
})
},
}
}} }}

View File

@ -16,7 +16,9 @@ fun meets "第一眼" private \
copy ssh.data insert _ when _ where __ copy ssh.data insert _ when _ where __
end end
fun meet "第一眼" protected "ssh.data" show \ kit date "日历" "index.js" protected "cli.date" format '<span class="%s">%s</span>' "s20060102" space true _ nature _ \
text "love" name table imports plugin_table \ text "2019-07-08" name "起始时间" \
button "查看" action auto text "date" name "截止时间" \
button "查看" action auto \
button "显示" click show

View File

@ -34,6 +34,9 @@ func Time(arg ...string) int {
} }
return 0 return 0
} }
func Times(arg ...string) time.Time {
return time.Unix(int64(Time(arg...)), 0)
}
func Duration(arg ...string) time.Duration { func Duration(arg ...string) time.Duration {
d, _ := time.ParseDuration(arg[0]) d, _ := time.ParseDuration(arg[0])
return d return d

View File

@ -564,7 +564,7 @@ function Pane(page, field) {
list.push(ui.last), field.scrollBy(0, field.scrollHeight+100) list.push(ui.last), field.scrollBy(0, field.scrollHeight+100)
key && key.length > 0 && (member[line[which]] = member[line[key[0]]] = {index:index, key:line[which]}); key && key.length > 0 && (member[line[which]] = member[line[key[0]]] = {index:index, key:line[which]});
line.name && (type == "plugin" || type == "field") && pane.Plugin(page, pane, ui.field, function(event, cmds, cbs) { (type == "plugin" && line.name || type == "field") && pane.Plugin(page, pane, ui.field, function(event, cmds, cbs) {
typeof cb == "function" && cb(line, index, event, cmds, cbs) typeof cb == "function" && cb(line, index, event, cmds, cbs)
}) })
return ui return ui

View File

@ -477,6 +477,7 @@ kit = toolkit = {
// HTML显示文本 // HTML显示文本
Color: function(s) { Color: function(s) {
if (!s) {return s}
s = s.replace(/\033\[1m/g, "<span style='font-weight:bold'>") s = s.replace(/\033\[1m/g, "<span style='font-weight:bold'>")
s = s.replace(/\033\[36m/g, "<span style='color:#0ff'>") s = s.replace(/\033\[36m/g, "<span style='color:#0ff'>")
s = s.replace(/\033\[33m/g, "<span style='color:#ff0'>") s = s.replace(/\033\[33m/g, "<span style='color:#ff0'>")