solarwinds_apm 5.1.9 → 6.0.0.preV2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +28 -55
  3. data/ext/oboe_metal/extconf.rb +37 -41
  4. data/ext/oboe_metal/lib/liboboe-1.0-aarch64.so.sha256 +1 -1
  5. data/ext/oboe_metal/lib/liboboe-1.0-alpine-aarch64.so.sha256 +1 -1
  6. data/ext/oboe_metal/lib/liboboe-1.0-alpine-x86_64.so.sha256 +1 -1
  7. data/ext/oboe_metal/lib/liboboe-1.0-x86_64.so.sha256 +1 -1
  8. data/ext/oboe_metal/src/VERSION +1 -1
  9. data/ext/oboe_metal/src/init_solarwinds_apm.cc +0 -6
  10. data/ext/oboe_metal/src/oboe_debug.h +1 -0
  11. data/lib/oboe_metal.rb +116 -80
  12. data/lib/rails/generators/solarwinds_apm/install_generator.rb +1 -5
  13. data/lib/rails/generators/solarwinds_apm/templates/solarwinds_apm_initializer.rb +42 -267
  14. data/lib/solarwinds_apm/api/current_trace_info.rb +148 -0
  15. data/lib/solarwinds_apm/api/tracing.rb +30 -0
  16. data/lib/solarwinds_apm/api/transaction_name.rb +58 -0
  17. data/lib/solarwinds_apm/api.rb +8 -15
  18. data/lib/solarwinds_apm/base.rb +4 -131
  19. data/lib/solarwinds_apm/config.rb +101 -174
  20. data/lib/solarwinds_apm/constants.rb +32 -0
  21. data/lib/solarwinds_apm/logger.rb +1 -1
  22. data/lib/solarwinds_apm/noop/context.rb +2 -5
  23. data/lib/solarwinds_apm/noop/metadata.rb +1 -2
  24. data/lib/solarwinds_apm/oboe_init_options.rb +74 -38
  25. data/lib/solarwinds_apm/opentelemetry/solarwinds_exporter.rb +204 -0
  26. data/lib/solarwinds_apm/opentelemetry/solarwinds_processor.rb +166 -0
  27. data/lib/solarwinds_apm/opentelemetry/solarwinds_propagator.rb +92 -0
  28. data/lib/solarwinds_apm/opentelemetry/solarwinds_response_propagator.rb +72 -0
  29. data/lib/solarwinds_apm/opentelemetry/solarwinds_sampler.rb +335 -0
  30. data/lib/solarwinds_apm/opentelemetry.rb +8 -0
  31. data/lib/solarwinds_apm/otel_config.rb +161 -0
  32. data/lib/solarwinds_apm/{inst → support}/logger_formatter.rb +5 -6
  33. data/lib/solarwinds_apm/{inst → support}/logging_log_event.rb +3 -6
  34. data/lib/solarwinds_apm/{inst → support}/lumberjack_formatter.rb +1 -4
  35. data/lib/solarwinds_apm/support/oboe_tracing_mode.rb +27 -0
  36. data/lib/solarwinds_apm/support/swomarginalia/LICENSE +20 -0
  37. data/lib/solarwinds_apm/support/swomarginalia/README.md +41 -0
  38. data/lib/solarwinds_apm/support/swomarginalia/comment.rb +205 -0
  39. data/lib/solarwinds_apm/support/swomarginalia/load_swomarginalia.rb +48 -0
  40. data/lib/solarwinds_apm/support/swomarginalia/railtie.rb +22 -0
  41. data/lib/solarwinds_apm/support/swomarginalia/swomarginalia.rb +86 -0
  42. data/lib/solarwinds_apm/support/transaction_cache.rb +24 -0
  43. data/lib/solarwinds_apm/support/transaction_settings.rb +26 -209
  44. data/lib/solarwinds_apm/support/transformer.rb +56 -0
  45. data/lib/solarwinds_apm/support/txn_name_manager.rb +25 -0
  46. data/lib/solarwinds_apm/support/x_trace_options.rb +42 -26
  47. data/lib/solarwinds_apm/support.rb +37 -10
  48. data/lib/solarwinds_apm/support_report.rb +10 -32
  49. data/lib/solarwinds_apm/thread_local.rb +1 -1
  50. data/lib/solarwinds_apm/version.rb +4 -4
  51. data/lib/solarwinds_apm.rb +29 -25
  52. metadata +63 -123
  53. data/.dockerignore +0 -5
  54. data/.gitignore +0 -58
  55. data/.rubocop.yml +0 -29
  56. data/.whitesource +0 -22
  57. data/.yardopts +0 -7
  58. data/CHANGELOG-appoptics.md +0 -766
  59. data/CHANGELOG.md +0 -82
  60. data/CONFIG.md +0 -31
  61. data/Gemfile +0 -15
  62. data/README.md +0 -385
  63. data/bin/solarwinds_apm_config +0 -15
  64. data/examples/prepend.rb +0 -13
  65. data/examples/sdk_examples.rb +0 -158
  66. data/ext/oboe_metal/README.md +0 -69
  67. data/ext/oboe_metal/extconf_local.rb +0 -75
  68. data/ext/oboe_metal/lib/.keep +0 -0
  69. data/ext/oboe_metal/noop/noop.c +0 -8
  70. data/ext/oboe_metal/src/README.md +0 -6
  71. data/ext/oboe_metal/src/frames.cc +0 -247
  72. data/ext/oboe_metal/src/frames.h +0 -40
  73. data/ext/oboe_metal/src/logging.cc +0 -97
  74. data/ext/oboe_metal/src/logging.h +0 -34
  75. data/ext/oboe_metal/src/profiling.cc +0 -435
  76. data/ext/oboe_metal/src/profiling.h +0 -78
  77. data/ext/oboe_metal/test/CMakeLists.txt +0 -53
  78. data/ext/oboe_metal/test/FindGMock.cmake +0 -43
  79. data/ext/oboe_metal/test/README.md +0 -56
  80. data/ext/oboe_metal/test/frames_test.cc +0 -164
  81. data/ext/oboe_metal/test/profiling_test.cc +0 -93
  82. data/ext/oboe_metal/test/ruby_inc_dir.rb +0 -8
  83. data/ext/oboe_metal/test/ruby_prefix.rb +0 -8
  84. data/ext/oboe_metal/test/ruby_test_helper.rb +0 -67
  85. data/ext/oboe_metal/test/test.h +0 -11
  86. data/ext/oboe_metal/test/test_main.cc +0 -32
  87. data/init.rb +0 -4
  88. data/lib/solarwinds_apm/api/layerinit.rb +0 -41
  89. data/lib/solarwinds_apm/api/logging.rb +0 -356
  90. data/lib/solarwinds_apm/api/memcache.rb +0 -37
  91. data/lib/solarwinds_apm/api/metrics.rb +0 -63
  92. data/lib/solarwinds_apm/api/util.rb +0 -98
  93. data/lib/solarwinds_apm/frameworks/grape.rb +0 -96
  94. data/lib/solarwinds_apm/frameworks/padrino.rb +0 -78
  95. data/lib/solarwinds_apm/frameworks/rails/inst/action_controller.rb +0 -100
  96. data/lib/solarwinds_apm/frameworks/rails/inst/action_controller5.rb +0 -50
  97. data/lib/solarwinds_apm/frameworks/rails/inst/action_controller_api.rb +0 -50
  98. data/lib/solarwinds_apm/frameworks/rails/inst/action_view.rb +0 -88
  99. data/lib/solarwinds_apm/frameworks/rails/inst/active_record.rb +0 -26
  100. data/lib/solarwinds_apm/frameworks/rails/inst/connection_adapters/mysql2.rb +0 -29
  101. data/lib/solarwinds_apm/frameworks/rails/inst/connection_adapters/postgresql.rb +0 -22
  102. data/lib/solarwinds_apm/frameworks/rails/inst/connection_adapters/utils5x.rb +0 -103
  103. data/lib/solarwinds_apm/frameworks/rails/inst/logger_formatters.rb +0 -14
  104. data/lib/solarwinds_apm/frameworks/rails.rb +0 -100
  105. data/lib/solarwinds_apm/frameworks/sinatra.rb +0 -96
  106. data/lib/solarwinds_apm/inst/bunny-client.rb +0 -157
  107. data/lib/solarwinds_apm/inst/bunny-consumer.rb +0 -102
  108. data/lib/solarwinds_apm/inst/curb.rb +0 -289
  109. data/lib/solarwinds_apm/inst/dalli.rb +0 -89
  110. data/lib/solarwinds_apm/inst/delayed_job.rb +0 -100
  111. data/lib/solarwinds_apm/inst/excon.rb +0 -113
  112. data/lib/solarwinds_apm/inst/faraday.rb +0 -96
  113. data/lib/solarwinds_apm/inst/graphql.rb +0 -206
  114. data/lib/solarwinds_apm/inst/grpc_client.rb +0 -147
  115. data/lib/solarwinds_apm/inst/grpc_server.rb +0 -119
  116. data/lib/solarwinds_apm/inst/httpclient.rb +0 -182
  117. data/lib/solarwinds_apm/inst/memcached.rb +0 -86
  118. data/lib/solarwinds_apm/inst/mongo.rb +0 -246
  119. data/lib/solarwinds_apm/inst/mongo2.rb +0 -225
  120. data/lib/solarwinds_apm/inst/moped.rb +0 -466
  121. data/lib/solarwinds_apm/inst/net_http.rb +0 -60
  122. data/lib/solarwinds_apm/inst/rack.rb +0 -223
  123. data/lib/solarwinds_apm/inst/rack_cache.rb +0 -35
  124. data/lib/solarwinds_apm/inst/redis.rb +0 -280
  125. data/lib/solarwinds_apm/inst/redis_v4.rb +0 -273
  126. data/lib/solarwinds_apm/inst/resque.rb +0 -129
  127. data/lib/solarwinds_apm/inst/rest-client.rb +0 -43
  128. data/lib/solarwinds_apm/inst/sequel.rb +0 -241
  129. data/lib/solarwinds_apm/inst/sidekiq-client.rb +0 -63
  130. data/lib/solarwinds_apm/inst/sidekiq-worker.rb +0 -64
  131. data/lib/solarwinds_apm/inst/typhoeus.rb +0 -90
  132. data/lib/solarwinds_apm/instrumentation.rb +0 -22
  133. data/lib/solarwinds_apm/loading.rb +0 -65
  134. data/lib/solarwinds_apm/noop/profiling.rb +0 -21
  135. data/lib/solarwinds_apm/ruby.rb +0 -35
  136. data/lib/solarwinds_apm/sdk/current_trace_info.rb +0 -123
  137. data/lib/solarwinds_apm/sdk/custom_metrics.rb +0 -94
  138. data/lib/solarwinds_apm/sdk/logging.rb +0 -37
  139. data/lib/solarwinds_apm/sdk/trace_context_headers.rb +0 -69
  140. data/lib/solarwinds_apm/sdk/tracing.rb +0 -432
  141. data/lib/solarwinds_apm/support/profiling.rb +0 -25
  142. data/lib/solarwinds_apm/support/trace_context.rb +0 -53
  143. data/lib/solarwinds_apm/support/trace_state.rb +0 -69
  144. data/lib/solarwinds_apm/support/trace_string.rb +0 -89
  145. data/lib/solarwinds_apm/support/transaction_metrics.rb +0 -67
  146. data/lib/solarwinds_apm/test.rb +0 -165
  147. data/lib/solarwinds_apm/util.rb +0 -426
  148. data/log/.keep +0 -0
  149. data/log/postgresql/.keep +0 -0
  150. data/solarwinds_apm.gemspec +0 -55
  151. data/yardoc_frontpage.md +0 -24
@@ -1,43 +0,0 @@
1
- # This content copied from
2
- # https://git.simply-life.net/simply-life.net/talltower/-/blob/639293a366da43eb94a72d2e7596242314c9809c/cmake/FindGMock.cmake
3
-
4
-
5
- # Try to find GMock
6
- find_package(GTest)
7
-
8
- # the following issues a warning, but it works nonetheless
9
- find_package(PkgConfig)
10
- pkg_check_modules(PC_GMOCK QUIET gmock)
11
- set(GMOCK_DEFINITIONS ${PC_GMOCK_CFLAGS_OTHER})
12
-
13
- find_path(GMOCK_INCLUDE_DIR gmock.h
14
- HINTS ${PC_GMOCK_INCLUDEDIR} ${PC_GMOCK_INCLUDE_DIRS}
15
- PATH_SUFFIXES gmock)
16
-
17
- find_library(GMOCK_LIBRARY NAMES gmock libgmock
18
- HINTS ${PC_GMOCK_LIBDIR} ${PC_GMOCK_LIBRARY_DIRS} )
19
-
20
- find_library(GMOCK_MAIN_LIBRARY NAMES gmock_main libgmock_main
21
- HINTS ${PC_GMOCK_LIBDIR} ${PC_GMOCK_LIBRARY_DIRS} )
22
-
23
- include(FindPackageHandleStandardArgs)
24
- # handle the QUIETLY and REQUIRED arguments and set GMOCK_FOUND to TRUE
25
- # if all listed variables are TRUE
26
- find_package_handle_standard_args(GMock DEFAULT_MSG
27
- GMOCK_LIBRARY GMOCK_INCLUDE_DIR GTEST_FOUND)
28
-
29
- mark_as_advanced(GMOCK_INCLUDE_DIR GMOCK_LIBRARY GMOCK_MAIN_LIBRARY)
30
-
31
- set(GMOCK_LIBRARIES ${GMOCK_LIBRARY} )
32
- set(GMOCK_INCLUDE_DIRS ${GMOCK_INCLUDE_DIR} )
33
- set(GMOCK_MAIN_LIBRARIES ${GMOCK_MAIN_LIBRARY} )
34
-
35
- if (NOT TARGET GMock)
36
- add_library(GMock IMPORTED SHARED)
37
- set_property(TARGET GMock PROPERTY IMPORTED_LOCATION ${GMOCK_LIBRARY})
38
- set_property(TARGET GMock PROPERTY INTERFACE_INCLUDE_DIRECTORY ${GMOCK_INCLUDE_DIR})
39
-
40
- add_library(GMockMain IMPORTED SHARED)
41
- set_property(TARGET GMockMain PROPERTY IMPORTED_LOCATION ${GMOCK_MAIN_LIBRARY})
42
- set_property(TARGET GMockMain PROPERTY INTERFACE_LINK_LIBRARIES GMock GTest)
43
- endif()
@@ -1,56 +0,0 @@
1
- C-code tests:
2
-
3
- CMakeLists.txt includes downloading and compiling googletest if necessary
4
-
5
- In the ext/oboe_metal/test directory:
6
-
7
- Set an environment variable for the current path:
8
- ```
9
- export TEST_DIR=`pwd`
10
- ```
11
-
12
- Every time the ruby version changes the solarwinds_apm gem needs to be
13
- re-installed or its c++-code recompiled and relinked
14
-
15
- These environment variables need to be set every time the ruby version is set:
16
- ```
17
- export RUBY_INC_DIR=$(ruby ruby_inc_dir.rb)
18
- export RUBY_PREFIX=$(ruby ruby_prefix.rb)
19
- ```
20
-
21
- create the Makefile (needs to be remade when the ruby version changes)
22
- ```
23
- cmake -S . -B build
24
- ```
25
- build
26
- ```
27
- cmake --build build
28
- ```
29
- run
30
- ```
31
- cd build && ctest && cd -
32
- ```
33
-
34
- Most testing of profiling is done via Ruby integration tests
35
-
36
- For example logging is tested in Ruby tests that verify the different
37
- KVs and values in the resulting traces, using the same approach as
38
- for traces without profiling.
39
-
40
- Gotchas:
41
-
42
- - In alpine the `ruby/config.h` file is in an architecture specific folder and needs
43
- to be symlinked to the location set via RUBY_INC_DIR (see: Dockerfile_alpine)
44
-
45
- TODO:
46
-
47
- - write a script for this
48
-
49
- ```
50
- export TEST_DIR=`pwd`
51
- export RUBY_INC_DIR=$(ruby ruby_inc_dir.rb)
52
- export RUBY_PREFIX=$(ruby ruby_prefix.rb)
53
- cmake -S . -B build
54
- cmake --build build
55
- cd build && ctest && cd -
56
- ```
@@ -1,164 +0,0 @@
1
-
2
-
3
- #include <string.h>
4
-
5
- #include <algorithm>
6
-
7
- #include "../src/profiling.h"
8
- #include "../src/frames.h"
9
- #include "gtest/gtest.h"
10
- #include "ruby/debug.h"
11
- #include "ruby/ruby.h"
12
- #include "test.h"
13
-
14
- extern unordered_map<VALUE, FrameData> cached_frames;
15
-
16
- static VALUE test_frames[BUF_SIZE];
17
- static int test_lines[BUF_SIZE];
18
- int test_num;
19
-
20
- static int ruby_version;
21
-
22
- VALUE RubyCallsFrames::c_get_frames() {
23
- test_num = rb_profile_frames(1, sizeof(test_frames) / sizeof(VALUE), test_frames, test_lines);
24
- return Qnil;
25
- }
26
-
27
- void Init_RubyCallsFrames() {
28
- static VALUE cTest = rb_define_module("RubyCalls");
29
- rb_define_singleton_method(cTest, "get_frames", reinterpret_cast<VALUE (*)(...)>(RubyCallsFrames::c_get_frames), 0);
30
-
31
- VALUE result;
32
- result = rb_eval_string("RUBY_VERSION[0].to_i");
33
- ruby_version = NUM2INT(result);
34
- };
35
-
36
- TEST(Frames, reserve_cached_frames) {
37
- // it should only reserve once used during init
38
- // unordered_map grows automatically
39
- cached_frames.clear();
40
-
41
- Frames::reserve_cached_frames();
42
- int bucket_count = cached_frames.bucket_count();
43
-
44
- Frames::reserve_cached_frames();
45
- EXPECT_EQ(bucket_count, cached_frames.bucket_count());
46
- }
47
-
48
- TEST(Frames, collect_frame_data) {
49
- rb_eval_string("TestMe::Snapshot::all_kinds");
50
-
51
- int num = Frames::remove_garbage(test_frames, test_num);
52
-
53
- vector<FrameData> data;
54
- // Ruby 3 reports a <cfunc>, before the "take_snapshot" method
55
- // we have to adjust the index of the trace we are checking
56
- int i = ruby_version == 2 ? 0 : 1;
57
- Frames::collect_frame_data(test_frames, i + 1, data);
58
-
59
- EXPECT_EQ("take_snapshot", data[i].method) << "method name incorrect";
60
- EXPECT_EQ("TestMe::Snapshot", data[i].klass) << "klass name incorrect";
61
- std::size_t found = data[i].file.find("ext/oboe_metal/test/ruby_test_helper.rb");
62
- EXPECT_EQ(data[i].file.length() - 39, found)
63
- << "filename incorrect " << found << " " << data[i].file.length();
64
- EXPECT_EQ(7, data[i].lineno) << "line number incorrect";
65
- }
66
-
67
- TEST(Frames, remove_garbage) {
68
- // run some Ruby code and get a snapshot
69
- rb_eval_string("TestMe::Snapshot::all_kinds");
70
-
71
- int num = Frames::remove_garbage(test_frames, test_num);
72
-
73
- int expected = (ruby_version == 2) ? 7 : 9;
74
- EXPECT_EQ(expected, num)
75
- << "wrong number of expected frames after remove_garbage";
76
- // check no lineno 0 frame at top
77
- VALUE val;
78
- int i = (ruby_version == 2) ? 0 : 1;
79
- val = rb_profile_frame_first_lineno(test_frames[i]); // returns line number
80
- if (RB_TYPE_P(val, T_FIXNUM)) {
81
- EXPECT_NE(0, NUM2INT(val))
82
- << "the frame with linenumber 0 was not removed";
83
- } else {
84
- EXPECT_TRUE(false) << " ************ line number not an int **********";
85
- }
86
- // check no repeated frames
87
- for (i = 0; i < num; i++)
88
- for (int j = i + 1; j < num; j++)
89
- EXPECT_NE(test_frames[i], test_frames[j])
90
- << "not all repeated frames were removed";
91
- }
92
-
93
- TEST(Frames, num_matching) {
94
- VALUE a[BUF_SIZE];
95
- VALUE b[BUF_SIZE];
96
-
97
- int a_num = 0;
98
- int b_num = 0;
99
- EXPECT_EQ(0, Frames::num_matching(a, a_num, b, b_num))
100
- << "* empty frames array should have 0 matches";
101
-
102
- a[0] = (VALUE)11;
103
- a[1] = (VALUE)12;
104
- a[2] = (VALUE)13;
105
- b[0] = (VALUE)11;
106
- b[1] = (VALUE)12;
107
- b[2] = (VALUE)13;
108
- a_num = 3;
109
- b_num = 3;
110
- EXPECT_EQ(3, Frames::num_matching(a, a_num, b, b_num))
111
- << "* equal frames array should have matched";
112
-
113
- b[1] = (VALUE)222;
114
- EXPECT_EQ(1, Frames::num_matching(a, a_num, b, b_num))
115
- << "* only one should match for same length but different content";
116
-
117
- b[1] = (VALUE)12;
118
- a[3] = 14;
119
- a_num = 4;
120
- EXPECT_EQ(0, Frames::num_matching(a, a_num, b, b_num))
121
- << "* different length, frames NOT matching from the end";
122
-
123
- a[0] = 10;
124
- a[1] = 11;
125
- a[2] = 12;
126
- a[3] = 13;
127
- EXPECT_EQ(3, Frames::num_matching(a, a_num, b, b_num))
128
- << "* different length, frames matching from the end";
129
-
130
- b[0] = (VALUE)18;
131
- b[1] = (VALUE)19;
132
- b[2] = (VALUE)11;
133
- b[3] = (VALUE)12;
134
- b[4] = (VALUE)13;
135
- b_num = 5;
136
-
137
- EXPECT_EQ(3, Frames::num_matching(a, a_num, b, b_num))
138
- << "* different length, frames matching from the end";
139
- }
140
-
141
- TEST(Frames, cached_frames) {
142
- cached_frames.clear();
143
- // run some Ruby code and get a snapshot
144
- rb_eval_string("TestMe::Snapshot::all_kinds");
145
-
146
- Frames::remove_garbage(test_frames, test_num);
147
-
148
- // Check the expected size
149
- int expected = (ruby_version == 2) ? 8 : 10;
150
- EXPECT_EQ(expected, cached_frames.size());
151
-
152
- // check that each frame is cached
153
- for (int i = 0; i < test_num; i++)
154
- EXPECT_EQ(1, cached_frames.count(test_frames[i]));
155
-
156
- // repeat
157
- rb_eval_string("TestMe::Snapshot::all_kinds");
158
- Frames::remove_garbage(test_frames, test_num);
159
-
160
- expected = (ruby_version == 2) ? 9 : 11;
161
- EXPECT_EQ(expected, cached_frames.size()); // +1 for an extra main frame
162
- for (int i = 0; i < test_num; i++)
163
- EXPECT_EQ(1, cached_frames.count(test_frames[i]));
164
- }
@@ -1,93 +0,0 @@
1
-
2
- #include "../src/frames.h"
3
-
4
- #include <string.h>
5
-
6
- #include <algorithm>
7
- #include <thread>
8
- #include <array>
9
-
10
- #include "../src/profiling.h"
11
- #include "gtest/gtest.h"
12
- #include "ruby/debug.h"
13
- #include "ruby/ruby.h"
14
- #include "test.h"
15
-
16
- extern atomic_bool profiling_shut_down;
17
- // extern oboe_reporter_t *cur_reporter;
18
-
19
- // FIXME how can I access profiling_shut_down ?
20
- TEST(Profiling, try_catch_shutdown) {
21
- EXPECT_FALSE(profiling_shut_down);
22
-
23
- int result;
24
- result = Profiling::try_catch_shutdown([] {
25
- // provoke exception
26
- std::string ().replace (100, 1, 1, 'c');
27
- return 0;
28
- }, "Profiling::try_catch()");
29
-
30
- EXPECT_NE(0, result);
31
- EXPECT_TRUE(profiling_shut_down);
32
-
33
- // reset global var
34
- profiling_shut_down = false;
35
- }
36
-
37
- TEST(Profiling, oboe_0_profiling) {
38
- atomic_bool atomic_a1{true};
39
- atomic_bool atomic_a2{false};
40
-
41
- atomic_bool running;
42
-
43
- cout << running << endl;
44
- cout << running.exchange(true) << endl;
45
- cout << running.exchange(true) << endl;
46
-
47
- // cout << "prev val " << atomic_a2.exchange(false) << endl;
48
- // cout << atomic_a2 << endl;
49
- // cout << "prev val " << atomic_a2.exchange(true) << endl;
50
- // cout << atomic_a2 << endl;
51
- // cout << "prev val " << atomic_a2.exchange(true) << endl;
52
- // cout << atomic_a2 << endl;
53
- // cout << "prev val " << atomic_a2.exchange(false) << endl;
54
- // cout << atomic_a2 << endl;
55
-
56
-
57
-
58
- // static bool b1{true};
59
- // static bool b2{false};
60
-
61
- // array<thread, 4> threads;
62
-
63
- // for (auto& t : threads) {
64
- // t = thread([] { Profiling::profiler_signal_handler(0, NULL, NULL); });
65
- // }
66
-
67
- // cout << "waiting..." << endl;
68
-
69
- // for (auto& t : threads) {
70
- // t.join();
71
- // }
72
-
73
- // cout << "Done." << endl;
74
-
75
-
76
- // cout << atomic_a1 << ", " << b1 << endl;
77
- // cout << atomic_a1 << ", " << b1 << ", " << atomic_a1.compare_exchange_weak(b1, false) << endl;
78
- // cout << atomic_a1 << ", " << b1 << endl;
79
- // cout << atomic_a2 << ", " << b2 << endl;
80
- // cout << atomic_a2 << ", " << b2 << ", " << atomic_a2.compare_exchange_weak(b2, true) << endl;
81
- // cout << atomic_a2 << ", " << b2 << endl;
82
- // cout << endl;
83
-
84
- // cout << atomic_a1 << ", " << b1 << endl;
85
- // cout << atomic_a1 << ", " << b1 << ", " << atomic_a1.compare_exchange_weak(b1, false) << endl;
86
- // cout << atomic_a1 << ", " << b1 << endl;
87
- // cout << atomic_a2 << ", " << b2 << endl;
88
- // cout << atomic_a2 << ", " << b2 << ", " << atomic_a2.compare_exchange_weak(b2, true) << endl;
89
- // cout << atomic_a2 << ", " << b2 << endl;
90
- // cout << endl;
91
-
92
-
93
- }
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2021 SolarWinds, LLC.
4
- # All rights reserved.
5
-
6
- require 'mkmf'
7
- puts $topdir
8
-
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Copyright (c) 2021 SolarWinds, LLC.
4
- # All rights reserved.
5
-
6
- require 'mkmf'
7
- puts CONFIG["prefix"]
8
-
@@ -1,67 +0,0 @@
1
- class TestMe
2
- class Snapshot
3
-
4
- class << self
5
- # !!! do not shift the definition of take_snapshot from line 7 !!!
6
- # the line number is used to verify a test in frames_test.cc
7
- def take_snapshot
8
- # puts "getting frames ...."
9
- begin
10
- ::RubyCalls::get_frames
11
- rescue => e
12
- puts "oops, getting frames didn't work"
13
- puts e
14
- end
15
- end
16
-
17
- def all_kinds
18
- begin
19
- Teddy.new.sing do
20
- take_snapshot
21
- end
22
- rescue => e
23
- puts "Ruby call did not work"
24
- puts e
25
- end
26
- end
27
- end
28
- end
29
-
30
- class Teddy
31
-
32
- attr_accessor :name
33
-
34
- def sing
35
- 3.times do
36
- yodel do
37
- html_wrap("title", "Hello") { |_html| yield }
38
- end
39
- end
40
- end
41
-
42
- private
43
-
44
- def yodel
45
- a_proc = -> (x) { x * x; yield }
46
- in_block(&a_proc)
47
- end
48
-
49
- def in_block(&block)
50
- begin
51
- yield 7
52
- # puts "block called!"
53
- rescue => e
54
- puts "no, this should never happen"
55
- puts e
56
- end
57
- end
58
-
59
- def html_wrap(tag, text)
60
- html = "<#{tag}>#{text}</#{tag}>"
61
- yield html
62
- end
63
-
64
- end
65
- end
66
-
67
-
@@ -1,11 +0,0 @@
1
- #ifndef TEST_H
2
- #define TEST_H
3
-
4
- class RubyCallsFrames {
5
- public:
6
- static VALUE c_get_frames();
7
- };
8
-
9
- void Init_RubyCallsFrames();
10
-
11
- #endif //TEST_H
@@ -1,32 +0,0 @@
1
- #include "gtest/gtest.h"
2
- // #include "gmock/gmock.h"
3
- #include <ruby/ruby.h>
4
- #include "../src/profiling.h"
5
- #include "../src/frames.h"
6
- #include "test.h"
7
-
8
- #ifndef FRAMES_BUFFER
9
- #define FRAMES_BUFFER
10
-
11
- using namespace std;
12
-
13
- int main(int argc, char **argv) {
14
- int state = -1;
15
-
16
- // order important! init ruby before adding functions!
17
- ruby_init();
18
- Init_RubyCallsFrames();
19
-
20
- // !!! if the require path is wrong, cmake will segfault !!!
21
- string path(std::getenv("TEST_DIR"));
22
- string cmd("require '" + path + "/" + "ruby_test_helper.rb" + "'");
23
- rb_eval_string(cmd.c_str());
24
-
25
- ::testing::InitGoogleTest(&argc, argv);
26
-
27
- state = RUN_ALL_TESTS();
28
-
29
- ruby_cleanup(0);
30
- return state;
31
- }
32
- #endif //FRAMES_BUFFER
data/init.rb DELETED
@@ -1,4 +0,0 @@
1
- # Copyright (c) 2016 SolarWinds, LLC.
2
- # All rights reserved.
3
-
4
- require 'solarwinds_apm'
@@ -1,41 +0,0 @@
1
- #--
2
- # Copyright (c) 2016 SolarWinds, LLC.
3
- # All rights reserved.
4
- #++
5
-
6
- module SolarWindsAPM
7
- module API
8
- ##
9
- # Provides methods related to layer initialization and reporting
10
- module LayerInit #:nodoc:
11
- # Internal: Report that instrumentation for the given layer has been
12
- # installed, as well as the version of instrumentation and version of
13
- # layer.
14
- #
15
- def report_init(layer = :rack) #:nodoc:
16
- # Don't send __Init in test or if SolarWindsAPM
17
- # isn't fully loaded (e.g. missing c-extension)
18
- return if ENV.key?('SW_APM_GEM_TEST') || !SolarWindsAPM.loaded
19
-
20
- platform_info = SolarWindsAPM::Util.build_init_report
21
- log_init(layer, platform_info)
22
- end
23
-
24
- ##
25
- # :nodoc:
26
- # Deprecated:
27
- # force_trace has been deprecated and will be removed in a subsequent version.
28
- #
29
- def force_trace
30
- SolarWindsAPM.logger.warn '[solarwinds_apm/api] SolarWindsAPM::API::LayerInit.force_trace has been deprecated and will be ' \
31
- 'removed in a subsequent version.'
32
-
33
- saved_mode = SolarWindsAPM::Config[:tracing_mode]
34
- SolarWindsAPM::Config[:tracing_mode] = :enabled
35
- yield
36
- ensure
37
- SolarWindsAPM::Config[:tracing_mode] = saved_mode
38
- end
39
- end
40
- end
41
- end