mirror of
https://shylinux.com/x/icebergs
synced 2025-04-28 10:12:02 +08:00
opt pprof
This commit is contained in:
parent
beb3482c66
commit
d4bb2126b0
@ -71,6 +71,9 @@ const (
|
|||||||
CMD = "cmd"
|
CMD = "cmd"
|
||||||
ARG = "arg"
|
ARG = "arg"
|
||||||
DIR = "dir"
|
DIR = "dir"
|
||||||
|
RUN = "run"
|
||||||
|
RES = "res"
|
||||||
|
ERR = "err"
|
||||||
)
|
)
|
||||||
const (
|
const (
|
||||||
RESTART = "restart"
|
RESTART = "restart"
|
||||||
|
@ -30,7 +30,7 @@ func init() {
|
|||||||
if strings.Contains(arg[1], ";") {
|
if strings.Contains(arg[1], ";") {
|
||||||
arg = strings.Split(arg[1], ";")
|
arg = strings.Split(arg[1], ";")
|
||||||
}
|
}
|
||||||
m.Option(FIELDS, "pod,ctx,cmd,time,size,type,name,text")
|
m.Option(FIELDS, kit.Select("pod,ctx,cmd,time,size,type,name,text", m.Option(FIELDS)))
|
||||||
for _, k := range strings.Split(arg[0], ",") {
|
for _, k := range strings.Split(arg[0], ",") {
|
||||||
m.Richs(SEARCH, nil, k, func(key string, value map[string]interface{}) {
|
m.Richs(SEARCH, nil, k, func(key string, value map[string]interface{}) {
|
||||||
m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), SEARCH, arg[0], arg[1], kit.Select("", arg, 2))
|
m.Cmdy(kit.Keys(value[kit.MDB_TEXT], value[kit.MDB_NAME]), SEARCH, arg[0], arg[1], kit.Select("", arg, 2))
|
||||||
|
@ -30,8 +30,10 @@ func _share_local(m *ice.Message, arg ...string) {
|
|||||||
switch ls := strings.Split(p, "/"); ls[0] {
|
switch ls := strings.Split(p, "/"); ls[0] {
|
||||||
case "etc", "var":
|
case "etc", "var":
|
||||||
// 私有文件
|
// 私有文件
|
||||||
m.Render(STATUS, http.StatusUnauthorized, "not auth")
|
if m.Option(ice.MSG_USERROLE) == aaa.VOID {
|
||||||
return
|
m.Render(STATUS, http.StatusUnauthorized, "not auth")
|
||||||
|
return
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
if m.Warn(!m.Right(ls), ice.ErrNotAuth, m.Option(ice.MSG_USERROLE), " of ", p) {
|
if m.Warn(!m.Right(ls), ice.ErrNotAuth, m.Option(ice.MSG_USERROLE), " of ", p) {
|
||||||
m.Render(STATUS, http.StatusUnauthorized, "not auth")
|
m.Render(STATUS, http.StatusUnauthorized, "not auth")
|
||||||
|
@ -2,6 +2,7 @@ package code
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
ice "github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
|
"github.com/shylinux/icebergs/base/cli"
|
||||||
"github.com/shylinux/icebergs/base/mdb"
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
"github.com/shylinux/toolkits/util/bench"
|
"github.com/shylinux/toolkits/util/bench"
|
||||||
@ -14,43 +15,7 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
)
|
)
|
||||||
|
|
||||||
func _bench_list(m *ice.Message, zone string, id string, field ...interface{}) {
|
func _bench_http(m *ice.Message, kind, name, target string, arg ...string) {
|
||||||
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.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,
|
|
||||||
}, val)
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
|
||||||
m.Grows(BENCH, kit.Keys(kit.MDB_HASH, key), kit.MDB_ID, id, func(index int, value map[string]interface{}) {
|
|
||||||
// 查看信息
|
|
||||||
m.Push("detail", value)
|
|
||||||
m.Push(kit.MDB_KEY, "操作")
|
|
||||||
// m.Push(kit.MDB_VALUE, m.Cmdx(mdb.RENDER, web.RENDER.Button, "运行"))
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
func _bench_show(m *ice.Message, nconn, nreq int64, list []*http.Request) {
|
|
||||||
var body int64
|
|
||||||
s, e := bench.HTTP(nconn, nreq, list, func(req *http.Request, res *http.Response) {
|
|
||||||
n, _ := io.Copy(ioutil.Discard, res.Body)
|
|
||||||
atomic.AddInt64(&body, n)
|
|
||||||
})
|
|
||||||
m.Assert(e)
|
|
||||||
|
|
||||||
m.Echo(s.Show())
|
|
||||||
m.Echo("body: %d\n", body)
|
|
||||||
}
|
|
||||||
func _bench_engine(m *ice.Message, kind, name, target string, arg ...string) {
|
|
||||||
for i := 0; i < len(arg); i += 2 {
|
|
||||||
m.Option(arg[i], arg[i+1])
|
|
||||||
}
|
|
||||||
nconn := kit.Int64(kit.Select("10", m.Option(NCONN)))
|
nconn := kit.Int64(kit.Select("10", m.Option(NCONN)))
|
||||||
nreqs := kit.Int64(kit.Select("1000", m.Option(NREQS)))
|
nreqs := kit.Int64(kit.Select("1000", m.Option(NREQS)))
|
||||||
m.Echo("nconn: %d nreqs: %d\n", nconn, nreqs*nconn)
|
m.Echo("nconn: %d nreqs: %d\n", nconn, nreqs*nconn)
|
||||||
@ -72,90 +37,60 @@ func _bench_engine(m *ice.Message, kind, name, target string, arg ...string) {
|
|||||||
list = append(list, req)
|
list = append(list, req)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_bench_show(m, nconn, nreqs, list)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _bench_modify(m *ice.Message, zone, id, k, v, old string) {
|
var body int64
|
||||||
m.Richs(BENCH, nil, zone, func(key string, val map[string]interface{}) {
|
s, e := bench.HTTP(nconn, nreqs, list, func(req *http.Request, res *http.Response) {
|
||||||
switch k {
|
n, _ := io.Copy(ioutil.Discard, res.Body)
|
||||||
case kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TIME:
|
atomic.AddInt64(&body, n)
|
||||||
// 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)
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
m.Assert(e)
|
||||||
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{}) {
|
m.Echo(s.Show())
|
||||||
id := m.Grow(BENCH, kit.Keys(kit.MDB_HASH, key), kit.Dict(
|
m.Echo("body: %d\n", body)
|
||||||
kit.MDB_TYPE, kind, kit.MDB_NAME, name, kit.MDB_TEXT, text,
|
m.Option(ice.MSG_PROCESS, "_inner")
|
||||||
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 (
|
const (
|
||||||
NCONN = "nconn"
|
NCONN = "nconn"
|
||||||
NREQS = "nreqs"
|
NREQS = "nreqs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const BENCH = "bench"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{
|
Index.Merge(&ice.Context{
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
BENCH: {Name: "bench", Help: "性能压测", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE)},
|
BENCH: {Name: BENCH, Help: "性能压测", Value: kit.Data(kit.MDB_SHORT, kit.MDB_ZONE)},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
BENCH: {Name: "bench zone=auto id=auto auto", Help: "性能压测", Action: map[string]*ice.Action{
|
BENCH: {Name: "bench zone=auto id=auto auto insert", Help: "性能压测", Action: map[string]*ice.Action{
|
||||||
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create zone", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_bench_create(m, arg[0])
|
m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, arg)
|
||||||
}},
|
}},
|
||||||
mdb.INSERT: {Name: "insert zone type name text nconn nreqs", Help: "插入", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INSERT: {Name: "insert zone type=http,redis name text nconn=3 nreqs=10", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_bench_insert(m, arg[0], arg[1], arg[2],
|
m.Cmdy(mdb.INSERT, BENCH, "", mdb.HASH, kit.MDB_ZONE, arg[1])
|
||||||
kit.Select("http://localhost:9020/code/bench?cmd="+arg[2], arg, 3),
|
m.Cmdy(mdb.INSERT, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, arg[2:])
|
||||||
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) {
|
mdb.MODIFY: {Name: "modify", 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))
|
m.Cmdy(mdb.MODIFY, BENCH, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
|
||||||
|
}},
|
||||||
|
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmdy(mdb.DELETE, BENCH, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE))
|
||||||
}},
|
}},
|
||||||
|
|
||||||
mdb.ENGINE: {Name: "engine type name text arg...", Help: "引擎", Hand: func(m *ice.Message, arg ...string) {
|
cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_bench_engine(m, arg[0], arg[1], arg[2], arg[3:]...)
|
switch m.Option(kit.MDB_TYPE) {
|
||||||
}},
|
case "http":
|
||||||
|
_bench_http(m, m.Option(kit.MDB_TYPE), m.Option(kit.MDB_NAME), m.Option(kit.MDB_TEXT))
|
||||||
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))
|
m.Option(mdb.FIELDS, kit.Select("time,count,zone", kit.Select("time,id,type,name,text,nconn,nreqs", mdb.DETAIL, len(arg) > 1), len(arg) > 0))
|
||||||
|
m.Cmdy(mdb.SELECT, BENCH, "", mdb.ZONE, arg)
|
||||||
|
m.PushAction(kit.Select(mdb.REMOVE, cli.RUN, len(arg) > 0))
|
||||||
}},
|
}},
|
||||||
"/" + 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"))
|
||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
|
@ -6,10 +6,8 @@ chapter "code"
|
|||||||
# field "发布" web.code.publish
|
# field "发布" web.code.publish
|
||||||
# field "升级" web.code.upgrade
|
# field "升级" web.code.upgrade
|
||||||
|
|
||||||
field "查看" web.code.inner
|
|
||||||
return
|
|
||||||
|
|
||||||
field "编辑" web.code.vimer
|
field "编辑" web.code.vimer
|
||||||
|
field "查看" web.code.inner
|
||||||
field "收藏" web.code.favor
|
field "收藏" web.code.favor
|
||||||
field "测试" web.code.bench
|
field "测试" web.code.bench
|
||||||
field "优化" web.code.pprof
|
field "优化" web.code.pprof
|
||||||
|
@ -18,11 +18,12 @@ func init() {
|
|||||||
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TOPIC)},
|
FAVOR: {Name: FAVOR, Help: "收藏夹", Value: kit.Data(kit.MDB_SHORT, kit.MDB_TOPIC)},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
FAVOR: {Name: "favor topic id auto create export import", Help: "收藏夹", Action: map[string]*ice.Action{
|
FAVOR: {Name: "favor topic id auto insert export import", Help: "收藏夹", Action: map[string]*ice.Action{
|
||||||
mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create topic", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(mdb.INSERT, FAVOR, "", mdb.HASH, arg)
|
m.Cmdy(mdb.INSERT, FAVOR, "", mdb.HASH, arg)
|
||||||
}},
|
}},
|
||||||
mdb.INSERT: {Name: "insert topic=数据结构 type=go name=hi text=hello path file line", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INSERT: {Name: "insert topic=数据结构 type=go name=hi text=hello path file line", Help: "添加", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmdy(mdb.INSERT, FAVOR, "", mdb.HASH, kit.MDB_TOPIC, arg[1])
|
||||||
m.Cmdy(mdb.INSERT, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:])
|
m.Cmdy(mdb.INSERT, FAVOR, _sub_key(m, m.Option(kit.MDB_TOPIC)), mdb.LIST, arg[2:])
|
||||||
}},
|
}},
|
||||||
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||||
@ -46,7 +47,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
|
|
||||||
INNER: {Name: "inner", Help: "inner", Hand: func(m *ice.Message, arg ...string) {
|
INNER: {Name: "inner", Help: "源代码", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if len(arg) > 0 && arg[0] == mdb.RENDER {
|
if len(arg) > 0 && arg[0] == mdb.RENDER {
|
||||||
m.Cmdy(INNER, arg[1:])
|
m.Cmdy(INNER, arg[1:])
|
||||||
return
|
return
|
||||||
@ -56,7 +57,7 @@ func init() {
|
|||||||
m.Push(kit.SSH_ARG, kit.Format([]string{m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE), m.Option(kit.MDB_LINE)}))
|
m.Push(kit.SSH_ARG, kit.Format([]string{m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE), m.Option(kit.MDB_LINE)}))
|
||||||
}},
|
}},
|
||||||
}, 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.Option(mdb.FIELDS, kit.Select("time,count,topic", kit.Select("time,id,type,name,text,path,file,line", mdb.DETAIL, len(arg) > 1)), len(arg) > 0)
|
m.Option(mdb.FIELDS, kit.Select("time,count,topic", kit.Select("time,id,type,name,text,path,file,line", mdb.DETAIL, len(arg) > 1), len(arg) > 0))
|
||||||
m.Cmdy(mdb.SELECT, FAVOR, "", mdb.ZONE, arg)
|
m.Cmdy(mdb.SELECT, FAVOR, "", mdb.ZONE, arg)
|
||||||
m.PushAction(kit.Select(mdb.REMOVE, INNER, len(arg) > 0))
|
m.PushAction(kit.Select(mdb.REMOVE, INNER, len(arg) > 0))
|
||||||
}},
|
}},
|
||||||
|
115
core/code/go.go
115
core/code/go.go
@ -14,22 +14,32 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func _go_find(m *ice.Message, key string) {
|
func _go_find(m *ice.Message, key string) {
|
||||||
|
fields := kit.Split(m.Option(mdb.FIELDS))
|
||||||
for _, p := range strings.Split(m.Cmdx(cli.SYSTEM, "find", ".", "-name", key), "\n") {
|
for _, p := range strings.Split(m.Cmdx(cli.SYSTEM, "find", ".", "-name", key), "\n") {
|
||||||
if p == "" {
|
if p == "" {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
m.Push("file", strings.TrimPrefix(p, "./"))
|
for _, k := range fields {
|
||||||
m.Push("line", 1)
|
switch k {
|
||||||
m.Push("text", "")
|
case kit.MDB_FILE:
|
||||||
|
m.Push(k, strings.TrimPrefix(p, "./"))
|
||||||
|
case kit.MDB_LINE:
|
||||||
|
m.Push(k, 1)
|
||||||
|
case kit.MDB_TEXT:
|
||||||
|
m.Push(k, "")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
func _go_tags(m *ice.Message, key string) {
|
func _go_tags(m *ice.Message, key string) {
|
||||||
ls := strings.Split(key, ".")
|
|
||||||
key = ls[len(ls)-1]
|
|
||||||
|
|
||||||
if _, e := os.Stat(path.Join(m.Option(cli.CMD_DIR), ".tags")); e != nil {
|
if _, e := os.Stat(path.Join(m.Option(cli.CMD_DIR), ".tags")); e != nil {
|
||||||
m.Cmd(cli.SYSTEM, "gotags", "-R", "-f", ".tags", "./")
|
m.Cmd(cli.SYSTEM, "gotags", "-R", "-f", ".tags", "./")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fields := kit.Split(m.Option(mdb.FIELDS))
|
||||||
|
ls := strings.Split(key, ".")
|
||||||
|
key = ls[len(ls)-1]
|
||||||
|
|
||||||
for _, l := range strings.Split(m.Cmdx(cli.SYSTEM, "grep", "^"+key+"\\>", ".tags"), "\n") {
|
for _, l := range strings.Split(m.Cmdx(cli.SYSTEM, "grep", "^"+key+"\\>", ".tags"), "\n") {
|
||||||
ls := strings.SplitN(l, "\t", 2)
|
ls := strings.SplitN(l, "\t", 2)
|
||||||
if len(ls) < 2 {
|
if len(ls) < 2 {
|
||||||
@ -42,22 +52,35 @@ func _go_tags(m *ice.Message, key string) {
|
|||||||
text := strings.TrimSuffix(strings.TrimPrefix(ls[0], "/^"), "$/")
|
text := strings.TrimSuffix(strings.TrimPrefix(ls[0], "/^"), "$/")
|
||||||
line := kit.Int(text)
|
line := kit.Int(text)
|
||||||
|
|
||||||
p := path.Join(m.Option(cli.CMD_DIR), file)
|
f, e := os.Open(path.Join(m.Option(cli.CMD_DIR), file))
|
||||||
f, e := os.Open(p)
|
|
||||||
m.Assert(e)
|
m.Assert(e)
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
bio := bufio.NewScanner(f)
|
bio := bufio.NewScanner(f)
|
||||||
for i := 1; bio.Scan(); i++ {
|
for i := 1; bio.Scan(); i++ {
|
||||||
if i == line || bio.Text() == text {
|
if i == line || bio.Text() == text {
|
||||||
m.Push("file", strings.TrimPrefix(file, "./"))
|
for _, k := range fields {
|
||||||
m.Push("line", i)
|
switch k {
|
||||||
m.Push("text", bio.Text())
|
case kit.MDB_FILE:
|
||||||
|
m.Push(k, strings.TrimPrefix(file, "./"))
|
||||||
|
case kit.MDB_LINE:
|
||||||
|
m.Push(k, i)
|
||||||
|
case kit.MDB_TEXT:
|
||||||
|
m.Push(k, bio.Text())
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.Sort("line", "int")
|
|
||||||
}
|
}
|
||||||
func _go_grep(m *ice.Message, key string) {
|
func _go_grep(m *ice.Message, key string) {
|
||||||
m.Split(m.Cmd(cli.SYSTEM, "grep", "--exclude-dir=.git", "--exclude=.[a-z]*", "-rn", key, ".").Append(cli.CMD_OUT), "file:line:text", ":", "\n")
|
fields := kit.Split(m.Option(mdb.FIELDS))
|
||||||
|
|
||||||
|
msg := m.Spawn()
|
||||||
|
msg.Split(m.Cmd(cli.SYSTEM, "grep", "--exclude-dir=.git", "--exclude=.[a-z]*", "-rn", key, ".").Append(cli.CMD_OUT), "file:line:text", ":", "\n")
|
||||||
|
msg.Table(func(index int, value map[string]string, head []string) {
|
||||||
|
m.Push("", value, fields)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
func _go_help(m *ice.Message, key string) {
|
func _go_help(m *ice.Message, key string) {
|
||||||
p := m.Cmd(cli.SYSTEM, "go", "doc", key).Append(cli.CMD_OUT)
|
p := m.Cmd(cli.SYSTEM, "go", "doc", key).Append(cli.CMD_OUT)
|
||||||
@ -70,13 +93,20 @@ func _go_help(m *ice.Message, key string) {
|
|||||||
}
|
}
|
||||||
res := strings.Join(ls, "\n")
|
res := strings.Join(ls, "\n")
|
||||||
|
|
||||||
m.Push("file", key+".godoc")
|
for _, k := range kit.Split(m.Option(mdb.FIELDS)) {
|
||||||
m.Push("line", 1)
|
switch k {
|
||||||
m.Push("text", string(res))
|
case kit.MDB_FILE:
|
||||||
|
m.Push(k, key+".godoc")
|
||||||
|
case kit.MDB_LINE:
|
||||||
|
m.Push(k, 1)
|
||||||
|
case kit.MDB_TEXT:
|
||||||
|
m.Push(k, string(res))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const GO = "go"
|
const GO = "go"
|
||||||
const GODOC = "godoc"
|
const DOC = "godoc"
|
||||||
const MOD = "mod"
|
const MOD = "mod"
|
||||||
const SUM = "sum"
|
const SUM = "sum"
|
||||||
|
|
||||||
@ -84,20 +114,20 @@ func init() {
|
|||||||
Index.Register(&ice.Context{Name: GO, Help: "go",
|
Index.Register(&ice.Context{Name: GO, Help: "go",
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
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.Cmd(mdb.PLUGIN, mdb.CREATE, GO, GO, c.Cap(ice.CTX_FOLLOW))
|
m.Cmd(mdb.PLUGIN, mdb.CREATE, GO, m.Prefix(GO))
|
||||||
m.Cmd(mdb.RENDER, mdb.CREATE, GO, GO, c.Cap(ice.CTX_FOLLOW))
|
m.Cmd(mdb.RENDER, mdb.CREATE, GO, m.Prefix(GO))
|
||||||
m.Cmd(mdb.SEARCH, mdb.CREATE, GO, GO, c.Cap(ice.CTX_FOLLOW))
|
m.Cmd(mdb.ENGINE, mdb.CREATE, GO, m.Prefix(GO))
|
||||||
m.Cmd(mdb.ENGINE, mdb.CREATE, GO, GO, c.Cap(ice.CTX_FOLLOW))
|
m.Cmd(mdb.SEARCH, mdb.CREATE, GO, m.Prefix(GO))
|
||||||
|
|
||||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, GODOC, GO, c.Cap(ice.CTX_FOLLOW))
|
m.Cmd(mdb.PLUGIN, mdb.CREATE, DOC, m.Prefix(DOC))
|
||||||
m.Cmd(mdb.RENDER, mdb.CREATE, GODOC, GODOC, c.Cap(ice.CTX_FOLLOW))
|
m.Cmd(mdb.RENDER, mdb.CREATE, DOC, m.Prefix(DOC))
|
||||||
m.Cmd(mdb.SEARCH, mdb.CREATE, GODOC, GO, c.Cap(ice.CTX_FOLLOW))
|
m.Cmd(mdb.SEARCH, mdb.CREATE, DOC, m.Prefix(GO))
|
||||||
|
|
||||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, MOD, MOD, c.Cap(ice.CTX_FOLLOW))
|
m.Cmd(mdb.PLUGIN, mdb.CREATE, MOD, m.Prefix(MOD))
|
||||||
m.Cmd(mdb.RENDER, mdb.CREATE, MOD, MOD, c.Cap(ice.CTX_FOLLOW))
|
m.Cmd(mdb.RENDER, mdb.CREATE, MOD, m.Prefix(MOD))
|
||||||
|
|
||||||
m.Cmd(mdb.PLUGIN, mdb.CREATE, SUM, SUM, c.Cap(ice.CTX_FOLLOW))
|
m.Cmd(mdb.PLUGIN, mdb.CREATE, SUM, m.Prefix(SUM))
|
||||||
m.Cmd(mdb.RENDER, mdb.CREATE, SUM, SUM, c.Cap(ice.CTX_FOLLOW))
|
m.Cmd(mdb.RENDER, mdb.CREATE, SUM, m.Prefix(SUM))
|
||||||
|
|
||||||
}},
|
}},
|
||||||
SUM: {Name: SUM, Help: "sum", Action: map[string]*ice.Action{
|
SUM: {Name: SUM, Help: "sum", Action: map[string]*ice.Action{
|
||||||
@ -116,7 +146,10 @@ func init() {
|
|||||||
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
|
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
|
||||||
}},
|
}},
|
||||||
}},
|
}},
|
||||||
GODOC: {Name: GODOC, Help: "godoc", Action: map[string]*ice.Action{
|
DOC: {Name: DOC, Help: "doc", Action: map[string]*ice.Action{
|
||||||
|
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Echo(m.Conf(GO, "meta.plug"))
|
||||||
|
}},
|
||||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Option(cli.CMD_DIR, arg[2])
|
m.Option(cli.CMD_DIR, arg[2])
|
||||||
m.Echo(m.Cmdx(cli.SYSTEM, GO, "doc", strings.TrimSuffix(arg[1], "."+arg[0])))
|
m.Echo(m.Cmdx(cli.SYSTEM, GO, "doc", strings.TrimSuffix(arg[1], "."+arg[0])))
|
||||||
@ -126,16 +159,6 @@ func init() {
|
|||||||
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.PLUGIN: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Echo(m.Conf(GO, "meta.plug"))
|
m.Echo(m.Conf(GO, "meta.plug"))
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
if arg[0] == kit.MDB_FOREACH {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
m.Option(cli.CMD_DIR, kit.Select("src", arg, 2))
|
|
||||||
_go_find(m, kit.Select("main", arg, 1))
|
|
||||||
_go_tags(m, kit.Select("main", arg, 1))
|
|
||||||
_go_help(m, kit.Select("main", arg, 1))
|
|
||||||
_go_grep(m, kit.Select("main", arg, 1))
|
|
||||||
}},
|
|
||||||
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
mdb.RENDER: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
|
m.Cmdy(nfs.CAT, path.Join(arg[2], arg[1]))
|
||||||
}},
|
}},
|
||||||
@ -148,7 +171,17 @@ func init() {
|
|||||||
}
|
}
|
||||||
m.Set(ice.MSG_APPEND)
|
m.Set(ice.MSG_APPEND)
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {}},
|
mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
if arg[0] == kit.MDB_FOREACH {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
m.Option(cli.CMD_DIR, kit.Select("src", arg, 2))
|
||||||
|
_go_find(m, kit.Select("main", arg, 1))
|
||||||
|
_go_tags(m, kit.Select("main", arg, 1))
|
||||||
|
_go_help(m, kit.Select("main", arg, 1))
|
||||||
|
_go_grep(m, kit.Select("main", arg, 1))
|
||||||
|
}},
|
||||||
|
}},
|
||||||
},
|
},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
GO: {Name: GO, Help: "go", Value: kit.Data(
|
GO: {Name: GO, Help: "go", Value: kit.Data(
|
||||||
@ -165,7 +198,7 @@ func init() {
|
|||||||
),
|
),
|
||||||
"plug", kit.Dict(
|
"plug", kit.Dict(
|
||||||
"split", kit.Dict(
|
"split", kit.Dict(
|
||||||
"space", " \t",
|
"space", "\t ",
|
||||||
"operator", "{[(&.,:;!|<>)]}",
|
"operator", "{[(&.,:;!|<>)]}",
|
||||||
),
|
),
|
||||||
"prefix", kit.Dict(
|
"prefix", kit.Dict(
|
||||||
|
@ -53,7 +53,7 @@ const INNER = "inner"
|
|||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{
|
Index.Merge(&ice.Context{
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
INNER: {Name: "inner path=src/ file=main.go line=1 auto project search", Help: "阅读器", Meta: kit.Dict(
|
INNER: {Name: "inner path=src/ file=main.go line=1 auto project search", Help: "源代码", Meta: kit.Dict(
|
||||||
"display", "/plugin/local/code/inner.js", "style", "editor",
|
"display", "/plugin/local/code/inner.js", "style", "editor",
|
||||||
"trans", kit.Dict("project", "项目"),
|
"trans", kit.Dict("project", "项目"),
|
||||||
), Action: map[string]*ice.Action{
|
), Action: map[string]*ice.Action{
|
||||||
@ -71,18 +71,13 @@ func init() {
|
|||||||
_inner_show(m, arg[0], arg[1], arg[2], arg[3:]...)
|
_inner_show(m, arg[0], arg[1], arg[2], arg[3:]...)
|
||||||
}},
|
}},
|
||||||
mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
mdb.SEARCH: {Name: "search", Help: "搜索", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Option(mdb.FIELDS, "file,line,text")
|
||||||
m.Cmdy(mdb.SEARCH, arg)
|
m.Cmdy(mdb.SEARCH, arg)
|
||||||
}},
|
}},
|
||||||
|
|
||||||
mdb.INPUTS: {Name: "inputs", Help: "补全", Hand: func(m *ice.Message, arg ...string) {
|
FAVOR: {Name: "favor insert", Help: "收藏"},
|
||||||
m.Cmdy(FAVOR, mdb.INPUTS, arg)
|
mdb.INPUTS: {Name: "favor inputs", Help: "补全"},
|
||||||
}},
|
nfs.DIR: {Name: "dir", Help: "目录"},
|
||||||
FAVOR: {Name: "favor", Help: "收藏", Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
m.Cmdy(FAVOR, mdb.INSERT, arg)
|
|
||||||
}},
|
|
||||||
nfs.DIR: {Name: "dir", Help: "目录", Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
m.Cmdy(nfs.DIR, arg)
|
|
||||||
}},
|
|
||||||
}, 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) < 2 {
|
if len(arg) < 2 {
|
||||||
m.Cmdy(nfs.DIR, kit.Select("./", arg, 0))
|
m.Cmdy(nfs.DIR, kit.Select("./", arg, 0))
|
||||||
@ -92,7 +87,7 @@ func init() {
|
|||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
INNER: {Name: "inner", Help: "阅读器", Value: kit.Data(
|
INNER: {Name: "inner", Help: "源代码", Value: kit.Data(
|
||||||
"source", kit.Dict(
|
"source", kit.Dict(
|
||||||
"license", "true", "makefile", "true",
|
"license", "true", "makefile", "true",
|
||||||
"shy", "true", "py", "true",
|
"shy", "true", "py", "true",
|
||||||
@ -102,7 +97,6 @@ func init() {
|
|||||||
"log", "true", "err", "true",
|
"log", "true", "err", "true",
|
||||||
|
|
||||||
"md", "true", "conf", "true", "toml", "true",
|
"md", "true", "conf", "true", "toml", "true",
|
||||||
"ts", "true", "tsx", "true", "vue", "true", "sass", "true",
|
|
||||||
),
|
),
|
||||||
"plug", kit.Dict(
|
"plug", kit.Dict(
|
||||||
"makefile", kit.Dict(
|
"makefile", kit.Dict(
|
||||||
|
@ -2,7 +2,11 @@ package code
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
ice "github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
|
"github.com/shylinux/icebergs/base/aaa"
|
||||||
|
"github.com/shylinux/icebergs/base/cli"
|
||||||
"github.com/shylinux/icebergs/base/mdb"
|
"github.com/shylinux/icebergs/base/mdb"
|
||||||
|
"github.com/shylinux/icebergs/base/tcp"
|
||||||
|
"github.com/shylinux/icebergs/base/web"
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
|
|
||||||
"net/http"
|
"net/http"
|
||||||
@ -10,72 +14,14 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
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.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,
|
|
||||||
}, val)
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
m.Grows(PPROF, kit.Keys(kit.MDB_HASH, key), kit.MDB_ID, id, func(index int, value map[string]interface{}) {
|
|
||||||
// 详细信息
|
|
||||||
m.Push("detail", value)
|
|
||||||
m.Push(kit.MDB_KEY, "操作")
|
|
||||||
// m.Push(kit.MDB_VALUE, m.Cmdx(mdb.RENDER, web.RENDER.Button, "运行"))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
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 k {
|
|
||||||
case kit.MDB_ZONE, kit.MDB_ID, kit.MDB_TIME:
|
|
||||||
// m.Warn(true, mdb.ErrDenyModify, k)
|
|
||||||
return
|
|
||||||
case BINNARY, SERVICE, SECONDS:
|
|
||||||
// 修改信息
|
|
||||||
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, 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, k, kit.MDB_VALUE, v, "old", old)
|
|
||||||
kit.Value(value, k, v)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
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.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.Log_CREATE(kit.MDB_ZONE, zone)
|
|
||||||
}
|
|
||||||
|
|
||||||
const PPROF = "pprof"
|
|
||||||
const (
|
const (
|
||||||
BINNARY = "binnary"
|
BINNARY = "binnary"
|
||||||
SERVICE = "service"
|
SERVICE = "service"
|
||||||
SECONDS = "seconds"
|
SECONDS = "seconds"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const PPROF = "pprof"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{
|
Index.Merge(&ice.Context{
|
||||||
Configs: map[string]*ice.Config{
|
Configs: map[string]*ice.Config{
|
||||||
@ -84,29 +30,55 @@ func init() {
|
|||||||
)},
|
)},
|
||||||
},
|
},
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
PPROF: {Name: "pprof zone=auto id=auto auto", Help: "性能分析", Action: map[string]*ice.Action{
|
PPROF: {Name: "pprof zone=auto id=auto auto create", Help: "性能分析", Action: map[string]*ice.Action{
|
||||||
mdb.CREATE: {Name: "create zone [binnary [service [seconds]]]", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
mdb.CREATE: {Name: "create zone binnary service seconds", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_pprof_create(m, arg[0], kit.Select("bin/ice.bin", arg, 1),
|
m.Cmdy(mdb.INSERT, PPROF, "", mdb.HASH, arg)
|
||||||
kit.Select("http://localhost:9020/code/pprof/profile", arg, 2), kit.Select("3", arg, 3))
|
|
||||||
}},
|
}},
|
||||||
mdb.INSERT: {Name: "insert zone type name [text]", Help: "插入", Hand: func(m *ice.Message, arg ...string) {
|
mdb.INSERT: {Name: "insert zone type name text", Help: "插入", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if len(arg) == 2 {
|
m.Cmdy(mdb.INSERT, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, arg[2:])
|
||||||
arg = append(arg, "")
|
}},
|
||||||
|
mdb.MODIFY: {Name: "modify", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmdy(mdb.MODIFY, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_ID, m.Option(kit.MDB_ID), arg)
|
||||||
|
}},
|
||||||
|
mdb.REMOVE: {Name: "remove", Help: "删除", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
m.Cmdy(mdb.DELETE, PPROF, "", mdb.HASH, kit.MDB_ZONE, m.Option(kit.MDB_ZONE))
|
||||||
|
}},
|
||||||
|
|
||||||
|
cli.RUN: {Name: "run", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
|
||||||
|
msg := m.Cmd(web.SPIDE, web.SPIDE_DEV, web.SPIDE_CACHE, web.SPIDE_GET, m.Option(SERVICE), SECONDS, m.Option(SECONDS))
|
||||||
|
|
||||||
|
cmd := kit.Simple(m.Confv(PPROF, "meta.pprof"), "-text", m.Option(BINNARY), msg.Append(kit.MDB_FILE))
|
||||||
|
res := strings.Split(m.Cmdx(cli.SYSTEM, cmd), "\n")
|
||||||
|
if len(res) > 20 {
|
||||||
|
res = res[:20]
|
||||||
}
|
}
|
||||||
if len(arg) == 3 {
|
|
||||||
arg = append(arg, "")
|
m.Cmd(mdb.INSERT, PPROF, _sub_key(m, m.Option(kit.MDB_ZONE)), mdb.LIST, kit.MDB_TEXT, strings.Join(res, "\n"), kit.MDB_FILE, msg.Append(kit.MDB_FILE))
|
||||||
}
|
m.Echo(strings.Join(res, "\n"))
|
||||||
_pprof_insert(m, arg[0], arg[1], arg[2], kit.Select("http://localhost:9020/code/bench?cmd="+arg[2], arg, 3), arg[4:]...)
|
m.Option(ice.MSG_PROCESS, "_inner")
|
||||||
}},
|
}},
|
||||||
mdb.MODIFY: {Name: "modify key value old", Help: "编辑", Hand: func(m *ice.Message, arg ...string) {
|
web.SERVE: {Name: "serve", Help: "展示", Hand: func(m *ice.Message, arg ...string) {
|
||||||
_pprof_modify(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID), arg[0], arg[1], kit.Select("", arg, 2))
|
m.Option(ice.MSG_PROCESS, "_inner")
|
||||||
}},
|
u := kit.ParseURL(m.Option(ice.MSG_USERWEB))
|
||||||
kit.MDB_SHOW: {Name: "show type name text arg...", Help: "运行", Hand: func(m *ice.Message, arg ...string) {
|
p := u.Hostname() + ":" + m.Cmdx(tcp.PORT, aaa.Right)
|
||||||
// _pprof_show(m, m.Option(kit.MDB_ZONE), m.Option(kit.MDB_ID))
|
|
||||||
|
m.Cmd(cli.DAEMON, m.Confv(PPROF, "meta.pprof"), "-http="+p, m.Option(BINNARY), m.Option(kit.MDB_FILE))
|
||||||
|
m.Echo("http://%s/ui/top", p)
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
_pprof_list(m, kit.Select(kit.MDB_FOREACH, arg, 0), kit.Select("", arg, 1))
|
m.Option(mdb.FIELDS, kit.Select("time,count,zone,binnary,service,seconds", kit.Select("time,id,text,binnary,file", mdb.DETAIL, len(arg) > 1), len(arg) > 0))
|
||||||
|
m.Cmdy(mdb.SELECT, PPROF, "", mdb.ZONE, arg)
|
||||||
|
if len(arg) == 0 {
|
||||||
|
m.PushAction(cli.RUN, mdb.REMOVE)
|
||||||
|
|
||||||
|
} else {
|
||||||
|
m.Table(func(index int, value map[string]string, head []string) {
|
||||||
|
m.PushDownload("pprof.pd.gz", value[kit.MDB_FILE])
|
||||||
|
m.PushButton(web.SERVE)
|
||||||
|
})
|
||||||
|
}
|
||||||
}},
|
}},
|
||||||
|
|
||||||
"/pprof/": {Name: "/pprof/", Help: "性能分析", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
"/pprof/": {Name: "/pprof/", Help: "性能分析", Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
m.R.URL.Path = strings.Replace("/code"+m.R.URL.Path, "code", "debug", 1)
|
m.R.URL.Path = strings.Replace("/code"+m.R.URL.Path, "code", "debug", 1)
|
||||||
http.DefaultServeMux.ServeHTTP(m.W, m.R)
|
http.DefaultServeMux.ServeHTTP(m.W, m.R)
|
||||||
|
@ -1,46 +1,34 @@
|
|||||||
package code
|
package code
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
|
|
||||||
ice "github.com/shylinux/icebergs"
|
ice "github.com/shylinux/icebergs"
|
||||||
|
"github.com/shylinux/icebergs/base/cli"
|
||||||
"github.com/shylinux/icebergs/base/ctx"
|
"github.com/shylinux/icebergs/base/ctx"
|
||||||
"github.com/shylinux/icebergs/base/nfs"
|
"github.com/shylinux/icebergs/base/nfs"
|
||||||
"github.com/shylinux/icebergs/base/web"
|
|
||||||
kit "github.com/shylinux/toolkits"
|
kit "github.com/shylinux/toolkits"
|
||||||
|
|
||||||
"path"
|
"path"
|
||||||
)
|
)
|
||||||
|
|
||||||
func _vimer_path(m *ice.Message, arg ...string) string {
|
|
||||||
return path.Join(m.Option(ice.MSG_LOCAL), path.Join(arg...))
|
|
||||||
}
|
|
||||||
func _vimer_upload(m *ice.Message, dir string) {
|
|
||||||
up := kit.Simple(m.Optionv(ice.MSG_UPLOAD))
|
|
||||||
if p := _vimer_path(m, dir, up[1]); m.Option(ice.MSG_USERPOD) == "" {
|
|
||||||
m.Cmdy(web.CACHE, web.WATCH, up[0], p)
|
|
||||||
} else {
|
|
||||||
m.Cmdy(web.SPIDE, web.SPIDE_DEV, web.SPIDE_SAVE, p, web.SPIDE_GET, kit.MergeURL2(m.Option(ice.MSG_USERWEB), "/share/cache/"+up[0]))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const VIMER = "vimer"
|
const VIMER = "vimer"
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
Index.Merge(&ice.Context{
|
Index.Merge(&ice.Context{
|
||||||
Configs: map[string]*ice.Config{},
|
|
||||||
Commands: map[string]*ice.Command{
|
Commands: map[string]*ice.Command{
|
||||||
VIMER: {Name: "vimer path=usr/demo file=hi.sh line=1 刷新:button=auto save project search", Help: "编辑器", Meta: kit.Dict(
|
VIMER: {Name: "vimer path=src/ file=main.go line=1 刷新:button=auto save display project search", Help: "编辑器", Meta: kit.Dict(
|
||||||
"display", "/plugin/local/code/vimer.js", "style", "editor",
|
"display", "/plugin/local/code/vimer.js", "style", "editor",
|
||||||
"trans", kit.Dict("project", "项目", "search", "搜索"),
|
"trans", kit.Dict("display", "运行", "project", "项目", "search", "搜索"),
|
||||||
), Action: map[string]*ice.Action{
|
), Action: map[string]*ice.Action{
|
||||||
web.UPLOAD: {Name: "upload", Help: "上传", Hand: func(m *ice.Message, arg ...string) {
|
|
||||||
_vimer_upload(m, m.Option(kit.MDB_PATH))
|
|
||||||
}},
|
|
||||||
nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
|
nfs.SAVE: {Name: "save type file path", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
|
||||||
m.Cmdy(nfs.SAVE, path.Join(m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE)))
|
m.Cmdy(nfs.SAVE, path.Join(m.Option(kit.MDB_PATH), m.Option(kit.MDB_FILE)))
|
||||||
}},
|
}},
|
||||||
ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
ctx.COMMAND: {Name: "command", Help: "命令", Hand: func(m *ice.Message, arg ...string) {
|
||||||
if !m.Warn(!m.Right(arg)) {
|
if arg = kit.Split(strings.Join(arg, " ")); !m.Warn(!m.Right(arg)) {
|
||||||
m.Cmdy(arg)
|
if m.Cmdy(arg); len(m.Appendv(ice.MSG_APPEND)) == 0 && len(m.Resultv()) == 0 {
|
||||||
|
m.Cmdy(cli.SYSTEM, arg)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}},
|
}},
|
||||||
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
|
||||||
|
2
misc.go
2
misc.go
@ -86,7 +86,7 @@ func (m *Message) PushRender(key, view, name string, arg ...string) *Message {
|
|||||||
case "a":
|
case "a":
|
||||||
m.Push(key, fmt.Sprintf(`<a href="%s" target="_blank">%s</a>`, kit.Select(name, arg, 0), name))
|
m.Push(key, fmt.Sprintf(`<a href="%s" target="_blank">%s</a>`, kit.Select(name, arg, 0), name))
|
||||||
case "download":
|
case "download":
|
||||||
m.Push(key, fmt.Sprintf(`<a href="%s" download="%s">%s</a>`, kit.Select(name, arg, 0), path.Base(kit.Select(name, arg, 0)), name))
|
m.Push(key, fmt.Sprintf(`<a href="%s" download="%s">%s</a>`, kit.Select(name, arg, 0), path.Base(name), name))
|
||||||
default:
|
default:
|
||||||
m.Push(key, name)
|
m.Push(key, name)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user