-
Notifications
You must be signed in to change notification settings - Fork 1.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add propagator interface and W3C propagator #85
Merged
Merged
Changes from all commits
Commits
Show all changes
28 commits
Select commit
Hold shift + click to select a range
b4cf5f9
add propagation api.
rghetia 067cb3f
add http propagator interface and w3c propagator implementation.
rghetia fdaf0f0
remove Extract api from trace.
rghetia 7137e7b
remove Extract interface for tracer.
rghetia d9c6157
fix copyright.
rghetia 1e2f4ea
fix variable names and comments.
rghetia 8215b36
replace INVALID_SPAN_CONTEXT with EmptySpanContext function.
rghetia ae02d90
move inject/extract out of trace.
rghetia ddeb734
fix tag.Map.
rghetia ba6cda4
make carrier as interface instead of http.Request.
rghetia 0c84304
rename structs and update doc comments..
rghetia 034c2fc
add doc.go
rghetia 2b279af
update doc.
rghetia 8d3cced
add noop propagator.
rghetia a55726d
add new propagation api with Supplier interface.
rghetia 8fe1085
remove old propagator.
rghetia db8f60b
rename propagator to TextFormatPropagator.
rghetia 9c3ecb6
rename default tracer/span as pass_through tracer/span.
rghetia e5e1a93
add test for pass through tracer.
rghetia ecd6ba7
add missing interface to pass through tracer.
rghetia 2a5fc9e
return SpanContext instead of contex.Context from Extract interface.
rghetia c8a05ec
fix review comments.
rghetia d759fec
add more test cases for traceContext extraction.
rghetia 418b0f4
remove tidy temporarily from circle-ci target to avoid build failure.
rghetia f271dfc
allow header ending in dash '-'.
rghetia 4ca80c3
add inject test for non-zero value other than 01 for traceoption
rghetia 064af5e
add AddLink and Link interface to MockSpan
rghetia ed41e82
fix running go mod tidy on every build.
rghetia File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing doc string.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
added.