This repository has been archived by the owner on Aug 14, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 5
/
opentracing.go
58 lines (51 loc) · 2.02 KB
/
opentracing.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
50
51
52
53
54
55
56
57
58
// Copyright 2021 CloudWeGo Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Package opentracing implements KiteX tracer with opentracing.
package opentracing
import (
"context"
"github.com/cloudwego/kitex/pkg/rpcinfo"
"github.com/cloudwego/kitex/pkg/stats"
"github.com/opentracing/opentracing-go"
)
type commonTracer struct {
tracer opentracing.Tracer
formOperationName func(context.Context) string
}
func (c *commonTracer) newCommonSpan(span opentracing.Span, st rpcinfo.RPCStats) {
readSpan := c.newEventSpan("read", st, stats.ReadStart, stats.ReadFinish, span.Context())
if readSpan != nil {
readSpan.SetTag("recv_size", st.RecvSize())
}
c.newEventSpan("wait_read", st, stats.WaitReadStart, stats.WaitReadFinish, span.Context())
writeSpan := c.newEventSpan("write", st, stats.WriteStart, stats.WriteFinish, span.Context())
if writeSpan != nil {
writeSpan.SetTag("send_size", st.SendSize())
}
}
func (c *commonTracer) newEventSpan(operationName string, st rpcinfo.RPCStats, start, end stats.Event, parentContext opentracing.SpanContext) opentracing.Span {
var opts []opentracing.StartSpanOption
event := st.GetEvent(start)
if event == nil {
return nil
}
startTime := opentracing.StartTime(event.Time())
opts = append(opts, opentracing.StartTime(startTime))
if parentContext != nil {
opts = append(opts, opentracing.ChildOf(parentContext))
}
span := c.tracer.StartSpan(operationName, opts...)
span.FinishWithOptions(opentracing.FinishOptions{FinishTime: st.GetEvent(end).Time()})
return span
}