123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- // Copyright The OpenTelemetry Authors
- // SPDX-License-Identifier: Apache-2.0
- #pragma once
- // Please refer to provider.h for documentation on how to obtain a Tracer object.
- //
- // This file is part of the internal implementation of OpenTelemetry. Nothing in this file should be
- // used directly. Please refer to span.h and tracer.h for documentation on these interfaces.
- #include <stdint.h>
- #include <utility>
- #include "opentelemetry/common/attribute_value.h"
- #include "opentelemetry/common/key_value_iterable.h"
- #include "opentelemetry/common/timestamp.h"
- #include "opentelemetry/context/context_value.h"
- #include "opentelemetry/nostd/shared_ptr.h"
- #include "opentelemetry/nostd/string_view.h"
- #include "opentelemetry/nostd/unique_ptr.h"
- #include "opentelemetry/trace/span.h"
- #include "opentelemetry/trace/span_context.h"
- #include "opentelemetry/trace/span_context_kv_iterable.h"
- #include "opentelemetry/trace/span_metadata.h"
- #include "opentelemetry/trace/span_startoptions.h"
- #include "opentelemetry/trace/tracer.h"
- #include "opentelemetry/trace/tracer_provider.h"
- #include "opentelemetry/version.h"
- namespace trace_api = opentelemetry::trace;
- OPENTELEMETRY_BEGIN_NAMESPACE
- namespace trace
- {
- /**
- * No-op implementation of Span. This class should not be used directly.
- */
- class OPENTELEMETRY_EXPORT NoopSpan final : public Span
- {
- public:
- explicit NoopSpan(const std::shared_ptr<Tracer> &tracer) noexcept
- : tracer_{tracer}, span_context_{new SpanContext(false, false)}
- {}
- explicit NoopSpan(const std::shared_ptr<Tracer> &tracer,
- nostd::unique_ptr<SpanContext> span_context) noexcept
- : tracer_{tracer}, span_context_{std::move(span_context)}
- {}
- void SetAttribute(nostd::string_view /*key*/,
- const common::AttributeValue & /*value*/) noexcept override
- {}
- void AddEvent(nostd::string_view /*name*/) noexcept override {}
- void AddEvent(nostd::string_view /*name*/,
- common::SystemTimestamp /*timestamp*/) noexcept override
- {}
- void AddEvent(nostd::string_view /* name */,
- const common::KeyValueIterable & /* attributes */) noexcept override
- {}
- void AddEvent(nostd::string_view /*name*/,
- common::SystemTimestamp /*timestamp*/,
- const common::KeyValueIterable & /*attributes*/) noexcept override
- {}
- #if OPENTELEMETRY_ABI_VERSION_NO >= 2
- void AddLink(const SpanContext & /* target */,
- const common::KeyValueIterable & /* attrs */) noexcept override
- {}
- void AddLinks(const SpanContextKeyValueIterable & /* links */) noexcept override {}
- #endif
- void SetStatus(StatusCode /*code*/, nostd::string_view /*description*/) noexcept override {}
- void UpdateName(nostd::string_view /*name*/) noexcept override {}
- void End(const EndSpanOptions & /*options*/) noexcept override {}
- bool IsRecording() const noexcept override { return false; }
- SpanContext GetContext() const noexcept override { return *span_context_.get(); }
- private:
- std::shared_ptr<Tracer> tracer_;
- nostd::unique_ptr<SpanContext> span_context_;
- };
- /**
- * No-op implementation of Tracer.
- */
- class OPENTELEMETRY_EXPORT NoopTracer final : public Tracer,
- public std::enable_shared_from_this<NoopTracer>
- {
- public:
- // Tracer
- NoopTracer()
- {
- #if OPENTELEMETRY_ABI_VERSION_NO >= 2
- UpdateEnabled(false);
- #endif
- }
- nostd::shared_ptr<Span> StartSpan(nostd::string_view /*name*/,
- const common::KeyValueIterable & /*attributes*/,
- const SpanContextKeyValueIterable & /*links*/,
- const StartSpanOptions & /*options*/) noexcept override
- {
- // Don't allocate a no-op span for every StartSpan call, but use a static
- // singleton for this case.
- static nostd::shared_ptr<trace::Span> noop_span(new trace::NoopSpan{this->shared_from_this()});
- return noop_span;
- }
- #if OPENTELEMETRY_ABI_VERSION_NO == 1
- void ForceFlushWithMicroseconds(uint64_t /*timeout*/) noexcept override {}
- void CloseWithMicroseconds(uint64_t /*timeout*/) noexcept override {}
- #endif /* OPENTELEMETRY_ABI_VERSION_NO */
- };
- /**
- * No-op implementation of a TracerProvider.
- */
- class OPENTELEMETRY_EXPORT NoopTracerProvider final : public trace::TracerProvider
- {
- public:
- NoopTracerProvider() noexcept
- : tracer_{nostd::shared_ptr<trace::NoopTracer>(new trace::NoopTracer)}
- {}
- #if OPENTELEMETRY_ABI_VERSION_NO >= 2
- nostd::shared_ptr<trace::Tracer> GetTracer(
- nostd::string_view /* name */,
- nostd::string_view /* version */,
- nostd::string_view /* schema_url */,
- const common::KeyValueIterable * /* attributes */) noexcept override
- {
- return tracer_;
- }
- #else
- nostd::shared_ptr<trace::Tracer> GetTracer(nostd::string_view /* name */,
- nostd::string_view /* version */,
- nostd::string_view /* schema_url */) noexcept override
- {
- return tracer_;
- }
- #endif
- private:
- nostd::shared_ptr<trace::Tracer> tracer_;
- };
- } // namespace trace
- OPENTELEMETRY_END_NAMESPACE
|