Skip to content

Commit

Permalink
Merge pull request #86 from xoplog/seventyfour
Browse files Browse the repository at this point in the history
rename Bundle.ParentTrace -> Bundle.Parent
  • Loading branch information
muir committed Oct 4, 2022
2 parents 02fd5ff + 6e2220f commit 6964c2a
Show file tree
Hide file tree
Showing 17 changed files with 123 additions and 72 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ That is beginning to change. There is now a
[Zap/OTEL integration](https://github.com/uptrace/opentelemetry-go-extra/tree/main/otelzap).

Xop is currently the only Go structured logs and tracing system. Performance-wise,
it's better that Zap, and about on par with Zerolog.
it's better that Zap, and was on-par with Zerolog, but recently fell behind.

Where Xop shines is in it's API design. Xop manages to be very flexible, has
lots of features, is easy to use and has high performance. Meeting all of those
Expand Down
2 changes: 1 addition & 1 deletion logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ func (sub *Sub) Log() *Log {
}

func (old *Log) newChildLog(seed Seed, description string, detached bool) *Log {
seed.spanSeed.traceBundle.ParentTrace = seed.spanSeed.traceBundle.Trace
seed.spanSeed.traceBundle.Parent = seed.spanSeed.traceBundle.Trace
seed = seed.react(false, description)

type singleAlloc struct {
Expand Down
2 changes: 1 addition & 1 deletion span.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion span.zzzgo
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func (log *Log) Span() *Span {

func (span *Span) TraceState() trace.State { return span.seed.traceBundle.State }
func (span *Span) TraceBaggage() trace.Baggage { return span.seed.traceBundle.Baggage }
func (span *Span) ParentTrace() trace.Trace { return span.seed.traceBundle.ParentTrace.Copy() }
func (span *Span) ParentTrace() trace.Trace { return span.seed.traceBundle.Parent.Copy() }
func (span *Span) Trace() trace.Trace { return span.seed.traceBundle.Trace.Copy() }
func (span *Span) Bundle() trace.Bundle { return span.seed.traceBundle.Copy() }

Expand Down
20 changes: 10 additions & 10 deletions trace/bundle.go
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
package trace

type Bundle struct {
ParentTrace Trace
Trace Trace
State State
Baggage Baggage
Parent Trace
Trace Trace
State State
Baggage Baggage
}

func NewBundle() Bundle {
return Bundle{
ParentTrace: NewTrace(),
Trace: NewTrace(),
Parent: NewTrace(),
Trace: NewTrace(),
}
}

func (b Bundle) Copy() Bundle {
return Bundle{
ParentTrace: b.ParentTrace.Copy(),
Trace: b.Trace.Copy(),
State: b.State.Copy(),
Baggage: b.Baggage.Copy(),
Parent: b.Parent.Copy(),
Trace: b.Trace.Copy(),
State: b.State.Copy(),
Baggage: b.Baggage.Copy(),
}
}
5 changes: 5 additions & 0 deletions trace/trace_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,15 @@ func TestTraceZero(t *testing.T) {

func TestTracePartial(t *testing.T) {
var trace trace.Trace
assert.True(t, trace.TraceID().IsZero(), "initial trace is zero")
trace.SpanID().SetRandom()
t.Log("trace is", trace.String())
assert.NotEqual(t, "0000000000000000", trace.SpanID().String())
assert.Equal(t, "00-00000000000000000000000000000000-"+trace.SpanID().String()+"-00", trace.String())
assert.Equal(t, trace.SpanID().String(), trace.GetSpanID().String())
assert.Len(t, trace.String(), 55)
assert.True(t, trace.TraceID().IsZero(), "final trace is zero")
assert.False(t, trace.SpanID().IsZero(), "final span is zero")
}

func TestTraceRandom(t *testing.T) {
Expand All @@ -43,6 +47,7 @@ func TestTraceRandom(t *testing.T) {
trace.SpanID().SetRandom()
trace.TraceID().SetRandom()
trace.Flags().SetRandom()
t.Log("trace is", trace.String())
assert.NotEqual(t, "00", trace.Version().String())
assert.NotEqual(t, "00000000000000000000000000000000", trace.TraceID().String())
assert.NotEqual(t, "0000000000000000", trace.SpanID().String())
Expand Down
33 changes: 17 additions & 16 deletions xopjson/jsonlogger.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

33 changes: 17 additions & 16 deletions xopjson/jsonlogger.zzzgo
Original file line number Diff line number Diff line change
Expand Up @@ -50,12 +50,12 @@ func (logger *Logger) ID() string { return logger.id.String() }
func (logger *Logger) Buffered() bool { return logger.writer.Buffered() }
func (logger *Logger) ReferencesKept() bool { return false }

func (logger *Logger) Request(_ context.Context, ts time.Time, trace trace.Bundle, name string) xopbase.Request {
func (logger *Logger) Request(_ context.Context, ts time.Time, bundle trace.Bundle, name string) xopbase.Request {
request := &request{
span: span{
logger: logger,
writer: logger.writer.Request(trace),
trace: trace,
writer: logger.writer.Request(bundle),
bundle: bundle,
name: name,
startTime: ts,
endTime: ts.UnixNano(),
Expand Down Expand Up @@ -93,20 +93,20 @@ func (logger *Logger) Request(_ context.Context, ts time.Time, trace trace.Bundl

func (s *span) addRequestStartData(rq *builder) {
rq.AddSafeKey("trace.id")
rq.AddSafeString(s.trace.Trace.TraceID().String())
rq.AddSafeString(s.bundle.Trace.TraceID().String())
rq.AddSafeKey("span.id")
rq.AddSafeString(s.trace.Trace.SpanID().String())
if !s.trace.ParentTrace.TraceID().IsZero() {
rq.AddSafeString(s.bundle.Trace.SpanID().String())
if !s.bundle.Parent.TraceID().IsZero() {
rq.AddSafeKey("trace.parent")
rq.AddSafeString(s.trace.ParentTrace.String())
rq.AddSafeString(s.bundle.Parent.String())
}
if !s.trace.State.IsZero() {
if !s.bundle.State.IsZero() {
rq.AddSafeKey("trace.state")
rq.AddSafeString(s.trace.State.String())
rq.AddSafeString(s.bundle.State.String())
}
if !s.trace.Baggage.IsZero() {
if !s.bundle.Baggage.IsZero() {
rq.AddSafeKey("trace.baggage")
rq.AddSafeString(s.trace.Baggage.String())
rq.AddSafeString(s.bundle.Baggage.String())
}
rq.AddSafeKey("span.name")
rq.AddString(s.name)
Expand Down Expand Up @@ -222,11 +222,11 @@ func (r *request) Final() {

func (r *request) SetErrorReporter(reporter func(error)) { r.errorFunc = reporter }

func (s *span) Span(_ context.Context, ts time.Time, trace trace.Bundle, name string, spanSequenceCode string) xopbase.Span {
func (s *span) Span(_ context.Context, ts time.Time, bundle trace.Bundle, name string, spanSequenceCode string) xopbase.Span {
n := &span{
logger: s.logger,
writer: s.writer,
trace: trace,
bundle: bundle,
name: name,
request: s.request,
startTime: ts,
Expand All @@ -239,7 +239,7 @@ func (s *span) Span(_ context.Context, ts time.Time, trace trace.Bundle, name st
if s.logger.spanStarts {
rq := s.builder()
rq.AppendBytes([]byte(`{"type":"span","span.ver":0,"span.id":`))
rq.AddSafeString(trace.Trace.SpanID().String())
rq.AddSafeString(bundle.Trace.SpanID().String())
n.spanStartData(rq)
rq.AppendBytes([]byte{'}', '\n'})
n.serializationCount++
Expand All @@ -260,6 +260,7 @@ func (s *span) Span(_ context.Context, ts time.Time, trace trace.Bundle, name st
func (s *span) spanStartData(rq *builder) {
rq.stringKV("span.name", s.name)
rq.Time("ts", s.startTime)
rq.stringKV("span.parent_span", s.bundle.Parent.SpanID().String())
}

func (s *span) setSpanIDPrefill() {
Expand All @@ -273,11 +274,11 @@ func (s *span) setSpanIDPrefill() {
func (s *span) identifySpan(b *xoputil.JBuilder) {
if s.logger.tagOption&SpanIDTagOption != 0 {
b.AddSafeKey("span.id")
b.AddSafeString(s.trace.Trace.SpanID().String())
b.AddSafeString(s.bundle.Trace.SpanID().String())
}
if s.logger.tagOption&TraceIDTagOption != 0 {
b.AddSafeKey("trace.id")
b.AddSafeString(s.trace.Trace.TraceID().String())
b.AddSafeString(s.bundle.Trace.TraceID().String())
}
if s.logger.tagOption&TraceNumberTagOption != 0 {
b.AddSafeKey("trace.num")
Expand Down
11 changes: 9 additions & 2 deletions xopjson/jsonlogger_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -185,10 +185,17 @@ func TestParameters(t *testing.T) {
if tc.settings != nil {
settings = tc.settings
}
log := xop.NewSeed(
seed := xop.NewSeed(
xop.WithBase(jlog),
xop.WithSettings(settings),
).Copy(xop.WithBase(tlog)).Request(t.Name())
).Copy(xop.WithBase(tlog))

if len(mc.SeedMods) != 0 {
t.Logf("Applying %d extra seed mods", len(mc.SeedMods))
seed = seed.Copy(mc.SeedMods...)
}

log := seed.Request(t.Name())

mc.Do(t, log, tlog)

Expand Down
2 changes: 1 addition & 1 deletion xopjson/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ type request struct {
type span struct {
endTime int64
writer xopbytes.BytesRequest
trace trace.Bundle
bundle trace.Bundle
logger *Logger
name string
request *request
Expand Down
6 changes: 3 additions & 3 deletions xopmiddle/middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,12 @@ func (i Inbound) makeChildSpan(w http.ResponseWriter, r *http.Request) (*xop.Log
if b3Sampling := r.Header.Get("X-B3-Sampled"); b3Sampling != "" {
SetByB3Sampled(&bundle.Trace, b3Sampling)
}
bundle.ParentTrace = bundle.Trace
bundle.Parent = bundle.Trace
if b3ParentSpanID := r.Header.Get("X-B3-ParentSpanId"); b3ParentSpanID != "" {
bundle.ParentTrace.SpanID().SetString(b3ParentSpanID)
bundle.Parent.SpanID().SetString(b3ParentSpanID)
} else {
// Uh oh, no parent span id
bundle.ParentTrace.SpanID().SetZero()
bundle.Parent.SpanID().SetZero()
}
if b3SpanID := r.Header.Get("X-B3-SpanId"); b3SpanID != "" {
bundle.Trace.SpanID().SetString(b3SpanID)
Expand Down
8 changes: 4 additions & 4 deletions xopmiddle/middleware_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,10 +187,10 @@ func TestHandlerFuncMiddleware(t *testing.T) {

require.Equal(t, 1, len(tLog.Requests), "one request")
request := tLog.Requests[0]
assert.Equal(t, hc.expectParentTrace, request.Bundle.ParentTrace.TraceID().String(), "parent traceID")
assert.Equal(t, hc.expectParentSpan, request.Bundle.ParentTrace.SpanID().String(), "parent spanID")
assert.Equal(t, "00", request.Bundle.ParentTrace.Version().String(), "parent version")
assert.Equal(t, hc.expectParentFlags, request.Bundle.ParentTrace.Flags().String(), "parent flags")
assert.Equal(t, hc.expectParentTrace, request.Bundle.Parent.TraceID().String(), "parent traceID")
assert.Equal(t, hc.expectParentSpan, request.Bundle.Parent.SpanID().String(), "parent spanID")
assert.Equal(t, "00", request.Bundle.Parent.Version().String(), "parent version")
assert.Equal(t, hc.expectParentFlags, request.Bundle.Parent.Flags().String(), "parent flags")

if hc.expectTrace == "" {
hc.expectTrace = hc.expectParentTrace
Expand Down
22 changes: 11 additions & 11 deletions xopmiddle/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import (
"github.com/xoplog/xop-go/trace"
)

// SetByParentTraceHeader sets bundle.ParentTrace.TraceID and
// then copies bundle.ParentTrace to bundle.Trace. It then sets
// SetByParentTraceHeader sets bundle.Parent.TraceID and
// then copies bundle.Parent to bundle.Trace. It then sets
// the bundle.Trace.SpanID to random.
//
// "traceparent" header
Expand All @@ -20,7 +20,7 @@ func SetByParentTraceHeader(b *trace.Bundle, h string) {
b.Trace.SpanID().SetRandom()
return
}
b.ParentTrace = parent
b.Parent = parent
b.Trace = parent
b.Trace.SpanID().SetRandom()
}
Expand All @@ -32,9 +32,9 @@ var b3RE = regexp.MustCompile(`^([a-fA-F0-9]{32})-([a-fA-F0-9]{16})-(0|1|true|fa
func SetByB3Header(b *trace.Bundle, h string) {
switch h {
case "0", "1", "true", "false", "d":
b.ParentTrace = trace.NewTrace()
SetByB3Sampled(&b.ParentTrace, h)
b.Trace = b.ParentTrace
b.Parent = trace.NewTrace()
SetByB3Sampled(&b.Parent, h)
b.Trace = b.Parent
b.Trace.TraceID().SetRandom()
b.Trace.SpanID().SetRandom()
return
Expand All @@ -43,14 +43,14 @@ func SetByB3Header(b *trace.Bundle, h string) {
if m == nil {
return
}
b.ParentTrace.TraceID().SetString(m[1])
SetByB3Sampled(&b.ParentTrace, m[3])
b.Parent.TraceID().SetString(m[1])
SetByB3Sampled(&b.Parent, m[3])
if m[4] == "" {
b.ParentTrace.SpanID().SetZero()
b.Parent.SpanID().SetZero()
} else {
b.ParentTrace.SpanID().SetString(m[4])
b.Parent.SpanID().SetString(m[4])
}
b.Trace = b.ParentTrace
b.Trace = b.Parent
b.Trace.SpanID().SetString(m[2])
}

Expand Down
2 changes: 1 addition & 1 deletion xopotel/otel.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 6964c2a

Please sign in to comment.