Skip to content
This repository has been archived by the owner on Jun 4, 2021. It is now read-only.

Commit

Permalink
Updated opencensus-go
Browse files Browse the repository at this point in the history
Signed-off-by: Francesco Guardiani <francescoguard@gmail.com>
  • Loading branch information
slinkydeveloper committed Jul 16, 2020
1 parent 1117784 commit 8d7f6c3
Show file tree
Hide file tree
Showing 12 changed files with 142 additions and 187 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ require (
github.com/stretchr/testify v1.5.1
github.com/xanzy/go-gitlab v0.28.0
gitlab.com/flimzy/testy v0.2.1 // indirect
go.opencensus.io v0.22.4
go.opencensus.io v0.22.5-0.20200716030834-3456e1d174b2
go.opentelemetry.io/otel v0.4.2 // indirect
go.uber.org/zap v1.14.1
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -971,6 +971,8 @@ go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5-0.20200716030834-3456e1d174b2 h1:p7zhKkxd+cS4tMYPy/HkKVczBa28t8TU+sUh7GJ/Ge4=
go.opencensus.io v0.22.5-0.20200716030834-3456e1d174b2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opentelemetry.io/otel v0.2.3/go.mod h1:OgNpQOjrlt33Ew6Ds0mGjmcTQg/rhUctsbkRdk/g1fw=
go.opentelemetry.io/otel v0.4.2 h1:nT+GOqqRR1cIY92xmo1DeiXLHtIlXH1KLRgnsnhuNrs=
go.opentelemetry.io/otel v0.4.2/go.mod h1:OgNpQOjrlt33Ew6Ds0mGjmcTQg/rhUctsbkRdk/g1fw=
Expand Down
146 changes: 24 additions & 122 deletions kafka/channel/pkg/dispatcher/tracing.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,146 +17,48 @@ limitations under the License.
package dispatcher

import (
"encoding/hex"
"fmt"
"regexp"
"strings"

"github.com/Shopify/sarama"
"go.opencensus.io/plugin/ochttp/propagation/tracecontext"
"go.opencensus.io/trace"
"go.opencensus.io/trace/tracestate"
)

const (
supportedVersion = 0
traceParentHeader = "traceparent"
traceStateHeader = "tracestate"
maxVersion = 254
maxTracestateLen = 512
trimOWSRegexFmt = `^[\x09\x20]*(.*[^\x20\x09])[\x09\x20]*$`
)

var trimOWSRegExp = regexp.MustCompile(trimOWSRegexFmt)

// Part of this code is took from https://github.com/census-instrumentation/opencensus-go/blob/master/plugin/ochttp/propagation/tracecontext/propagation.go
// Apache License 2.0
// TODO(slinkydeveloper) remove this code as soon as https://github.com/census-instrumentation/opencensus-go/pull/1218 is merged
var format = &tracecontext.HTTPFormat{}

func serializeTrace(spanContext trace.SpanContext) []sarama.RecordHeader {
var headers []sarama.RecordHeader

traceparent := fmt.Sprintf("%x-%x-%x-%x",
[]byte{supportedVersion},
spanContext.TraceID[:],
spanContext.SpanID[:],
[]byte{byte(spanContext.TraceOptions)},
)
headers = append(headers, sarama.RecordHeader{Key: []byte(traceParentHeader), Value: []byte(traceparent)})

if len(spanContext.Tracestate.Entries()) != 0 {
entries := make([]string, 0, len(spanContext.Tracestate.Entries()))
for _, entry := range spanContext.Tracestate.Entries() {
entries = append(entries, strings.Join([]string{entry.Key, entry.Value}, "="))
}
tracestate := strings.Join(entries, ",")

headers = append(headers, sarama.RecordHeader{Key: []byte(traceStateHeader), Value: []byte(tracestate)})
}

return headers
tp, ts := format.SpanContextToHeaders(spanContext)

if ts != "" {
return []sarama.RecordHeader{{
Key: []byte(traceParentHeader),
Value: []byte(tp),
}, {
Key: []byte(traceStateHeader),
Value: []byte(ts),
}}
}

return []sarama.RecordHeader{{
Key: []byte(traceParentHeader),
Value: []byte(tp),
}}
}

func parseSpanContext(headers map[string][]byte) (sc trace.SpanContext, ok bool) {
hBytes, ok := headers[traceParentHeader]
tpBytes, ok := headers[traceParentHeader]
if !ok {
return trace.SpanContext{}, false
}
h := string(hBytes)

sections := strings.Split(h, "-")
if len(sections) < 4 {
return trace.SpanContext{}, false
}

if len(sections[0]) != 2 {
return trace.SpanContext{}, false
}
ver, err := hex.DecodeString(sections[0])
if err != nil {
return trace.SpanContext{}, false
}
version := int(ver[0])
if version > maxVersion {
return trace.SpanContext{}, false
}

if version == 0 && len(sections) != 4 {
return trace.SpanContext{}, false
}

if len(sections[1]) != 32 {
return trace.SpanContext{}, false
}
tid, err := hex.DecodeString(sections[1])
if err != nil {
return trace.SpanContext{}, false
}
copy(sc.TraceID[:], tid)
tp := string(tpBytes)

if len(sections[2]) != 16 {
return trace.SpanContext{}, false
}
sid, err := hex.DecodeString(sections[2])
if err != nil {
return trace.SpanContext{}, false
}
copy(sc.SpanID[:], sid)

opts, err := hex.DecodeString(sections[3])
if err != nil || len(opts) < 1 {
return trace.SpanContext{}, false
}
sc.TraceOptions = trace.TraceOptions(opts[0])

// Don't allow all zero trace or span ID.
if sc.TraceID == [16]byte{} || sc.SpanID == [8]byte{} {
return trace.SpanContext{}, false
}

sc.Tracestate = tracestateFromRequest(headers)
return sc, true
}

func tracestateFromRequest(headers map[string][]byte) *tracestate.Tracestate {
hBytes, ok := headers[traceStateHeader]
if !ok {
return nil
}
h := string(hBytes)

var entries []tracestate.Entry
pairs := strings.Split(h, ",")
hdrLenWithoutOWS := len(pairs) - 1 // Number of commas
for _, pair := range pairs {
matches := trimOWSRegExp.FindStringSubmatch(pair)
if matches == nil {
return nil
}
pair = matches[1]
hdrLenWithoutOWS += len(pair)
if hdrLenWithoutOWS > maxTracestateLen {
return nil
}
kv := strings.Split(pair, "=")
if len(kv) != 2 {
return nil
}
entries = append(entries, tracestate.Entry{Key: kv[0], Value: kv[1]})
}
ts, err := tracestate.New(nil, entries...)
if err != nil {
return nil
ts := ""
if tsBytes, ok := headers[traceStateHeader]; ok {
ts = string(tsBytes)
}

return ts
return format.SpanContextFromHeaders(tp, ts)
}
2 changes: 2 additions & 0 deletions vendor/go.opencensus.io/plugin/ocgrpc/client_metrics.go

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

2 changes: 2 additions & 0 deletions vendor/go.opencensus.io/plugin/ocgrpc/server_metrics.go

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

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

18 changes: 10 additions & 8 deletions vendor/go.opencensus.io/stats/view/aggregation.go

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

Loading

0 comments on commit 8d7f6c3

Please sign in to comment.