• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

jgomezselles / hermes / 18708135939

22 Oct 2025 07:02AM UTC coverage: 95.587% (-1.3%) from 96.907%
18708135939

push

github

jgomezselles
Instrument mock with OTel

953 of 997 relevant lines covered (95.59%)

162.99 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

96.08
/src/o11y/tracer.cpp
1
#include "tracer.hpp"
2

3
#include <nghttp2/asio_http2.h>
4

5
#include <iostream>
6
#include <map>
7
#include <string>
8

9
#include "opentelemetry/context/propagation/global_propagator.h"
10
#include "opentelemetry/context/propagation/text_map_propagator.h"
11
#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
12
#include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h"
13
#include "opentelemetry/ext/http/client/http_client.h"
14
#include "opentelemetry/ext/http/client/http_client_factory.h"
15
#include "opentelemetry/sdk/trace/batch_span_processor_factory.h"
16
#include "opentelemetry/sdk/trace/batch_span_processor_options.h"
17
#include "opentelemetry/sdk/trace/processor.h"
18
#include "opentelemetry/sdk/trace/provider.h"
19
#include "opentelemetry/sdk/trace/tracer_provider.h"
20
#include "opentelemetry/sdk/trace/tracer_provider_factory.h"
21
#include "opentelemetry/trace/propagation/http_trace_context.h"
22
#include "opentelemetry/trace/provider.h"
23

24
namespace o11y
25
{
26

27
namespace ot_std = opentelemetry::nostd;
28
namespace ot_trace = opentelemetry::trace;
29
namespace sdk_trace = opentelemetry::sdk::trace;
30

31
void init_tracer(const std::string& url)
4✔
32
{
33
    auto resource_attributes =
34
        opentelemetry::sdk::resource::ResourceAttributes{{"service.name", "hermes"}};
4✔
35
    auto resource = opentelemetry::sdk::resource::Resource::Create(resource_attributes);
4✔
36

37
    opentelemetry::exporter::otlp::OtlpHttpExporterOptions http_opts;
4✔
38
    http_opts.url = url;
4✔
39
    auto exporter = opentelemetry::exporter::otlp::OtlpHttpExporterFactory::Create(http_opts);
4✔
40

41
    sdk_trace::BatchSpanProcessorOptions opts;
4✔
42
    opts.max_queue_size = 2048;
4✔
43
    opts.max_export_batch_size = 512;
4✔
44
    auto processor = sdk_trace::BatchSpanProcessorFactory::Create(std::move(exporter), opts);
4✔
45

46
    std::shared_ptr<opentelemetry::trace::TracerProvider> provider =
47
        sdk_trace::TracerProviderFactory::Create(std::move(processor), resource);
4✔
48

49
    sdk_trace::Provider::SetTracerProvider(provider);
4✔
50

51
    // set global propagator
52
    opentelemetry::context::propagation::GlobalTextMapPropagator::SetGlobalPropagator(
4✔
53
        opentelemetry::nostd::shared_ptr<opentelemetry::context::propagation::TextMapPropagator>(
8✔
54
            new opentelemetry::trace::propagation::HttpTraceContext()));
4✔
55
}
4✔
56

57
void cleanup_tracer()
8✔
58
{
59
    // To prevent cancelling ongoing exports.
60
    ot_std::shared_ptr<ot_trace::TracerProvider> provider = ot_trace::Provider::GetTracerProvider();
8✔
61

62
    if (provider)
8✔
63
    {
64
        if (sdk_trace::TracerProvider* d = dynamic_cast<sdk_trace::TracerProvider*>(provider.get());
8✔
65
            d)
66
        {
67
            d->ForceFlush();
4✔
68
        }
69
    }
70
    ot_std::shared_ptr<ot_trace::TracerProvider> noop(new ot_trace::NoopTracerProvider());
8✔
71
    ot_trace::Provider::SetTracerProvider(noop);
8✔
72
}
8✔
73

74
ot_std::shared_ptr<ot_trace::Tracer> get_tracer(const std::string& tracer_name)
58✔
75
{
76
    auto provider = ot_trace::Provider::GetTracerProvider();
58✔
77
    return provider->GetTracer(tracer_name);
58✔
78
}
58✔
79

80
ot_std::shared_ptr<ot_trace::Span> create_span(const std::string& name)
22✔
81
{
82
    ot_trace::StartSpanOptions opts;
22✔
83
    opts.kind = ot_trace::SpanKind::kClient;
22✔
84

85
    auto span = get_tracer("hermes_client")->StartSpan(name, opts);
22✔
86
    return span;
44✔
87
}
22✔
88

89
ot_std::shared_ptr<ot_trace::Span> create_child_span(
18✔
90
    const std::string& name, const ot_std::shared_ptr<ot_trace::Span>& parent)
91
{
92
    ot_trace::StartSpanOptions opts;
18✔
93
    opts.kind = ot_trace::SpanKind::kClient;
18✔
94
    if (parent)
18✔
95
    {
96
        opts.parent = parent->GetContext();
×
97
    }
98

99
    auto span = get_tracer("hermes_client")->StartSpan(name, opts);
18✔
100
    return span;
36✔
101
}
18✔
102

103
// TODO: compare currentContext (GetValue) with span context; Maybe it's just the traceparent?
104
void inject_trace_context(ot_std::shared_ptr<ot_trace::Span>& span,
16✔
105
                          nghttp2::asio_http2::header_map& headers)
106
{
107
    if (!span)
16✔
108
    {
109
        return;
×
110
    }
111

112
    auto scope = get_tracer("hermes_client")->WithActiveSpan(span);
16✔
113
    auto current_ctx = opentelemetry::context::RuntimeContext::GetCurrent();
16✔
114
    HttpTextMapCarrier carrier(headers);
16✔
115
    auto prop = opentelemetry::context::propagation::GlobalTextMapPropagator::GetGlobalPropagator();
16✔
116
    prop->Inject(carrier, current_ctx);
16✔
117

118
}
16✔
119

120
}  // namespace o11y
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc