diff --git a/base/aaa/role.go b/base/aaa/role.go index dabbfad4..c7737bbc 100644 --- a/base/aaa/role.go +++ b/base/aaa/role.go @@ -1,8 +1,8 @@ package aaa import ( - "github.com/shylinux/icebergs" - "github.com/shylinux/toolkits" + ice "github.com/shylinux/icebergs" + kit "github.com/shylinux/toolkits" ) const ( // 用户角色 @@ -35,6 +35,13 @@ func _role_list(m *ice.Message, userrole string) { } }) } +func _role_user(m *ice.Message, userrole string, username ...string) { + m.Richs(ROLE, nil, userrole, func(key string, value map[string]interface{}) { + for _, user := range username { + kit.Value(value, kit.Keys(USER, user), true) + } + }) +} func _role_right(m *ice.Message, userrole string, keys ...string) (ok bool) { if userrole == ROOT { // 超级用户 @@ -99,7 +106,7 @@ func init() { ROLE: {Name: "role", Help: "角色", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)}, }, Commands: map[string]*ice.Command{ - ROLE: {Name: "role [role]", Help: "角色", Action: map[string]*ice.Action{ + ROLE: {Name: "role [role [user...]]", Help: "角色", Action: map[string]*ice.Action{ White: {Name: "white role chain...", Help: "白名单", Hand: func(m *ice.Message, arg ...string) { _role_white(m, arg[0], kit.Keys(arg[1:]), true) }}, @@ -112,6 +119,9 @@ func init() { } }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if len(arg) > 1 { + _role_user(m, arg[0], arg[1:]...) + } _role_list(m, kit.Select("", arg, 0)) }}, }, diff --git a/base/aaa/user.go b/base/aaa/user.go index 8dac09ed..2e5d84ff 100644 --- a/base/aaa/user.go +++ b/base/aaa/user.go @@ -1,11 +1,11 @@ package aaa import ( - "github.com/shylinux/icebergs" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/cli" "github.com/shylinux/icebergs/base/gdb" "github.com/shylinux/icebergs/base/mdb" - "github.com/shylinux/toolkits" + kit "github.com/shylinux/toolkits" "strings" ) @@ -55,11 +55,16 @@ func UserRoot(m *ice.Message) { cli.PassWord = cli.UserName _user_create(m, cli.UserName, cli.PassWord) } -func UserRole(m *ice.Message, username interface{}) string { - if username == cli.UserName { +func UserRole(m *ice.Message, username interface{}) (role string) { + if role = VOID; username == cli.UserName { return ROOT } - return VOID + m.Richs(ROLE, nil, TECH, func(key string, value map[string]interface{}) { + if kit.Value(value, kit.Keys(USER, username)) == true { + role = TECH + } + }) + return } func UserLogin(m *ice.Message, username, password string) bool { if _user_login(m, username, password) { diff --git a/base/cli/cli.go b/base/cli/cli.go index b1ba666f..f8917f01 100644 --- a/base/cli/cli.go +++ b/base/cli/cli.go @@ -1,9 +1,10 @@ package cli import ( - "github.com/shylinux/icebergs" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/ctx" - "github.com/shylinux/toolkits" + "github.com/shylinux/icebergs/base/mdb" + kit "github.com/shylinux/toolkits" "os" "os/user" @@ -78,6 +79,10 @@ var Index = &ice.Context{Name: "cli", Help: "命令模块", n := kit.Int(kit.Select("20", m.Conf(RUNTIME, "host.GOMAXPROCS"))) m.Logs("host", "gomaxprocs", n) runtime.GOMAXPROCS(n) + + m.Cmdy(mdb.ENGINE, mdb.CREATE, "shell", m.AddCmd(&ice.Command{Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Cmdy(SYSTEM, arg[2]) + }})) }}, ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Save(RUNTIME, SYSTEM) diff --git a/base/mdb/engine.go b/base/mdb/engine.go new file mode 100644 index 00000000..0831610f --- /dev/null +++ b/base/mdb/engine.go @@ -0,0 +1,28 @@ +package mdb + +import ( + ice "github.com/shylinux/icebergs" + kit "github.com/shylinux/toolkits" +) + +const ENGINE = "engine" + +func init() { + Index.Merge(&ice.Context{ + Configs: map[string]*ice.Config{ + ENGINE: {Name: "engine", Help: "引擎", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TYPE)}, + }, + Commands: map[string]*ice.Command{ + ENGINE: {Name: "engine type name text arg...", Help: "引擎", Action: map[string]*ice.Action{ + CREATE: {Name: "create type name [text]", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Rich(ENGINE, nil, kit.Dict(kit.MDB_TYPE, arg[0], kit.MDB_NAME, arg[1], kit.MDB_TEXT, kit.Select("", arg, 2))) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + if m.Richs(ENGINE, nil, arg[0], func(key string, value map[string]interface{}) { + m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), arg) + }) == nil { + m.Cmdy(arg[0], ENGINE, arg) + } + }}, + }}, nil) +} diff --git a/base/mdb/mdb.go b/base/mdb/mdb.go index 6054b4ce..40553126 100644 --- a/base/mdb/mdb.go +++ b/base/mdb/mdb.go @@ -1,8 +1,8 @@ package mdb import ( - "github.com/shylinux/icebergs" - "github.com/shylinux/toolkits" + ice "github.com/shylinux/icebergs" + kit "github.com/shylinux/toolkits" "github.com/shylinux/toolkits/task" "encoding/csv" @@ -179,6 +179,9 @@ func _dict_export(m *ice.Message, prefix, key, file string) { m.Log_EXPORT(kit.MDB_FILE, p) } +const ( + ErrDenyModify = "deny modify " +) const ( CSV = "csv" JSON = "json" @@ -201,9 +204,6 @@ const ( DELETE = "delete" SELECT = "select" MODIFY = "modify" - - PARSER = "parser" - ADVISE = "advise" ) var Index = &ice.Context{Name: "mdb", Help: "数据模块", @@ -242,5 +242,7 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块", } func init() { - ice.Index.Register(Index, nil, IMPORT, EXPORT, SELECT, SEARCH, RENDER) + ice.Index.Register(Index, nil, IMPORT, EXPORT, SELECT, + PLUGIN, ENGINE, SEARCH, RENDER, + ) } diff --git a/base/mdb/plugin.go b/base/mdb/plugin.go new file mode 100644 index 00000000..efa68022 --- /dev/null +++ b/base/mdb/plugin.go @@ -0,0 +1,26 @@ +package mdb + +import ( + ice "github.com/shylinux/icebergs" + kit "github.com/shylinux/toolkits" +) + +const PLUGIN = "plugin" + +func init() { + Index.Merge(&ice.Context{ + Configs: map[string]*ice.Config{ + PLUGIN: {Name: "plugin", Help: "插件", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TYPE)}, + }, + Commands: map[string]*ice.Command{ + PLUGIN: {Name: "plugin type name text arg...", Help: "插件", Action: map[string]*ice.Action{ + CREATE: {Name: "create type name [text]", Help: "创建", Hand: func(m *ice.Message, arg ...string) { + m.Rich(PLUGIN, nil, kit.Dict(kit.MDB_TYPE, arg[0], kit.MDB_NAME, arg[1], kit.MDB_TEXT, kit.Select("", arg, 2))) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Richs(PLUGIN, nil, arg[0], func(key string, value map[string]interface{}) { + m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), arg) + }) + }}, + }}, nil) +} diff --git a/base/mdb/render.go b/base/mdb/render.go index b4d73275..88a42e89 100644 --- a/base/mdb/render.go +++ b/base/mdb/render.go @@ -1,8 +1,8 @@ package mdb import ( - "github.com/shylinux/icebergs" - "github.com/shylinux/toolkits" + ice "github.com/shylinux/icebergs" + kit "github.com/shylinux/toolkits" ) const RENDER = "render" @@ -19,7 +19,7 @@ func init() { }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Richs(RENDER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) { - m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), RENDER, arg[0], arg[1], kit.Select("", arg, 2)) + m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), arg[0], arg[1], kit.Select("", arg, 2)) }) }}, }}, nil) diff --git a/base/web/render.go b/base/web/render.go index 808f7e9b..27b049e7 100644 --- a/base/web/render.go +++ b/base/web/render.go @@ -3,6 +3,7 @@ package web import ( ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/aaa" + "github.com/shylinux/icebergs/base/mdb" kit "github.com/shylinux/toolkits" "github.com/skip2/go-qrcode" @@ -89,3 +90,34 @@ func RenderStatus(msg *ice.Message, code int, text string) { // name path expire msg.W.WriteHeader(code) msg.W.Write([]byte(text)) } + +var RENDER = struct { + Button string + Field string + A string +}{ + Button: "button", + Field: "field", + A: "a", +} + +func init() { + Index.Merge(&ice.Context{ + Commands: map[string]*ice.Command{ + mdb.RENDER: {Action: map[string]*ice.Action{ + RENDER.Button: {Hand: func(m *ice.Message, arg ...string) { + m.Echo(``, arg[0]) + }}, + RENDER.Field: {Hand: func(m *ice.Message, arg ...string) { + m.Echo(`
%s(%s)
`, arg[0], arg[1]) + }}, + RENDER.A: {Hand: func(m *ice.Message, arg ...string) { + u := kit.Select(m.Conf(SHARE, "meta.domain"), arg, 1) + m.Echo(`%s`, u, arg[0]) + }}, + }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + m.Echo(``, arg[0], arg[1]) + }}, + }, + }, nil) +} diff --git a/base/web/space.go b/base/web/space.go index 211812e4..35c71a38 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -125,7 +125,9 @@ func _space_echo(msg *ice.Message, source, target []string, c *websocket.Conn, n msg.Log("send", "%v->%v %v %v", source, target, msg.Detailv(), msg.Format("meta")) } func _space_exec(msg *ice.Message, source, target []string, c *websocket.Conn, name string) { - msg = msg.Cmd() + if msg.Right(msg.Detailv()) { + msg = msg.Cmd() + } msg.Set("_option") _space_echo(msg, []string{}, kit.Revert(source)[1:], c, name) msg.Cost("%v->%v %v %v", source, target, msg.Detailv(), msg.Format("append")) diff --git a/base/web/web.go b/base/web/web.go index ef6fd6df..8ebfab1e 100644 --- a/base/web/web.go +++ b/base/web/web.go @@ -97,6 +97,10 @@ var Index = &ice.Context{Name: "web", Help: "网络模块", ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Load() + for k := range c.Commands[mdb.RENDER].Action { + m.Cmdy(mdb.RENDER, mdb.CREATE, k, mdb.RENDER, c.Cap(ice.CTX_FOLLOW)) + } + m.Cmd(SPIDE, mdb.CREATE, "self", kit.Select("http://:9020", m.Conf(cli.RUNTIME, "conf.ctx_self"))) m.Cmd(SPIDE, mdb.CREATE, "dev", kit.Select("http://:9020", m.Conf(cli.RUNTIME, "conf.ctx_dev"))) m.Cmd(SPIDE, mdb.CREATE, "shy", kit.Select("https://shylinux.com:443", m.Conf(cli.RUNTIME, "conf.ctx_shy"))) diff --git a/core/code/bench.go b/core/code/bench.go index cbe65fc8..7cad836a 100644 --- a/core/code/bench.go +++ b/core/code/bench.go @@ -1,14 +1,16 @@ package code import ( - "github.com/shylinux/icebergs" + ice "github.com/shylinux/icebergs" "github.com/shylinux/icebergs/base/mdb" + "github.com/shylinux/icebergs/base/web" kit "github.com/shylinux/toolkits" - "github.com/shylinux/toolkits/logs" + log "github.com/shylinux/toolkits/logs" "github.com/shylinux/toolkits/util/bench" "github.com/shylinux/toolkits/util/bench/redis" "io" + "io/ioutil" "net/http" "os" "strings" @@ -16,19 +18,13 @@ import ( "time" ) -const ( - BENCH = "bench" - NCONN = "nconn" - NREQS = "nreqs" -) - func _bench_list(m *ice.Message, zone string, id string, field ...interface{}) { m.Richs(BENCH, nil, kit.Select(kit.MDB_FOREACH, zone), func(key string, val map[string]interface{}) { val = val[kit.MDB_META].(map[string]interface{}) if zone = kit.Format(kit.Value(val, kit.MDB_ZONE)); id == "" { m.Grows(BENCH, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) { // 查看信息 - m.Push("操作", ``) + m.Push("操作", m.Cmdx(mdb.RENDER, web.RENDER.Button, "运行")) m.Push(zone, value, []string{ kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TYPE, kit.MDB_NAME, NCONN, NREQS, kit.MDB_TEXT, @@ -40,18 +36,16 @@ func _bench_list(m *ice.Message, zone string, id string, field ...interface{}) { // 查看信息 m.Push("detail", value) m.Push(kit.MDB_KEY, "操作") - m.Push(kit.MDB_VALUE, ``) + m.Push(kit.MDB_VALUE, m.Cmdx(mdb.RENDER, web.RENDER.Button, "运行")) }) }) } func _bench_show(m *ice.Message, nconn, nreq int64, list []*http.Request) { - nout, e := os.OpenFile("/dev/null", os.O_WRONLY, 0660) - m.Assert(e) + m.Log_CONF(NCONN, nconn, NREQS, nreq) var body int64 - m.Logs(NCONN, nconn, NREQS, nreq) s, e := bench.HTTP(nconn, nreq, list, func(req *http.Request, res *http.Response) { - n, _ := io.Copy(nout, res.Body) + n, _ := io.Copy(ioutil.Discard, res.Body) atomic.AddInt64(&body, n) }) m.Assert(e) @@ -60,24 +54,64 @@ func _bench_show(m *ice.Message, nconn, nreq int64, list []*http.Request) { m.Echo("body: %d\n", body) } func _bench_redis(m *ice.Message, nconn, nreq int64, hosts []string, cmds []string) { - m.Logs("info", "hosts", hosts, "cmds", cmds, nreq, nconn) - s, e := redis.Redis(nconn, nreq, hosts, cmds, func(cmd string, arg []interface{}, reply interface{}) { - }) + m.Log_CONF(NCONN, nconn, NREQS, nreq, "cmds", cmds, "hosts", hosts) + + s, e := redis.Redis(nconn, nreq, hosts, cmds, nil) m.Assert(e) - m.Echo("cmds: %s QPS: %.2f n/s AVG: %s time: %s \n", cmds, s.QPS, log.FmtDuration(s.Cost/time.Duration(s.NReq)), log.FmtDuration(s.EndTime.Sub(s.BeginTime))) + + m.Echo("cmds: %s QPS: %.2f n/s AVG: %s time: %s \n", cmds, s.QPS, + log.FmtDuration(s.Cost/time.Duration(s.NReq)), log.FmtDuration(s.EndTime.Sub(s.BeginTime))) } -func _bench_modify(m *ice.Message, zone, id, pro, set, old string) { +func _bench_engine(m *ice.Message, kind, name, target string, arg ...string) { + nconn := kit.Int64(kit.Select("10", m.Option(NCONN))) + nreqs := kit.Int64(kit.Select("1000", m.Option(NREQS))) + m.Echo("nconn: %d nreqs: %d\n", nconn, nreqs*nconn) + + if strings.HasPrefix(target, "redis://") { + hosts := []string{} + for _, v := range strings.Split(target, ",") { + hosts = append(hosts, strings.TrimPrefix(v, "redis://")) + } + + cmds := strings.Split(name, ",") + for _, cmd := range cmds { + _bench_redis(m, nconn, nreqs, hosts, []string{cmd}) + } + return + } + + list := []*http.Request{} + for _, v := range strings.Split(target, ",") { + switch ls := kit.Split(v); ls[0] { + case http.MethodPost: + if f, e := os.Open(ls[2]); m.Assert(e) { + defer f.Close() + + req, err := http.NewRequest(http.MethodPost, ls[1], f) + m.Assert(err) + list = append(list, req) + } + default: + req, err := http.NewRequest(http.MethodGet, v, nil) + m.Assert(err) + list = append(list, req) + } + } + _bench_show(m, nconn, nreqs, list) +} + +func _bench_modify(m *ice.Message, zone, id, k, v, old string) { m.Richs(BENCH, nil, zone, func(key string, val map[string]interface{}) { - switch pro { + switch k { case kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TIME: - m.Warn(true, "deny modify %v", pro) + m.Warn(true, mdb.ErrDenyModify, k) return } m.Grows(BENCH, kit.Keys(kit.MDB_HASH, key), kit.MDB_ID, id, func(index int, value map[string]interface{}) { // 修改信息 - m.Log_MODIFY(kit.MDB_ZONE, zone, kit.MDB_ID, id, kit.MDB_KEY, pro, kit.MDB_VALUE, set, "old", old) - kit.Value(value, pro, set) + m.Log_MODIFY(kit.MDB_ZONE, zone, kit.MDB_ID, id, kit.MDB_KEY, k, kit.MDB_VALUE, v, "old", old) + kit.Value(value, k, v) }) }) } @@ -85,23 +119,23 @@ func _bench_insert(m *ice.Message, zone, kind, name, text string, nconn, nreqs s m.Richs(BENCH, nil, zone, func(key string, value map[string]interface{}) { id := m.Grow(BENCH, kit.Keys(kit.MDB_HASH, key), kit.Dict( kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, text, - // 添加信息 - NCONN, nconn, NREQS, nreqs, - kit.MDB_EXTRA, kit.Dict(arg), + NCONN, nconn, NREQS, nreqs, kit.MDB_EXTRA, kit.Dict(arg), )) m.Log_INSERT(kit.MDB_ZONE, zone, kit.MDB_ID, id, kit.MDB_TYPE, kind, kit.MDB_NAME, name) m.Echo("%d", id) }) } func _bench_create(m *ice.Message, zone string, arg ...string) { - if m.Richs(BENCH, nil, zone, nil) == nil { - m.Rich(BENCH, nil, kit.Data(kit.MDB_ZONE, zone, - // 添加信息 - arg)) - m.Log_CREATE(kit.MDB_ZONE, zone) - } + m.Rich(BENCH, nil, kit.Data(kit.MDB_ZONE, zone, arg)) + m.Log_CREATE(kit.MDB_ZONE, zone) } +const BENCH = "bench" +const ( + NCONN = "nconn" + NREQS = "nreqs" +) + func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ @@ -120,6 +154,11 @@ func init() { mdb.MODIFY: {Name: "modify key value old", Help: "编辑", Hand: func(m *ice.Message, arg ...string) { _bench_modify(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg[0], arg[1], kit.Select("", arg, 2)) }}, + + mdb.ENGINE: {Name: "engine type name text arg...", Help: "引擎", Hand: func(m *ice.Message, arg ...string) { + _bench_engine(m, arg[0], arg[1], arg[2], arg[3:]...) + }}, + kit.MDB_SHOW: {Name: "show type name text arg...", Help: "运行", Hand: func(m *ice.Message, arg ...string) { if len(arg) < 4 { m.Richs(BENCH, nil, m.Option(kit.MDB_ZONE), func(key string, val map[string]interface{}) { @@ -129,52 +168,19 @@ func init() { }) } if len(arg) > 2 { + m.Option(kit.MDB_TYPE, arg[0]) m.Option(kit.MDB_NAME, arg[1]) m.Option(kit.MDB_TEXT, arg[2]) for i := 3; i < len(arg)-1; i++ { m.Option(arg[i], arg[i+1]) } } - - target := kit.Select(m.Option(kit.MDB_TEXT), arg, 2) - if strings.HasPrefix(target, "redis://") { - hosts := []string{} - cmds := strings.Split((m.Option(kit.MDB_NAME)), ",") - for _, v := range strings.Split(target, ",") { - hosts = append(hosts, strings.TrimPrefix(v, "redis://")) - } - nconn := kit.Int64(kit.Select("10", m.Option(NCONN))) - nreqs := kit.Int64(kit.Select("5000", m.Option(NREQS))) - m.Echo("nconn: %d nreqs: %d\n", nconn, nreqs*nconn) - for _, cmd := range cmds { - _bench_redis(m, nconn, nreqs, hosts, []string{cmd}) - } - return - } - - list := []*http.Request{} - for _, v := range strings.Split(target, ",") { - switch ls := kit.Split(v); ls[0] { - case http.MethodPost: - if f, e := os.Open(ls[2]); m.Assert(e) { - defer f.Close() - - req, err := http.NewRequest(http.MethodPost, ls[1], f) - m.Assert(err) - list = append(list, req) - } - default: - req, err := http.NewRequest(http.MethodGet, v, nil) - m.Assert(err) - list = append(list, req) - } - } - _bench_show(m, kit.Int64(kit.Select(m.Option(NCONN))), kit.Int64(kit.Select(m.Option(NREQS))), list) + m.Cmdy(mdb.ENGINE, m.Option(kit.MDB_TYPE), m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT)) }}, }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { _bench_list(m, kit.Select(kit.MDB_FOREACH, arg, 0), kit.Select("", arg, 1)) }}, - "/bench": {Name: "/bench cmd...", Help: "性能压测", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { + "/" + BENCH: {Name: "/bench cmd...", Help: "性能压测", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { m.Cmdy(m.Optionv("cmd")) }}, }, diff --git a/core/code/code.go b/core/code/code.go index f81957da..4f205426 100644 --- a/core/code/code.go +++ b/core/code/code.go @@ -255,4 +255,4 @@ export %s }, } -func init() { web.Index.Register(Index, &web.Frame{}) } +func init() { web.Index.Register(Index, &web.Frame{}, BENCH, PPROF) } diff --git a/core/code/inner.go b/core/code/inner.go index 428cf5a8..b5651c97 100644 --- a/core/code/inner.go +++ b/core/code/inner.go @@ -98,6 +98,13 @@ func _inner_show(m *ice.Message, name string) { } switch m.Set(ice.MSG_RESULT); p { + case "go": + if strings.HasSuffix(name, "test.go") { + m.Cmdy(cli.SYSTEM, "go", "test", "-v", "./"+name) + } else { + m.Cmdy(cli.SYSTEM, "go", "run", "./"+name) + } + case "csv": m.CSV(m.Cmdx("nfs.cat", name)) case "md": @@ -131,7 +138,6 @@ func init() { "show", kit.Dict( "sh", []string{"bash"}, "py", []string{"python"}, - "go", []string{"go", "run"}, "js", []string{"node"}, ), )}, diff --git a/core/code/pprof.go b/core/code/pprof.go index dd3374bb..8f0b0f9f 100644 --- a/core/code/pprof.go +++ b/core/code/pprof.go @@ -14,25 +14,16 @@ import ( "strings" ) -var PPROF = ice.Name("pprof", Index) - -const ( - BINNARY = "binnary" - SERVICE = "service" - SECONDS = "seconds" -) - func _pprof_list(m *ice.Message, zone string, id string, field ...interface{}) { m.Richs(PPROF, nil, kit.Select(kit.MDB_FOREACH, zone), func(key string, val map[string]interface{}) { val = val[kit.MDB_META].(map[string]interface{}) if zone = kit.Format(kit.Value(val, kit.MDB_ZONE)); id == "" { m.Grows(PPROF, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) { // 列表信息 - m.Push("操作", ``) + m.Push("操作", m.Cmdx(mdb.RENDER, web.RENDER.Button, "运行")) m.Push(zone, value, []string{ - kit.MDB_ZONE, kit.MDB_ID, - kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT, - SECONDS, BINNARY, SERVICE, + kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TYPE, + kit.MDB_NAME, kit.MDB_TEXT, SECONDS, BINNARY, SERVICE, }, val) }) } else { @@ -40,7 +31,7 @@ func _pprof_list(m *ice.Message, zone string, id string, field ...interface{}) { // 详细信息 m.Push("detail", value) m.Push(kit.MDB_KEY, "操作") - m.Push(kit.MDB_VALUE, ``) + m.Push(kit.MDB_VALUE, m.Cmdx(mdb.RENDER, web.RENDER.Button, "运行")) }) } }) @@ -101,25 +92,25 @@ func _pprof_show(m *ice.Message, zone string, id string) { m.Push("bin", bin) }) } -func _pprof_modify(m *ice.Message, zone, id, pro, set, old string) { - pro = kit.Select(pro, m.Option(kit.MDB_KEY)) +func _pprof_modify(m *ice.Message, zone, id, k, v, old string) { + k = kit.Select(k, m.Option(kit.MDB_KEY)) m.Richs(PPROF, nil, kit.Select(kit.MDB_FOREACH, zone), func(key string, val map[string]interface{}) { - switch pro { + switch k { case kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TIME: - m.Warn(true, "deny modify %v", pro) + m.Warn(true, mdb.ErrDenyModify, k) return case BINNARY, SERVICE, SECONDS: // 修改信息 - m.Log_MODIFY(kit.MDB_ZONE, zone, kit.MDB_KEY, pro, kit.MDB_VALUE, set, "old", old) + m.Log_MODIFY(kit.MDB_ZONE, zone, kit.MDB_KEY, k, kit.MDB_VALUE, v, "old", old) val = val[kit.MDB_META].(map[string]interface{}) - kit.Value(val, pro, set) + kit.Value(val, k, v) return } m.Grows(PPROF, kit.Keys(kit.MDB_HASH, key), kit.MDB_ID, id, func(index int, value map[string]interface{}) { // 修改信息 - m.Log_MODIFY(kit.MDB_ZONE, zone, kit.MDB_ID, id, kit.MDB_KEY, pro, kit.MDB_VALUE, set, "old", old) - kit.Value(value, pro, set) + m.Log_MODIFY(kit.MDB_ZONE, zone, kit.MDB_ID, id, kit.MDB_KEY, k, kit.MDB_VALUE, v, "old", old) + kit.Value(value, k, v) }) }) } @@ -127,21 +118,24 @@ func _pprof_insert(m *ice.Message, zone, kind, name, text string, arg ...string) m.Richs(PPROF, nil, zone, func(key string, val map[string]interface{}) { id := m.Grow(PPROF, kit.Keys(kit.MDB_HASH, key), kit.Dict( kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, text, - // 添加信息 kit.MDB_EXTRA, kit.Dict(arg), )) - m.Log_INSERT(kit.MDB_META, PPROF, kit.MDB_ZONE, zone, - kit.MDB_ID, id, kit.MDB_TYPE, kind, kit.MDB_NAME, name) + m.Log_INSERT(kit.MDB_META, PPROF, kit.MDB_ZONE, zone, kit.MDB_ID, id, kit.MDB_TYPE, kind, kit.MDB_NAME, name) m.Echo("%d", id) }) } func _pprof_create(m *ice.Message, zone string, binnary, service string, seconds string, arg ...string) { - m.Rich(PPROF, nil, kit.Data(kit.MDB_ZONE, zone, - // 添加信息 - BINNARY, binnary, SERVICE, service, SECONDS, seconds, arg)) + m.Rich(PPROF, nil, kit.Data(kit.MDB_ZONE, zone, BINNARY, binnary, SERVICE, service, SECONDS, seconds, arg)) m.Log_CREATE(kit.MDB_ZONE, zone) } +const PPROF = "pprof" +const ( + BINNARY = "binnary" + SERVICE = "service" + SECONDS = "seconds" +) + func init() { Index.Merge(&ice.Context{ Configs: map[string]*ice.Config{ diff --git a/logs.go b/logs.go index 59646f63..29433df1 100644 --- a/logs.go +++ b/logs.go @@ -1,11 +1,10 @@ package ice import ( - "github.com/shylinux/toolkits" - "github.com/shylinux/toolkits/logs" + kit "github.com/shylinux/toolkits" + log "github.com/shylinux/toolkits/logs" "fmt" - "runtime" "strings" ) @@ -26,7 +25,7 @@ func (m *Message) log(level string, str string, arg ...interface{}) *Message { case LOG_CMDS, LOG_START, LOG_SERVE: prefix, suffix = "\033[32m", "\033[0m" - case LOG_AUTH, LOG_COST: + case LOG_AUTH, LOG_CONF, LOG_COST: prefix, suffix = "\033[33m", "\033[0m" case LOG_WARN, LOG_ERROR, LOG_CLOSE: prefix, suffix = "\033[31m", "\033[0m" @@ -59,11 +58,10 @@ func (m *Message) Logs(level string, arg ...interface{}) *Message { func (m *Message) Info(str string, arg ...interface{}) *Message { return m.log(LOG_INFO, str, arg...) } -func (m *Message) Warn(err bool, str string, arg ...interface{}) bool { +func (m *Message) Warn(err bool, arg ...interface{}) bool { if err { - m.Echo("warn: ").Echo(str, arg...) - _, file, line, _ := runtime.Caller(1) - return m.log(LOG_WARN, "%s:%d %s", file, line, fmt.Sprintf(str, arg...)) != nil + m.meta[MSG_RESULT] = append([]string{"warn: "}, kit.Simple(arg...)...) + return m.log(LOG_WARN, fmt.Sprint(arg...)) != nil } return false }