* Remove trace export support from exporters/otlp
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Update otlp exporter example test to use metric/global package
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Update CHANGELOG
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* completely excise exporters/otlp
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Declare internal/metric module to version it separately
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Remove dependency on metrics module from soon-to-be-stable modules
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Add PR ID to CHANGELOG
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* rename metric/oteltest to metric/metrictest
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Fix metrictest package name in CHANGELOG
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
Test the export timeout by waiting indefinitely for the export to
timeout instead of having a second timer, in its own goroutine, timeout.
The algorithm this replaces fails on machines that are slow and the one
meta-timer is given priority to progress over the export timer that is
being testing, resulting in a false-negative test result.
Move the testing of a BatchSpanProcessor export timeout to its own test
function. This removes the bloat this introduces to the other testing
options and allows customization that enable the testing in a
deterministic manner.
This implements specification requirement:
https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/sdk.md#resource-creation
- Changes `resource.NewWithAttributes` to require a schema URL. The old function
is still available as `resource.NewSchemaless`. This is a breaking change.
We want to encourage using schema URL and make it a conscious choice to have a
resource without schema.
- Merge schema URLs acccording to the spec in resource.Merge.
- Several builtin resource detectors now correctly populate the schema URL.
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* sdk/resource: honor OTEL_SERVICE_NAME in fromEnv resource detector
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* go fmt is still my friend, even if I forget about it occasionally
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Fix import ordering
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
This adds support for schema URL to the Tracer according to the specification:
https://github.com/open-telemetry/opentelemetry-specification/pull/1666
(Link to replaced by the link to the spec after that PR is merged)
For the future: once the proto is updated we will need to populate the
schema_url field in the messages.
* Refactor TraceState
* Update tracecontext propagator to use new TraceState
* Add TraceStateFromKeyValues to oteltest
* Use oteltest to test TraceState
* Replace IsEmpty with Len for TraceState
* Replace ParseTraceState with ParseTraceStateString
* Clean up naming
* Add immutability test for TraceState
* Add changes to changelog
* Fixes
* Document argument type change in changelog
* Address feedback
Remove circularity of TestTraceStateLen.
* Remove TODO from ReadOnlySpan interface
* Remove the Tracer method from the ReadOnlySpan
This is not required by the specification nor the use of this interface.
* Remove IsRecording from the ReadOnlySpan interface
A read-only span value does not need to know if updates to it will be
recorded. It by definition cannot be updated so no point in
communicating if an update would be recorded.
* Document the ReadOnlySpan interface
* Rename messageEvent* to just event*
* Move the SpanSnapshot into its own file
* Update ReadOnlySpan interface with meta info methods
Add the DroppedAttributes, DroppedLinks, DroppedEvents, and
ChildSpanCount methods to the interface to return additional information
about the span not specified by the specification, but that we are
already providing.
* Add SpanStub to the sdk/trace/tracetest pkg
* Redefine ExportSpans of SpanExporter with ReadOnlySpan
* Rename SpanSnapshot to snapshot and purge docs
* Remove Snapshot method from snapshot type
This method is a hold-over from previous version of the ReadOnlySpan
interface is not needed.
* Update CHANGELOG with changes
Add Status type to SDK
Use this type to encapsulate the Span status similar to the Event type
encapsulating a Span event and the Link type a span link.
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Removed different types of Detectors for Resources.
This change simplifies different types of collectors into one list. The
order of this list determines how they are applied. Defaults are
applied when the user does not supply any detectors. To achieve
default behavior and additional behavior a DefaultDetectors struct has been
created
* missed prometheus test.
* Changed behavior around WithDetectors(nil)
Added examples of use of WithDetectors.
* Added NoOp example
* Changed test to reflect acutal default case
This changes because WithDetector() no longer is the same as not using WithDetector()
* Unexports the noOp detector
* Updated changelog
* Fixes to spelling mistakes.
* Added NewEmptyResouce and unexported builtin detectors
* Fix for prometheus example
* Resource has two Rs
I need to get a new R key it seems.
Co-authored-by: Sam Xie <xsambundy@gmail.com>
* Replaced NewEmptyResource() with New()
* Fix test function name
* Comment fixups.
* Apply suggestions from code review
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Sam Xie <xsambundy@gmail.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Move the Event type from the API to the SDK
This type is not used in the API. It is used in the SDK and then through
the processing pipelines. Move it to the package that originates its use.
* Add changes to changelog
* Update CHANGELOG.md
Co-authored-by: Gustavo Silva Paiva <guustavo.paiva@gmail.com>
Co-authored-by: Gustavo Silva Paiva <guustavo.paiva@gmail.com>
* drop failed to exporter batches and return error when forcing flush a span processor
* changelog
* changelog
* change should export condition
* cleanup
* Honor context Done in SSP Shutdown
* Update PR number in changelog
* Update comment
* Add tests
* Make tests more concise
* Restructure tests for readability
* WIP: OS and Process resource detectors
* Completed documentation headers
* Added empty test files for OS and Process resource functions
* Split long line
* Added resource.WithOS function test
* Added resource.WithProcess* functions tests
* Renamed osDetector and WithOS function to better reflect they only add the os.type attribute
* Updated changelog
* WIP: possible use of wrappers for getting attribute values
* Refined implementation of wrapper functions providing os/runtime/user information
* Added PR number to new changelog entries
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Fix wrong function name in documentation header
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Fixed wording in WithProcessOwner documentation header
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Updated osTypeDetector
* Replaced ToUpper with ToLower to match the current convention.
* Used runtimeOS provider to get the OS name.
* Adapted WithOSType test to mock runtime providers
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* updated controller to merge default resource with environment resource
* updated TracerProvider to merge default resource with environment resource
* Added Changelog entry
* Added resource.Environment(), modified resource.Default() for environment vairable and WithResource() configuration for TracerProvider and Controller
* Update CHANGELOG.md
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Moved environment detector to defaultResource initialization, added test cases
* Changes to default resource initialization
* made changes to the test cases
* added merging of resource with environment resource
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Add SpanProcessor example for Span annotation on start
* Remove New* func to make more concise
* Add doc for AttrsFunc
* Move overview comment to top
* Update based on feedback
* Remove AttrsFunc type
* Use OnEnd to print instead of separate exporter
* Move the tracer declaration
* Made copy of attribute.KeyValue
* Add comments and test
* move test to sdk/metric
* Update CHANGELOG.md
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Add label order assertions for final results
* Update CHANGELOG PR number
* Revert code changes and update docs
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Add test to check bsp ignores OnEnd and ForceFlush post shutdown
* Add to CHANGELOG
* Check for err return value
* Stop test execution if there's error with shutting down bsp
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Use assert to check there's no error calling bsp.ForceFlush()
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Import require
* Add error message for assertion on be.len()
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Make TraceFlags spec-compliant
* Remove `trace.FlagsDebug` and `trace.FlagsDeferred`
* These are used only by the B3 propagator and will be handled there in the `context.Context`
* Make `trace.TraceFlags` a defined type, aliasing `byte`
* Move `IsSampled` method from `trace.SpanContext` to `trace.TraceFlags`
* Add `Sampled(bool)` method to `trace.TraceFlags`
* Implement `Stringer` and `json.Marshaler` for `trace.TraceFlags`
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Rename `TraceFlags.Sampled()` to `TraceFlags.WithSampled()` for consistency
* Restore `SpanContext.IsSampled()` method.
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
Adds support for the opentelemetry exceptions semantic conventions. In
short, this has RecordError produce an exception event with exception
attributes instead of using the error event and error attributes.
While golang does not have exceptions, the spec itself does not
differentiate between errors and exceptions for recording purposes.
RecordError was kept as the method name, both for backwards
compatibility and to reduce confusion (the method signature takes in a
golang error object). The spec appears to allow this, as it suggests the
method is optional and signature may reflect whatever is most appropriate
for the language implementing it.
It may seem non-intuitive to log an exception event from a method called
RecordError, but it's beneficial to have consistent behavior across all
opentelemetry SDKs. Downstream projects like the opentelemetry-collector
can build off of the published API and not special case behaviors from
individual languages.
* Adjust TestRecording fucntion to validate with and without sampling. correct span.isRecording logic to return false when not being sampled
* Changed to TestExectutionTracerTaskEnd to only expect 1 span to increment instead of all 3
* added changelog entry
* Updated CHANGELOG.md
* Remove newline from isRecording()
* Rewrite TestSpanIsRecording to include table based
tests and check for when span is ended immediately
* Update sdk/trace/trace_test.go
Improve readability of test name
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Update sdk/trace/trace_test.go
Improve readability of test name
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Update CHANGELOG.md
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Update sdk/trace_test.go test comments
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Update SamplingParameters
Remove HasRemoteParent fields from SamplingParameters. The
HasRemoteParent field is a duplicate of the Remote field of the parent
span context contained in the ParentContext.
Change the `ParentContext` field from storing a `SpanContext` to a
`context.Context` that holds the parent span. This is to conform with
the OpenTelemetry specification and resolve#1727.
* Update PR number
* Update SpanSnapshot to use parent SpanContext
Having only the parent span ID and a separate field to communicate if
the parent was remote does not provide a comprehensive view of the
parent span nor is it an efficient way to transmit this information.
Update the SpanSnapshot to have a `Parent` field that contains the
parent span context. This field replaces the ParentSpanID and
HasRemoteParent fields.
* Revert SamplingParameters span change
* Update CHANGELOG with PR number
* Store Span instead of local/remote SpanContext in Context
Now that the SpanContext has a remote identifier, storing a Span's
SpanContext two separate ways in a Context (one for local another for
remote) is unnecessary and adds complication throughout the project when
determining heredity of a Span. This moves to storing the Span directly
in the Context uniformly (for both local and remote) as current Span. In
the process, it updates the getter/setter functionality the `trace`
package provides and replaces the distributed heredity logic throughout
the project with just using the current Span as the parent if it exists.
* Update trace/context.go
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Assert propagators context remote state
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Remove links on NewRoot spans
To ensure forwards compatibility, remove the unspecified links currently
set on `NewRoot` spans.
Resolves#461
* Remove links from oteltest tracer to match
The makeSamplingDecision function is a wrapper around the provider
sampler calling ShouldSample with a duplicate configuration struct. That
duplication and need for translation as well as the addition function
call is unnecessary, this function is called in only one place.
Resolves#1706
This patch removes `ApplyConfig` method and `Config` struct from
`go.opentelemetry.io/otel/sdk/trace` package. To ensure valid config
for TracerProvider, it adds `ensureValidTracerProviderConfig` private
function.
Jaeger and Zipkin have been used the `Config` directly across package
boundaries. Since `Config` is removed, they can't use it. This change,
thus, replaces `WithSDK` with `WithSDKOptions`.
Resolves#1636, #1705.
* Rename WithDefaultSampler TracerProvider option to WithSampler
The term "DefaultSampler" comes from early ideas of this project where
there would be overriding samplers lower in the trace SDK. This
overriding does not exist and if it is going to be introduced in the
future the sampler associated with the TracerProvider is already scoped
based on that association (no need to scope with a name). This renames
the TracerProvider option to not include this anachronism.
* Update PR number in CHANGELOG
* Propagate rename
* Update defaults documentation for TracerProvider
* Update sdk/trace/provider.go
Co-authored-by: Steven E. Harris <seh@panix.com>
* Update sdk/trace/provider.go
Co-authored-by: Steven E. Harris <seh@panix.com>
* Add remote property to SpanContext
* Set SpanContext.remote when extracting context in TraceContext propagator
* Ensure remote flag is set when inserting remote SpanContext into context
* Ensure tests are expecting remote flag in SpanContext where appropriate
* Update CHANGELOG.md
* Apply PR feedback
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Add Valid method to KeyValue
* Use KeyValue.Valid in attribute add on Span
* Resource StringDetector errors for invalid attribute
* Ignore invalid attr in NewWithAttributes
The OpenTelemetry specification requires attributes conform to a
standard evaluated and returned by attribute.KeyValue.Valid. To comply
with the specification, Resources created from NewWithAttributes need to
only contain valid attributes. This adds a check to ensure this and
drops invalid attributes passed as arguments.
* Add changes to changelog
* Add nolint comment
The attribute.Set is (possibly overly) optimized to avoid allocations.
The returned value from the constructor is a value of a Set, not a
pointer to the Set. A Set contains a lock value and pointer methods so
passing the Set value raises the copylock go vet error. This copies the
same nolint comment from the `NewSet` method this used to use.
* Apply suggestions from code review
Co-authored-by: Sam Xie <xsambundy@gmail.com>
Co-authored-by: Sam Xie <xsambundy@gmail.com>
* Rename resource pkg label vars and methods
The former `labels` package is now named `attributes` to conform with
the specification requirement. This removes the lingering `label` term
from the `resource` package.
Resolve https://github.com/open-telemetry/opentelemetry-go/issues/1691
* Update PR number in CHANGELOG
* Propagate rename to the prometheus exporter pkg
* Remove `WithRecord()` option from SpanConfig options
This brings the trace API into conformance with the specification.
* Add entry to CHANGELOG
Fixes#192
* Updated CHANGELOG with PR#
* Cleaned up CHANGELOG notes
* fixup! Merge remote-tracking branch 'upstream/main' into remove-with-record
* Use new spanContext API to set traceflags, tracestate
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Make SpanContext Immutable
* Adds NewSpanContext() constructor and SpanContextConfig{} struct for
constructing a new SpanContext when all fields are known
* Adds With<field>() methods to SpanContext for deriving a SpanContext
with a single field changed.
* Updates all uses of SpanContext to use the new API
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Update CHANGELOG.md
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Add tests for new SpanContext constructor and derivation
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Address PR feedback
* Fix new uses of SpanContext from main
* sdk/trace: add missing options to tracer provider
This change adds `WithDefaultSampler` and `WithSpanLimits` to the tracer
provider and removed `WithConfig` from it.
Before this change, `WithConfig` is the only way to set sampler or
limits of a span. However, it is prone to misuse, since `WithConfig` can
override tracing configurations that are configured by `WithResource` or
`WithIDGenerator`. Thus to fix this, it adds new functional options -
`WithDefaultSampler` and `WithSpanLimits` and removes `WithConfig`.
Resolves#1631.
* Update sdk/trace/provider.go
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Update sdk/trace/provider.go
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* rebase and remove WithConfig
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Add ForceFlush method to TracerProvider
The specification requires that a TracerProvider have a ForceFlush
method that can be set with a timeout, return any error to the caller,
and have all the registered span processors export their spans. This
updates the SpanProcessor.ForceFlush method to accept a context and
return an error and plumbs this method into a new ForceFlush method of
the SDK TracerProvider.
Additionally, this corrects the TracerProvider Shutdown method. This
method as well needs to return to the caller any failure it encounters
according to the specification. This returns an error if it cannot type
assert the spanProcessorStates or if shutting down a span processor
results in an error.
Resolves#1606
* Add changes to changelog
* Apply suggestions from code review
Co-authored-by: Steven E. Harris <seh@panix.com>
* Cancel export context when BSP stops
* Defer cancel call in BSP span processor funcs
Co-authored-by: Steven E. Harris <seh@panix.com>
to provide consistent naming across the code base, deprecate pusher in
favor of exporter naming convention.
Signed-off-by: ldelossa <ldelossa@redhat.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Update the SimpleSpanProcessor
Subsequent calls to OnStart, OnEnd, and ForceFlush should be ignored
gracefully once Shutdown has been called. This implements that behavior
by shutting down the exporter and removing it from the
SimpleSpanProcessor so subsequent calls to OnEnd will be no-ops.
* Add changes to changelog
* Lock in sync.Once of shutdown instead of Shutdown scope
* Update CHANGELOG.md
Co-authored-by: Steven E. Harris <seh@panix.com>
* Release exporterMu before shutdown exporter
* Move changes to unreleased section of changelog
* Update simple_span_processor.go
revert comment change from merge
Co-authored-by: Steven E. Harris <seh@panix.com>
* Fix#1658 SpanStatus description set only when status code is set to error
* Update CHANGELOG.md
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Add tests for propagation of Sampler Tracestate changes
Sampler specification indicates that SamplingResult.Tracestate
should be associated with the SpanContext of the newly created span.
See
https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/sdk.md#sampler
* Fix SamplingResult TraceState propagation
* Add Changelog entry
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Make timestamps sequential in lastvalue agg check
* Set PR number in changelog
* Fix location of sleep
The lastvalue timestamp is set on update. Correct the location of the
sleep to bridge the update of the two different aggregators.
* Stagger timestamps in exact aggregator tests
Fixes#1559.
* Missed one
* Yield while you wait
* Just sleep for a teeny tiny bit
* Oops, wrong PR in Changelog
* Make sure that *some* time passes
* Keep time comparisons relaxed
* Vendor Thrift dependency
* Fix build
* Changelog entry
* Ignore third_party for coverage purposes
* Re-run tests
* Re-run tests
* Re-run tests
* Re-run tests
* Relax time comparisons
Fixes#1559.
Some unit tests were flaking in CI because they expected the timestamp
to advance during a test, when it's possible for it to be unchanged
instead. This change switches the offending "<" comparisons to "<=".
* Re-run tests
* Relax more time comparisons
* Re-run tests
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
The spec makes it optional to attempt resampling when changing the name
of a span and we're not sure whether it can be done in an appropriate
manner, so it's best to not do it at all for now. We can try again
later if we find a good way to do it.
* Document SDK span ending stops recording
* Guard SDK span set methods with record check
* Document SDK span exported API
Make note of methods that do nothing if span is not recording.
* Document SDK span End recording check
* Document the SetName method
* Add a tool to auto-generate replace directives
* Auto-generated changes from previous commit
* Create new modules required for trace release
* otel/metric
* otel/trace
* otel/oteltest
* otel/sdk/export/metric
* otel/sdk/metric
Relates to #1467
* Move metric-related public API out of otel/ pkg
Move GetMeterProvider, Meter and SetMeterProvider to new package
otel/metric/global in the otel/metric module.
This will allow otel/ module to be released as v1.0.
* Include PR references in CHANGELOG
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Check for root dir
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Update README master branch URL to main
* Remove master branch from workflow triggers
The master branch has been renamed to main.
* Add changes to CHANGELOG
* Rename other projects default branch
All of OpenTelemetry is moving to rename `master` to `main`, this
updates all other URLs for those projects.
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
The minimum version of Go this project supports is 1.14 meaning that all
supported versions of Go support the runtime/trace package. Remove
specific build overrides for versions of Go prior to 1.11 that are not
supported by this project.
* Add a Config/Option for histogram
* Just one option here
* Test fixes
* Support and test int64 histograms
* Changelog
* Lint
* Un-export three things.
* Push->basic
* Repackage
* Rename away from push
* Make exporter optional; export from a separate goroutine
* Move pull_test into controller_test
* Precommit pass
* New OTLP/Prom example
* Precommit
* Fix the example
* Shorten the example
* Test starting controller w/o exporter
* Test export timeout
* Remove ancient example & lint
* go.mod revert & tidy
* Comments
* Tidy a diff
* Tidy a diff
* Move export kind selector in the new example
* Split this test into its original parts
* Reduce diff size
* Changelog
* Remove extra Add/Done pair
* Remove unused stopCh param; document the Stop behavior
* Typo
* Use ctx
* Missed v0.15
* Apply PR feedback
* Precommit pass
* 0.14 -> 0.15 in new file
* Remove diff chunk markers
* Fix OTLP example
* Upstream
* dashpole comments
* aneurysm9 feedback
* Tidy go.sum
* Add Tracestate into the SamplingResult struct
Add `trace.Tracestate` field into the SDK `trace.SamplingResult` struct.
Use ParentContext from SamplingParameters to return Tracestate in
`traceIDRatioSampler`, `alwaysOnSampler` and `alwaysOffSampler`.
Add a new test to check that Tracestate is passed.
* Updated CHANGELOG.md for #1432 PR
Added changes description for #1432.
* Update sdk/trace/sampling_test.go
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Add TraceState to API
* Add tests for TraceState
* Update related tests
- stdout exporter test
- SDK test
* Update OTLP span transform
* Update CHANGELOG
* Change TraceState to struct instead of pointer
- Adjust tests for trace API
- Adjust adjacent parts of codebase (test utils, SDK etc.)
* Add methods to assert equality
- for type SpanContext, if SpanID, TraceID, TraceFlag and TraceState are
equal
- for type TraceState, if entries of both respective trace states are
equal
Signed-off-by: Matej Gera <matejgera@gmail.com>
* Copy values for new TraceState, adjust tests
* Use IsEqualWith in remaining tests instead of assertion func
* Further feedback, minor improvements
- Move IsEqualWith method to be only in test package
- Minor improvements, typos etc.
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Call otel.Handle with non-nil errors
That's what normally happens in other call sites. Those two didn't
check it, but passed the "error" to Handle. The default, delegating
implementation of ErrorHandler was printing the error unconditionally,
which resulted in pointless lines like `2020/12/07 19:51:28 <nil>` in
demos, for example.
* Add tests
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Store span data directly in the span
- Nesting only some of a span's data in a `data` field (with the rest
of the data living direclty in the `span` struct) is confusing.
- export.SpanData is meant to be an immutable *snapshot* of a span,
not the "authoritative" state of the span.
- Refactor attributesMap.toSpanData into toKeyValue and make it
return a []label.KeyValue which is clearer than modifying a struct
passed to the function.
- Read droppedCount from the attributesMap as a separate operation
instead of setting it from within attributesMap.toSpanData.
- Set a span's end time in the span itself rather than in the
SpanData to allow reading the span's end time after a span has
ended.
- Set a span's end time as soon as possible within span.End so that
we don't influence the span's end time with operations such as
fetching span processors and generating span data.
- Remove error handling for uninitialized spans. This check seems to
be necessary only because we used to have an *export.SpanData field
which could be nil. Now that we no longer have this field I think we
can safely remove the check. The error isn't used anywhere else so
remove it, too.
* Store parent as trace.SpanContext
The spec requires that the parent field of a Span be a Span, a
SpanContext or null.
Rather than extracting the parent's span ID from the trace.SpanContext
which we get from the tracer, store the trace.SpanContext as is and
explicitly extract the parent's span ID where necessary.
* Add ReadOnlySpan interface
Use this interface instead of export.SpanData in places where reading
information from a span is necessary. Use export.SpanData only when
exporting spans.
* Add ReadWriteSpan interface
Use this interface instead of export.SpanData in places where it is
necessary to read information from a span and write to it at the same
time.
* Rename export.SpanData to SpanSnapshot
SpanSnapshot represents the nature of this type as well as its
intended use more accurately.
Clarify the purpose of SpanSnapshot in the docs and emphasize what
should and should not be done with it.
* Rephrase attributesMap doc comment
"refreshes" is wrong for plural ("updates").
* Refactor span.End()
- Improve accuracy of span duration. Record span end time ASAP. We
want to measure a user operation as accurately as possible, which
means we want to mark the end time of a span as soon as possible
after span.End() is called. Any operations we do inside span.End()
before storing the end time affect the total duration of the span,
and although these operations are rather fast at the moment they
still seem to affect the duration of the span by "artificially"
adding time between the start and end timestamps. This is relevant
only in cases where the end time isn't explicitly specified.
- Remove redundant idempotence check. Now that IsRecording() is based
on the value of span.endTime, IsRecording() will always return
false after span.End() had been called because span.endTime won't
be zero. This means we no longer need span.endOnce.
- Improve TestEndSpanTwice so that it also ensures subsequent calls
to span.End() don't modify the span's end time.
* Update changelog
Co-authored-by: Tyler Yahn <codingalias@gmail.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Let SynchronizedMove(nil) reset and discard
* Add common test for SynchronizedMove(nil)
* End-to-end test for the Processor and SumObserver
* Implement SynchronizedMove(nil) six ways
* Lint
* Changelog
* Test no reset for wrong aggregator type; Fix four Aggregators
* Cleanup
* imports
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Enable support for externally-defined ID generators
* Moved the SDK's `internal.IDGenerator` interface to the `sdk/trace`
package.
* Added `trace.WithIDGenerator()` `TracerProviderOption`.
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Update CHANGELOG.md with PR info
* Address PR feedback:
* Fix IDGenerator godoc comment
* rename type defaultIDGenerator to randomIDGenerator
* rename defIDGenerator() to defaultIDGenerator()
Signed-off-by: Anthony J Mirabella <a9@aneurysm9.com>
* Rework trace.IDGenerator interface
* NewTraceID() -> NewIDs(ctx)
** Returns both TraceID and SpanID
* NewSpanID() -> NewSpanID(ctx, traceID)
** Returns only SpanID, has access to TraceID
* Both methods now receive a context, from which they may extract
information
* startSpanInternal() updated to receive a context to pass to the ID
generator
* Drop outdated comment from docblock
Co-authored-by: Krzesimir Nowak <qdlacz@gmail.com>
Co-authored-by: Krzesimir Nowak <qdlacz@gmail.com>
* Move global code to toplevel package
* Move version function to toplevel package
* Update changelog
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Add parent context to SpanProcessor.OnStart
The spec requires doing so. Right now SpanProcessor implementations
aren't doing anything with this argument.
* Update changelog
* Fix typo in test name
* Move registry package under metric
* Move Number type to the metric/number subpackage
This also renames NumberKind type to Kind.
* Update changelog
* Drop outdated comment
Remove cruft about spanStore.
Update documentation about how span.mu is used (related to #1311).
Reformat to conform with idiomatic field documentation.
* Update README
Move project status to top of project documentation and add explicit
warnings that this project may introduce breaking changes.
* Add disclaimer to public packages docs
* Use explicit warning in README
* Add a Shutdown method to api TraceProvider
- sdktraceprovider shutdown span processors
- In examples, replace processosr shutdown with
traceprovider's shutdown
Signed-off-by: Hui Kang <kangh@us.ibm.com>
* remove shutdown in the api provider interface
* Add context in parameter and return error
* handle error in shutdown
* Update CHANGELOG.md
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Update metric Kind to InstrumentKind
* Update all the other modules with Kind rename
* Update metric Descriptor with instrument Kind rename
* Update other modules with Descriptor method rename
* Update OTLP exporter test field name
* Rename kind filenames
* Add changes to CHANGELOG
* Fix documentation for Grouping and PrecomputedSum
* Rename meter.go to metric.go
* Move descriptor.go into metric.go
* Move must.go into metric.go
* Move instruments into metric_instrument.go
* Rename metric api_test.go to metric_test.go
* Move instrumentkind_test.go into metric_test.go
* Rename sdkapi.go metric_sdkapi.go
* Move api/metric into otel
* Update to use moved packages
* Rename otel.go to error_handler.go
* Add changes to CHANGELOG
* Fix merge conflict resolution error
* Update Span API event methods
Remove the context argument from the event methods. It is unused and can
be added back in as a passed option if needed in the future.
Update AddEvent to accept a required name and a set of options. These
options are the new EventOption type that can be used to configure a
SpanConfig Timestamp and Attributes.
Remove the AddEventWithTimestamp method as it is redundant to calling
AddEvent with a WithTimestamp option.
Update RecordError to also accept the EventOptions.
* Add changes to CHANGELOG
* Add LifeCycleOption
Use the LifeCycleOption to encapsulate the options passed to a span for
life cycle events.
* Update metric Kind to InstrumentKind
* Update all the other modules with Kind rename
* Update metric Descriptor with instrument Kind rename
* Update other modules with Descriptor method rename
* Update OTLP exporter test field name
* Rename kind filenames
* Add changes to CHANGELOG
* Fix documentation for Grouping and PrecomputedSum
* Call sampler on local child spans.
* Update CHANGELOG.md
* Adding a test for calling the sampler on local child spans
* Add clarifying comment to test
* Move trace API to otel
* Move tracetest to oteltest
* Update package documentation
* Remove old api/trace package
* Lint
* Add changes to CHANGELOG
* Add tests for rest of trace API
* Apply suggestions from code review
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Documentation fixes
Includes resolutions for review issues.
* Correct CHANGELOG post release
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Update codes to match specification
* Add changes to changelog
* go mod tidy
* Add unit tests for codes
* Update SetStatus methods to only filter Unset
* Update apitest code being tested
- Test by span attributes added by processors in the order
they were registered.
Signed-off-by: Hui Kang <kangh@us.ibm.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Rename *Provider names
There is overlap in naming with MeterProviders and TracerProviders. This
is means the specification is not implemented and these types can not
exist in the same package (#1179). This makes each type and related
functions and types explicit.
* Add changes to CHANGELOG
It is unreliable with no clear good way to make it reliable. The
ForceFlush() method is a simple passthrough to bsp.exportSpans() and the
existing tests of that method should suffice.
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Add ForceFlush() method to SpanProcessor interface
* Add a stub implementation to SimpleSpanProcessor
* Add a working implementation to BatchSpanProcessor
* add CHANGELOG.md entry
* Eliminate sleep from BatchSpanProcessor.ForceFlush() test
* Generating test spans serially should reduce test flakiness
* Rename ParentOrElse to ParentBased and enhance it according to the spec
- Renaming of type and sampler function
- Enhancing ParentBased with sampler options
- Set default samplers for each applicable parent-based case
- Adjust ShouldSample(...) func accordingly
* Adjust existing tests for ParentBased and add new ones
- add tests for ParentBased sampler options and description
- renaming in trace_test.go
* Update CHANGELOG.md
* PR feedback
- More clearer naming of structs; add comments where missing
- Adhere to the configuration style guide
* PR feedback - punctuation
* Convert XConfigure into constructors
Previously, we discussed the possibility of converting
the config types into internal ones. But due to the
cyclic dependencies it introduces, we are only
converting XConfigure into constructors and document that
XConfig types are most likely are not going to be directly
used by developers.
In package documents, constructors will be nicely listed
under the config types and they won't be yet another
standalone symbol developers need to learn about.
Fixes#1130.
* Add the changes to the CHANGELOG
* Update trace export interface
Move to conforming to the specification.
* Update documentation in export trace
* Update sdk trace provider to support new trace exporter
* Update SpanProcessors
Support the Provider changes and new trace exporter.
* Update the SDK to support the changes
* Update trace Provider to not return an error
* Update sdk with new Provider return
Also fix the testExporter ExportSpans method
* Update exporters with changes
* Update examples with changes
* Update Changelog
* Move error handling to end of shutdown
* Update exporter interface
Rename to SpanExporter to match specification. Add an error return value
to the Shutdown method based on feedback. Propagate these changes.
Remove the Stop method from the OTLP exporter to avoid confusion and
redundancy.
* Add test to check OTLP Shutdown honors context
* Add Jaeger exporter test for shutdown
* Fix race in Jaeger test
* Unify shutdown behavior and testing
* Update sdk/trace/simple_span_processor.go
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
Co-authored-by: Anthony Mirabella <a9@aneurysm9.com>
* Unify API Span Start/End Options
Replace both with `SpanOption`. Add a unified `SpanConfig` to match and
a `SpanConfigure` function to parse a `SpanConfig` from `SpanOption`s.
Update all the related options to use new `SpanOption`s.
* No non-zero SpanConfig defaults
The SDK uses an internal clock for the current time that cannot be use
if it does not know the time has not been set.
* Append attributes for WithAttributes
This preserves existing behavior.
* Add unit test for SpanConfigure
* Propagate changes
* Update append option documentation
* Update testing comments
* Move comments on guarantees to appropriate function
* Add documentation for SDK methods
Include SDK implementation specific information in the Tracer Start
method and Span End method.
* Add changes to Changelog
* Apply suggestions from code review
Co-authored-by: ET <evantorrie@users.noreply.github.com>
* Update the SpanKind comment in the SpanConfig
Try for a less tautological comment.
Co-authored-by: ET <evantorrie@users.noreply.github.com>
* Change name of ProbabilitySampler to TraceIdRatioBased
* Modify behavior to ignore parent span
* Add test for inclusivity property on TraceIdRatioBased sampler
* Modify tests in `trace_test.go` to reflect change in parent
span behavior
* Add to CHANGELOG
* Satisfy golint
* Update CHANGELOG.md
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Update Tracer configuration.
Conform to API option design outlined in #536.
Add tests to validate new TracerConfigure function
Drop the `instrumentation` prefix.
* Stick with instrumentationVersion for now
* Propagate changes
* Add changes to Changelog
* Make metric test helpers public
* Move everything metric test related to api/metric/metrictest
* Unify metric measurement assertions
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Build on newly release version of go, go 1.15
Remove 1.13 build job per policy of supporting past two releases.
* String conversions in 1.15 require byte, rune or string.
Simply passing an integer now issues a warning.
* Move proto to OTLP exporter
* Update OTLP exporter import of proto
* Use gogo protobuf
To stop using the deprecated github.com/golang/protobuf and match what
the collector is doing, switch to generating OTLP with the
github.com/gogo/protobuf/proto instead of
github.com/golang/protobuf/proto.
* Clean dependencies
Remove all protobuf dependencies from otel package and all of its
dependencies.
* Update CHANGELOG
* Clean OTLP exporter go mod
Remove submodule beforehand to avoid unneeded direct dependencies.
* Use default ref for GitHub workflow
* Update path that triggers proto gen action
* Correct license-check exclusion for OTLP
* Update commented location of the OTLP and code
* Add otel/codes package to replace google.golang.org/grpc/codes
* Replace google.golang.org/grpc/codes with otel/codes
* Update opentracing bridge to use OTel codes
* Update semconv to use OTel codes
* Update SDK to convert from OTel codes to gRPC
* go mod tidy
* Add change to CHANGELOG
* Fix word from feedback
* Clean stale indirect dependency requirements
In the recent changes to isolate the main `otel` package there were many
indirect dependencies of the package that were removed, however, the
go.mod was not automatically cleaned of these. This removes those (and
similar ones in the otel-collector example and otel exporter) and prunes
the go.sum files accordingly.
* Run in a clean system to reproduce build
* Make opentracing bridge into own Go module
* Update dependabot config
* Clean dependencies of project
Now the bridge is a module, clean all upstream modules that no longer
implicitly depend on it.
* Update Changelog
* go mod tidy
http.ResponseWriters may implement additional interfaces
(http.CloseNotifier, http.Flusher, http.Hijacker, http.Pusher,
io.ReaderFrom) that get lost when the ResponseWriter is wrapped in
another object. This change uses the httpsnoop package to wrap the
ResponseWriter so that the resulting object implements any of the
optional interfaces that the original ResponseWriter implements as
well as using the replacement ResponseWriter methods that gather
information for tracing.
* Remove otel/sdk dependency from grpctrace
Use otel/trace/testtrace instead and cleanup testing code.
* Update httptrace to not depend on the SDK
Update testing to use api/trace/testtrace instead.
* Add changes to Changelog
* Make the SDK its own Go module
* Upgrade go.mod to 1.14 project wide
* go mod tidy
* Remove SDK from othttp instrumentation
* Remove dependency on SDK in api/kv pkg
Benchmark the kv package not the SDK here.
* Update api/global benchmarks
Move SDK related tests to SDK where applicable
* Add internal testing SDK implementation
To be used by the API for testing so it does not depend on the actual
SDK.
* Update api/global/internal to use internal/sdk
* Fix lint on sdk/metric benchmark
* Lint internal/sdk
* Merge internal/sdk into api/trace/testtrace
* Update Changelog
* Make the stdout exporter its own package
Follow the pattern of the other exporters.
* Update dependabot with stdout exporter
* Add replace directives for stdout exporter
* Remove outdated example test from metric SDK
* go mod tidy
* Update othttp example test
Remove unused stdout exporter.
* Remove tests in API that depend on stdout exporter
The global package does not need to be validated with the SDK. A more
properly constructed end-to-end integration test should be built if this
is actually needed.
* Add replace clause for otel in stdout go.mod
* Consolidate stdout exporter
* Move config to own file and match project standard
* Abstract Exporter into unified struct
* Rename trace part of the exporter
* Update import paths and configuration
* Update tests
* Update InstallNewPipeline to not return traceProvider
It is a registered global, access it that way.
* Update example_test
* Update docs
* Update example to be for whole package
* Update metric output
Closer match the span output.
* Clean up span output
Print as a batch and cleanup marshaling.
* Correct spelling error in doc
* Add Exporters README
* Update Changelog
* Propagate changes to rest of project
* Lint fixes
* Fix example test in metric SDK
* Add disable config options for trace and metric
Co-authored-by: Liz Fong-Jones <lizf@honeycomb.io>
* Avoid applying stale udpates; add a test
* Add Memory option to basic processor
* Always use memory in the pull controller
* Test the memory option
* Precommit
* Add a Prometheus-specific test
* More comment on Memory option
* Link to 862
* Remove sleep
* Update changelog
* Comment on stale and stateless aggregators
* Update sdk/metric/processor/basic/config.go
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Liz Fong-Jones <lizf@honeycomb.io>
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Added support array attributes
* Changed function signature for AsArray attribute
* Fixed code comments for array attributes
* Fixed typos in comments in value.go
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
fixes#851
This includes all of the associated methods, such as
AsUint64, AsUint64Atomic, AsUint64Ptr, CoerceToUint64, SetUint64
SetUint64Atomic, SwapUint64, SwapUint64Atomic, AddUint64,
AddUint64Atomic, CompamreAndSwapUint64, CompareUint64
Only significant change as a result was converting the histogram
aggregator's `count` state field into an int64 from a `metric.Number`.
Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
* Support instrumentation library in metrics
* Update stdout exporter to display instrumentation info
* Fix tests that use the STDOUT exporter
* Refactor to keep SDK out of API
* Update global Meter and test Meter version
* Revert unneeded import syntax change
* Fix Unit comment
* Update comments
* Update comment
* Revert no-op change to import
* Update Tracer API with instrumentation version
Add option to the `Provider.Tracer` method to specify the
instrumentation version.
Update the global, noop, opentracing bridge, and default SDK
implementations.
This does not propagate the instrumentation library version to the
exported span. That is left for a follow-on PR.
* Revert trace_test.go
This is for the next PR.
* Support instrumentation library in SDK trace exports
* Update Jaeger exporter to export instrumentation
* Fix BatchSpanProcessor.Shutdown to wait until all spans are processed
Currently it exits too soon - before drainQueue is finished
* Check bsp.stopCh to reliably drop span when batcher is stopped
* Enable tests
* Always use WithBlocking
Co-authored-by: Joshua MacDonald <jmacd@users.noreply.github.com>
* Update Tracer API with instrumentation version
Add option to the `Provider.Tracer` method to specify the
instrumentation version.
Update the global, noop, opentracing bridge, and default SDK
implementations.
This does not propagate the instrumentation library version to the
exported span. That is left for a follow-on PR.
* Revert trace_test.go
This is for the next PR.
* Update SDK to include version for default instrumentation
If the instrumentation library name is empty and the default
instrumentation is uses, include the SDK version.
* Update comments and documentation
* Remove default instrumentation version
* Name the BSP tests
* Add a drain wait group; use the stop wait group to avoid leaking a goroutine
* Lint & comments
* Fix
* Use defer/recover
* Restore the Add/Done...
* Restore the Add/Done...
* Consolidate select stmts
* Disable the test
* Lint
* Use better recover