From 29c1a023e3a61259846a72ec3b91b8e58e1fea79 Mon Sep 17 00:00:00 2001 From: shy Date: Thu, 8 Feb 2024 10:33:05 +0800 Subject: [PATCH] opt traceid --- base/log/log.go | 35 ++++++++++++++++++++++++++--------- base/ssh/script.go | 2 +- base/web/serve.go | 2 +- base/web/space.go | 10 ++++------ core/chat/favor.go | 4 +++- core/code/xterm.go | 8 ++++---- exec.go | 8 +++++++- info.go | 3 --- logs.go | 5 ++++- 9 files changed, 50 insertions(+), 27 deletions(-) diff --git a/base/log/log.go b/base/log/log.go index b29be7c3..d8d374e5 100644 --- a/base/log/log.go +++ b/base/log/log.go @@ -80,14 +80,20 @@ const ( VIEW = "view" SHOW = "show" ) +const ( + BENCH_LOG = "bench.log" + DEBUG_LOG = "debug.log" + ERROR_LOG = "error.log" + WATCH_LOG = "watch.log" +) const LOG = "log" var Index = &ice.Context{Name: LOG, Help: "日志模块", Configs: ice.Configs{ FILE: {Name: FILE, Help: "日志文件", Value: kit.Dict( - BENCH, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "bench.log"), mdb.LIST, []string{}), - DEBUG, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "debug.log"), mdb.LIST, []string{ice.LOG_DEBUG}), - ERROR, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "error.log"), mdb.LIST, []string{ice.LOG_WARN, ice.LOG_ERROR}), - WATCH, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, "watch.log"), mdb.LIST, []string{mdb.CREATE, mdb.REMOVE, mdb.INSERT, mdb.DELETE, mdb.MODIFY, mdb.EXPORT, mdb.IMPORT}), + BENCH, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, BENCH_LOG), mdb.LIST, []string{}), + DEBUG, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, DEBUG_LOG), mdb.LIST, []string{ice.LOG_DEBUG}), + ERROR, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, ERROR_LOG), mdb.LIST, []string{ice.LOG_WARN, ice.LOG_ERROR}), + WATCH, kit.Dict(nfs.PATH, path.Join(ice.VAR_LOG, WATCH_LOG), mdb.LIST, []string{mdb.CREATE, mdb.REMOVE, mdb.INSERT, mdb.DELETE, mdb.MODIFY, mdb.EXPORT, mdb.IMPORT}), )}, VIEW: {Name: VIEW, Help: "日志格式", Value: kit.Dict( GREEN, kit.Dict(PREFIX, "\033[32m", SUFFIX, "\033[0m", mdb.LIST, []string{ice.CTX_START, ice.LOG_CMDS}), @@ -105,23 +111,34 @@ var Index = &ice.Context{Name: LOG, Help: "日志模块", Configs: ice.Configs{ kit.For(value[mdb.LIST], func(index int, k string) { m.Conf(SHOW, kit.Keys(k, VIEW), key) }) }) }}, - ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { ice.Info.Save(m, TAIL) }}, + ice.CTX_EXIT: {Hand: func(m *ice.Message, arg ...string) { + ice.Info.Save(m, TAIL) + }}, }} func init() { ice.Index.Register(Index, &Frame{}, TAIL) } -func init() { ice.Info.Traceid = "short"; ice.Pulse.Option(ice.LOG_TRACEID, Traceid()) } +func init() { + ice.Info.Traceid = "short" + ice.Pulse.Option("work.id", "0") + ice.Pulse.Option("task.id", "0") + ice.Pulse.Option(ice.LOG_TRACEID, Traceid(ice.Pulse)) +} var _trace_count int64 -func Traceid() (traceid string) { +func Traceid(m *ice.Message) (traceid string) { ls := []string{} kit.For(kit.Split(ice.Info.Traceid), func(key string) { switch key { case "short": - ls = append(ls, kit.Hashs(mdb.UNIQ)[:6]) + if len(ls) == 0 { + ls = append(ls, kit.Hashs(mdb.UNIQ)[:6]) + } case "long": - ls = append(ls, kit.Hashs(mdb.UNIQ)) + if len(ls) == 0 { + ls = append(ls, kit.Hashs(mdb.UNIQ)) + } case "node": ls = append(ls, ice.Info.NodeName) case "hide": diff --git a/base/ssh/script.go b/base/ssh/script.go index c63db7e0..c0497c72 100644 --- a/base/ssh/script.go +++ b/base/ssh/script.go @@ -96,7 +96,7 @@ func (f *Frame) parse(m *ice.Message, h, line string) string { return "" } msg := m.Spawn(f.target) - kit.If(h == STDIO, func() { msg.Option(ice.LOG_TRACEID, log.Traceid()) }) + kit.If(h == STDIO, func() { msg.Option(ice.LOG_TRACEID, log.Traceid(m)) }) if msg.Cmdy(ls); h == STDIO && msg.IsErrNotFound() { msg.SetResult().Cmdy(cli.SYSTEM, ls) } diff --git a/base/web/serve.go b/base/web/serve.go index f33a9b25..7984d4d5 100644 --- a/base/web/serve.go +++ b/base/web/serve.go @@ -65,7 +65,7 @@ func _serve_main(m *ice.Message, w http.ResponseWriter, r *http.Request) bool { r.Header.Set(ice.MSG_USERIP, strings.Split(r.RemoteAddr, nfs.DF)[0]) } if !kit.HasPrefix(r.URL.String(), nfs.VOLCANOS, nfs.REQUIRE_MODULES, nfs.INTSHELL) { - r.Header.Set(ice.LOG_TRACEID, log.Traceid()) + r.Header.Set(ice.LOG_TRACEID, log.Traceid(m)) m.Logs(r.Header.Get(ice.MSG_USERIP), r.Method, r.URL.String(), logs.TraceidMeta(r.Header.Get(ice.LOG_TRACEID))) } if path.Join(r.URL.Path) == nfs.PS && strings.HasPrefix(r.UserAgent(), html.Mozilla) { diff --git a/base/web/space.go b/base/web/space.go index 2bba75b9..cf5d5910 100644 --- a/base/web/space.go +++ b/base/web/space.go @@ -16,7 +16,6 @@ import ( "shylinux.com/x/icebergs/base/ctx" "shylinux.com/x/icebergs/base/gdb" "shylinux.com/x/icebergs/base/lex" - "shylinux.com/x/icebergs/base/log" "shylinux.com/x/icebergs/base/mdb" "shylinux.com/x/icebergs/base/nfs" "shylinux.com/x/icebergs/base/ssh" @@ -97,8 +96,7 @@ func _space_fork(m *ice.Message) { } args := kit.Simple(mdb.TYPE, m.Option(mdb.TYPE), mdb.NAME, name, mdb.TEXT, text, m.OptionSimple(mdb.TIME, nfs.MODULE, nfs.VERSION, cli.DAEMON)) args = append(args, aaa.USERNICK, m.Option(ice.MSG_USERNICK), aaa.USERNAME, m.Option(ice.MSG_USERNAME), aaa.USERROLE, m.Option(ice.MSG_USERROLE)) - args = append(args, aaa.UA, m.Option(ice.MSG_USERUA), aaa.IP, m.Option(ice.MSG_USERIP)) - args = _space_agent(m, args...) + args = append(args, ParseUA(m)...) if c, e := websocket.Upgrade(m.W, m.R); !m.Warn(e) { gdb.Go(m, func() { defer mdb.HashCreateDeferRemove(m, args, kit.Dict(mdb.TARGET, c))() @@ -147,7 +145,7 @@ func _space_handle(m *ice.Message, safe bool, name string, c *websocket.Conn) { source, target := kit.Simple(msg.Optionv(ice.MSG_SOURCE), name), kit.Simple(msg.Optionv(ice.MSG_TARGET)) msg.Log(tcp.RECV, "%v->%v %v %v", source, target, msg.Detailv(), msg.FormatsMeta(nil)) if next := msg.Option(ice.MSG_TARGET); next == "" || len(target) == 0 { - m.Go(func() { + msg.Go(func() { if k := kit.Keys(msg.Option(ice.MSG_USERPOD), "_token"); msg.Option(k) != "" { aaa.SessCheck(msg, msg.Option(k)) } @@ -160,7 +158,7 @@ func _space_handle(m *ice.Message, safe bool, name string, c *websocket.Conn) { case (*websocket.Conn): // 转发报文 _space_echo(msg, source, target, c) case ice.Handler: // 接收响应 - m.Go(func() { c(msg) }) + msg.Go(func() { c(msg) }) } }), ice.ErrNotFound, next) } @@ -200,7 +198,7 @@ func _space_exec(m *ice.Message, name string, source, target []string, c *websoc kit.If(m.Optionv(ice.MSG_ARGS) != nil, func() { m.Options(ice.MSG_ARGS, kit.Simple(m.Optionv(ice.MSG_ARGS))) }) } defer m.Cost(kit.Format("%v->%v %v %v", source, target, m.Detailv(), m.FormatSize())) - _space_echo(m.Set(ice.MSG_OPTS).Options(log.DEBUG, m.Option(log.DEBUG)), []string{}, kit.Reverse(kit.Simple(source)), c) + _space_echo(m.Set(ice.MSG_OPTS).Options(m.OptionSimple(ice.LOG_DEBUG, ice.LOG_TRACEID)), []string{}, kit.Reverse(kit.Simple(source)), c) } func _space_echo(m *ice.Message, source, target []string, c *websocket.Conn) { defer func() { m.Warn(recover()) }() diff --git a/core/chat/favor.go b/core/chat/favor.go index 7dd93c59..23d3c185 100644 --- a/core/chat/favor.go +++ b/core/chat/favor.go @@ -114,7 +114,9 @@ func init() { }) } -func FavorAction() ice.Actions { return gdb.EventsAction(FAVOR_INPUTS, FAVOR_TABLES, FAVOR_ACTION) } +func FavorAction() ice.Actions { + return gdb.EventsAction(FAVOR_INPUTS, FAVOR_TABLES, FAVOR_ACTION) +} func FavorPreview(m *ice.Message, arg ...string) { if kit.HasPrefixList(arg, ctx.RUN) { if pod := arg[1]; pod != "" { diff --git a/core/code/xterm.go b/core/code/xterm.go index 42a5c5da..7d3eeb8d 100644 --- a/core/code/xterm.go +++ b/core/code/xterm.go @@ -77,9 +77,9 @@ func init() { }) }}, mdb.SEARCH: {Hand: func(m *ice.Message, arg ...string) { - if mdb.IsSearchPreview(m, arg) { + if mdb.IsSearchPreview(m, arg) || kit.HasPrefixList(arg, SHELL) { kit.For([]string{shell, "/bin/ish"}, func(p string) { - m.PushSearch(mdb.TYPE, ssh.SHELL, mdb.NAME, path.Base(p), mdb.TEXT, p) + m.PushSearch(mdb.TYPE, SHELL, mdb.NAME, path.Base(p), mdb.TEXT, p) }) } }}, @@ -88,8 +88,8 @@ func init() { case mdb.HASH: fallthrough case mdb.TYPE: - m.Cmd(mdb.SEARCH, mdb.FOREACH, "", "", func(value ice.Maps) { - kit.If(value[mdb.TYPE] == ssh.SHELL, func() { m.Push(arg[0], value[mdb.TEXT]) }) + m.Cmd(mdb.SEARCH, SHELL, "", "", func(value ice.Maps) { + kit.If(value[mdb.TYPE] == SHELL, func() { m.Push(arg[0], value[mdb.TEXT]) }) }) case mdb.NAME: m.Push(arg[0], path.Base(m.Option(mdb.TYPE)), ice.Info.Hostname) diff --git a/exec.go b/exec.go index 84f8ecd9..167d6d42 100644 --- a/exec.go +++ b/exec.go @@ -67,7 +67,13 @@ func (m *Message) Go(cb func(), arg ...Any) *Message { meta := m.FormatTaskMeta() meta.FileLine = kit.FileLine(2, 3) kit.If(len(arg) > 0, func() { meta.FileLine = kit.Format(arg[0]) }) - task.Put(meta, nil, func(task *task.Task) { m.TryCatch(true, func(m *Message) { cb() }) }) + task.Put(meta, nil, func(task *task.Task) { + m.TryCatch(true, func(m *Message) { + m.Option("task.id", kit.Format(task.TaskId())) + m.Option("work.id", kit.Format(task.WorkId())) + cb() + }) + }) return m } func (m *Message) GoWait(cb func(func()), arg ...Any) *Message { diff --git a/info.go b/info.go index 40477811..76e09f1d 100644 --- a/info.go +++ b/info.go @@ -318,13 +318,10 @@ func (m *Message) FileURI(dir string) string { } else if kit.HasPrefix(dir, PS, HTTP) { return dir } - m.Debug("what %v", m.Option(MSG_USERPOD)) if strings.HasPrefix(dir, USR_VOLCANOS) { return strings.TrimPrefix(dir, USR) } else { - m.Debug("what %v", m.Option(MSG_USERPOD)) what := kit.MergeURL(path.Join(PS, REQUIRE, dir), POD, m.Option(MSG_USERPOD)) - m.Debug("what %v", what) return what } } diff --git a/logs.go b/logs.go index a5c8b296..a1db1b21 100644 --- a/logs.go +++ b/logs.go @@ -186,7 +186,10 @@ func (m *Message) FormatPrefix(traceid ...string) string { } func (m *Message) FormatShip(traceid ...string) string { _traceid := "" - kit.If(kit.Select(m.Option(LOG_TRACEID), traceid, 0), func(traceid string) { _traceid = kit.Format("%s: %s ", logs.TRACEID, traceid) }) + kit.If(kit.Select(m.Option(LOG_TRACEID), traceid, 0), func(traceid string) { + // _traceid = kit.Format("%s: %s ", logs.TRACEID, traceid+"-"+m.Option("task.id")+"-"+m.Option("work.id")) + _traceid = kit.Format("%s: %s ", logs.TRACEID, traceid) + }) return kit.Format("%s%02d %4s->%-4s", _traceid, m.code, m.source.Name, m.target.Name) } func (m *Message) FormatSize() string {