userver: userver/tracing/tracer.hpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
tracer.hpp
1#pragma once
2
3#include <memory>
4
5#include <userver/rcu/fwd.hpp>
6#include <userver/tracing/span.hpp>
7#include <userver/tracing/tracer_fwd.hpp>
8
9#include <dynamic_config/variables/USERVER_NO_LOG_SPANS.hpp>
10
11USERVER_NAMESPACE_BEGIN
12
13/// Opentracing support
14namespace tracing {
15
16using NoLogSpans = ::dynamic_config::userver_no_log_spans::VariableType;
17
18void SetNoLogSpans(NoLogSpans&& spans);
19bool IsNoLogSpan(const std::string& name);
20NoLogSpans CopyNoLogSpans();
21
22// For legacy opentracing support only.
23class Tracer final {
24public:
25 static void SetTracer(Tracer&& tracer);
26
27 static rcu::ReadablePtr<Tracer, rcu::ExclusiveRcuTraits> ReadTracer();
28
29 static Tracer CopyCurrentTracer();
30
31 Tracer(std::string_view service_name, logging::LoggerPtr optional_logger)
32 : service_name_(service_name), optional_logger_(std::move(optional_logger)) {}
33
34 // Only works if legacy opentracing is set up.
35 const std::string& GetServiceName() const;
36
37 const logging::LoggerPtr& GetOptionalLogger() const { return optional_logger_; }
38
39private:
40 std::string service_name_;
41 logging::LoggerPtr optional_logger_;
42};
43
44// For tests and benchmarks only!
45class TracerCleanupScope final {
46public:
47 TracerCleanupScope();
48
49 TracerCleanupScope(TracerCleanupScope&&) = delete;
50 TracerCleanupScope& operator=(TracerCleanupScope&&) = delete;
51 ~TracerCleanupScope();
52
53private:
54 Tracer old_tracer_;
55 NoLogSpans old_no_log_spans_;
56};
57
58} // namespace tracing
59
60USERVER_NAMESPACE_END