forked from go-kratos/kratos
/
jaeger.go
49 lines (40 loc) · 1.03 KB
/
jaeger.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package jaeger
import (
"github.com/go-tenchii/kratos/pkg/log"
"github.com/go-tenchii/kratos/pkg/net/trace"
)
type Config struct {
Endpoint string
BatchSize int
}
type JaegerReporter struct {
transport *HTTPTransport
}
func newReport(c *Config) *JaegerReporter {
transport := NewHTTPTransport(c.Endpoint)
transport.batchSize = c.BatchSize
return &JaegerReporter{transport: transport}
}
func (r *JaegerReporter) WriteSpan(raw *trace.Span) (err error) {
ctx := raw.Context()
traceID := TraceID{Low: ctx.TraceID}
spanID := SpanID(ctx.SpanID)
parentID := SpanID(ctx.ParentID)
tags := raw.Tags()
log.Info("[info] write span")
span := &Span{
context: NewSpanContext(traceID, spanID, parentID, true, nil),
operationName: raw.OperationName(),
startTime: raw.StartTime(),
duration: raw.Duration(),
}
span.serviceName = raw.ServiceName()
for _, t := range tags {
span.SetTag(t.Key, t.Value)
}
r.transport.Append(span)
return nil
}
func (rpt *JaegerReporter) Close() error {
return rpt.transport.Close()
}