cmd/uplink: support writing monkit traces to file
Change-Id: I759d1687cf890e21cb260a5377c7153bfd0eb486
This commit is contained in:
parent
b8b5afba73
commit
2d8cca49b2
@ -21,6 +21,8 @@ import (
|
|||||||
|
|
||||||
"github.com/jtolio/eventkit"
|
"github.com/jtolio/eventkit"
|
||||||
"github.com/spacemonkeygo/monkit/v3"
|
"github.com/spacemonkeygo/monkit/v3"
|
||||||
|
"github.com/spacemonkeygo/monkit/v3/collect"
|
||||||
|
"github.com/spacemonkeygo/monkit/v3/present"
|
||||||
"github.com/zeebo/clingy"
|
"github.com/zeebo/clingy"
|
||||||
"github.com/zeebo/errs"
|
"github.com/zeebo/errs"
|
||||||
"go.uber.org/zap"
|
"go.uber.org/zap"
|
||||||
@ -28,6 +30,7 @@ import (
|
|||||||
|
|
||||||
"storj.io/common/experiment"
|
"storj.io/common/experiment"
|
||||||
"storj.io/common/rpc/rpctracing"
|
"storj.io/common/rpc/rpctracing"
|
||||||
|
"storj.io/common/sync2/mpscqueue"
|
||||||
"storj.io/common/tracing"
|
"storj.io/common/tracing"
|
||||||
jaeger "storj.io/monkit-jaeger"
|
jaeger "storj.io/monkit-jaeger"
|
||||||
"storj.io/private/version"
|
"storj.io/private/version"
|
||||||
@ -68,8 +71,9 @@ type external struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
debug struct {
|
debug struct {
|
||||||
pprofFile string
|
pprofFile string
|
||||||
traceFile string
|
traceFile string
|
||||||
|
monkitTraceFile string
|
||||||
}
|
}
|
||||||
|
|
||||||
events struct {
|
events struct {
|
||||||
@ -124,7 +128,7 @@ func (ex *external) Setup(f clingy.Flags) {
|
|||||||
).(string)
|
).(string)
|
||||||
|
|
||||||
ex.tracing.tags = f.Flag(
|
ex.tracing.tags = f.Flag(
|
||||||
"trace-tags", "coma separated k=v pairs to be added to distributed traces", map[string]string{},
|
"trace-tags", "comma separated k=v pairs to be added to distributed traces", map[string]string{},
|
||||||
clingy.Advanced,
|
clingy.Advanced,
|
||||||
clingy.Transform(func(val string) (map[string]string, error) {
|
clingy.Transform(func(val string) (map[string]string, error) {
|
||||||
res := map[string]string{}
|
res := map[string]string{}
|
||||||
@ -151,6 +155,11 @@ func (ex *external) Setup(f clingy.Flags) {
|
|||||||
clingy.Advanced,
|
clingy.Advanced,
|
||||||
).(string)
|
).(string)
|
||||||
|
|
||||||
|
ex.debug.monkitTraceFile = f.Flag(
|
||||||
|
"debug-monkit-trace", "File to collect Monkit trace data. Understands file extensions .json and .svg", "",
|
||||||
|
clingy.Advanced,
|
||||||
|
).(string)
|
||||||
|
|
||||||
ex.analytics = f.Flag(
|
ex.analytics = f.Flag(
|
||||||
"analytics", "Whether to send usage information to Storj", nil,
|
"analytics", "Whether to send usage information to Storj", nil,
|
||||||
clingy.Transform(strconv.ParseBool), clingy.Optional, clingy.Boolean,
|
clingy.Transform(strconv.ParseBool), clingy.Optional, clingy.Boolean,
|
||||||
@ -371,8 +380,60 @@ func (ex *external) Wrap(ctx context.Context, cmd clingy.Command) (err error) {
|
|||||||
eventkit.DefaultRegistry.Scope("init").Event("init")
|
eventkit.DefaultRegistry.Scope("init").Event("init")
|
||||||
}
|
}
|
||||||
|
|
||||||
defer mon.Task()(&ctx)(&err)
|
var workErr error
|
||||||
return cmd.Execute(ctx)
|
work := func(ctx context.Context) {
|
||||||
|
defer mon.Task()(&ctx)(&err)
|
||||||
|
workErr = cmd.Execute(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
var formatter func(io.Writer, []*collect.FinishedSpan) error
|
||||||
|
switch {
|
||||||
|
default:
|
||||||
|
work(ctx)
|
||||||
|
return workErr
|
||||||
|
case strings.HasSuffix(strings.ToLower(ex.debug.monkitTraceFile), ".svg"):
|
||||||
|
formatter = present.SpansToSVG
|
||||||
|
case strings.HasSuffix(strings.ToLower(ex.debug.monkitTraceFile), ".json"):
|
||||||
|
formatter = present.SpansToJSON
|
||||||
|
}
|
||||||
|
|
||||||
|
spans := mpscqueue.New[collect.FinishedSpan]()
|
||||||
|
collector := func(s *monkit.Span, err error, panicked bool, finish time.Time) {
|
||||||
|
spans.Enqueue(collect.FinishedSpan{
|
||||||
|
Span: s,
|
||||||
|
Err: err,
|
||||||
|
Panicked: panicked,
|
||||||
|
Finish: finish,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
defer collect.ObserveAllTraces(monkit.Default, spanCollectorFunc(collector))()
|
||||||
|
work(ctx)
|
||||||
|
|
||||||
|
fh, err := os.Create(ex.debug.monkitTraceFile)
|
||||||
|
if err != nil {
|
||||||
|
return errs.Combine(workErr, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var spanSlice []*collect.FinishedSpan
|
||||||
|
for {
|
||||||
|
next, ok := spans.Dequeue()
|
||||||
|
if !ok {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
spanSlice = append(spanSlice, &next)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = formatter(fh, spanSlice)
|
||||||
|
return errs.Combine(workErr, err, fh.Close())
|
||||||
|
}
|
||||||
|
|
||||||
|
type spanCollectorFunc func(*monkit.Span, error, bool, time.Time)
|
||||||
|
|
||||||
|
func (f spanCollectorFunc) Start(*monkit.Span) {}
|
||||||
|
|
||||||
|
func (f spanCollectorFunc) Finish(s *monkit.Span, err error, panicked bool, finish time.Time) {
|
||||||
|
f(s, err, panicked, finish)
|
||||||
}
|
}
|
||||||
|
|
||||||
func tracked(ctx context.Context, cb func(context.Context)) (done func()) {
|
func tracked(ctx context.Context, cb func(context.Context)) (done func()) {
|
||||||
|
2
go.mod
2
go.mod
@ -61,7 +61,7 @@ require (
|
|||||||
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
|
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
|
||||||
gopkg.in/segmentio/analytics-go.v3 v3.1.0
|
gopkg.in/segmentio/analytics-go.v3 v3.1.0
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
storj.io/common v0.0.0-20231114142336-6bf1d675854d
|
storj.io/common v0.0.0-20231120181527-7551d20a723d
|
||||||
storj.io/drpc v0.0.33
|
storj.io/drpc v0.0.33
|
||||||
storj.io/monkit-jaeger v0.0.0-20230707083646-f15e6e8b7e8c
|
storj.io/monkit-jaeger v0.0.0-20230707083646-f15e6e8b7e8c
|
||||||
storj.io/private v0.0.0-20231012141933-ae62725d6691
|
storj.io/private v0.0.0-20231012141933-ae62725d6691
|
||||||
|
4
go.sum
4
go.sum
@ -1013,8 +1013,8 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8
|
|||||||
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
|
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
|
||||||
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
|
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
|
||||||
storj.io/common v0.0.0-20220719163320-cd2ef8e1b9b0/go.mod h1:mCYV6Ud5+cdbuaxdPD5Zht/HYaIn0sffnnws9ErkrMQ=
|
storj.io/common v0.0.0-20220719163320-cd2ef8e1b9b0/go.mod h1:mCYV6Ud5+cdbuaxdPD5Zht/HYaIn0sffnnws9ErkrMQ=
|
||||||
storj.io/common v0.0.0-20231114142336-6bf1d675854d h1:GvyLJ7lh9cu1Y6CVrfYSqcgBHnUOkxx39/iD7Q/Ion8=
|
storj.io/common v0.0.0-20231120181527-7551d20a723d h1:grxc+N773G2/r2MENiLNC78sgFQYCIaZLCURy8j2S6I=
|
||||||
storj.io/common v0.0.0-20231114142336-6bf1d675854d/go.mod h1:qjHfzW5RlGg5z04CwIEjJd1eQ3HCGhUNtxZ6K/W7yqM=
|
storj.io/common v0.0.0-20231120181527-7551d20a723d/go.mod h1:qjHfzW5RlGg5z04CwIEjJd1eQ3HCGhUNtxZ6K/W7yqM=
|
||||||
storj.io/drpc v0.0.32/go.mod h1:6rcOyR/QQkSTX/9L5ZGtlZaE2PtXTTZl8d+ulSeeYEg=
|
storj.io/drpc v0.0.32/go.mod h1:6rcOyR/QQkSTX/9L5ZGtlZaE2PtXTTZl8d+ulSeeYEg=
|
||||||
storj.io/drpc v0.0.33 h1:yCGZ26r66ZdMP0IcTYsj7WDAUIIjzXk6DJhbhvt9FHI=
|
storj.io/drpc v0.0.33 h1:yCGZ26r66ZdMP0IcTYsj7WDAUIIjzXk6DJhbhvt9FHI=
|
||||||
storj.io/drpc v0.0.33/go.mod h1:vR804UNzhBa49NOJ6HeLjd2H3MakC1j5Gv8bsOQT6N4=
|
storj.io/drpc v0.0.33/go.mod h1:vR804UNzhBa49NOJ6HeLjd2H3MakC1j5Gv8bsOQT6N4=
|
||||||
|
@ -9,7 +9,7 @@ require (
|
|||||||
github.com/zeebo/errs v1.3.0
|
github.com/zeebo/errs v1.3.0
|
||||||
go.uber.org/zap v1.21.0
|
go.uber.org/zap v1.21.0
|
||||||
golang.org/x/sync v0.3.0
|
golang.org/x/sync v0.3.0
|
||||||
storj.io/common v0.0.0-20231114142336-6bf1d675854d
|
storj.io/common v0.0.0-20231120181527-7551d20a723d
|
||||||
storj.io/private v0.0.0-20231012141933-ae62725d6691
|
storj.io/private v0.0.0-20231012141933-ae62725d6691
|
||||||
storj.io/storj v1.63.1
|
storj.io/storj v1.63.1
|
||||||
storj.io/storjscan v0.0.0-20220926140643-1623c3b391b0
|
storj.io/storjscan v0.0.0-20220926140643-1623c3b391b0
|
||||||
|
@ -1255,8 +1255,8 @@ rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
|||||||
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
|
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
|
||||||
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
|
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
|
||||||
storj.io/common v0.0.0-20220719163320-cd2ef8e1b9b0/go.mod h1:mCYV6Ud5+cdbuaxdPD5Zht/HYaIn0sffnnws9ErkrMQ=
|
storj.io/common v0.0.0-20220719163320-cd2ef8e1b9b0/go.mod h1:mCYV6Ud5+cdbuaxdPD5Zht/HYaIn0sffnnws9ErkrMQ=
|
||||||
storj.io/common v0.0.0-20231114142336-6bf1d675854d h1:GvyLJ7lh9cu1Y6CVrfYSqcgBHnUOkxx39/iD7Q/Ion8=
|
storj.io/common v0.0.0-20231120181527-7551d20a723d h1:grxc+N773G2/r2MENiLNC78sgFQYCIaZLCURy8j2S6I=
|
||||||
storj.io/common v0.0.0-20231114142336-6bf1d675854d/go.mod h1:qjHfzW5RlGg5z04CwIEjJd1eQ3HCGhUNtxZ6K/W7yqM=
|
storj.io/common v0.0.0-20231120181527-7551d20a723d/go.mod h1:qjHfzW5RlGg5z04CwIEjJd1eQ3HCGhUNtxZ6K/W7yqM=
|
||||||
storj.io/drpc v0.0.32/go.mod h1:6rcOyR/QQkSTX/9L5ZGtlZaE2PtXTTZl8d+ulSeeYEg=
|
storj.io/drpc v0.0.32/go.mod h1:6rcOyR/QQkSTX/9L5ZGtlZaE2PtXTTZl8d+ulSeeYEg=
|
||||||
storj.io/drpc v0.0.33 h1:yCGZ26r66ZdMP0IcTYsj7WDAUIIjzXk6DJhbhvt9FHI=
|
storj.io/drpc v0.0.33 h1:yCGZ26r66ZdMP0IcTYsj7WDAUIIjzXk6DJhbhvt9FHI=
|
||||||
storj.io/drpc v0.0.33/go.mod h1:vR804UNzhBa49NOJ6HeLjd2H3MakC1j5Gv8bsOQT6N4=
|
storj.io/drpc v0.0.33/go.mod h1:vR804UNzhBa49NOJ6HeLjd2H3MakC1j5Gv8bsOQT6N4=
|
||||||
|
@ -10,7 +10,7 @@ require (
|
|||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
github.com/stretchr/testify v1.8.4
|
github.com/stretchr/testify v1.8.4
|
||||||
go.uber.org/zap v1.23.0
|
go.uber.org/zap v1.23.0
|
||||||
storj.io/common v0.0.0-20231114142336-6bf1d675854d
|
storj.io/common v0.0.0-20231120181527-7551d20a723d
|
||||||
storj.io/gateway-mt v1.51.1-0.20230417204402-7d9bb25bc297
|
storj.io/gateway-mt v1.51.1-0.20230417204402-7d9bb25bc297
|
||||||
storj.io/private v0.0.0-20231012141933-ae62725d6691
|
storj.io/private v0.0.0-20231012141933-ae62725d6691
|
||||||
storj.io/storj v0.12.1-0.20221125175451-ef4b564b82f7
|
storj.io/storj v0.12.1-0.20221125175451-ef4b564b82f7
|
||||||
|
@ -1970,8 +1970,8 @@ sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1
|
|||||||
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
|
sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck=
|
||||||
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
|
sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0=
|
||||||
storj.io/common v0.0.0-20220719163320-cd2ef8e1b9b0/go.mod h1:mCYV6Ud5+cdbuaxdPD5Zht/HYaIn0sffnnws9ErkrMQ=
|
storj.io/common v0.0.0-20220719163320-cd2ef8e1b9b0/go.mod h1:mCYV6Ud5+cdbuaxdPD5Zht/HYaIn0sffnnws9ErkrMQ=
|
||||||
storj.io/common v0.0.0-20231114142336-6bf1d675854d h1:GvyLJ7lh9cu1Y6CVrfYSqcgBHnUOkxx39/iD7Q/Ion8=
|
storj.io/common v0.0.0-20231120181527-7551d20a723d h1:grxc+N773G2/r2MENiLNC78sgFQYCIaZLCURy8j2S6I=
|
||||||
storj.io/common v0.0.0-20231114142336-6bf1d675854d/go.mod h1:qjHfzW5RlGg5z04CwIEjJd1eQ3HCGhUNtxZ6K/W7yqM=
|
storj.io/common v0.0.0-20231120181527-7551d20a723d/go.mod h1:qjHfzW5RlGg5z04CwIEjJd1eQ3HCGhUNtxZ6K/W7yqM=
|
||||||
storj.io/dotworld v0.0.0-20210324183515-0d11aeccd840 h1:oqMwoF6vaOrCe92SKRyr8cc2WSjLYAd8fjpAHA7rNqY=
|
storj.io/dotworld v0.0.0-20210324183515-0d11aeccd840 h1:oqMwoF6vaOrCe92SKRyr8cc2WSjLYAd8fjpAHA7rNqY=
|
||||||
storj.io/drpc v0.0.32/go.mod h1:6rcOyR/QQkSTX/9L5ZGtlZaE2PtXTTZl8d+ulSeeYEg=
|
storj.io/drpc v0.0.32/go.mod h1:6rcOyR/QQkSTX/9L5ZGtlZaE2PtXTTZl8d+ulSeeYEg=
|
||||||
storj.io/drpc v0.0.33 h1:yCGZ26r66ZdMP0IcTYsj7WDAUIIjzXk6DJhbhvt9FHI=
|
storj.io/drpc v0.0.33 h1:yCGZ26r66ZdMP0IcTYsj7WDAUIIjzXk6DJhbhvt9FHI=
|
||||||
|
Loading…
Reference in New Issue
Block a user