mirror of
https://shylinux.com/x/icebergs
synced 2025-05-06 13:17:03 +08:00
add mdb.engine
This commit is contained in:
parent
d4da81ce94
commit
600ace0c40
@ -1,8 +1,8 @@
|
|||||||
package aaa
|
package aaa
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
const ( // 用户角色
|
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) {
|
func _role_right(m *ice.Message, userrole string, keys ...string) (ok bool) {
|
||||||
if userrole == ROOT {
|
if userrole == ROOT {
|
||||||
// 超级用户
|
// 超级用户
|
||||||
@ -99,7 +106,7 @@ func init() {
|
|||||||
ROLE: {Name: "role", Help: "角色", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)},
|
ROLE: {Name: "role", Help: "角色", Value: kit.Data(kit.MDB_SHORT, kit.MDB_NAME)},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
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) {
|
White: {Name: "white role chain...", Help: "白名单", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_role_white(m, arg[0], kit.Keys(arg[1:]), true)
|
_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) {
|
}, 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))
|
_role_list(m, kit.Select("", arg, 0))
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package aaa
|
package aaa
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/cli"
|
"github.com/shylinux/icebergs/base/cli"
|
||||||
"github.com/shylinux/icebergs/base/gdb"
|
"github.com/shylinux/icebergs/base/gdb"
|
||||||
"github.com/shylinux/icebergs/base/mdb"
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
"github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
|
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
@ -55,11 +55,16 @@ func UserRoot(m *ice.Message) {
|
|||||||
cli.PassWord = cli.UserName
|
cli.PassWord = cli.UserName
|
||||||
_user_create(m, cli.UserName, cli.PassWord)
|
_user_create(m, cli.UserName, cli.PassWord)
|
||||||
}
|
}
|
||||||
func UserRole(m *ice.Message, username interface{}) string {
|
func UserRole(m *ice.Message, username interface{}) (role string) {
|
||||||
if username == cli.UserName {
|
if role = VOID; username == cli.UserName {
|
||||||
return ROOT
|
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 {
|
func UserLogin(m *ice.Message, username, password string) bool {
|
||||||
if _user_login(m, username, password) {
|
if _user_login(m, username, password) {
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
package cli
|
package cli
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/ctx"
|
"github.com/shylinux/icebergs/base/ctx"
|
||||||
"github.com/shylinux/toolkits"
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
|
kit "github.com/shylinux/toolkits"
|
||||||
|
|
||||||
"os"
|
"os"
|
||||||
"os/user"
|
"os/user"
|
||||||
@ -78,6 +79,10 @@ var Index = &ice.Context{Name: "cli", Help: "命令模块",
|
|||||||
n := kit.Int(kit.Select("20", m.Conf(RUNTIME, "host.GOMAXPROCS")))
|
n := kit.Int(kit.Select("20", m.Conf(RUNTIME, "host.GOMAXPROCS")))
|
||||||
m.Logs("host", "gomaxprocs", n)
|
m.Logs("host", "gomaxprocs", n)
|
||||||
runtime.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) {
|
ice.CTX_EXIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Save(RUNTIME, SYSTEM)
|
m.Save(RUNTIME, SYSTEM)
|
||||||
|
28
base/mdb/engine.go
Normal file
28
base/mdb/engine.go
Normal file
@ -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)
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
package mdb
|
package mdb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
"github.com/shylinux/toolkits/task"
|
"github.com/shylinux/toolkits/task"
|
||||||
|
|
||||||
"encoding/csv"
|
"encoding/csv"
|
||||||
@ -179,6 +179,9 @@ func _dict_export(m *ice.Message, prefix, key, file string) {
|
|||||||
m.Log_EXPORT(kit.MDB_FILE, p)
|
m.Log_EXPORT(kit.MDB_FILE, p)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
ErrDenyModify = "deny modify "
|
||||||
|
)
|
||||||
const (
|
const (
|
||||||
CSV = "csv"
|
CSV = "csv"
|
||||||
JSON = "json"
|
JSON = "json"
|
||||||
@ -201,9 +204,6 @@ const (
|
|||||||
DELETE = "delete"
|
DELETE = "delete"
|
||||||
SELECT = "select"
|
SELECT = "select"
|
||||||
MODIFY = "modify"
|
MODIFY = "modify"
|
||||||
|
|
||||||
PARSER = "parser"
|
|
||||||
ADVISE = "advise"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var Index = &ice.Context{Name: "mdb", Help: "数据模块",
|
var Index = &ice.Context{Name: "mdb", Help: "数据模块",
|
||||||
@ -242,5 +242,7 @@ var Index = &ice.Context{Name: "mdb", Help: "数据模块",
|
|||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
ice.Index.Register(Index, nil, IMPORT, EXPORT, SELECT, SEARCH, RENDER)
|
ice.Index.Register(Index, nil, IMPORT, EXPORT, SELECT,
|
||||||
|
PLUGIN, ENGINE, SEARCH, RENDER,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
26
base/mdb/plugin.go
Normal file
26
base/mdb/plugin.go
Normal file
@ -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)
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
package mdb
|
package mdb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
)
|
)
|
||||||
|
|
||||||
const RENDER = "render"
|
const RENDER = "render"
|
||||||
@ -19,7 +19,7 @@ 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.Richs(RENDER, nil, kit.MDB_FOREACH, func(key string, value map[string]interface{}) {
|
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)
|
}}, nil)
|
||||||
|
@ -3,6 +3,7 @@ package web
|
|||||||
import (
|
import (
|
||||||
ice "github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/aaa"
|
"github.com/shylinux/icebergs/base/aaa"
|
||||||
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
"github.com/skip2/go-qrcode"
|
"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.WriteHeader(code)
|
||||||
msg.W.Write([]byte(text))
|
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(`<input type="button" value="%s">`, arg[0])
|
||||||
|
}},
|
||||||
|
RENDER.Field: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Echo(`<fieldset><legend>%s(%s)</legend><form></form></fieldset>`, 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(`<a href="%s" target="_blank">%s</a>`, u, arg[0])
|
||||||
|
}},
|
||||||
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
m.Echo(`<input type="%s" value="%s">`, arg[0], arg[1])
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
}, nil)
|
||||||
|
}
|
||||||
|
@ -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"))
|
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) {
|
func _space_exec(msg *ice.Message, source, target []string, c *websocket.Conn, name string) {
|
||||||
|
if msg.Right(msg.Detailv()) {
|
||||||
msg = msg.Cmd()
|
msg = msg.Cmd()
|
||||||
|
}
|
||||||
msg.Set("_option")
|
msg.Set("_option")
|
||||||
_space_echo(msg, []string{}, kit.Revert(source)[1:], c, name)
|
_space_echo(msg, []string{}, kit.Revert(source)[1:], c, name)
|
||||||
msg.Cost("%v->%v %v %v", source, target, msg.Detailv(), msg.Format("append"))
|
msg.Cost("%v->%v %v %v", source, target, msg.Detailv(), msg.Format("append"))
|
||||||
|
@ -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) {
|
ice.CTX_INIT: {Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.Load()
|
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, "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, "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")))
|
m.Cmd(SPIDE, mdb.CREATE, "shy", kit.Select("https://shylinux.com:443", m.Conf(cli.RUNTIME, "conf.ctx_shy")))
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
package code
|
package code
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
"github.com/shylinux/icebergs/base/mdb"
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
|
"github.com/shylinux/icebergs/base/web"
|
||||||
kit "github.com/shylinux/toolkits"
|
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"
|
||||||
"github.com/shylinux/toolkits/util/bench/redis"
|
"github.com/shylinux/toolkits/util/bench/redis"
|
||||||
|
|
||||||
"io"
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
@ -16,19 +18,13 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
BENCH = "bench"
|
|
||||||
NCONN = "nconn"
|
|
||||||
NREQS = "nreqs"
|
|
||||||
)
|
|
||||||
|
|
||||||
func _bench_list(m *ice.Message, zone string, id string, field ...interface{}) {
|
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{}) {
|
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{})
|
val = val[kit.MDB_META].(map[string]interface{})
|
||||||
if zone = kit.Format(kit.Value(val, kit.MDB_ZONE)); id == "" {
|
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.Grows(BENCH, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
|
||||||
// 查看信息
|
// 查看信息
|
||||||
m.Push("操作", `<input type="button" value="运行">`)
|
m.Push("操作", m.Cmdx(mdb.RENDER, web.RENDER.Button, "运行"))
|
||||||
m.Push(zone, value, []string{
|
m.Push(zone, value, []string{
|
||||||
kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TYPE,
|
kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TYPE,
|
||||||
kit.MDB_NAME, NCONN, NREQS, kit.MDB_TEXT,
|
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("detail", value)
|
||||||
m.Push(kit.MDB_KEY, "操作")
|
m.Push(kit.MDB_KEY, "操作")
|
||||||
m.Push(kit.MDB_VALUE, `<input type="button" 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) {
|
func _bench_show(m *ice.Message, nconn, nreq int64, list []*http.Request) {
|
||||||
nout, e := os.OpenFile("/dev/null", os.O_WRONLY, 0660)
|
m.Log_CONF(NCONN, nconn, NREQS, nreq)
|
||||||
m.Assert(e)
|
|
||||||
|
|
||||||
var body int64
|
var body int64
|
||||||
m.Logs(NCONN, nconn, NREQS, nreq)
|
|
||||||
s, e := bench.HTTP(nconn, nreq, list, func(req *http.Request, res *http.Response) {
|
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)
|
atomic.AddInt64(&body, n)
|
||||||
})
|
})
|
||||||
m.Assert(e)
|
m.Assert(e)
|
||||||
@ -60,92 +54,26 @@ func _bench_show(m *ice.Message, nconn, nreq int64, list []*http.Request) {
|
|||||||
m.Echo("body: %d\n", body)
|
m.Echo("body: %d\n", body)
|
||||||
}
|
}
|
||||||
func _bench_redis(m *ice.Message, nconn, nreq int64, hosts []string, cmds []string) {
|
func _bench_redis(m *ice.Message, nconn, nreq int64, hosts []string, cmds []string) {
|
||||||
m.Logs("info", "hosts", hosts, "cmds", cmds, nreq, nconn)
|
m.Log_CONF(NCONN, nconn, NREQS, nreq, "cmds", cmds, "hosts", hosts)
|
||||||
s, e := redis.Redis(nconn, nreq, hosts, cmds, func(cmd string, arg []interface{}, reply interface{}) {
|
|
||||||
})
|
s, e := redis.Redis(nconn, nreq, hosts, cmds, nil)
|
||||||
m.Assert(e)
|
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)))
|
|
||||||
}
|
|
||||||
func _bench_modify(m *ice.Message, zone, id, pro, set, old string) {
|
|
||||||
m.Richs(BENCH, nil, zone, func(key string, val map[string]interface{}) {
|
|
||||||
switch pro {
|
|
||||||
case kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TIME:
|
|
||||||
m.Warn(true, "deny modify %v", pro)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
m.Grows(BENCH, kit.Keys(kit.MDB_HASH, key), kit.MDB_ID, id, func(index int, value map[string]interface{}) {
|
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.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)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func _bench_insert(m *ice.Message, zone, kind, name, text string, nconn, nreqs string, arg ...string) {
|
|
||||||
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),
|
|
||||||
))
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
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)
|
||||||
|
|
||||||
func init() {
|
|
||||||
Index.Merge(&ice.Context{
|
|
||||||
Configs: map[string]*ice.Config{
|
|
||||||
BENCH: {Name: "bench", Help: "性能压测", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE)},
|
|
||||||
},
|
|
||||||
Commands: map[string]*ice.Command{
|
|
||||||
BENCH: {Name: "bench zone=auto id=auto auto", Help: "性能压测", Action: map[string]*ice.Action{
|
|
||||||
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
_bench_create(m, arg[0])
|
|
||||||
}},
|
|
||||||
mdb.INSERT: {Name: "insert zone type name text nconn nreqs", Help: "插入", Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
_bench_insert(m, arg[0], arg[1], arg[2],
|
|
||||||
kit.Select("http://localhost:9020/code/bench?cmd="+arg[2], arg, 3),
|
|
||||||
kit.Select("3", arg, 4), kit.Select("10", arg, 5))
|
|
||||||
}},
|
|
||||||
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))
|
|
||||||
}},
|
|
||||||
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{}) {
|
|
||||||
m.Grows(BENCH, kit.Keys(kit.MDB_HASH, key), kit.MDB_ID, m.Option(kit.MDB_ID), func(index int, value map[string]interface{}) {
|
|
||||||
arg = kit.Simple(value[kit.MDB_TYPE], value[kit.MDB_NAME], value[kit.MDB_TEXT], value[kit.MDB_EXTRA])
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if len(arg) > 2 {
|
|
||||||
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://") {
|
if strings.HasPrefix(target, "redis://") {
|
||||||
hosts := []string{}
|
hosts := []string{}
|
||||||
cmds := strings.Split((m.Option(kit.MDB_NAME)), ",")
|
|
||||||
for _, v := range strings.Split(target, ",") {
|
for _, v := range strings.Split(target, ",") {
|
||||||
hosts = append(hosts, strings.TrimPrefix(v, "redis://"))
|
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)))
|
cmds := strings.Split(name, ",")
|
||||||
m.Echo("nconn: %d nreqs: %d\n", nconn, nreqs*nconn)
|
|
||||||
for _, cmd := range cmds {
|
for _, cmd := range cmds {
|
||||||
_bench_redis(m, nconn, nreqs, hosts, []string{cmd})
|
_bench_redis(m, nconn, nreqs, hosts, []string{cmd})
|
||||||
}
|
}
|
||||||
@ -169,12 +97,90 @@ func init() {
|
|||||||
list = append(list, req)
|
list = append(list, req)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_bench_show(m, kit.Int64(kit.Select(m.Option(NCONN))), kit.Int64(kit.Select(m.Option(NREQS))), list)
|
_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 k {
|
||||||
|
case kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TIME:
|
||||||
|
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, k, kit.MDB_VALUE, v, "old", old)
|
||||||
|
kit.Value(value, k, v)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
func _bench_insert(m *ice.Message, zone, kind, name, text string, nconn, nreqs string, arg ...string) {
|
||||||
|
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),
|
||||||
|
))
|
||||||
|
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) {
|
||||||
|
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{
|
||||||
|
BENCH: {Name: "bench", Help: "性能压测", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE)},
|
||||||
|
},
|
||||||
|
Commands: map[string]*ice.Command{
|
||||||
|
BENCH: {Name: "bench zone=auto id=auto auto", Help: "性能压测", Action: map[string]*ice.Action{
|
||||||
|
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
_bench_create(m, arg[0])
|
||||||
|
}},
|
||||||
|
mdb.INSERT: {Name: "insert zone type name text nconn nreqs", Help: "插入", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
_bench_insert(m, arg[0], arg[1], arg[2],
|
||||||
|
kit.Select("http://localhost:9020/code/bench?cmd="+arg[2], arg, 3),
|
||||||
|
kit.Select("3", arg, 4), kit.Select("10", arg, 5))
|
||||||
|
}},
|
||||||
|
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{}) {
|
||||||
|
m.Grows(BENCH, kit.Keys(kit.MDB_HASH, key), kit.MDB_ID, m.Option(kit.MDB_ID), func(index int, value map[string]interface{}) {
|
||||||
|
arg = kit.Simple(value[kit.MDB_TYPE], value[kit.MDB_NAME], value[kit.MDB_TEXT], value[kit.MDB_EXTRA])
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
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])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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) {
|
}, 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_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"))
|
m.Cmdy(m.Optionv("cmd"))
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
|
@ -255,4 +255,4 @@ export %s
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { web.Index.Register(Index, &web.Frame{}) }
|
func init() { web.Index.Register(Index, &web.Frame{}, BENCH, PPROF) }
|
||||||
|
@ -98,6 +98,13 @@ func _inner_show(m *ice.Message, name string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch m.Set(ice.MSG_RESULT); p {
|
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":
|
case "csv":
|
||||||
m.CSV(m.Cmdx("nfs.cat", name))
|
m.CSV(m.Cmdx("nfs.cat", name))
|
||||||
case "md":
|
case "md":
|
||||||
@ -131,7 +138,6 @@ func init() {
|
|||||||
"show", kit.Dict(
|
"show", kit.Dict(
|
||||||
"sh", []string{"bash"},
|
"sh", []string{"bash"},
|
||||||
"py", []string{"python"},
|
"py", []string{"python"},
|
||||||
"go", []string{"go", "run"},
|
|
||||||
"js", []string{"node"},
|
"js", []string{"node"},
|
||||||
),
|
),
|
||||||
)},
|
)},
|
||||||
|
@ -14,25 +14,16 @@ import (
|
|||||||
"strings"
|
"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{}) {
|
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{}) {
|
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{})
|
val = val[kit.MDB_META].(map[string]interface{})
|
||||||
if zone = kit.Format(kit.Value(val, kit.MDB_ZONE)); id == "" {
|
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.Grows(PPROF, kit.Keys(kit.MDB_HASH, key), "", "", func(index int, value map[string]interface{}) {
|
||||||
// 列表信息
|
// 列表信息
|
||||||
m.Push("操作", `<input type="button" value="运行">`)
|
m.Push("操作", m.Cmdx(mdb.RENDER, web.RENDER.Button, "运行"))
|
||||||
m.Push(zone, value, []string{
|
m.Push(zone, value, []string{
|
||||||
kit.MDB_ZONE, kit.MDB_ID,
|
kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TYPE,
|
||||||
kit.MDB_TYPE, kit.MDB_NAME, kit.MDB_TEXT,
|
kit.MDB_NAME, kit.MDB_TEXT, SECONDS, BINNARY, SERVICE,
|
||||||
SECONDS, BINNARY, SERVICE,
|
|
||||||
}, val)
|
}, val)
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
@ -40,7 +31,7 @@ func _pprof_list(m *ice.Message, zone string, id string, field ...interface{}) {
|
|||||||
// 详细信息
|
// 详细信息
|
||||||
m.Push("detail", value)
|
m.Push("detail", value)
|
||||||
m.Push(kit.MDB_KEY, "操作")
|
m.Push(kit.MDB_KEY, "操作")
|
||||||
m.Push(kit.MDB_VALUE, `<input type="button" 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)
|
m.Push("bin", bin)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
func _pprof_modify(m *ice.Message, zone, id, pro, set, old string) {
|
func _pprof_modify(m *ice.Message, zone, id, k, v, old string) {
|
||||||
pro = kit.Select(pro, m.Option(kit.MDB_KEY))
|
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{}) {
|
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:
|
case kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TIME:
|
||||||
m.Warn(true, "deny modify %v", pro)
|
m.Warn(true, mdb.ErrDenyModify, k)
|
||||||
return
|
return
|
||||||
case BINNARY, SERVICE, SECONDS:
|
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{})
|
val = val[kit.MDB_META].(map[string]interface{})
|
||||||
kit.Value(val, pro, set)
|
kit.Value(val, k, v)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Grows(PPROF, kit.Keys(kit.MDB_HASH, key), kit.MDB_ID, id, func(index int, value map[string]interface{}) {
|
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)
|
m.Log_MODIFY(kit.MDB_ZONE, zone, kit.MDB_ID, id, kit.MDB_KEY, k, kit.MDB_VALUE, v, "old", old)
|
||||||
kit.Value(value, pro, set)
|
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{}) {
|
m.Richs(PPROF, nil, zone, func(key string, val map[string]interface{}) {
|
||||||
id := m.Grow(PPROF, kit.Keys(kit.MDB_HASH, key), kit.Dict(
|
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_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, text,
|
||||||
// 添加信息
|
|
||||||
kit.MDB_EXTRA, kit.Dict(arg),
|
kit.MDB_EXTRA, kit.Dict(arg),
|
||||||
))
|
))
|
||||||
m.Log_INSERT(kit.MDB_META, PPROF, kit.MDB_ZONE, zone,
|
m.Log_INSERT(kit.MDB_META, PPROF, kit.MDB_ZONE, zone, kit.MDB_ID, id, kit.MDB_TYPE, kind, kit.MDB_NAME, name)
|
||||||
kit.MDB_ID, id, kit.MDB_TYPE, kind, kit.MDB_NAME, name)
|
|
||||||
m.Echo("%d", id)
|
m.Echo("%d", id)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
func _pprof_create(m *ice.Message, zone string, binnary, service string, seconds string, arg ...string) {
|
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,
|
m.Rich(PPROF, nil, kit.Data(kit.MDB_ZONE, zone, BINNARY, binnary, SERVICE, service, SECONDS, seconds, arg))
|
||||||
// 添加信息
|
|
||||||
BINNARY, binnary, SERVICE, service, SECONDS, seconds, arg))
|
|
||||||
m.Log_CREATE(kit.MDB_ZONE, zone)
|
m.Log_CREATE(kit.MDB_ZONE, zone)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const PPROF = "pprof"
|
||||||
|
const (
|
||||||
|
BINNARY = "binnary"
|
||||||
|
SERVICE = "service"
|
||||||
|
SECONDS = "seconds"
|
||||||
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{
|
Index.Merge(&ice.Context{
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
|
14
logs.go
14
logs.go
@ -1,11 +1,10 @@
|
|||||||
package ice
|
package ice
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
"github.com/shylinux/toolkits/logs"
|
log "github.com/shylinux/toolkits/logs"
|
||||||
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"runtime"
|
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -26,7 +25,7 @@ func (m *Message) log(level string, str string, arg ...interface{}) *Message {
|
|||||||
|
|
||||||
case LOG_CMDS, LOG_START, LOG_SERVE:
|
case LOG_CMDS, LOG_START, LOG_SERVE:
|
||||||
prefix, suffix = "\033[32m", "\033[0m"
|
prefix, suffix = "\033[32m", "\033[0m"
|
||||||
case LOG_AUTH, LOG_COST:
|
case LOG_AUTH, LOG_CONF, LOG_COST:
|
||||||
prefix, suffix = "\033[33m", "\033[0m"
|
prefix, suffix = "\033[33m", "\033[0m"
|
||||||
case LOG_WARN, LOG_ERROR, LOG_CLOSE:
|
case LOG_WARN, LOG_ERROR, LOG_CLOSE:
|
||||||
prefix, suffix = "\033[31m", "\033[0m"
|
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 {
|
func (m *Message) Info(str string, arg ...interface{}) *Message {
|
||||||
return m.log(LOG_INFO, str, arg...)
|
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 {
|
if err {
|
||||||
m.Echo("warn: ").Echo(str, arg...)
|
m.meta[MSG_RESULT] = append([]string{"warn: "}, kit.Simple(arg...)...)
|
||||||
_, file, line, _ := runtime.Caller(1)
|
return m.log(LOG_WARN, fmt.Sprint(arg...)) != nil
|
||||||
return m.log(LOG_WARN, "%s:%d %s", file, line, fmt.Sprintf(str, arg...)) != nil
|
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user