-
Notifications
You must be signed in to change notification settings - Fork 121
/
load_tracer.cpp
64 lines (57 loc) · 2.05 KB
/
load_tracer.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "load_tracer.h"
#include <opentracing/dynamic_load.h>
#include <cerrno>
#include <fstream>
namespace ngx_opentracing {
ngx_int_t load_tracer(ngx_log_t* log, const char* tracer_library,
const char* config_file,
opentracing::DynamicTracingLibraryHandle& handle,
std::shared_ptr<opentracing::Tracer>& tracer) {
std::string error_message;
// Open the library handle
auto handle_maybe =
opentracing::DynamicallyLoadTracingLibrary(tracer_library, error_message);
if (!handle_maybe) {
if (!error_message.empty()) {
ngx_log_error(NGX_LOG_ERR, log, 0,
"Failed to load tracing library %s: %s", tracer_library,
error_message.c_str());
} else {
ngx_log_error(NGX_LOG_ERR, log, 0,
"Failed to load tracing library %s: %s", tracer_library);
}
return NGX_ERROR;
}
auto& tracer_factory = handle_maybe->tracer_factory();
// Construct a tracer
errno = 0;
std::ifstream in{config_file};
if (!in.good()) {
ngx_log_error(NGX_LOG_ERR, log, errno,
"Failed to open tracer configuration file %s", config_file);
return NGX_ERROR;
}
std::string tracer_config{std::istreambuf_iterator<char>{in},
std::istreambuf_iterator<char>{}};
if (!in.good()) {
ngx_log_error(NGX_LOG_ERR, log, errno,
"Failed to read tracer configuration file %s", &config_file);
return NGX_ERROR;
}
auto tracer_maybe =
tracer_factory.MakeTracer(tracer_config.c_str(), error_message);
if (!tracer_maybe) {
if (!error_message.empty()) {
ngx_log_error(NGX_LOG_ERR, log, 0, "Failed to construct tracer: %s",
error_message.c_str());
} else {
ngx_log_error(NGX_LOG_ERR, log, 0, "Failed to construct tracer: %s",
tracer_maybe.error().message().c_str());
}
return NGX_ERROR;
}
handle = std::move(*handle_maybe);
tracer = std::move(*tracer_maybe);
return NGX_OK;
}
} // namespace ngx_opentracing