solarwinds_apm 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +7 -0
  2. data/.dockerignore +5 -0
  3. data/.github/ISSUE_TEMPLATE/bug-or-feature-request.md +16 -0
  4. data/.github/workflows/build_and_release_gem.yml +112 -0
  5. data/.github/workflows/build_for_packagecloud.yml +70 -0
  6. data/.github/workflows/docker-images.yml +47 -0
  7. data/.github/workflows/run_cpluplus_tests.yml +73 -0
  8. data/.github/workflows/run_tests.yml +155 -0
  9. data/.github/workflows/scripts/test_install.rb +23 -0
  10. data/.github/workflows/swig/swig-v4.0.2.tar.gz +0 -0
  11. data/.github/workflows/test_on_4_linux.yml +161 -0
  12. data/.gitignore +39 -0
  13. data/.rubocop.yml +29 -0
  14. data/.yardopts +7 -0
  15. data/CHANGELOG.md +769 -0
  16. data/CONFIG.md +31 -0
  17. data/Gemfile +14 -0
  18. data/LICENSE +202 -0
  19. data/README.md +383 -0
  20. data/bin/solarwinds_apm_config +15 -0
  21. data/examples/prepend.rb +13 -0
  22. data/examples/sdk_examples.rb +158 -0
  23. data/ext/oboe_metal/README.md +69 -0
  24. data/ext/oboe_metal/extconf.rb +141 -0
  25. data/ext/oboe_metal/extconf_local.rb +75 -0
  26. data/ext/oboe_metal/lib/.keep +0 -0
  27. data/ext/oboe_metal/lib/liboboe-1.0-alpine-x86_64.so.0.0.0.sha256 +1 -0
  28. data/ext/oboe_metal/lib/liboboe-1.0-x86_64.so.0.0.0.sha256 +1 -0
  29. data/ext/oboe_metal/noop/noop.c +8 -0
  30. data/ext/oboe_metal/src/README.md +6 -0
  31. data/ext/oboe_metal/src/VERSION +2 -0
  32. data/ext/oboe_metal/src/bson/bson.h +220 -0
  33. data/ext/oboe_metal/src/bson/platform_hacks.h +91 -0
  34. data/ext/oboe_metal/src/frames.cc +247 -0
  35. data/ext/oboe_metal/src/frames.h +40 -0
  36. data/ext/oboe_metal/src/init_solarwinds_apm.cc +21 -0
  37. data/ext/oboe_metal/src/logging.cc +95 -0
  38. data/ext/oboe_metal/src/logging.h +35 -0
  39. data/ext/oboe_metal/src/oboe.h +1169 -0
  40. data/ext/oboe_metal/src/oboe_api.cpp +658 -0
  41. data/ext/oboe_metal/src/oboe_api.hpp +433 -0
  42. data/ext/oboe_metal/src/oboe_debug.h +59 -0
  43. data/ext/oboe_metal/src/oboe_swig_wrap.cc +7562 -0
  44. data/ext/oboe_metal/src/profiling.cc +435 -0
  45. data/ext/oboe_metal/src/profiling.h +78 -0
  46. data/ext/oboe_metal/test/CMakeLists.txt +53 -0
  47. data/ext/oboe_metal/test/FindGMock.cmake +43 -0
  48. data/ext/oboe_metal/test/README.md +56 -0
  49. data/ext/oboe_metal/test/frames_test.cc +164 -0
  50. data/ext/oboe_metal/test/profiling_test.cc +93 -0
  51. data/ext/oboe_metal/test/ruby_inc_dir.rb +8 -0
  52. data/ext/oboe_metal/test/ruby_prefix.rb +8 -0
  53. data/ext/oboe_metal/test/ruby_test_helper.rb +67 -0
  54. data/ext/oboe_metal/test/test.h +11 -0
  55. data/ext/oboe_metal/test/test_main.cc +32 -0
  56. data/init.rb +4 -0
  57. data/lib/oboe.rb +7 -0
  58. data/lib/oboe_metal.rb +172 -0
  59. data/lib/rails/generators/solarwinds_apm/install_generator.rb +47 -0
  60. data/lib/rails/generators/solarwinds_apm/templates/solarwinds_apm_initializer.rb +424 -0
  61. data/lib/solarwinds_apm/api/layerinit.rb +41 -0
  62. data/lib/solarwinds_apm/api/logging.rb +356 -0
  63. data/lib/solarwinds_apm/api/memcache.rb +37 -0
  64. data/lib/solarwinds_apm/api/metrics.rb +63 -0
  65. data/lib/solarwinds_apm/api/util.rb +98 -0
  66. data/lib/solarwinds_apm/api.rb +21 -0
  67. data/lib/solarwinds_apm/base.rb +160 -0
  68. data/lib/solarwinds_apm/config.rb +301 -0
  69. data/lib/solarwinds_apm/frameworks/grape.rb +96 -0
  70. data/lib/solarwinds_apm/frameworks/padrino.rb +78 -0
  71. data/lib/solarwinds_apm/frameworks/rails/inst/action_controller.rb +100 -0
  72. data/lib/solarwinds_apm/frameworks/rails/inst/action_controller5.rb +50 -0
  73. data/lib/solarwinds_apm/frameworks/rails/inst/action_controller_api.rb +50 -0
  74. data/lib/solarwinds_apm/frameworks/rails/inst/action_view.rb +88 -0
  75. data/lib/solarwinds_apm/frameworks/rails/inst/active_record.rb +26 -0
  76. data/lib/solarwinds_apm/frameworks/rails/inst/connection_adapters/mysql2.rb +29 -0
  77. data/lib/solarwinds_apm/frameworks/rails/inst/connection_adapters/postgresql.rb +22 -0
  78. data/lib/solarwinds_apm/frameworks/rails/inst/connection_adapters/utils5x.rb +103 -0
  79. data/lib/solarwinds_apm/frameworks/rails/inst/logger_formatters.rb +14 -0
  80. data/lib/solarwinds_apm/frameworks/rails.rb +100 -0
  81. data/lib/solarwinds_apm/frameworks/sinatra.rb +96 -0
  82. data/lib/solarwinds_apm/inst/bunny-client.rb +157 -0
  83. data/lib/solarwinds_apm/inst/bunny-consumer.rb +102 -0
  84. data/lib/solarwinds_apm/inst/curb.rb +288 -0
  85. data/lib/solarwinds_apm/inst/dalli.rb +89 -0
  86. data/lib/solarwinds_apm/inst/delayed_job.rb +100 -0
  87. data/lib/solarwinds_apm/inst/excon.rb +113 -0
  88. data/lib/solarwinds_apm/inst/faraday.rb +96 -0
  89. data/lib/solarwinds_apm/inst/graphql.rb +206 -0
  90. data/lib/solarwinds_apm/inst/grpc_client.rb +147 -0
  91. data/lib/solarwinds_apm/inst/grpc_server.rb +119 -0
  92. data/lib/solarwinds_apm/inst/httpclient.rb +181 -0
  93. data/lib/solarwinds_apm/inst/logger_formatter.rb +46 -0
  94. data/lib/solarwinds_apm/inst/logging_log_event.rb +24 -0
  95. data/lib/solarwinds_apm/inst/lumberjack_formatter.rb +9 -0
  96. data/lib/solarwinds_apm/inst/memcached.rb +86 -0
  97. data/lib/solarwinds_apm/inst/mongo.rb +246 -0
  98. data/lib/solarwinds_apm/inst/mongo2.rb +225 -0
  99. data/lib/solarwinds_apm/inst/moped.rb +466 -0
  100. data/lib/solarwinds_apm/inst/net_http.rb +60 -0
  101. data/lib/solarwinds_apm/inst/rack.rb +217 -0
  102. data/lib/solarwinds_apm/inst/rack_cache.rb +35 -0
  103. data/lib/solarwinds_apm/inst/redis.rb +273 -0
  104. data/lib/solarwinds_apm/inst/resque.rb +129 -0
  105. data/lib/solarwinds_apm/inst/rest-client.rb +43 -0
  106. data/lib/solarwinds_apm/inst/sequel.rb +241 -0
  107. data/lib/solarwinds_apm/inst/sidekiq-client.rb +63 -0
  108. data/lib/solarwinds_apm/inst/sidekiq-worker.rb +64 -0
  109. data/lib/solarwinds_apm/inst/typhoeus.rb +90 -0
  110. data/lib/solarwinds_apm/instrumentation.rb +22 -0
  111. data/lib/solarwinds_apm/loading.rb +65 -0
  112. data/lib/solarwinds_apm/logger.rb +14 -0
  113. data/lib/solarwinds_apm/noop/README.md +9 -0
  114. data/lib/solarwinds_apm/noop/context.rb +26 -0
  115. data/lib/solarwinds_apm/noop/metadata.rb +25 -0
  116. data/lib/solarwinds_apm/noop/profiling.rb +21 -0
  117. data/lib/solarwinds_apm/oboe_init_options.rb +191 -0
  118. data/lib/solarwinds_apm/ruby.rb +35 -0
  119. data/lib/solarwinds_apm/sdk/current_trace_info.rb +123 -0
  120. data/lib/solarwinds_apm/sdk/custom_metrics.rb +94 -0
  121. data/lib/solarwinds_apm/sdk/logging.rb +37 -0
  122. data/lib/solarwinds_apm/sdk/trace_context_headers.rb +69 -0
  123. data/lib/solarwinds_apm/sdk/tracing.rb +432 -0
  124. data/lib/solarwinds_apm/support/profiling.rb +22 -0
  125. data/lib/solarwinds_apm/support/trace_context.rb +53 -0
  126. data/lib/solarwinds_apm/support/trace_state.rb +69 -0
  127. data/lib/solarwinds_apm/support/trace_string.rb +89 -0
  128. data/lib/solarwinds_apm/support/transaction_metrics.rb +67 -0
  129. data/lib/solarwinds_apm/support/transaction_settings.rb +233 -0
  130. data/lib/solarwinds_apm/support/x_trace_options.rb +113 -0
  131. data/lib/solarwinds_apm/support.rb +12 -0
  132. data/lib/solarwinds_apm/support_report.rb +113 -0
  133. data/lib/solarwinds_apm/test.rb +165 -0
  134. data/lib/solarwinds_apm/thread_local.rb +26 -0
  135. data/lib/solarwinds_apm/util.rb +334 -0
  136. data/lib/solarwinds_apm/version.rb +17 -0
  137. data/lib/solarwinds_apm.rb +72 -0
  138. data/log/.keep +0 -0
  139. data/log/postgresql/.keep +0 -0
  140. data/solarwinds_apm.gemspec +52 -0
  141. data/yardoc_frontpage.md +24 -0
  142. metadata +228 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 63fe916dcebeb8fe9c3dcb5a0ffc6e03d3f07461c4fe2e17d9890a5a3ef7d7d9
4
+ data.tar.gz: 68afd25f4e027bfcb9f6766e2e858d285a67f7ecb5e34a4a59ed2f8c1b26eae1
5
+ SHA512:
6
+ metadata.gz: 6e37f758c9a3fa5a27f7a57e4f1cd41ec242d200bd30c98793a87e4ce022c92060fe9406f1ecc617a4327d7e52043b3eeeda215232c017d48f535cdae647dc4e
7
+ data.tar.gz: bf4282273f84c5350034539377f898a65b99eb8e5190cbeb1d059de3584fb402aa8750cd4097c31e6f103d6341ea6ae523b6bde4c0aecda5ebe4639e208d766b
data/.dockerignore ADDED
@@ -0,0 +1,5 @@
1
+ # exclude everything by default
2
+ *
3
+
4
+ # add whitelist of includes via:
5
+ # !somefile.txt
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: Bug or Feature request
3
+ about: general purpose template
4
+ title: "[Bug] or [Feature request]"
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ # Description
11
+
12
+ # How to reproduce or use case
13
+
14
+ # Code Sample (if available)
15
+
16
+ # OS, Ruby version, Gemfile, Gemfile.lock, log message ... (if relevant)
@@ -0,0 +1,112 @@
1
+ # Copyright (c) 2021 SolarWinds, LLC.
2
+ # All rights reserved.
3
+
4
+ name: BUILD, VERIFY, and RELEASE Ruby Gem to RubyGems
5
+
6
+ # This workflow relies on the following secrets
7
+ # - TRACE_BUILD_RUBY_ACTIONS_API_TOKEN (from the trace-build user in github)
8
+ # - RUBYGEMS_TOKEN (from the solarwinds-apm user on rubygems.org)
9
+ # - SW_APM_SERVICE_KEY
10
+ # - SW_APM_COLLECTOR
11
+ #
12
+ # The correct oboe version has to be in the file ext/oboe_metal/src/VERSION
13
+
14
+ on:
15
+ workflow_dispatch:
16
+
17
+ jobs:
18
+ build:
19
+ name: Build + Release Gem to RubyGems
20
+ runs-on: ubuntu-latest
21
+
22
+ steps:
23
+ - uses: actions/checkout@v2
24
+
25
+ - name: Set up Ruby 2.7 and bundle
26
+ uses: ruby/setup-ruby@v1
27
+ with:
28
+ ruby-version: 2.7
29
+
30
+ - name: Install gems
31
+ run: |
32
+ echo 'gem: --no-document' >> ~/.gemrc
33
+ bundle install --without development --without test
34
+
35
+ - name: Install swig 4.0.2
36
+ run: |
37
+ apt udate && apt install -y --no-install-recommends bison
38
+ curl -SL https://github.com/swig/swig/archive/refs/tags/v4.0.2.tar.gz | tar xzC /tmp
39
+ cd /tmp/swig-4.0.2
40
+ ./autogen.sh && ./configure && make && sudo make install
41
+ cd -
42
+
43
+ - name: Download files from files.appoptics.com and create swig wrapper
44
+ env:
45
+ TRACE_BUILD_TOKEN: ${{ secrets.TRACE_BUILD_RUBY_ACTIONS_API_TOKEN }}
46
+ run: |
47
+ bundle exec rake oboe_files_sw_apm_fetch
48
+ bundle exec rake oboe_verify
49
+
50
+ - name: Build Gem and upload to Rubygems
51
+ id: build
52
+ env:
53
+ GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_TOKEN }}
54
+ run: |
55
+ bundle exec rake build_and_publish_gem
56
+ checksum=`shasum -a256 *.gem | awk '{print $1;}'`
57
+ echo "checksum: $checksum"
58
+ echo ::set-output name=checksum::$checksum
59
+ echo ::set-output name=gem_version::`ruby -e 'require "./lib/solarwinds_apm/version"; puts SolarWindsAPM::Version::STRING'`
60
+
61
+ - name: Get checksum from Rubygems
62
+ id: checksum
63
+ run: |
64
+ gem_version=${{ steps.build.outputs.gem_version }}
65
+ echo ::set-output name=geminfo::`curl https://rubygems.org/api/v2/rubygems/solarwinds_apm/versions/$gem_version.json`
66
+
67
+ - name: Print checksums (in case some debugging is needed)
68
+ run: |
69
+ echo "local checksum: ${{ steps.build.outputs.checksum }}"
70
+ echo "Rubygems checksum: ${{ fromJson(steps.checksum.outputs.geminfo).sha }}"
71
+
72
+ - name: Fail if local and rubygems checksums don't match
73
+ if: fromJson(steps.checksum.outputs.geminfo).sha != steps.build.outputs.checksum
74
+ run: |
75
+ echo "local and rubygems checksum not matching, gem needs to be yanked from rubygems.org"
76
+ exit 1
77
+
78
+ # this action is not working anymore
79
+ # - name: Create release draft that includes the checksum
80
+ # uses: actions/github-script@v3
81
+ # with:
82
+ # github-token: ${{secrets.GITHUB_TOKEN}}
83
+ # script: |
84
+ # github.repos.createRelease({
85
+ # owner: "solarwinds-apm",
86
+ # repo: "appoptics-apm-ruby",
87
+ # body: "SHA256 checksum: ${{ steps.build.outputs.checksum }}",
88
+ # tag_name: "${{ steps.build.outputs.gem_version }}",
89
+ # name: "${{ steps.build.outputs.gem_version }}",
90
+ # draft: true
91
+ # })
92
+
93
+ - name: Create release draft that includes the checksum
94
+ run: |
95
+ curl \
96
+ -X POST \
97
+ -H "Accept: application/vnd.github.v3+json" \
98
+ https://api.github.com/repos/OWNER/REPO/releases \
99
+ -d '{"tag_name":"${{ steps.build.outputs.gem_version }}","name":"${{ steps.build.outputs.gem_version }}","body":"SHA256 checksum: ${{ steps.build.outputs.checksum }}","draft":true}'
100
+
101
+ # may need a bit of time for the gem to become available (sleep 1)
102
+ - name: Download new Rubygem from rubygems.org and test
103
+ working-directory: .github/workflows/
104
+ env:
105
+ SW_APM_SERVICE_KEY: ${{ secrets.APPOPTICS_SERVICE_KEY }}
106
+ SW_APM_COLLECTOR: ${{ secrets.APPOPTICS_COLLECTOR}}
107
+ run: |
108
+ sleep 1
109
+ gem install solarwinds_apm --version ${{ steps.build.outputs.gem_version }}
110
+ ruby ./scripts/test_install.rb
111
+
112
+
@@ -0,0 +1,70 @@
1
+ # Copyright (c) 2021 SolarWinds, LLC.
2
+ # All rights reserved.
3
+
4
+ name: Ruby Gem to PackageCloud
5
+
6
+ on:
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ build:
11
+ name: Build + Publish to PackageCloud
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - uses: actions/checkout@v2
16
+
17
+ - name: Set up Ruby 2.7 and bundle
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: 2.7
21
+
22
+ - name: Install gems
23
+ run: |
24
+ echo 'gem: --no-document' >> ~/.gemrc
25
+ bundle install --without development --without test
26
+
27
+ - name: Install swig 4.0.2
28
+ run: |
29
+ apt udate && apt install -y --no-install-recommends bison
30
+ curl -SL https://github.com/swig/swig/archive/refs/tags/v4.0.2.tar.gz | tar xzC /tmp
31
+ cd /tmp/swig-4.0.2
32
+ ./autogen.sh && ./configure && make && sudo make install
33
+ cd -
34
+
35
+ - name: Download oboe staging files from S3, compile swig wrapper
36
+ run: |
37
+ bundle exec rake fetch
38
+ ls -l ext/oboe_metal/src
39
+
40
+ - name: Build Gem
41
+ id: gemstep
42
+ run: |
43
+ gem build solarwinds_apm.gemspec
44
+ echo `shasum -a256 *.gem`
45
+ echo "::set-output name=GEM_VERSION::`ruby -e 'require "./lib/solarwinds_apm/version"; puts SolarWindsAPM::Version::STRING'`"
46
+ cat ext/oboe_metal/src/VERSION
47
+
48
+ - name: Publish to PackageCloud
49
+ # PackageCloud is unreliable with regards to
50
+ # republishing after yanking a gem
51
+ # we are going to fail if republishing is attempted
52
+ run: |
53
+ gem install package_cloud
54
+ package_cloud push solarwinds/solarwinds-apm-ruby *.gem
55
+ env:
56
+ PACKAGECLOUD_TOKEN: ${{ secrets.PACKAGECLOUD_TOKEN }}
57
+
58
+ # Run this test manually, github is having problems reading the index at packagecloud
59
+ # TODO: AO-20355
60
+ # - name: Test install (give packagecloud 60 seconds to index)
61
+ # working-directory: .github/workflows/
62
+ # env:
63
+ # SW_APM_SERVICE_KEY: ${{ secrets.SW_APM_SERVICE_KEY }}
64
+ # SW_APM_COLLECTOR: ${{ secrets.SW_APM_COLLECTOR}}
65
+ # OBOE_FROM_S3: true
66
+ # run: |
67
+ # sleep 60
68
+ # gem sources --add https://packagecloud.io/solarwinds/solarwinds-apm-ruby
69
+ # gem install solarwinds_apm --version ${{ steps.gemstep.outputs.GEM_VERSION }} --verbose
70
+ # ruby ./scripts/test_install.rb
@@ -0,0 +1,47 @@
1
+ name: Build docker images
2
+
3
+ on:
4
+ push:
5
+ paths:
6
+ - 'test/run_tests/Dockerfile_*'
7
+ # Allows running this workflow manually from the Actions tab
8
+ workflow_dispatch:
9
+
10
+ env:
11
+ GHRC: ghcr.io/appoptics/appoptics-apm-ruby/apm_ruby
12
+ DOCKERFILE: test/run_tests/Dockerfile
13
+
14
+ jobs:
15
+
16
+ build_push:
17
+ name: Build docker images
18
+ runs-on: ubuntu-latest
19
+
20
+ strategy:
21
+ fail-fast: false
22
+ matrix:
23
+ os: [ubuntu, debian, centos, alpine]
24
+
25
+ steps:
26
+ - name: Checkout
27
+ uses: actions/checkout@v1
28
+
29
+ - name: ghcr.io login
30
+ uses: docker/login-action@v1
31
+ with:
32
+ registry: ghcr.io
33
+ username: ${{ github.actor }}
34
+ password: ${{ secrets.GITHUB_TOKEN }}
35
+
36
+ # - name: Build and push V2
37
+ # uses: docker/build-push-action@v2
38
+ # with:
39
+ # file: test/run_tests/Dockerfile_ubuntu
40
+ # tags: ghcr.io/appoptics/appoptics-apm-ruby/ao_ubuntu:latest
41
+ # push: true
42
+
43
+ - name: Build new Docker image
44
+ run: docker build -f ${{ env.DOCKERFILE }}_${{ matrix.os }} -t ${{ env.GHRC }}_${{ matrix.os }} .
45
+
46
+ - name: Publish updated Docker image
47
+ run: docker push ${{ env.GHRC }}_${{ matrix.os }}
@@ -0,0 +1,73 @@
1
+ # Copyright (c) 2021 SolarWinds, LLC.
2
+ # All rights reserved.
3
+
4
+ name: C++ Tests
5
+
6
+ on:
7
+ push:
8
+ paths:
9
+ - ext/oboe_metal/src/*.h
10
+ - ext/oboe_metal/src/*.cc
11
+ - ext/oboe_metal/test/*
12
+ # Allows you to run this workflow manually from the Actions tab
13
+ workflow_dispatch:
14
+
15
+ jobs:
16
+ tests:
17
+ runs-on: ubuntu-latest
18
+ strategy:
19
+ fail-fast: false
20
+ matrix:
21
+ ruby: [3.1, 3.0, 2.7, 2.6, 2.5]
22
+
23
+ container:
24
+ image: ruby:${{ matrix.ruby }}
25
+
26
+ name: ${{ matrix.ruby }} - c++
27
+
28
+ env:
29
+ SW_APM_REPORTER: file
30
+ SW_APM_COLLECTOR: /tmp/sw_apm_traces.bson
31
+ SW_APM_REPORTER_FILE_SINGLE: false
32
+ OBOE_FROM_S3: true
33
+
34
+ steps:
35
+ - uses: actions/checkout@v2
36
+
37
+ - name: Install cmake
38
+ run: |
39
+ ls -lrt /usr/src
40
+ apt update && apt install -y --no-install-recommends build-essential libgtest-dev ruby
41
+ curl -OL https://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5-SHA-256.txt
42
+ curl -OL https://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5.tar.gz
43
+ sha256sum -c --ignore-missing cmake-3.20.5-SHA-256.txt
44
+ tar -zxvf cmake-3.20.5.tar.gz
45
+ cd cmake-3.20.5
46
+ ./bootstrap
47
+ make
48
+ make install
49
+
50
+ - name: Install swig 4.0.2
51
+ working-directory: .github/workflows/swig
52
+ run: |
53
+ apt update && apt install -y --no-install-recommends bison
54
+ tar -xf swig-v4.0.2.tar.gz -C /tmp
55
+ cd /tmp/swig-4.0.2
56
+ ./autogen.sh && ./configure && make && make install
57
+ cd -
58
+
59
+ - name: Bundle & download c-files
60
+ run: |
61
+ gem install bundler
62
+ bundle install
63
+ bundle exec rake clean fetch compile
64
+
65
+ - name: Compile and run tests
66
+ working-directory: ext/oboe_metal/test
67
+ run: |
68
+ export TEST_DIR=`pwd`
69
+ export RUBY_INC_DIR=$(ruby ruby_inc_dir.rb)
70
+ export RUBY_PREFIX=$(ruby ruby_prefix.rb)
71
+ cmake -S . -B build
72
+ cmake --build build
73
+ cd build && ctest
@@ -0,0 +1,155 @@
1
+ # Copyright (c) 2021 SolarWinds, LLC.
2
+ # All rights reserved.
3
+
4
+ name: Run Ruby Tests on Ubuntu
5
+
6
+ on:
7
+ # push:
8
+ # Allows you to run this workflow manually from the Actions tab
9
+ workflow_dispatch:
10
+
11
+ jobs:
12
+ tests:
13
+ runs-on: ubuntu-latest
14
+ strategy:
15
+ fail-fast: false
16
+ matrix:
17
+ ruby: [3.1, 3.0, 2.7, 2.6, 2.5]
18
+ gemfile:
19
+ - libraries
20
+ - unit
21
+ - instrumentation_mocked
22
+ - instrumentation_mocked_oldgems
23
+ - frameworks
24
+ - rails70
25
+ - rails61
26
+ - rails60
27
+ - rails52
28
+ - delayed_job
29
+ - noop
30
+ dbtype: [postgresql, mysql]
31
+ exclude:
32
+ - ruby: 3.1
33
+ gemfile: rails52
34
+ - ruby: 3.0
35
+ gemfile: rails52
36
+ - ruby: 2.6
37
+ gemfile: rails70
38
+ - ruby: 2.5
39
+ gemfile: rails70
40
+
41
+ - gemfile: unit
42
+ dbtype: mysql
43
+ - gemfile: noop
44
+ dbtype: mysql
45
+ - gemfile: libraries
46
+ dbtype: mysql
47
+ - gemfile: instrumentation_mocked
48
+ dbtype: mysql
49
+ - gemfile: instrumentation_mocked_oldgems
50
+ dbtype: mysql
51
+ - gemfile: frameworks
52
+ dbtype: mysql
53
+ - gemfile: delayed_job
54
+ dbtype: mysql
55
+
56
+ container:
57
+ image: ruby:${{ matrix.ruby }}
58
+
59
+ name: ${{ matrix.ruby }} - ${{ matrix.gemfile }}
60
+
61
+ env:
62
+ BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
63
+ SW_APM_GEM_TEST: true
64
+ SW_APM_REPORTER: file
65
+ SW_APM_COLLECTOR: /tmp/sw_apm_traces.bson
66
+ SW_APM_REPORTER_FILE_SINGLE: false
67
+ OBOE_FROM_S3: true
68
+ MONGO_SERVER: "mongo"
69
+ RABBITMQ_SERVER: "rabbitmq"
70
+ MEMCACHED_SERVER: "memcached"
71
+ MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
72
+ MYSQL_ROOT_PASSWORD: "admin"
73
+ MYSQL_HOST: "mysql"
74
+ MYSQL_DATABASE: "test_db"
75
+ POSTGRES_DB: "test_db"
76
+ DOCKER_MYSQL_PASS: "admin"
77
+ DOCKER_PSQL_PASS: "postgres"
78
+ POSTGRES_USER: "postgres"
79
+ POSTGRES_PASSWORD: "postgres"
80
+ POSTGRES_HOST: "postgres"
81
+ REDIS_PASSWORD: "redis_pass"
82
+ services:
83
+ memcached:
84
+ image: memcached:latest
85
+ ports:
86
+ - 11211:11211
87
+ options: --health-cmd "timeout 5 bash -c 'cat < /dev/null > /dev/udp/127.0.0.1/11211'" --health-interval 10s --health-timeout 5s --health-retries 5
88
+ rabbitmq:
89
+ image: rabbitmq:latest
90
+ ports:
91
+ - 5672:5672
92
+ options: --health-cmd "rabbitmqctl node_health_check" --health-interval 10s --health-timeout 5s --health-retries 5
93
+ mongo:
94
+ image: mongo:latest
95
+ ports:
96
+ - 27017:27017
97
+ options: "--health-cmd \"mongo --quiet --eval 'quit(db.runCommand({ ping: 1 }).ok ? 0 : 2)'\" --health-interval 10s --health-timeout 5s --health-retries 5"
98
+ postgres:
99
+ image: postgres:10.8
100
+ env:
101
+ POSTGRES_DB: postgres
102
+ ports:
103
+ - 5432:5432
104
+ options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
105
+ mysql:
106
+ image: mariadb:latest
107
+ env:
108
+ MYSQL_USER: user
109
+ MYSQL_PASSWORD: password
110
+ MYSQL_DATABASE: test_db
111
+ MYSQL_ROOT_PASSWORD: admin
112
+ ports:
113
+ - 3306:3306
114
+ options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
115
+
116
+ steps:
117
+ - uses: actions/checkout@v2
118
+
119
+ - name: Install dependencies
120
+ run: apt update && apt install -y --no-install-recommends bison libcurl4-gnutls-dev libsasl2-dev postgresql-client
121
+
122
+ - name: Set database type env var
123
+ run: export DBTYPE=${{ matrix.dbtype }}
124
+
125
+ - name: Add javascript runtime
126
+ uses: actions/setup-node@v2
127
+ with:
128
+ node-version: '14'
129
+
130
+ - name: Initialize services
131
+ run: |
132
+ export PGPASSWORD=$POSTGRES_PASSWORD; psql -c 'create database test_db;' -U postgres -h $POSTGRES_HOST
133
+ curl -SL http://download.redis.io/releases/redis-4.0.0.tar.gz | tar xzC /tmp && cd /tmp/redis-4.0.0/ && make && make install && cd -
134
+ redis-server --requirepass redis_pass --loglevel "warning" &
135
+
136
+ - name: Bundle
137
+ run: |
138
+ gem install bundler
139
+ export BUNDLE_GEMFILE=gemfiles/${{ matrix.gemfile }}.gemfile
140
+ bundle install --jobs 4 --retry 3
141
+
142
+ - name: Install swig 4.0.2
143
+ working-directory: .github/workflows/swig
144
+ run: |
145
+ tar -xf swig-v4.0.2.tar.gz -C /tmp
146
+ cd /tmp/swig-4.0.2
147
+ ./autogen.sh && ./configure && make && make install
148
+ cd -
149
+
150
+ - name: Compile c-extension
151
+ run: |
152
+ bundle exec rake fetch compile
153
+
154
+ - name: Run tests
155
+ run: bundle exec rake test
@@ -0,0 +1,23 @@
1
+ # Copyright (c) 2021 SolarWinds, LLC.
2
+ # All rights reserved.
3
+
4
+ # Test script used to check if a newly created gem installs and connects to
5
+ # the collector
6
+ # requires env vars:
7
+ # - SW_APM_SERVICE_KEY
8
+ # - SW_APM_COLLECTOR (optional if the key is for production)
9
+
10
+ require 'solarwinds_apm'
11
+ SolarWindsAPM.support_report
12
+ exit 1 unless SolarWindsAPM.reporter
13
+
14
+ SolarWindsAPM::Config[:profiling] = :enabled
15
+
16
+ SolarWindsAPM::SDK.start_trace("install_test_profiling") do
17
+ SolarWindsAPM::Profiling.run do
18
+ 10.times do
19
+ [9, 6, 12, 2, 7, 1, 9, 3, 4, 14, 5, 8].sort
20
+ sleep 0.2
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,161 @@
1
+ # Copyright (c) 2021 SolarWinds, LLC.
2
+ # All rights reserved.
3
+
4
+ name: Run Ruby Tests on 4 Linux
5
+
6
+ on:
7
+ push:
8
+ paths-ignore:
9
+ - 'test/run_tests/Dockerfile_*'
10
+ # Allows you to run this workflow manually from the Actions tab
11
+ workflow_dispatch:
12
+
13
+ env:
14
+ GHRC: ghcr.io/appoptics/appoptics-apm-ruby/apm_ruby
15
+ DOCKERFILE: test/run_tests/Dockerfile
16
+
17
+ jobs:
18
+
19
+ #-------------------------------------------------------------------------------
20
+ # TODO: figure out how to build images first if necessary
21
+ #
22
+ # ********* this is not working because we don't have a *************
23
+ # ********* reference to the commit of the previous GH run *************
24
+ #
25
+ # build_images:
26
+ # name: Build docker images if necessary
27
+ # runs-on: ubuntu-latest
28
+ #
29
+ # strategy:
30
+ # fail-fast: true
31
+ # matrix:
32
+ # os: [ ubuntu, debian, centos, alpine ]
33
+ #
34
+ # steps:
35
+ # - name: Checkout
36
+ # uses: actions/checkout@v2
37
+ #
38
+ #
39
+ # ## comment out to get a debug session
40
+ # ## only works with ubuntu and debian, because it uses apt:
41
+ ## - name: tmate debugging session
42
+ ## uses: mxschmitt/action-tmate@v3
43
+ ## with:
44
+ ## sudo: false
45
+ #
46
+ # - name: check modified files
47
+ # id: check_files
48
+ # run: |
49
+ # git diff --name-only --diff-filter=ACMRT ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep Dockerfile_
50
+ # echo ::set-output name=check_dockerfiles::$?
51
+ ## git diff --name-only HEAD^ HEAD | grep [D]ockerfile_
52
+ ## echo ::set-output name=check_dockerfiles::$?
53
+ #
54
+ # - name: ghcr.io login ... build and publish images if needed
55
+ # uses: docker/login-action@v1
56
+ # if: ${{ steps.check_files.outputs.check_dockerfiles == 0}}
57
+ # with:
58
+ # registry: ghcr.io
59
+ # username: ${{ github.actor }}
60
+ # password: ${{ secrets.GITHUB_TOKEN }}
61
+ #
62
+ # - name: Build and publish new Docker image
63
+ # if: ${{ steps.check_files.outputs.check_dockerfiles == 0 }}
64
+ # run: |
65
+ # docker build -f ${{ env.DOCKERFILE }}_${{ matrix.os }} -t ${{ env.GHRC }}_${{ matrix.os }} .
66
+ # docker push ${{ env.GHRC }}_${{ matrix.os }}
67
+
68
+ #-------------------------------------------------------------------------------
69
+ all_linux_test:
70
+ name: ${{ matrix.os }} - ruby ${{ matrix.ruby }}
71
+ runs-on: ubuntu-latest
72
+ # needs: build_images
73
+
74
+ strategy:
75
+ fail-fast: false
76
+ matrix:
77
+ os: [ubuntu, debian, centos, alpine]
78
+ ruby: ['3.1', '3.0', '2.7', '2.6', '2.5']
79
+
80
+ container:
81
+ image: ghcr.io/${{ github.repository }}/apm_ruby_${{ matrix.os }}
82
+
83
+ env:
84
+ SW_APM_GEM_TEST: true
85
+ SW_APM_REPORTER: file
86
+ SW_APM_COLLECTOR: /tmp/sw_apm_traces.bson
87
+ SW_APM_REPORTER_FILE_SINGLE: false
88
+ OBOE_FROM_S3: true
89
+ MONGO_SERVER: "mongo"
90
+ RABBITMQ_SERVER: "rabbitmq"
91
+ MEMCACHED_SERVER: "memcached"
92
+ MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
93
+ MYSQL_ROOT_PASSWORD: "admin"
94
+ MYSQL_HOST: "mysql"
95
+ MYSQL_DATABASE: "test_db"
96
+ POSTGRES_DB: "test_db"
97
+ DOCKER_MYSQL_PASS: "admin"
98
+ DOCKER_PSQL_PASS: "postgres"
99
+ POSTGRES_USER: "postgres"
100
+ POSTGRES_PASSWORD: "postgres"
101
+ POSTGRES_HOST: "postgres"
102
+ QUERY_LOG_FILE: "/tmp/sw_apm_query_logs.txt"
103
+ REDIS_PASSWORD: "redis_pass"
104
+ TEST_RUNS_TO_FILE: "true"
105
+
106
+ services:
107
+ memcached:
108
+ image: memcached:latest
109
+ ports:
110
+ - 11211:11211
111
+ options: --health-cmd "timeout 5 bash -c 'cat < /dev/null > /dev/udp/127.0.0.1/11211'" --health-interval 10s --health-timeout 5s --health-retries 5
112
+ rabbitmq:
113
+ image: rabbitmq:latest
114
+ ports:
115
+ - 5672:5672
116
+ options: --health-cmd "rabbitmqctl node_health_check" --health-interval 10s --health-timeout 5s --health-retries 5
117
+ mongo:
118
+ image: mongo:latest
119
+ ports:
120
+ - 27017:27017
121
+ options: "--health-cmd \"mongo --quiet --eval 'quit(db.runCommand({ ping: 1 }).ok ? 0 : 2)'\" --health-interval 10s --health-timeout 5s --health-retries 5"
122
+ postgres:
123
+ image: postgres:latest
124
+ env:
125
+ POSTGRES_PASSWORD: "postgres"
126
+ POSTGRES_DB: test_db
127
+ ports:
128
+ - 5432:5432
129
+ options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
130
+ mysql:
131
+ image: mariadb:latest
132
+ env:
133
+ MYSQL_USER: user
134
+ MYSQL_PASSWORD: password
135
+ MYSQL_DATABASE: test_db
136
+ MYSQL_ROOT_PASSWORD: admin
137
+ ports:
138
+ - 3306:3306
139
+ options: --health-cmd="mysqladmin ping" --health-interval=5s --health-timeout=2s --health-retries=3
140
+
141
+ steps:
142
+ - name: Checkout ${{ github.ref }}
143
+ uses: actions/checkout@v2
144
+
145
+ - name: print some info
146
+ run: |
147
+ user=`whoami`
148
+ pwd=`pwd`
149
+ echo "User: $user"
150
+ echo "Current dir: $pwd"
151
+ echo "Home dir: $HOME"
152
+ echo "Branch: ${GITHUB_REF#refs/*/}"
153
+
154
+ - name: ruby tests
155
+ run: |
156
+ export HOME=/root
157
+ test/run_tests/ruby_setup.sh
158
+ version=`rbenv versions --bare | grep ${{ matrix.ruby }}`
159
+ rbenv global $version
160
+ echo "testing with ruby version: $version"
161
+ test/run_tests/run_tests.sh -r $version