-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add propagator interface and W3C propagator (#85)
* add propagation api. * add http propagator interface and w3c propagator implementation. * remove Extract api from trace. * remove Extract interface for tracer. * fix copyright. * fix variable names and comments. * move inject/extract out of trace. * replace INVALID_SPAN_CONTEXT with EmptySpanContext function. * fix tag.Map. * make carrier as interface instead of http.Request. * rename structs and update doc comments.. * add doc.go * update doc. * add noop propagator. * add new propagation api with Supplier interface. - added Default Tracer which simply propagates SpanContext. - added CopyOfRemote option to simply create remote span. * remove old propagator. * rename propagator to TextFormatPropagator. * rename default tracer/span as pass_through tracer/span. * add test for pass through tracer. * add missing interface to pass through tracer. * return SpanContext instead of contex.Context from Extract interface. - also remove PassThroughTracer * fix review comments. * add more test cases for traceContext extraction. * remove tidy temporarily from circle-ci target to avoid build failure. * allow header ending in dash '-'. * add inject test for non-zero value other than 01 for traceoption * add AddLink and Link interface to MockSpan * fix running go mod tidy on every build.
- Loading branch information
Showing
20 changed files
with
749 additions
and
109 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// Copyright 2019, OpenTelemetry 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 propagation contains interface definition for Binary and TextFormat propagators. | ||
package propagation // import "go.opentelemetry.io/api/propagation" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
// Copyright 2019, OpenTelemetry 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 propagation | ||
|
||
import ( | ||
"context" | ||
|
||
"go.opentelemetry.io/api/core" | ||
) | ||
|
||
// NoopTextFormatPropagator implements TextFormatPropagator that does nothing. | ||
type NoopTextFormatPropagator struct{} | ||
|
||
var _ TextFormatPropagator = NoopTextFormatPropagator{} | ||
|
||
// Inject does nothing. | ||
func (np NoopTextFormatPropagator) Inject(ctx context.Context, supplier Supplier) { | ||
} | ||
|
||
// Extract does nothing and returns an empty SpanContext | ||
func (np NoopTextFormatPropagator) Extract(ctx context.Context, supplier Supplier) core.SpanContext { | ||
return core.EmptySpanContext() | ||
} | ||
|
||
// GetAllKeys returns empty list of strings. | ||
func (np NoopTextFormatPropagator) GetAllKeys() []string { | ||
return []string{} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// Copyright 2019, OpenTelemetry 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 propagation | ||
|
||
import ( | ||
"context" | ||
|
||
"go.opentelemetry.io/api/core" | ||
) | ||
|
||
// TextFormatPropagator is an interface that specifies methods to inject and extract SpanContext | ||
// into/from a carrier using Supplier interface. | ||
// For example, HTTP Trace Context propagator would encode SpanContext into W3C Trace | ||
// Context Header and set the header into HttpRequest. | ||
type TextFormatPropagator interface { | ||
// Inject method retrieves current SpanContext from the ctx, encodes it into propagator | ||
// specific format and then injects the encoded SpanContext using supplier into a carrier | ||
// associated with the supplier. | ||
Inject(ctx context.Context, supplier Supplier) | ||
|
||
// Extract method retrieves encoded SpanContext using supplier from the associated carrier. | ||
// It decodes the SpanContext and returns it. If no SpanContext was retrieved OR | ||
// if the retrieved SpanContext is invalid then an empty SpanContext is returned. | ||
Extract(ctx context.Context, supplier Supplier) core.SpanContext | ||
|
||
// GetAllKeys returns all the keys that this propagator injects/extracts into/from a | ||
// carrier. The use cases for this are | ||
// * allow pre-allocation of fields, especially in systems like gRPC Metadata | ||
// * allow a single-pass over an iterator (ex OpenTracing has no getter in TextMap) | ||
GetAllKeys() []string | ||
} | ||
|
||
// Supplier is an interface that specifies methods to retrieve and store | ||
// value for a key to an associated carrier. | ||
// Get method retrieves the value for a given key. | ||
// Set method stores the value for a given key. | ||
type Supplier interface { | ||
Get(key string) string | ||
Set(key string, value string) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
// Copyright 2019, OpenTelemetry 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 trace | ||
|
||
import ( | ||
"context" | ||
|
||
"google.golang.org/grpc/codes" | ||
|
||
"go.opentelemetry.io/api/core" | ||
"go.opentelemetry.io/api/tag" | ||
apitrace "go.opentelemetry.io/api/trace" | ||
) | ||
|
||
// MockSpan is a mock span used in association with MockTracer for testing purpose only. | ||
type MockSpan struct { | ||
sc core.SpanContext | ||
tracer apitrace.Tracer | ||
} | ||
|
||
var _ apitrace.Span = (*MockSpan)(nil) | ||
|
||
// SpanContext returns associated core.SpanContext. If the receiver is nil it returns | ||
// an empty core.SpanContext | ||
func (ms *MockSpan) SpanContext() core.SpanContext { | ||
if ms == nil { | ||
core.EmptySpanContext() | ||
} | ||
return ms.sc | ||
} | ||
|
||
// IsRecordingEvents always returns false for MockSpan. | ||
func (ms *MockSpan) IsRecordingEvents() bool { | ||
return false | ||
} | ||
|
||
// SetStatus does nothing. | ||
func (ms *MockSpan) SetStatus(status codes.Code) { | ||
} | ||
|
||
// SetError does nothing. | ||
func (ms *MockSpan) SetError(v bool) { | ||
} | ||
|
||
// SetAttribute does nothing. | ||
func (ms *MockSpan) SetAttribute(attribute core.KeyValue) { | ||
} | ||
|
||
// SetAttributes does nothing. | ||
func (ms *MockSpan) SetAttributes(attributes ...core.KeyValue) { | ||
} | ||
|
||
// ModifyAttribute does nothing. | ||
func (ms *MockSpan) ModifyAttribute(mutator tag.Mutator) { | ||
} | ||
|
||
// ModifyAttributes does nothing. | ||
func (ms *MockSpan) ModifyAttributes(mutators ...tag.Mutator) { | ||
} | ||
|
||
// Finish does nothing. | ||
func (ms *MockSpan) Finish(options ...apitrace.FinishOption) { | ||
} | ||
|
||
// SetName does nothing. | ||
func (ms *MockSpan) SetName(name string) { | ||
} | ||
|
||
// Tracer returns MockTracer implementation of Tracer. | ||
func (ms *MockSpan) Tracer() apitrace.Tracer { | ||
return ms.tracer | ||
} | ||
|
||
// AddEvent does nothing. | ||
func (ms *MockSpan) AddEvent(ctx context.Context, msg string, attrs ...core.KeyValue) { | ||
} | ||
|
||
// AddLink does nothing. | ||
func (ms *MockSpan) AddLink(link apitrace.Link) { | ||
} | ||
|
||
// Link does nothing. | ||
func (ms *MockSpan) Link(sc core.SpanContext, attrs ...core.KeyValue) { | ||
} |
Oops, something went wrong.