userver: userver/tracing/tracer.hpp Source File
Loading...
Searching...
No Matches
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),
33 optional_logger_(std::move(optional_logger))
34 {}
35
36 // Only works if legacy opentracing is set up.
37 const std::string& GetServiceName() const;
38
39 const logging::LoggerPtr& GetOptionalLogger() const { return optional_logger_; }
40
41private:
42 std::string service_name_;
43 logging::LoggerPtr optional_logger_;
44};
45
46// For tests and benchmarks only!
47class TracerCleanupScope final {
48public:
49 TracerCleanupScope();
50
51 TracerCleanupScope(TracerCleanupScope&&) = delete;
52 TracerCleanupScope& operator=(TracerCleanupScope&&) = delete;
53 ~TracerCleanupScope();
54
55private:
56 Tracer old_tracer_;
57 NoLogSpans old_no_log_spans_;
58};
59
60} // namespace tracing
61
62USERVER_NAMESPACE_END