appoptics_apm 4.12.2 → 4.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/build_and_release_gem.yml +103 -0
- data/.github/workflows/build_for_packagecloud.yml +70 -0
- data/.github/workflows/docker-images.yml +47 -0
- data/.github/workflows/run_cpluplus_tests.yml +73 -0
- data/.github/workflows/run_tests.yml +168 -0
- data/.github/workflows/scripts/test_install.rb +23 -0
- data/.github/workflows/swig/swig-v4.0.2.tar.gz +0 -0
- data/.github/workflows/test_on_4_linux.yml +159 -0
- data/.gitignore +17 -25
- data/.travis.yml +17 -14
- data/Gemfile +1 -25
- data/README.md +4 -6
- data/appoptics_apm.gemspec +11 -5
- data/examples/prepend.rb +13 -0
- data/examples/sdk_examples.rb +16 -0
- data/ext/oboe_metal/extconf.rb +25 -31
- data/ext/oboe_metal/lib/liboboe-1.0-alpine-x86_64.so.0.0.0.sha256 +1 -0
- data/ext/oboe_metal/lib/liboboe-1.0-x86_64.so.0.0.0.sha256 +1 -0
- data/ext/oboe_metal/src/README.md +6 -0
- data/ext/oboe_metal/src/VERSION +2 -1
- data/ext/oboe_metal/src/frames.cc +246 -0
- data/ext/oboe_metal/src/frames.h +40 -0
- data/ext/oboe_metal/src/init_appoptics_apm.cc +5 -4
- data/ext/oboe_metal/src/logging.cc +95 -0
- data/ext/oboe_metal/src/logging.h +35 -0
- data/ext/oboe_metal/src/oboe.h +8 -5
- data/ext/oboe_metal/src/oboe_api.cpp +40 -14
- data/ext/oboe_metal/src/oboe_api.hpp +29 -8
- data/ext/oboe_metal/src/oboe_debug.h +1 -0
- data/ext/oboe_metal/src/oboe_swig_wrap.cc +85 -21
- data/ext/oboe_metal/src/profiling.cc +435 -0
- data/ext/oboe_metal/src/profiling.h +78 -0
- data/ext/oboe_metal/test/CMakeLists.txt +53 -0
- data/ext/oboe_metal/test/FindGMock.cmake +43 -0
- data/ext/oboe_metal/test/README.md +56 -0
- data/ext/oboe_metal/test/frames_test.cc +164 -0
- data/ext/oboe_metal/test/profiling_test.cc +93 -0
- data/ext/oboe_metal/test/ruby_inc_dir.rb +8 -0
- data/ext/oboe_metal/test/ruby_prefix.rb +8 -0
- data/ext/oboe_metal/test/ruby_test_helper.rb +67 -0
- data/ext/oboe_metal/test/test.h +11 -0
- data/ext/oboe_metal/test/test_main.cc +32 -0
- data/lib/appoptics_apm/api/metrics.rb +3 -0
- data/lib/appoptics_apm/base.rb +1 -1
- data/lib/appoptics_apm/config.rb +11 -2
- data/lib/appoptics_apm/frameworks/rails/inst/connection_adapters/utils5x.rb +7 -1
- data/lib/appoptics_apm/inst/rack.rb +13 -6
- data/lib/appoptics_apm/inst/redis.rb +1 -2
- data/lib/appoptics_apm/noop/context.rb +3 -0
- data/lib/appoptics_apm/noop/metadata.rb +4 -1
- data/lib/appoptics_apm/noop/profiling.rb +21 -0
- data/lib/appoptics_apm/oboe_init_options.rb +26 -22
- data/lib/appoptics_apm/support/profiling.rb +18 -0
- data/lib/appoptics_apm/support/transaction_metrics.rb +1 -1
- data/lib/appoptics_apm/support/transaction_settings.rb +2 -2
- data/lib/appoptics_apm/support/x_trace_options.rb +2 -2
- data/lib/appoptics_apm/support_report.rb +2 -2
- data/lib/appoptics_apm/test.rb +4 -3
- data/lib/appoptics_apm/util.rb +1 -1
- data/lib/appoptics_apm/version.rb +3 -3
- data/lib/appoptics_apm/xtrace.rb +1 -1
- data/lib/appoptics_apm.rb +3 -1
- data/lib/oboe_metal.rb +2 -2
- data/lib/rails/generators/appoptics_apm/templates/appoptics_apm_initializer.rb +24 -0
- data/log/.keep +0 -0
- metadata +46 -16
- data/.travis/bundle.sh +0 -9
@@ -0,0 +1,95 @@
|
|
1
|
+
// Copyright (c) 2021 SolarWinds, LLC.
|
2
|
+
// All rights reserved.
|
3
|
+
|
4
|
+
#include "logging.h"
|
5
|
+
|
6
|
+
using namespace std;
|
7
|
+
|
8
|
+
const string Logging::profiling = "profiling";
|
9
|
+
const string Logging::ruby = "ruby";
|
10
|
+
const string Logging::entry = "entry";
|
11
|
+
const string Logging::info = "info";
|
12
|
+
const string Logging::exit = "exit";
|
13
|
+
|
14
|
+
Event *Logging::createEvent(Metadata &md, string &prof_op_id, bool entry_event) {
|
15
|
+
// startTrace does not add "Edge", for profiling we need to keep track of edges
|
16
|
+
// separately from the main trace metadata
|
17
|
+
|
18
|
+
oboe_metadata_t *md_t = md.metadata();
|
19
|
+
Event *event = Event::startTrace(md_t);
|
20
|
+
|
21
|
+
if (entry_event) {
|
22
|
+
event->addSpanRef(md_t);
|
23
|
+
} else {
|
24
|
+
event->addProfileEdge(prof_op_id);
|
25
|
+
event->addContextOpId(md_t);
|
26
|
+
}
|
27
|
+
prof_op_id.assign(event->opIdString());
|
28
|
+
|
29
|
+
return event;
|
30
|
+
}
|
31
|
+
|
32
|
+
bool Logging::log_profile_entry(Metadata &md, string &prof_op_id, pid_t tid, long interval) {
|
33
|
+
Event *event = Logging::createEvent(md, prof_op_id, true);
|
34
|
+
event->addInfo((char *)"Label", Logging::entry);
|
35
|
+
event->addInfo((char *)"Language", Logging::ruby);
|
36
|
+
event->addInfo((char *)"TID", (long)tid);
|
37
|
+
event->addInfo((char *)"Interval", interval);
|
38
|
+
|
39
|
+
struct timeval tv;
|
40
|
+
oboe_gettimeofday(&tv);
|
41
|
+
event->addInfo((char *)"Timestamp_u", (long)tv.tv_sec * 1000000 + (long)tv.tv_usec);
|
42
|
+
|
43
|
+
return Logging::log_profile_event(event);
|
44
|
+
}
|
45
|
+
|
46
|
+
bool Logging::log_profile_exit(Metadata &md, string &prof_op_id, pid_t tid,
|
47
|
+
long *omitted, int num_omitted) {
|
48
|
+
Event *event = Logging::createEvent(md, prof_op_id);
|
49
|
+
event->addInfo((char *)"Label", Logging::exit);
|
50
|
+
event->addInfo((char *)"TID", (long)tid);
|
51
|
+
event->addInfo((char *)"SnapshotsOmitted", omitted, num_omitted);
|
52
|
+
|
53
|
+
struct timeval tv;
|
54
|
+
oboe_gettimeofday(&tv);
|
55
|
+
event->addInfo((char *)"Timestamp_u", (long)tv.tv_sec * 1000000 + (long)tv.tv_usec);
|
56
|
+
|
57
|
+
return Logging::log_profile_event(event);
|
58
|
+
}
|
59
|
+
|
60
|
+
bool Logging::log_profile_snapshot(Metadata &md,
|
61
|
+
string &prof_op_id,
|
62
|
+
long timestamp,
|
63
|
+
std::vector<FrameData> const &new_frames,
|
64
|
+
long exited_frames,
|
65
|
+
long total_frames,
|
66
|
+
long *omitted,
|
67
|
+
int num_omitted,
|
68
|
+
pid_t tid) {
|
69
|
+
|
70
|
+
Event *event = Logging::createEvent(md, prof_op_id);
|
71
|
+
event->addInfo((char *)"Timestamp_u", timestamp);
|
72
|
+
event->addInfo((char *)"Label", Logging::info);
|
73
|
+
|
74
|
+
event->addInfo((char *)"SnapshotsOmitted", omitted, num_omitted);
|
75
|
+
event->addInfo((char *)"NewFrames", new_frames);
|
76
|
+
event->addInfo((char *)"FramesExited", exited_frames);
|
77
|
+
event->addInfo((char *)"FramesCount", total_frames);
|
78
|
+
event->addInfo((char *)"TID", (long)tid);
|
79
|
+
|
80
|
+
return Logging::log_profile_event(event);
|
81
|
+
}
|
82
|
+
|
83
|
+
bool Logging::log_profile_event(Event *event) {
|
84
|
+
event->addInfo((char *)"Spec", Logging::profiling);
|
85
|
+
event->addHostname();
|
86
|
+
event->addInfo((char *)"PID", (long)AO_GETPID());
|
87
|
+
event->addInfo((char *)"X-Trace", event->metadataString());
|
88
|
+
event->sendProfiling();
|
89
|
+
|
90
|
+
// see comment in oboe_api.cpp:
|
91
|
+
// "event needs to be deleted, it is managed by swig %newobject"
|
92
|
+
// !!! It needs to be deleted, I tested it !!!
|
93
|
+
delete event;
|
94
|
+
return true;
|
95
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
// Copyright (c) 2021 SolarWinds, LLC.
|
2
|
+
// All rights reserved.
|
3
|
+
|
4
|
+
#ifndef LOGGING_H
|
5
|
+
#define LOGGING_H
|
6
|
+
|
7
|
+
#include "oboe_api.hpp"
|
8
|
+
|
9
|
+
using namespace std;
|
10
|
+
|
11
|
+
extern "C" int oboe_gettimeofday(struct timeval *tv);
|
12
|
+
|
13
|
+
|
14
|
+
class Logging {
|
15
|
+
public:
|
16
|
+
static const string profiling, ruby, entry, info, exit;
|
17
|
+
static bool log_profile_entry(Metadata &md, string &prof_op_id, pid_t tid, long interval);
|
18
|
+
static bool log_profile_exit(Metadata &md, string &prof_op_id, pid_t tid,
|
19
|
+
long *omitted, int num_omitted);
|
20
|
+
static bool log_profile_snapshot(Metadata &md,
|
21
|
+
string &prof_op_id,
|
22
|
+
long timestamp,
|
23
|
+
std::vector<FrameData> const &new_frames,
|
24
|
+
long exited_frames,
|
25
|
+
long total_frames,
|
26
|
+
long *omitted,
|
27
|
+
int num_omitted,
|
28
|
+
pid_t tid);
|
29
|
+
|
30
|
+
private:
|
31
|
+
static Event *createEvent(Metadata &md, string &prof_op_id, bool entry_event = false);
|
32
|
+
static bool log_profile_event(Event *event);
|
33
|
+
};
|
34
|
+
|
35
|
+
#endif //LOGGING_H
|
data/ext/oboe_metal/src/oboe.h
CHANGED
@@ -161,7 +161,7 @@ typedef struct oboe_metric_tag {
|
|
161
161
|
} oboe_metric_tag_t;
|
162
162
|
|
163
163
|
typedef struct oboe_init_options {
|
164
|
-
int version; // the version of this structure
|
164
|
+
int version; // the version of this structure (currently on version 12)
|
165
165
|
const char *hostname_alias; // optional hostname alias
|
166
166
|
int log_level; // level at which log messages will be written to log file (0-6)
|
167
167
|
// use LOGLEVEL_DEFAULT for default log level
|
@@ -184,6 +184,9 @@ typedef struct oboe_init_options {
|
|
184
184
|
|
185
185
|
int ec2_metadata_timeout; // EC2 metadata timeout in milliseconds
|
186
186
|
const char *proxy; // HTTP proxy address and port to be used for the gRPC connection
|
187
|
+
int stdout_clear_nonblocking; // flag indicating if the O_NONBLOCK flag on stdout should be cleared,
|
188
|
+
// only used in lambda reporter (off=0, on=1, default off)
|
189
|
+
int is_grpc_clean_hack_enabled; // flag indicating if custom grpc clean hack enabled (default 0)
|
187
190
|
} oboe_init_options_t;
|
188
191
|
|
189
192
|
typedef struct oboe_span_params {
|
@@ -265,9 +268,9 @@ int oboe_metadata_destroy (oboe_metadata_t *);
|
|
265
268
|
|
266
269
|
int oboe_metadata_is_valid (const oboe_metadata_t *);
|
267
270
|
|
268
|
-
|
271
|
+
int oboe_metadata_copy (oboe_metadata_t *, const oboe_metadata_t *);
|
269
272
|
|
270
|
-
|
273
|
+
int oboe_metadata_random (oboe_metadata_t *);
|
271
274
|
|
272
275
|
int oboe_metadata_set_lengths (oboe_metadata_t *, size_t, size_t);
|
273
276
|
int oboe_metadata_create_event (const oboe_metadata_t *, oboe_event_t *);
|
@@ -311,10 +314,10 @@ int oboe_event_send(int channel, oboe_event_t *evt, oboe_metadata_t *md);
|
|
311
314
|
// oboe_context
|
312
315
|
|
313
316
|
oboe_metadata_t *oboe_context_get();
|
314
|
-
|
317
|
+
int oboe_context_set(oboe_metadata_t *);
|
315
318
|
int oboe_context_set_fromstr(const char *, size_t);
|
316
319
|
|
317
|
-
|
320
|
+
int oboe_context_clear();
|
318
321
|
|
319
322
|
int oboe_context_is_valid();
|
320
323
|
|
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
/////// Metatdata ///////
|
12
12
|
|
13
|
-
Metadata::Metadata(oboe_metadata_t *md) {
|
13
|
+
Metadata::Metadata(const oboe_metadata_t *md) {
|
14
14
|
oboe_metadata_copy(this, md);
|
15
15
|
}
|
16
16
|
|
@@ -80,9 +80,9 @@ void Context::setDefaultSampleRate(int newRate) {
|
|
80
80
|
}
|
81
81
|
|
82
82
|
void Context::getDecisions(
|
83
|
-
// this paramter list is too long, but other forms of sending info
|
83
|
+
// this paramter list is too long, but other forms of sending info
|
84
84
|
// between python/ruby and c++ would require extra roudn trips
|
85
|
-
// and may be less efficient.
|
85
|
+
// and may be less efficient.
|
86
86
|
// TODO: benchmark this assumption
|
87
87
|
|
88
88
|
// output
|
@@ -214,6 +214,10 @@ int Context::isReady(unsigned int timeout) {
|
|
214
214
|
return oboe_is_ready(timeout);
|
215
215
|
}
|
216
216
|
|
217
|
+
bool Context::isLambda() {
|
218
|
+
return (bool) oboe_is_lambda();
|
219
|
+
}
|
220
|
+
|
217
221
|
/**
|
218
222
|
* Create a new event object that continues the trace context.
|
219
223
|
*
|
@@ -289,7 +293,7 @@ bool Event::addInfo(char *key, bool val) {
|
|
289
293
|
}
|
290
294
|
|
291
295
|
/*
|
292
|
-
* this function was added for profiling
|
296
|
+
* this function was added for profiling
|
293
297
|
* to report the timestamps of omitted snapshots
|
294
298
|
*/
|
295
299
|
bool Event::addInfo(char *key, const long *vals, int num) {
|
@@ -324,7 +328,7 @@ bool Event::addInfo(char *key, const std::vector<FrameData> &vals) {
|
|
324
328
|
oboe_bson_append_string(&(this->bbuf), "C", (val.klass).c_str());
|
325
329
|
if (val.file != "")
|
326
330
|
oboe_bson_append_string(&(this->bbuf), "F", (val.file).c_str());
|
327
|
-
if (val.lineno
|
331
|
+
if (val.lineno > 0)
|
328
332
|
oboe_bson_append_long(&(this->bbuf), "L", (int64_t)val.lineno);
|
329
333
|
|
330
334
|
oboe_bson_append_finish_object(&(this->bbuf));
|
@@ -357,7 +361,7 @@ bool Event::addHostname() {
|
|
357
361
|
return oboe_event_add_info(this, "Hostname", oboe_hostname) == 0;
|
358
362
|
}
|
359
363
|
|
360
|
-
bool Event::addContextOpId(oboe_metadata_t *md) {
|
364
|
+
bool Event::addContextOpId(const oboe_metadata_t *md) {
|
361
365
|
char buf[OBOE_MAX_METADATA_PACK_LEN]; // Flawfinder: ignore
|
362
366
|
oboe_metadata_tostr(md, buf, OBOE_MAX_METADATA_PACK_LEN);
|
363
367
|
buf[58] = '\0';
|
@@ -365,7 +369,7 @@ bool Event::addContextOpId(oboe_metadata_t *md) {
|
|
365
369
|
return oboe_event_add_info(this, "ContextOpId", &buf[42]);
|
366
370
|
}
|
367
371
|
|
368
|
-
bool Event::addSpanRef(oboe_metadata_t *md) {
|
372
|
+
bool Event::addSpanRef(const oboe_metadata_t *md) {
|
369
373
|
char buf[OBOE_MAX_METADATA_PACK_LEN]; // Flawfinder: ignore
|
370
374
|
oboe_metadata_tostr(md, buf, OBOE_MAX_METADATA_PACK_LEN);
|
371
375
|
buf[58] = '\0';
|
@@ -483,18 +487,26 @@ std::string Span::createHttpSpan(const char *transaction, const char *url, const
|
|
483
487
|
|
484
488
|
MetricTags::MetricTags(size_t count) {
|
485
489
|
tags = new oboe_metric_tag_t[count];
|
490
|
+
for (size_t i = 0; i < count; i++) {
|
491
|
+
tags[i].key = nullptr;
|
492
|
+
tags[i].value = nullptr;
|
493
|
+
}
|
486
494
|
size = count;
|
487
495
|
}
|
488
496
|
|
489
497
|
MetricTags::~MetricTags() {
|
498
|
+
for (size_t i = 0; i < size; i++) {
|
499
|
+
delete tags[i].key; tags[i].key = nullptr;
|
500
|
+
delete tags[i].value; tags[i].value = nullptr;
|
501
|
+
}
|
490
502
|
delete[] tags;
|
491
503
|
}
|
492
504
|
|
493
|
-
bool MetricTags::add(size_t index, char *k, char *v) {
|
505
|
+
bool MetricTags::add(size_t index, const char *k, const char *v) {
|
494
506
|
if (index < size) {
|
495
|
-
tags[index].key = k;
|
496
|
-
tags[index].value = v;
|
497
|
-
return
|
507
|
+
tags[index].key = strdup(k);
|
508
|
+
tags[index].value = strdup(v);
|
509
|
+
return (tags[index].key != nullptr && tags[index].value != nullptr);
|
498
510
|
}
|
499
511
|
return false;
|
500
512
|
}
|
@@ -520,6 +532,15 @@ int CustomMetrics::increment(const char *name, const int count, const int host_t
|
|
520
532
|
return oboe_custom_metric_increment(name, count, host_tag, service_name, tags->get(), tags_count);
|
521
533
|
}
|
522
534
|
|
535
|
+
/////// Profiling ///////
|
536
|
+
|
537
|
+
// adding this to have a proper interface, even though it just
|
538
|
+
// returns the return value of the oboe function
|
539
|
+
// 0 indicates not to profile, returns -1 if the collector hasn't sent anything
|
540
|
+
int OboeProfiling::get_interval() {
|
541
|
+
return oboe_get_profiling_interval();
|
542
|
+
}
|
543
|
+
|
523
544
|
/////// Reporter ///////
|
524
545
|
|
525
546
|
Reporter::Reporter(
|
@@ -544,12 +565,15 @@ Reporter::Reporter(
|
|
544
565
|
double token_bucket_rate, // custom token bucket rate
|
545
566
|
int file_single, // use single files in file reporter for each event
|
546
567
|
|
547
|
-
int ec2_metadata_timeout,
|
548
|
-
std::string grpc_proxy
|
568
|
+
int ec2_metadata_timeout, // the timeout (milli seconds) for retrieving EC2 metadata
|
569
|
+
std::string grpc_proxy, // HTTP proxy address and port to be used for the gRPC connection
|
570
|
+
int stdout_clear_nonblocking, // flag indicating if the O_NONBLOCK flag on stdout should be cleared,
|
571
|
+
// only used in lambda reporter (off=0, on=1, default off)
|
572
|
+
int is_grpc_clean_hack_enabled // flag indicating if custom grpc clean hack enabled (default 0)
|
549
573
|
) {
|
550
574
|
oboe_init_options_t options;
|
551
575
|
memset(&options, 0, sizeof(options));
|
552
|
-
options.version =
|
576
|
+
options.version = 12;
|
553
577
|
oboe_init_options_set_defaults(&options);
|
554
578
|
|
555
579
|
if (hostname_alias != "") {
|
@@ -583,6 +607,8 @@ Reporter::Reporter(
|
|
583
607
|
if (grpc_proxy != "") {
|
584
608
|
options.proxy = grpc_proxy.c_str();
|
585
609
|
}
|
610
|
+
options.stdout_clear_nonblocking = stdout_clear_nonblocking;
|
611
|
+
options.is_grpc_clean_hack_enabled = is_grpc_clean_hack_enabled;
|
586
612
|
init_status = oboe_init(&options);
|
587
613
|
}
|
588
614
|
|
@@ -41,7 +41,7 @@ class Metadata : private oboe_metadata_t {
|
|
41
41
|
friend class Context;
|
42
42
|
|
43
43
|
public:
|
44
|
-
Metadata(oboe_metadata_t *md);
|
44
|
+
Metadata(const oboe_metadata_t *md);
|
45
45
|
~Metadata();
|
46
46
|
|
47
47
|
// these new objects are managed by SWIG %newobject
|
@@ -219,6 +219,11 @@ class Context {
|
|
219
219
|
*/
|
220
220
|
static int isReady(unsigned int timeout);
|
221
221
|
|
222
|
+
/**
|
223
|
+
* check if oboe is running in a AWS Lambda environment
|
224
|
+
*/
|
225
|
+
static bool isLambda();
|
226
|
+
|
222
227
|
// these new objects are managed by SWIG %newobject
|
223
228
|
/**
|
224
229
|
* Create a new event object using the thread's context.
|
@@ -255,7 +260,7 @@ class Event : private oboe_event_t {
|
|
255
260
|
|
256
261
|
bool addEdge(oboe_metadata_t *md);
|
257
262
|
bool addEdgeStr(const std::string &val);
|
258
|
-
bool addContextOpId(oboe_metadata_t *md);
|
263
|
+
bool addContextOpId(const oboe_metadata_t *md);
|
259
264
|
|
260
265
|
bool addHostname();
|
261
266
|
|
@@ -287,7 +292,7 @@ class Event : private oboe_event_t {
|
|
287
292
|
*/
|
288
293
|
bool sendProfiling();
|
289
294
|
|
290
|
-
bool addSpanRef(oboe_metadata_t *md);
|
295
|
+
bool addSpanRef(const oboe_metadata_t *md);
|
291
296
|
bool addProfileEdge(std::string id);
|
292
297
|
|
293
298
|
/**
|
@@ -320,10 +325,16 @@ class MetricTags {
|
|
320
325
|
public:
|
321
326
|
MetricTags(size_t count);
|
322
327
|
~MetricTags();
|
323
|
-
bool add(size_t index, char *k, char *v);
|
324
|
-
|
325
|
-
|
328
|
+
bool add(size_t index, const char *k, const char *v);
|
329
|
+
/**
|
330
|
+
* Get oboe_metric_tag_t function
|
331
|
+
* Please note that SWIG doesn't have the definition of
|
332
|
+
* oboe_metric_tag_t.
|
333
|
+
* Ruby and Python should not call this method
|
334
|
+
* @return oboe_metric_tag_t*
|
335
|
+
*/
|
326
336
|
oboe_metric_tag_t *get() const;
|
337
|
+
private:
|
327
338
|
oboe_metric_tag_t *tags;
|
328
339
|
size_t size;
|
329
340
|
};
|
@@ -337,6 +348,13 @@ class CustomMetrics {
|
|
337
348
|
const char *service_name, const MetricTags *tags, size_t tags_count);
|
338
349
|
};
|
339
350
|
|
351
|
+
#ifndef SWIG // for profiling only used by Ruby gem c++-code
|
352
|
+
class OboeProfiling {
|
353
|
+
public:
|
354
|
+
static int get_interval();
|
355
|
+
};
|
356
|
+
#endif
|
357
|
+
|
340
358
|
class Reporter : private oboe_reporter_t {
|
341
359
|
friend class Context; // Access to the private oboe_reporter_t base structure.
|
342
360
|
public:
|
@@ -371,8 +389,11 @@ class Reporter : private oboe_reporter_t {
|
|
371
389
|
double token_bucket_rate, // custom token bucket rate
|
372
390
|
int file_single, // use single files in file reporter for each event
|
373
391
|
|
374
|
-
int ec2_metadata_timeout,
|
375
|
-
std::string grpc_proxy
|
392
|
+
int ec2_metadata_timeout, // the timeout (milli seconds) for retrieving EC2 metadata
|
393
|
+
std::string grpc_proxy, // HTTP proxy address and port to be used for the gRPC connection
|
394
|
+
int stdout_clear_nonblocking, // flag indicating if the O_NONBLOCK flag on stdout should be cleared,
|
395
|
+
// only used in lambda reporter (off=0, on=1, default off)
|
396
|
+
int is_grpc_clean_hack_enabled // flag indicating if custom grpc clean hack enabled (default 0)
|
376
397
|
);
|
377
398
|
|
378
399
|
~Reporter();
|
@@ -1858,15 +1858,16 @@ int SWIG_Ruby_arity( VALUE proc, int minimal )
|
|
1858
1858
|
#define SWIGTYPE_p_long swig_types[11]
|
1859
1859
|
#define SWIGTYPE_p_long_long swig_types[12]
|
1860
1860
|
#define SWIGTYPE_p_oboe_metadata_t swig_types[13]
|
1861
|
-
#define
|
1862
|
-
#define
|
1863
|
-
#define
|
1864
|
-
#define
|
1865
|
-
#define
|
1866
|
-
#define
|
1867
|
-
#define
|
1868
|
-
|
1869
|
-
static
|
1861
|
+
#define SWIGTYPE_p_oboe_metric_tag_t swig_types[14]
|
1862
|
+
#define SWIGTYPE_p_short swig_types[15]
|
1863
|
+
#define SWIGTYPE_p_signed_char swig_types[16]
|
1864
|
+
#define SWIGTYPE_p_std__string swig_types[17]
|
1865
|
+
#define SWIGTYPE_p_unsigned_char swig_types[18]
|
1866
|
+
#define SWIGTYPE_p_unsigned_int swig_types[19]
|
1867
|
+
#define SWIGTYPE_p_unsigned_long_long swig_types[20]
|
1868
|
+
#define SWIGTYPE_p_unsigned_short swig_types[21]
|
1869
|
+
static swig_type_info *swig_types[23];
|
1870
|
+
static swig_module_info swig_module = {swig_types, 22, 0, 0, 0, 0};
|
1870
1871
|
#define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name)
|
1871
1872
|
#define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name)
|
1872
1873
|
|
@@ -2300,10 +2301,10 @@ _wrap_new_Metadata(int argc, VALUE *argv, VALUE self) {
|
|
2300
2301
|
}
|
2301
2302
|
res1 = SWIG_ConvertPtr(argv[0], &argp1,SWIGTYPE_p_oboe_metadata_t, 0 | 0 );
|
2302
2303
|
if (!SWIG_IsOK(res1)) {
|
2303
|
-
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "oboe_metadata_t *","Metadata", 1, argv[0] ));
|
2304
|
+
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "oboe_metadata_t const *","Metadata", 1, argv[0] ));
|
2304
2305
|
}
|
2305
2306
|
arg1 = reinterpret_cast< oboe_metadata_t * >(argp1);
|
2306
|
-
result = (Metadata *)new Metadata(arg1);
|
2307
|
+
result = (Metadata *)new Metadata((oboe_metadata_t const *)arg1);
|
2307
2308
|
DATA_PTR(self) = result;
|
2308
2309
|
return self;
|
2309
2310
|
fail:
|
@@ -4518,6 +4519,22 @@ fail:
|
|
4518
4519
|
}
|
4519
4520
|
|
4520
4521
|
|
4522
|
+
SWIGINTERN VALUE
|
4523
|
+
_wrap_Context_isLambda(int argc, VALUE *argv, VALUE self) {
|
4524
|
+
bool result;
|
4525
|
+
VALUE vresult = Qnil;
|
4526
|
+
|
4527
|
+
if ((argc < 0) || (argc > 0)) {
|
4528
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
|
4529
|
+
}
|
4530
|
+
result = (bool)Context::isLambda();
|
4531
|
+
vresult = SWIG_From_bool(static_cast< bool >(result));
|
4532
|
+
return vresult;
|
4533
|
+
fail:
|
4534
|
+
return Qnil;
|
4535
|
+
}
|
4536
|
+
|
4537
|
+
|
4521
4538
|
SWIGINTERN VALUE
|
4522
4539
|
_wrap_Context_createEvent(int argc, VALUE *argv, VALUE self) {
|
4523
4540
|
Event *result = 0 ;
|
@@ -5098,10 +5115,10 @@ _wrap_Event_addContextOpId(int argc, VALUE *argv, VALUE self) {
|
|
5098
5115
|
arg1 = reinterpret_cast< Event * >(argp1);
|
5099
5116
|
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_oboe_metadata_t, 0 | 0 );
|
5100
5117
|
if (!SWIG_IsOK(res2)) {
|
5101
|
-
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "oboe_metadata_t *","addContextOpId", 2, argv[0] ));
|
5118
|
+
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "oboe_metadata_t const *","addContextOpId", 2, argv[0] ));
|
5102
5119
|
}
|
5103
5120
|
arg2 = reinterpret_cast< oboe_metadata_t * >(argp2);
|
5104
|
-
result = (bool)(arg1)->addContextOpId(arg2);
|
5121
|
+
result = (bool)(arg1)->addContextOpId((oboe_metadata_t const *)arg2);
|
5105
5122
|
vresult = SWIG_From_bool(static_cast< bool >(result));
|
5106
5123
|
return vresult;
|
5107
5124
|
fail:
|
@@ -5274,10 +5291,10 @@ _wrap_Event_addSpanRef(int argc, VALUE *argv, VALUE self) {
|
|
5274
5291
|
arg1 = reinterpret_cast< Event * >(argp1);
|
5275
5292
|
res2 = SWIG_ConvertPtr(argv[0], &argp2,SWIGTYPE_p_oboe_metadata_t, 0 | 0 );
|
5276
5293
|
if (!SWIG_IsOK(res2)) {
|
5277
|
-
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "oboe_metadata_t *","addSpanRef", 2, argv[0] ));
|
5294
|
+
SWIG_exception_fail(SWIG_ArgError(res2), Ruby_Format_TypeError( "", "oboe_metadata_t const *","addSpanRef", 2, argv[0] ));
|
5278
5295
|
}
|
5279
5296
|
arg2 = reinterpret_cast< oboe_metadata_t * >(argp2);
|
5280
|
-
result = (bool)(arg1)->addSpanRef(arg2);
|
5297
|
+
result = (bool)(arg1)->addSpanRef((oboe_metadata_t const *)arg2);
|
5281
5298
|
vresult = SWIG_From_bool(static_cast< bool >(result));
|
5282
5299
|
return vresult;
|
5283
5300
|
fail:
|
@@ -5931,15 +5948,15 @@ _wrap_MetricTags_add(int argc, VALUE *argv, VALUE self) {
|
|
5931
5948
|
arg2 = static_cast< size_t >(val2);
|
5932
5949
|
res3 = SWIG_AsCharPtrAndSize(argv[1], &buf3, NULL, &alloc3);
|
5933
5950
|
if (!SWIG_IsOK(res3)) {
|
5934
|
-
SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char *","add", 3, argv[1] ));
|
5951
|
+
SWIG_exception_fail(SWIG_ArgError(res3), Ruby_Format_TypeError( "", "char const *","add", 3, argv[1] ));
|
5935
5952
|
}
|
5936
5953
|
arg3 = reinterpret_cast< char * >(buf3);
|
5937
5954
|
res4 = SWIG_AsCharPtrAndSize(argv[2], &buf4, NULL, &alloc4);
|
5938
5955
|
if (!SWIG_IsOK(res4)) {
|
5939
|
-
SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char *","add", 4, argv[2] ));
|
5956
|
+
SWIG_exception_fail(SWIG_ArgError(res4), Ruby_Format_TypeError( "", "char const *","add", 4, argv[2] ));
|
5940
5957
|
}
|
5941
5958
|
arg4 = reinterpret_cast< char * >(buf4);
|
5942
|
-
result = (bool)(arg1)->add(arg2,arg3,arg4);
|
5959
|
+
result = (bool)(arg1)->add(arg2,(char const *)arg3,(char const *)arg4);
|
5943
5960
|
vresult = SWIG_From_bool(static_cast< bool >(result));
|
5944
5961
|
if (alloc3 == SWIG_NEWOBJ) delete[] buf3;
|
5945
5962
|
if (alloc4 == SWIG_NEWOBJ) delete[] buf4;
|
@@ -5951,6 +5968,30 @@ fail:
|
|
5951
5968
|
}
|
5952
5969
|
|
5953
5970
|
|
5971
|
+
SWIGINTERN VALUE
|
5972
|
+
_wrap_MetricTags_get(int argc, VALUE *argv, VALUE self) {
|
5973
|
+
MetricTags *arg1 = (MetricTags *) 0 ;
|
5974
|
+
void *argp1 = 0 ;
|
5975
|
+
int res1 = 0 ;
|
5976
|
+
oboe_metric_tag_t *result = 0 ;
|
5977
|
+
VALUE vresult = Qnil;
|
5978
|
+
|
5979
|
+
if ((argc < 0) || (argc > 0)) {
|
5980
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 0)",argc); SWIG_fail;
|
5981
|
+
}
|
5982
|
+
res1 = SWIG_ConvertPtr(self, &argp1,SWIGTYPE_p_MetricTags, 0 | 0 );
|
5983
|
+
if (!SWIG_IsOK(res1)) {
|
5984
|
+
SWIG_exception_fail(SWIG_ArgError(res1), Ruby_Format_TypeError( "", "MetricTags const *","get", 1, self ));
|
5985
|
+
}
|
5986
|
+
arg1 = reinterpret_cast< MetricTags * >(argp1);
|
5987
|
+
result = (oboe_metric_tag_t *)((MetricTags const *)arg1)->get();
|
5988
|
+
vresult = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_oboe_metric_tag_t, 0 | 0 );
|
5989
|
+
return vresult;
|
5990
|
+
fail:
|
5991
|
+
return Qnil;
|
5992
|
+
}
|
5993
|
+
|
5994
|
+
|
5954
5995
|
static swig_class SwigClassCustomMetrics;
|
5955
5996
|
|
5956
5997
|
SWIGINTERN VALUE
|
@@ -6228,6 +6269,8 @@ _wrap_new_Reporter(int argc, VALUE *argv, VALUE self) {
|
|
6228
6269
|
int arg17 ;
|
6229
6270
|
int arg18 ;
|
6230
6271
|
std::string arg19 ;
|
6272
|
+
int arg20 ;
|
6273
|
+
int arg21 ;
|
6231
6274
|
int val2 ;
|
6232
6275
|
int ecode2 = 0 ;
|
6233
6276
|
int val4 ;
|
@@ -6252,10 +6295,14 @@ _wrap_new_Reporter(int argc, VALUE *argv, VALUE self) {
|
|
6252
6295
|
int ecode17 = 0 ;
|
6253
6296
|
int val18 ;
|
6254
6297
|
int ecode18 = 0 ;
|
6298
|
+
int val20 ;
|
6299
|
+
int ecode20 = 0 ;
|
6300
|
+
int val21 ;
|
6301
|
+
int ecode21 = 0 ;
|
6255
6302
|
Reporter *result = 0 ;
|
6256
6303
|
|
6257
|
-
if ((argc <
|
6258
|
-
rb_raise(rb_eArgError, "wrong # of arguments(%d for
|
6304
|
+
if ((argc < 21) || (argc > 21)) {
|
6305
|
+
rb_raise(rb_eArgError, "wrong # of arguments(%d for 21)",argc); SWIG_fail;
|
6259
6306
|
}
|
6260
6307
|
{
|
6261
6308
|
std::string *ptr = (std::string *)0;
|
@@ -6380,7 +6427,17 @@ _wrap_new_Reporter(int argc, VALUE *argv, VALUE self) {
|
|
6380
6427
|
arg19 = *ptr;
|
6381
6428
|
if (SWIG_IsNewObj(res)) delete ptr;
|
6382
6429
|
}
|
6383
|
-
|
6430
|
+
ecode20 = SWIG_AsVal_int(argv[19], &val20);
|
6431
|
+
if (!SWIG_IsOK(ecode20)) {
|
6432
|
+
SWIG_exception_fail(SWIG_ArgError(ecode20), Ruby_Format_TypeError( "", "int","Reporter", 20, argv[19] ));
|
6433
|
+
}
|
6434
|
+
arg20 = static_cast< int >(val20);
|
6435
|
+
ecode21 = SWIG_AsVal_int(argv[20], &val21);
|
6436
|
+
if (!SWIG_IsOK(ecode21)) {
|
6437
|
+
SWIG_exception_fail(SWIG_ArgError(ecode21), Ruby_Format_TypeError( "", "int","Reporter", 21, argv[20] ));
|
6438
|
+
}
|
6439
|
+
arg21 = static_cast< int >(val21);
|
6440
|
+
result = (Reporter *)new Reporter(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19,arg20,arg21);
|
6384
6441
|
DATA_PTR(self) = result;
|
6385
6442
|
return self;
|
6386
6443
|
fail:
|
@@ -6797,6 +6854,7 @@ static swig_type_info _swigt__p_int = {"_p_int", "intptr_t *|int *|int_least32_t
|
|
6797
6854
|
static swig_type_info _swigt__p_long = {"_p_long", "long *", 0, 0, (void*)0, 0};
|
6798
6855
|
static swig_type_info _swigt__p_long_long = {"_p_long_long", "int_least64_t *|int_fast64_t *|int64_t *|long long *|intmax_t *", 0, 0, (void*)0, 0};
|
6799
6856
|
static swig_type_info _swigt__p_oboe_metadata_t = {"_p_oboe_metadata_t", "oboe_metadata_t *", 0, 0, (void*)0, 0};
|
6857
|
+
static swig_type_info _swigt__p_oboe_metric_tag_t = {"_p_oboe_metric_tag_t", "oboe_metric_tag_t *", 0, 0, (void*)0, 0};
|
6800
6858
|
static swig_type_info _swigt__p_short = {"_p_short", "short *|int_least16_t *|int16_t *", 0, 0, (void*)0, 0};
|
6801
6859
|
static swig_type_info _swigt__p_signed_char = {"_p_signed_char", "signed char *|int_least8_t *|int_fast8_t *|int8_t *", 0, 0, (void*)0, 0};
|
6802
6860
|
static swig_type_info _swigt__p_std__string = {"_p_std__string", "std::string *", 0, 0, (void*)0, 0};
|
@@ -6820,6 +6878,7 @@ static swig_type_info *swig_type_initial[] = {
|
|
6820
6878
|
&_swigt__p_long,
|
6821
6879
|
&_swigt__p_long_long,
|
6822
6880
|
&_swigt__p_oboe_metadata_t,
|
6881
|
+
&_swigt__p_oboe_metric_tag_t,
|
6823
6882
|
&_swigt__p_short,
|
6824
6883
|
&_swigt__p_signed_char,
|
6825
6884
|
&_swigt__p_std__string,
|
@@ -6843,6 +6902,7 @@ static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0
|
|
6843
6902
|
static swig_cast_info _swigc__p_long[] = { {&_swigt__p_long, 0, 0, 0},{0, 0, 0, 0}};
|
6844
6903
|
static swig_cast_info _swigc__p_long_long[] = { {&_swigt__p_long_long, 0, 0, 0},{0, 0, 0, 0}};
|
6845
6904
|
static swig_cast_info _swigc__p_oboe_metadata_t[] = { {&_swigt__p_Metadata, _p_MetadataTo_p_oboe_metadata_t, 0, 0}, {&_swigt__p_oboe_metadata_t, 0, 0, 0},{0, 0, 0, 0}};
|
6905
|
+
static swig_cast_info _swigc__p_oboe_metric_tag_t[] = { {&_swigt__p_oboe_metric_tag_t, 0, 0, 0},{0, 0, 0, 0}};
|
6846
6906
|
static swig_cast_info _swigc__p_short[] = { {&_swigt__p_short, 0, 0, 0},{0, 0, 0, 0}};
|
6847
6907
|
static swig_cast_info _swigc__p_signed_char[] = { {&_swigt__p_signed_char, 0, 0, 0},{0, 0, 0, 0}};
|
6848
6908
|
static swig_cast_info _swigc__p_std__string[] = { {&_swigt__p_std__string, 0, 0, 0},{0, 0, 0, 0}};
|
@@ -6866,6 +6926,7 @@ static swig_cast_info *swig_cast_initial[] = {
|
|
6866
6926
|
_swigc__p_long,
|
6867
6927
|
_swigc__p_long_long,
|
6868
6928
|
_swigc__p_oboe_metadata_t,
|
6929
|
+
_swigc__p_oboe_metric_tag_t,
|
6869
6930
|
_swigc__p_short,
|
6870
6931
|
_swigc__p_signed_char,
|
6871
6932
|
_swigc__p_std__string,
|
@@ -7147,6 +7208,7 @@ SWIGEXPORT void Init_oboe_metal(void) {
|
|
7147
7208
|
rb_define_const(mOboe_metal, "OBOE_MODULE_NGINX", SWIG_From_int(static_cast< int >(OBOE_MODULE_NGINX)));
|
7148
7209
|
rb_define_const(mOboe_metal, "OBOE_MODULE_PHP", SWIG_From_int(static_cast< int >(OBOE_MODULE_PHP)));
|
7149
7210
|
rb_define_const(mOboe_metal, "OBOE_MODULE_DOTNET", SWIG_From_int(static_cast< int >(OBOE_MODULE_DOTNET)));
|
7211
|
+
rb_define_const(mOboe_metal, "OBOE_MODULE_RUBY", SWIG_From_int(static_cast< int >(OBOE_MODULE_RUBY)));
|
7150
7212
|
|
7151
7213
|
SwigClassMetadata.klass = rb_define_class_under(mOboe_metal, "Metadata", rb_cObject);
|
7152
7214
|
SWIG_TypeClientData(SWIGTYPE_p_Metadata, (void *) &SwigClassMetadata);
|
@@ -7183,6 +7245,7 @@ SWIGEXPORT void Init_oboe_metal(void) {
|
|
7183
7245
|
rb_define_singleton_method(SwigClassContext.klass, "validateTransformServiceName", VALUEFUNC(_wrap_Context_validateTransformServiceName), -1);
|
7184
7246
|
rb_define_singleton_method(SwigClassContext.klass, "shutdown", VALUEFUNC(_wrap_Context_shutdown), -1);
|
7185
7247
|
rb_define_singleton_method(SwigClassContext.klass, "isReady", VALUEFUNC(_wrap_Context_isReady), -1);
|
7248
|
+
rb_define_singleton_method(SwigClassContext.klass, "isLambda", VALUEFUNC(_wrap_Context_isLambda), -1);
|
7186
7249
|
rb_define_singleton_method(SwigClassContext.klass, "createEvent", VALUEFUNC(_wrap_Context_createEvent), -1);
|
7187
7250
|
rb_define_singleton_method(SwigClassContext.klass, "startTrace", VALUEFUNC(_wrap_Context_startTrace), -1);
|
7188
7251
|
SwigClassContext.mark = 0;
|
@@ -7224,6 +7287,7 @@ SWIGEXPORT void Init_oboe_metal(void) {
|
|
7224
7287
|
rb_define_alloc_func(SwigClassMetricTags.klass, _wrap_MetricTags_allocate);
|
7225
7288
|
rb_define_method(SwigClassMetricTags.klass, "initialize", VALUEFUNC(_wrap_new_MetricTags), -1);
|
7226
7289
|
rb_define_method(SwigClassMetricTags.klass, "add", VALUEFUNC(_wrap_MetricTags_add), -1);
|
7290
|
+
rb_define_method(SwigClassMetricTags.klass, "get", VALUEFUNC(_wrap_MetricTags_get), -1);
|
7227
7291
|
SwigClassMetricTags.mark = 0;
|
7228
7292
|
SwigClassMetricTags.destroy = (void (*)(void *)) free_MetricTags;
|
7229
7293
|
SwigClassMetricTags.trackObjects = 0;
|