appsignal 4.8.5 → 4.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +61 -0
  3. data/README.md +2 -2
  4. data/SUPPORT.md +1 -1
  5. data/appsignal.gemspec +2 -2
  6. data/build_matrix.yml +35 -0
  7. data/ext/agent.rb +27 -27
  8. data/ext/base.rb +3 -7
  9. data/ext/extconf.rb +1 -1
  10. data/lib/appsignal/check_in/event.rb +5 -4
  11. data/lib/appsignal/cli/diagnose.rb +1 -1
  12. data/lib/appsignal/cli/helpers.rb +2 -2
  13. data/lib/appsignal/cli/install.rb +3 -3
  14. data/lib/appsignal/config.rb +44 -1
  15. data/lib/appsignal/environment.rb +1 -0
  16. data/lib/appsignal/extension/jruby.rb +6 -5
  17. data/lib/appsignal/extension.rb +1 -1
  18. data/lib/appsignal/helpers/instrumentation.rb +12 -12
  19. data/lib/appsignal/hooks/action_cable.rb +2 -2
  20. data/lib/appsignal/hooks/active_job.rb +42 -3
  21. data/lib/appsignal/hooks/delayed_job.rb +2 -1
  22. data/lib/appsignal/hooks/excon.rb +1 -1
  23. data/lib/appsignal/hooks/faraday.rb +21 -0
  24. data/lib/appsignal/hooks/http.rb +9 -0
  25. data/lib/appsignal/hooks/mongo_ruby_driver.rb +2 -1
  26. data/lib/appsignal/hooks/que.rb +7 -1
  27. data/lib/appsignal/hooks/resque.rb +5 -1
  28. data/lib/appsignal/hooks/shoryuken.rb +15 -1
  29. data/lib/appsignal/hooks/sidekiq.rb +14 -1
  30. data/lib/appsignal/hooks.rb +1 -0
  31. data/lib/appsignal/integrations/action_cable.rb +1 -1
  32. data/lib/appsignal/integrations/active_support_notifications.rb +19 -6
  33. data/lib/appsignal/integrations/delayed_job_plugin.rb +38 -1
  34. data/lib/appsignal/integrations/excon.rb +8 -0
  35. data/lib/appsignal/integrations/faraday.rb +51 -0
  36. data/lib/appsignal/integrations/http.rb +9 -0
  37. data/lib/appsignal/integrations/mongo_ruby_driver.rb +4 -2
  38. data/lib/appsignal/integrations/net_http.rb +7 -0
  39. data/lib/appsignal/integrations/object.rb +3 -3
  40. data/lib/appsignal/integrations/que.rb +68 -1
  41. data/lib/appsignal/integrations/rake.rb +1 -1
  42. data/lib/appsignal/integrations/resque.rb +20 -1
  43. data/lib/appsignal/integrations/shoryuken.rb +33 -1
  44. data/lib/appsignal/integrations/sidekiq.rb +73 -36
  45. data/lib/appsignal/integrations/webmachine.rb +1 -1
  46. data/lib/appsignal/logger.rb +4 -1
  47. data/lib/appsignal/rack/abstract_middleware.rb +1 -1
  48. data/lib/appsignal/rack/body_wrapper.rb +5 -5
  49. data/lib/appsignal/rack/hanami_middleware.rb +1 -0
  50. data/lib/appsignal/sample_data.rb +1 -0
  51. data/lib/appsignal/transaction.rb +59 -11
  52. data/lib/appsignal/utils/query_params_sanitizer.rb +2 -0
  53. data/lib/appsignal/version.rb +1 -1
  54. data/lib/appsignal.rb +2 -2
  55. data/lib/puma/plugin/appsignal.rb +1 -1
  56. data/sig/appsignal.rbi +41 -1
  57. data/sig/appsignal.rbs +30 -0
  58. metadata +7 -6
  59. data/lib/appsignal/event_formatter/faraday/request_formatter.rb +0 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d1322a700e74b489d04466abb766013edaed9a75e2deb04fd43d6efef4d19815
4
- data.tar.gz: 54dadfa92bb72fa544658368b330b5f4ce3d5226e701124c540a29436c6bd7aa
3
+ metadata.gz: 70d09c492e8f9ef1d5d5b5258cc44174bae7ba091393ccaaee1a6374fa0b9635
4
+ data.tar.gz: b4810279e337a0d0dfd0283de2051c85619f4bd5338ac1105027370bed2c0977
5
5
  SHA512:
6
- metadata.gz: 00c6126c767cb9d006801e3541bb2fba652f10a176c60d6ae743fb7888da547c0a6f49282f997908a4337035865f8f4a311575769a307879e891070a611679d0
7
- data.tar.gz: 778b97752cfaaebb650cb5da937a645bef4eb47d3632b3a84828a9b806fe138588b66cc4aa69e7edcc2578f2a1977a958679c4f8c026d3b748b1a3e823877f3d
6
+ metadata.gz: fd3de76b7b65946c155f999dd8f3198a5aa07acac977c69f82c4bbcd58603e82caa008fc027a390c7268f661b596644e6fcfec0b0bf98e215d4d2cd93a0545de
7
+ data.tar.gz: d45f3e280eba6286eafd5b8ca4eebe9336443d717810abdd3b2f30737a0062df87476c5bf295a54197f23f51e3555c09d81f88c2a356f5a4e010f6f48c8d94a1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,66 @@
1
1
  # AppSignal for Ruby gem Changelog
2
2
 
3
+ ## 4.9.0
4
+
5
+ _Published on 2026-07-16._
6
+
7
+ ### Added
8
+
9
+ - Improve Faraday support. AppSignal now instruments Faraday requests automatically, without double-instrumenting the underlying HTTP client. Turn it off with the `instrument_faraday` option. (minor [c3354af3](https://github.com/appsignal/appsignal-ruby/commit/c3354af3f2497a984aa0110c9460d92ae3b5676f), [24aa25da](https://github.com/appsignal/appsignal-ruby/commit/24aa25da63a6b7abf74f3c29ce0d27ccbda38422))
10
+ - Add config options to turn individual integrations off. Set
11
+ `instrument_sidekiq`, `instrument_shoryuken`, `instrument_que`,
12
+ `instrument_resque`, `instrument_delayed_job`, `instrument_active_job`,
13
+ `instrument_excon` or `instrument_mongo` to `false` to disable that
14
+ integration entirely. This turns off both the instrumentation of the jobs or
15
+ requests and the enqueue instrumentation for that integration. They all
16
+ default to `true`. Each can also be set through its environment variable, such
17
+ as `APPSIGNAL_INSTRUMENT_SIDEKIQ`.
18
+
19
+ (minor [d899994e](https://github.com/appsignal/appsignal-ruby/commit/d899994e23e32d6afac6ab457b905399a8ea68e3))
20
+ - Instrument background job enqueues. Enqueuing a job now records an enqueue
21
+ event on the active transaction, so enqueues made from within a web request or
22
+ another job show up in the event timeline. This is recorded for Sidekiq
23
+ (`enqueue.sidekiq`), Que (`enqueue.que`, plus `bulk_enqueue.que` for bulk
24
+ enqueues on Que 2), Resque (`enqueue.resque`), Shoryuken (`enqueue.shoryuken`)
25
+ and Delayed Job (`enqueue.delayed_job`). Each event is titled after the job
26
+ being enqueued.
27
+
28
+ For Active Job, the `enqueue.active_job` event is now recorded by AppSignal's
29
+ own instrumentation rather than by Rails' native `enqueue.active_job`
30
+ notification. The native notification is suppressed so the enqueue is recorded
31
+ once, and the event is now titled after the job being enqueued.
32
+
33
+ These enqueue events can be turned off with the
34
+ `enable_job_enqueue_instrumentation` config option. Set it to `false` to stop
35
+ recording enqueue events across all integrations, without affecting the
36
+ instrumentation of the jobs themselves. It defaults to `true` and can also be
37
+ set through the `APPSIGNAL_ENABLE_JOB_ENQUEUE_INSTRUMENTATION` environment
38
+ variable.
39
+
40
+ (minor [caa8fbc7](https://github.com/appsignal/appsignal-ruby/commit/caa8fbc766f67e945836e6f78bc61ce98d8e0288))
41
+ - Report the `grape` gem version in the environment metadata. For more information, see [our environment metadata docs](https://docs.appsignal.com/application/environment-metadata). (patch [6e91223c](https://github.com/appsignal/appsignal-ruby/commit/6e91223c777a3da8dc2b5c68c3b446fb61db8b5b))
42
+
43
+ ### Fixed
44
+
45
+ - Instrument HTTP.rb chained requests on http 6. Requests made through a chained
46
+ client -- `HTTP.follow.get(...)`, `HTTP.headers(...).get(...)`, and so on -- go
47
+ through `HTTP::Session` rather than `HTTP::Client`, and were not being recorded.
48
+ They now produce a `request.http_rb` event like any other request.
49
+
50
+ (patch [9de9522a](https://github.com/appsignal/appsignal-ruby/commit/9de9522af442cb8b51be5b59702558002fbb5169))
51
+
52
+ ## 4.8.6
53
+
54
+ _Published on 2026-06-23._
55
+
56
+ ### Fixed
57
+
58
+ - Fix host-metrics leaking zombie `[timeout]` processes in Alpine linux containers.
59
+
60
+ Before this release AppSignal agent relied on a proper init process that reaps child processes killed by system `timeout`. Now the agent terminates and reaps unresponsive child processes in host-metrics collection and a subreaper is no longer required.
61
+
62
+ (patch [d151eb7e](https://github.com/appsignal/appsignal-ruby/commit/d151eb7e1e8b05b42f5bf0426e267108294335fa))
63
+
3
64
  ## 4.8.5
4
65
 
5
66
  _Published on 2026-06-02._
data/README.md CHANGED
@@ -279,9 +279,9 @@ This gem uses [Semantic Versioning][semver].
279
279
  The `main` branch corresponds to the current stable release of the gem.
280
280
 
281
281
  The `develop` branch is used for development of features that will end up in
282
- the next minor release.
282
+ the next minor release, if present.
283
283
 
284
- Open a Pull Request on the `main` branch if you're fixing a bug. For new new
284
+ Open a Pull Request on the `main` branch if you're fixing a bug. For new
285
285
  features, open a Pull Request on the `develop` branch.
286
286
 
287
287
  Every stable and unstable release is tagged in git with a version tag.
data/SUPPORT.md CHANGED
@@ -5,7 +5,7 @@ AppSignal. They will help you get set up, tweak your code and make sure you get
5
5
  the most out of using AppSignal. You can also find our documentation at
6
6
  [docs.appsignal.com](https://docs.appsignal.com/).
7
7
 
8
- We do not recommend creating an issue on the Ruby gem's GitHub project if it
8
+ We do not recommend creating an issue on this project's GitHub repository if it
9
9
  concerns your private app data. During the support process we'll need the
10
10
  AppSignal logs and other resources that contain your app's private data,
11
11
  something for which the public GitHub issue tracker is not suited.
data/appsignal.gemspec CHANGED
@@ -21,7 +21,7 @@ IGNORED_PATHS = [
21
21
  ".rubocop_todo.yml"
22
22
  ].freeze
23
23
 
24
- Gem::Specification.new do |gem| # rubocop:disable Metrics/BlockLength
24
+ Gem::Specification.new do |gem|
25
25
  gem.authors = [
26
26
  "Robert Beekman",
27
27
  "Thijs Cadier",
@@ -63,7 +63,7 @@ Gem::Specification.new do |gem| # rubocop:disable Metrics/BlockLength
63
63
  gem.add_development_dependency "pry"
64
64
  gem.add_development_dependency "rake", ">= 12"
65
65
  gem.add_development_dependency "rspec", "~> 3.8"
66
- gem.add_development_dependency "rubocop", "1.64.1"
66
+ gem.add_development_dependency "rubocop", "~> 1.87.0"
67
67
  gem.add_development_dependency("sord") unless RUBY_PLATFORM == "java"
68
68
  gem.add_development_dependency "timecop"
69
69
  gem.add_development_dependency "webmock"
data/build_matrix.yml CHANGED
@@ -141,6 +141,7 @@ matrix:
141
141
  - "3.4.1"
142
142
  - "3.3.4"
143
143
  - "jruby-9.4.7.0"
144
+ - gem: "delayed_job"
144
145
  - gem: "dry-monitor"
145
146
  only:
146
147
  ruby:
@@ -150,6 +151,16 @@ matrix:
150
151
  - "3.2.5"
151
152
  - "3.1.6"
152
153
  - "3.0.7"
154
+ - gem: "faraday-1"
155
+ - gem: "faraday-2"
156
+ only:
157
+ ruby:
158
+ - "4.0.0"
159
+ - "3.4.1"
160
+ - "3.3.4"
161
+ - "3.2.5"
162
+ - "3.1.6"
163
+ - "3.0.7"
153
164
  - gem: "grape"
154
165
  - gem: "hanami-2.0"
155
166
  only:
@@ -182,6 +193,7 @@ matrix:
182
193
  - "3.4.1"
183
194
  - "3.3.4"
184
195
  - "3.2.5"
196
+ - gem: "mongo"
185
197
  - gem: "ownership"
186
198
  - gem: "padrino"
187
199
  exclude:
@@ -267,7 +279,30 @@ matrix:
267
279
  - "3.4.1"
268
280
  - "3.3.4"
269
281
  - "3.2.5"
282
+ - gem: "resque-2"
283
+ - gem: "resque-3"
284
+ only:
285
+ ruby:
286
+ - "4.0.0"
287
+ - "3.4.1"
288
+ - "3.3.4"
289
+ - "3.2.5"
290
+ - "3.1.6"
291
+ - "3.0.7"
270
292
  - gem: "sequel"
293
+ - gem: "shoryuken-6"
294
+ only:
295
+ ruby:
296
+ - "3.1.6"
297
+ - "3.0.7"
298
+ - "2.7.8"
299
+ - gem: "shoryuken-7"
300
+ only:
301
+ ruby:
302
+ - "4.0.0"
303
+ - "3.4.1"
304
+ - "3.3.4"
305
+ - "3.2.5"
271
306
  - gem: "sinatra"
272
307
  - gem: "webmachine2"
273
308
  - gem: "redis-4"
data/ext/agent.rb CHANGED
@@ -6,7 +6,7 @@
6
6
  # Modifications to this file will be overwritten with the next agent release.
7
7
 
8
8
  APPSIGNAL_AGENT_CONFIG = {
9
- "version" => "0.36.11",
9
+ "version" => "0.36.12",
10
10
  "mirrors" => [
11
11
  "https://d135dj0rjqvssy.cloudfront.net",
12
12
  "https://appsignal-agent-releases.global.ssl.fastly.net"
@@ -14,131 +14,131 @@ APPSIGNAL_AGENT_CONFIG = {
14
14
  "triples" => {
15
15
  "x86_64-darwin" => {
16
16
  "static" => {
17
- "checksum" => "9b4bfd1f7149511cd3a1525fe43c6e450688d6d44b25a769aa722a3260756eb6",
17
+ "checksum" => "a63189a2ba6b500e038e5658f97478ceae27a956baa2f89a4e79ee5a1dadace6",
18
18
  "filename" => "appsignal-x86_64-darwin-all-static.tar.gz"
19
19
  },
20
20
  "dynamic" => {
21
- "checksum" => "e4154d44e8e57dcdec78f68a3bfe4139f82938fac6cbaa70b845b3f402df00c9",
21
+ "checksum" => "ecfb108dcc4d10f442415debaceed6d2e568b44ab938cf0ed6fee3ccfbdc5379",
22
22
  "filename" => "appsignal-x86_64-darwin-all-dynamic.tar.gz"
23
23
  }
24
24
  },
25
25
  "universal-darwin" => {
26
26
  "static" => {
27
- "checksum" => "9b4bfd1f7149511cd3a1525fe43c6e450688d6d44b25a769aa722a3260756eb6",
27
+ "checksum" => "a63189a2ba6b500e038e5658f97478ceae27a956baa2f89a4e79ee5a1dadace6",
28
28
  "filename" => "appsignal-x86_64-darwin-all-static.tar.gz"
29
29
  },
30
30
  "dynamic" => {
31
- "checksum" => "e4154d44e8e57dcdec78f68a3bfe4139f82938fac6cbaa70b845b3f402df00c9",
31
+ "checksum" => "ecfb108dcc4d10f442415debaceed6d2e568b44ab938cf0ed6fee3ccfbdc5379",
32
32
  "filename" => "appsignal-x86_64-darwin-all-dynamic.tar.gz"
33
33
  }
34
34
  },
35
35
  "aarch64-darwin" => {
36
36
  "static" => {
37
- "checksum" => "95eb75d1c9d3c4f24edf94f88babc9daddeca8afc63ff0f85577128d3e5581b8",
37
+ "checksum" => "d23d6cc15e7df1c810b55dc33905002c5a1d6bc3f7cb10690d7e21398aabdac0",
38
38
  "filename" => "appsignal-aarch64-darwin-all-static.tar.gz"
39
39
  },
40
40
  "dynamic" => {
41
- "checksum" => "dd966d1c22416d6917c8318fd9264537b7a30e72a635b7a3161499222fe54654",
41
+ "checksum" => "b4f9bf20f87fc7ddd8cc307646a956f734a2153323cc01487ced322263f32c2b",
42
42
  "filename" => "appsignal-aarch64-darwin-all-dynamic.tar.gz"
43
43
  }
44
44
  },
45
45
  "arm64-darwin" => {
46
46
  "static" => {
47
- "checksum" => "95eb75d1c9d3c4f24edf94f88babc9daddeca8afc63ff0f85577128d3e5581b8",
47
+ "checksum" => "d23d6cc15e7df1c810b55dc33905002c5a1d6bc3f7cb10690d7e21398aabdac0",
48
48
  "filename" => "appsignal-aarch64-darwin-all-static.tar.gz"
49
49
  },
50
50
  "dynamic" => {
51
- "checksum" => "dd966d1c22416d6917c8318fd9264537b7a30e72a635b7a3161499222fe54654",
51
+ "checksum" => "b4f9bf20f87fc7ddd8cc307646a956f734a2153323cc01487ced322263f32c2b",
52
52
  "filename" => "appsignal-aarch64-darwin-all-dynamic.tar.gz"
53
53
  }
54
54
  },
55
55
  "arm-darwin" => {
56
56
  "static" => {
57
- "checksum" => "95eb75d1c9d3c4f24edf94f88babc9daddeca8afc63ff0f85577128d3e5581b8",
57
+ "checksum" => "d23d6cc15e7df1c810b55dc33905002c5a1d6bc3f7cb10690d7e21398aabdac0",
58
58
  "filename" => "appsignal-aarch64-darwin-all-static.tar.gz"
59
59
  },
60
60
  "dynamic" => {
61
- "checksum" => "dd966d1c22416d6917c8318fd9264537b7a30e72a635b7a3161499222fe54654",
61
+ "checksum" => "b4f9bf20f87fc7ddd8cc307646a956f734a2153323cc01487ced322263f32c2b",
62
62
  "filename" => "appsignal-aarch64-darwin-all-dynamic.tar.gz"
63
63
  }
64
64
  },
65
65
  "aarch64-linux" => {
66
66
  "static" => {
67
- "checksum" => "eb3c3dc1842023a1959fb61d4ea711bd5439ba0268f124ec540eabb70d0343bb",
67
+ "checksum" => "0a277e682f1568fbc54df849a46f21f155643b40c285a5bd30294c9d046e49c2",
68
68
  "filename" => "appsignal-aarch64-linux-all-static.tar.gz"
69
69
  },
70
70
  "dynamic" => {
71
- "checksum" => "052b62ede74bad917bb872f118b161f73658bbe03e7bc43dc54f792229d1ccd7",
71
+ "checksum" => "94e0193908955e7a3a274a37947e234c5b038aa26c0ea9b371a08fd63441a940",
72
72
  "filename" => "appsignal-aarch64-linux-all-dynamic.tar.gz"
73
73
  }
74
74
  },
75
75
  "i686-linux" => {
76
76
  "static" => {
77
- "checksum" => "f4920fb2bf88b6cac45d85653e563ec4e7aaccb7456884db7170b5c0a8fc8a2d",
77
+ "checksum" => "0d4536a2b1c9b6915f0f8597bd858988e284e7dbc4a14488332ffa7e401a1134",
78
78
  "filename" => "appsignal-i686-linux-all-static.tar.gz"
79
79
  },
80
80
  "dynamic" => {
81
- "checksum" => "ea4587f9c9f5ebe2dbc2192a33c87967514d85966f71713c8d8d9b1be338f7b4",
81
+ "checksum" => "c5df66876e4611d5ef8798013f0188469cbdea6753a9b9d6cf54bd858e6331e9",
82
82
  "filename" => "appsignal-i686-linux-all-dynamic.tar.gz"
83
83
  }
84
84
  },
85
85
  "x86-linux" => {
86
86
  "static" => {
87
- "checksum" => "f4920fb2bf88b6cac45d85653e563ec4e7aaccb7456884db7170b5c0a8fc8a2d",
87
+ "checksum" => "0d4536a2b1c9b6915f0f8597bd858988e284e7dbc4a14488332ffa7e401a1134",
88
88
  "filename" => "appsignal-i686-linux-all-static.tar.gz"
89
89
  },
90
90
  "dynamic" => {
91
- "checksum" => "ea4587f9c9f5ebe2dbc2192a33c87967514d85966f71713c8d8d9b1be338f7b4",
91
+ "checksum" => "c5df66876e4611d5ef8798013f0188469cbdea6753a9b9d6cf54bd858e6331e9",
92
92
  "filename" => "appsignal-i686-linux-all-dynamic.tar.gz"
93
93
  }
94
94
  },
95
95
  "x86_64-linux" => {
96
96
  "static" => {
97
- "checksum" => "66d53361ce71fb3dc9f9926969324ed35ea0adb650d6d422eaa194f084f6c375",
97
+ "checksum" => "eec59a3e46dd5d5baff044465b4e314f21edf6270500bf24e3bc50afcee5f2e2",
98
98
  "filename" => "appsignal-x86_64-linux-all-static.tar.gz"
99
99
  },
100
100
  "dynamic" => {
101
- "checksum" => "36a148aedc9d29a28764b39d3eee635b80dbbc6c5547b5604c4739344b01bc58",
101
+ "checksum" => "37471e17c5cb9f252d039cfbc0c01d570698c2245f6c8783fd2778e640b59a54",
102
102
  "filename" => "appsignal-x86_64-linux-all-dynamic.tar.gz"
103
103
  }
104
104
  },
105
105
  "x86_64-linux-musl" => {
106
106
  "static" => {
107
- "checksum" => "c72faa5d710d10b0906425123d455069950a920ac103641de053789fc8f874be",
107
+ "checksum" => "4454ec095ad14813bedea20a110a26235dbc6e8e33538219fad325792c0d888e",
108
108
  "filename" => "appsignal-x86_64-linux-musl-all-static.tar.gz"
109
109
  },
110
110
  "dynamic" => {
111
- "checksum" => "85b15a8e0ae1f5b71f0fd2758526132b003d6f456e1bbc0477054fc66c90c3a0",
111
+ "checksum" => "4c21039b077b0c292d530210e077d942694f4c533d3761ed11e27ca932215131",
112
112
  "filename" => "appsignal-x86_64-linux-musl-all-dynamic.tar.gz"
113
113
  }
114
114
  },
115
115
  "aarch64-linux-musl" => {
116
116
  "static" => {
117
- "checksum" => "6b874662d6eb3c09226af88ba0726ec116ae29d8882719d2d9eecaff2e49feb9",
117
+ "checksum" => "048a55f0f10087e7954559d6cd09b371a0b532673f7ca769bcfde5729e297a72",
118
118
  "filename" => "appsignal-aarch64-linux-musl-all-static.tar.gz"
119
119
  },
120
120
  "dynamic" => {
121
- "checksum" => "c3a1fe90ec3b0b7752efd45fb05e87a10bc34ea679300ede5b2e58bcb291ac19",
121
+ "checksum" => "8dc336cffcb2cffe85daa8c70b02b0af7e626ed81c8873cdbb627216a411d59a",
122
122
  "filename" => "appsignal-aarch64-linux-musl-all-dynamic.tar.gz"
123
123
  }
124
124
  },
125
125
  "x86_64-freebsd" => {
126
126
  "static" => {
127
- "checksum" => "14fb4946255ff9a327a873d70835458f3037fed0f984fc1d60a3ebfa11a3b6dd",
127
+ "checksum" => "d81d039a3c1936bd393a6140b46f48092da31600b0311eab819acd777521a588",
128
128
  "filename" => "appsignal-x86_64-freebsd-all-static.tar.gz"
129
129
  },
130
130
  "dynamic" => {
131
- "checksum" => "9d3eb11adbec15f709ea29e4a7635ae31e65b2fe85f5da5ee54478785c2c9bb6",
131
+ "checksum" => "cc345d4a791200e5af53c533e7ad83d278e98ee0becb5b54e502ba8934094372",
132
132
  "filename" => "appsignal-x86_64-freebsd-all-dynamic.tar.gz"
133
133
  }
134
134
  },
135
135
  "amd64-freebsd" => {
136
136
  "static" => {
137
- "checksum" => "14fb4946255ff9a327a873d70835458f3037fed0f984fc1d60a3ebfa11a3b6dd",
137
+ "checksum" => "d81d039a3c1936bd393a6140b46f48092da31600b0311eab819acd777521a588",
138
138
  "filename" => "appsignal-x86_64-freebsd-all-static.tar.gz"
139
139
  },
140
140
  "dynamic" => {
141
- "checksum" => "9d3eb11adbec15f709ea29e4a7635ae31e65b2fe85f5da5ee54478785c2c9bb6",
141
+ "checksum" => "cc345d4a791200e5af53c533e7ad83d278e98ee0becb5b54e502ba8934094372",
142
142
  "filename" => "appsignal-x86_64-freebsd-all-dynamic.tar.gz"
143
143
  }
144
144
  }
data/ext/base.rb CHANGED
@@ -100,15 +100,11 @@ def installation_succeeded?
100
100
  end
101
101
 
102
102
  def check_architecture
103
- if APPSIGNAL_AGENT_CONFIG["triples"].key?(TARGET_TRIPLE)
104
- true
105
- else
106
- abort_installation(
103
+ APPSIGNAL_AGENT_CONFIG["triples"].key?(TARGET_TRIPLE) || abort_installation(
107
104
  "AppSignal currently does not support your system architecture (#{TARGET_TRIPLE})." \
108
105
  "Please let us know at support@appsignal.com, we aim to support everything " \
109
106
  "our customers run."
110
107
  )
111
- end
112
108
  end
113
109
 
114
110
  def download_archive(type)
@@ -140,9 +136,9 @@ def download_archive(type)
140
136
  :proxy => proxy }
141
137
  ]
142
138
  if URI.respond_to?(:open) # rubocop:disable Style/GuardClause
143
- return URI.open(*args)
139
+ return URI.open(*args) # rubocop:disable Security/Open
144
140
  else
145
- return open(*args)
141
+ return open(*args) # rubocop:disable Security/Open
146
142
  end
147
143
  rescue => error
148
144
  backtrace = error.backtrace.join("\n")
data/ext/extconf.rb CHANGED
@@ -77,7 +77,7 @@ def link_libraries
77
77
  end
78
78
  end
79
79
 
80
- def have_required_function(library, func) # rubocop:disable Naming/PredicateName
80
+ def have_required_function(library, func) # rubocop:disable Naming/PredicatePrefix
81
81
  if have_func(func)
82
82
  report["build"]["dependencies"][library] = "linked"
83
83
  return
@@ -4,6 +4,9 @@ module Appsignal
4
4
  module CheckIn
5
5
  # @!visibility private
6
6
  class Event
7
+ CRON_KINDS = %w[start finish].freeze
8
+ private_constant :CRON_KINDS
9
+
7
10
  class << self
8
11
  def new(check_in_type:, identifier:, digest: nil, kind: nil)
9
12
  {
@@ -67,7 +70,7 @@ module Appsignal
67
70
  end
68
71
  end
69
72
 
70
- def deduplicate_cron!(events) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity
73
+ def deduplicate_cron!(events)
71
74
  # Remove redundant cron check-in events from the given list of events.
72
75
  # This is done by removing redundant *pairs* of events -- that is,
73
76
  # for each identifier, only send one complete pair of start and
@@ -111,9 +114,7 @@ module Appsignal
111
114
  # Do not remove events that are not cron check-in events or that
112
115
  # have an unknown kind.
113
116
  return false unless
114
- event[:check_in_type] == "cron" && (
115
- event[:kind] == "start" ||
116
- event[:kind] == "finish")
117
+ event[:check_in_type] == "cron" && CRON_KINDS.include?(event[:kind])
117
118
 
118
119
  # Remove any event that is part of a complete digest pair, except
119
120
  # for the one digest that should be kept.
@@ -350,7 +350,7 @@ module Appsignal
350
350
  path = File.expand_path("../../../ext/install.report", __dir__)
351
351
  raw_report = File.read(path)
352
352
  JSON.parse(raw_report)
353
- rescue StandardError, JSON::ParserError => e # rubocop:disable Lint/ShadowedException
353
+ rescue StandardError => e
354
354
  {
355
355
  "parsing_error" => {
356
356
  "error" => "#{e.class}: #{e}",
@@ -5,8 +5,6 @@ require "appsignal/utils/rails_helper"
5
5
  module Appsignal
6
6
  class CLI
7
7
  module Helpers
8
- private
9
-
10
8
  COLOR_CODES = {
11
9
  :red => 31,
12
10
  :green => 32,
@@ -16,6 +14,8 @@ module Appsignal
16
14
  :default => 0
17
15
  }.freeze
18
16
 
17
+ private
18
+
19
19
  def coloring=(value)
20
20
  @coloring = value
21
21
  end
@@ -12,7 +12,7 @@ module Appsignal
12
12
  EXCLUDED_ENVIRONMENTS = ["test"].freeze
13
13
 
14
14
  class << self
15
- def run(push_api_key, options) # rubocop:disable Metrics/AbcSize
15
+ def run(push_api_key, options)
16
16
  self.coloring = options.delete(:color) { true }
17
17
  $stdout.sync = true
18
18
 
@@ -228,7 +228,7 @@ module Appsignal
228
228
  done_notice
229
229
  end
230
230
 
231
- def configure(config, environments, name_overwritten) # rubocop:disable Metrics/AbcSize
231
+ def configure(config, environments, name_overwritten)
232
232
  install_for_capistrano
233
233
 
234
234
  ENV["APPSIGNAL_APP_ENV"] = "development"
@@ -241,7 +241,7 @@ module Appsignal
241
241
  puts " See our docs for information on the different configuration methods: "
242
242
  puts " https://docs.appsignal.com/ruby/configuration.html"
243
243
  puts
244
- loop do # rubocop:disable Metrics/BlockLength
244
+ loop do
245
245
  print " Choose (1-3): "
246
246
  case ask_for_input
247
247
  when "1"
@@ -96,6 +96,7 @@ module Appsignal
96
96
  :enable_at_exit_hook => "on_error",
97
97
  :enable_at_exit_reporter => true,
98
98
  :enable_host_metrics => true,
99
+ :enable_job_enqueue_instrumentation => true,
99
100
  :enable_minutely_probes => true,
100
101
  :enable_statsd => true,
101
102
  :enable_nginx_metrics => false,
@@ -113,12 +114,21 @@ module Appsignal
113
114
  :ignore_errors => [],
114
115
  :ignore_logs => [],
115
116
  :ignore_namespaces => [],
117
+ :instrument_active_job => true,
116
118
  :instrument_code_ownership => true,
119
+ :instrument_delayed_job => true,
120
+ :instrument_excon => true,
121
+ :instrument_faraday => true,
117
122
  :instrument_http_rb => true,
123
+ :instrument_mongo => true,
118
124
  :instrument_net_http => true,
119
125
  :instrument_ownership => true,
126
+ :instrument_que => true,
120
127
  :instrument_redis => true,
128
+ :instrument_resque => true,
121
129
  :instrument_sequel => true,
130
+ :instrument_shoryuken => true,
131
+ :instrument_sidekiq => true,
122
132
  :log => "file",
123
133
  :logging_endpoint => "https://appsignal-endpoint.net",
124
134
  :ownership_set_namespace => false,
@@ -180,6 +190,8 @@ module Appsignal
180
190
  :enable_allocation_tracking => "APPSIGNAL_ENABLE_ALLOCATION_TRACKING",
181
191
  :enable_at_exit_reporter => "APPSIGNAL_ENABLE_AT_EXIT_REPORTER",
182
192
  :enable_host_metrics => "APPSIGNAL_ENABLE_HOST_METRICS",
193
+ :enable_job_enqueue_instrumentation =>
194
+ "APPSIGNAL_ENABLE_JOB_ENQUEUE_INSTRUMENTATION",
183
195
  :enable_minutely_probes => "APPSIGNAL_ENABLE_MINUTELY_PROBES",
184
196
  :enable_statsd => "APPSIGNAL_ENABLE_STATSD",
185
197
  :enable_nginx_metrics => "APPSIGNAL_ENABLE_NGINX_METRICS",
@@ -191,12 +203,21 @@ module Appsignal
191
203
  :enable_rake_performance_instrumentation =>
192
204
  "APPSIGNAL_ENABLE_RAKE_PERFORMANCE_INSTRUMENTATION",
193
205
  :files_world_accessible => "APPSIGNAL_FILES_WORLD_ACCESSIBLE",
206
+ :instrument_active_job => "APPSIGNAL_INSTRUMENT_ACTIVE_JOB",
194
207
  :instrument_code_ownership => "APPSIGNAL_INSTRUMENT_CODE_OWNERSHIP",
208
+ :instrument_delayed_job => "APPSIGNAL_INSTRUMENT_DELAYED_JOB",
209
+ :instrument_excon => "APPSIGNAL_INSTRUMENT_EXCON",
210
+ :instrument_faraday => "APPSIGNAL_INSTRUMENT_FARADAY",
195
211
  :instrument_http_rb => "APPSIGNAL_INSTRUMENT_HTTP_RB",
212
+ :instrument_mongo => "APPSIGNAL_INSTRUMENT_MONGO",
196
213
  :instrument_net_http => "APPSIGNAL_INSTRUMENT_NET_HTTP",
197
214
  :instrument_ownership => "APPSIGNAL_INSTRUMENT_OWNERSHIP",
215
+ :instrument_que => "APPSIGNAL_INSTRUMENT_QUE",
198
216
  :instrument_redis => "APPSIGNAL_INSTRUMENT_REDIS",
217
+ :instrument_resque => "APPSIGNAL_INSTRUMENT_RESQUE",
199
218
  :instrument_sequel => "APPSIGNAL_INSTRUMENT_SEQUEL",
219
+ :instrument_shoryuken => "APPSIGNAL_INSTRUMENT_SHORYUKEN",
220
+ :instrument_sidekiq => "APPSIGNAL_INSTRUMENT_SIDEKIQ",
200
221
  :ownership_set_namespace => "APPSIGNAL_OWNERSHIP_SET_NAMESPACE",
201
222
  :running_in_container => "APPSIGNAL_RUNNING_IN_CONTAINER",
202
223
  :send_environment_metadata => "APPSIGNAL_SEND_ENVIRONMENT_METADATA",
@@ -432,7 +453,7 @@ module Appsignal
432
453
  end
433
454
 
434
455
  # @!visibility private
435
- def write_to_environment # rubocop:disable Metrics/AbcSize
456
+ def write_to_environment
436
457
  ENV["_APPSIGNAL_ACTIVE"] = active?.to_s
437
458
  ENV["_APPSIGNAL_AGENT_PATH"] = File.expand_path("../../ext", __dir__).to_s
438
459
  ENV["_APPSIGNAL_APP_NAME"] = config_hash[:name]
@@ -591,7 +612,9 @@ module Appsignal
591
612
  return unless yml_config_file?
592
613
 
593
614
  read_options = YAML::VERSION >= "4.0.0" ? { :aliases => true } : {}
615
+ # rubocop:disable Security/YAMLLoad
594
616
  configurations = YAML.load(ERB.new(File.read(yml_config_file)).result, **read_options)
617
+ # rubocop:enable Security/YAMLLoad
595
618
  config_for_this_env = configurations[env]
596
619
  if config_for_this_env
597
620
  config_for_this_env.transform_keys(&:to_sym)
@@ -824,6 +847,8 @@ module Appsignal
824
847
  # @return [Boolean] Configure whether the at_exit reporter is enabled
825
848
  # @!attribute [rw] enable_host_metrics
826
849
  # @return [Boolean] Configure whether host metrics collection is enabled
850
+ # @!attribute [rw] enable_job_enqueue_instrumentation
851
+ # @return [Boolean] Configure whether to record an event when a background job is enqueued
827
852
  # @!attribute [rw] enable_minutely_probes
828
853
  # @return [Boolean] Configure whether minutely probes are enabled
829
854
  # @!attribute [rw] enable_statsd
@@ -842,16 +867,34 @@ module Appsignal
842
867
  # @return [Boolean] Configure whether Rake performance instrumentation is enabled
843
868
  # @!attribute [rw] files_world_accessible
844
869
  # @return [Boolean] Configure whether files created by AppSignal should be world accessible
870
+ # @!attribute [rw] instrument_active_job
871
+ # @return [Boolean] Configure whether to instrument Active Job
872
+ # @!attribute [rw] instrument_delayed_job
873
+ # @return [Boolean] Configure whether to instrument Delayed Job
874
+ # @!attribute [rw] instrument_excon
875
+ # @return [Boolean] Configure whether to instrument requests made with the Excon gem
876
+ # @!attribute [rw] instrument_faraday
877
+ # @return [Boolean] Configure whether to instrument requests made with the Faraday gem
845
878
  # @!attribute [rw] instrument_http_rb
846
879
  # @return [Boolean] Configure whether to instrument requests made with the http.rb gem
880
+ # @!attribute [rw] instrument_mongo
881
+ # @return [Boolean] Configure whether to instrument MongoDB queries
847
882
  # @!attribute [rw] instrument_net_http
848
883
  # @return [Boolean] Configure whether to instrument requests made with Net::HTTP
849
884
  # @!attribute [rw] instrument_ownership
850
885
  # @return [Boolean] Configure whether to instrument the Ownership gem
886
+ # @!attribute [rw] instrument_que
887
+ # @return [Boolean] Configure whether to instrument Que
851
888
  # @!attribute [rw] instrument_redis
852
889
  # @return [Boolean] Configure whether to instrument Redis queries
890
+ # @!attribute [rw] instrument_resque
891
+ # @return [Boolean] Configure whether to instrument Resque
853
892
  # @!attribute [rw] instrument_sequel
854
893
  # @return [Boolean] Configure whether to instrument Sequel queries
894
+ # @!attribute [rw] instrument_shoryuken
895
+ # @return [Boolean] Configure whether to instrument Shoryuken
896
+ # @!attribute [rw] instrument_sidekiq
897
+ # @return [Boolean] Configure whether to instrument Sidekiq
855
898
  # @!attribute [rw] ownership_set_namespace
856
899
  # @return [Boolean] Configure whether the Ownership gem instrumentation should set namespace
857
900
  # @!attribute [rw] running_in_container
@@ -87,6 +87,7 @@ module Appsignal
87
87
  elasticsearch
88
88
  excon
89
89
  faraday
90
+ grape
90
91
  gvltools
91
92
  hanami
92
93
  hiredis
@@ -398,14 +398,14 @@ module Appsignal
398
398
  )
399
399
  end
400
400
 
401
- def set_action(action_name) # rubocop:disable Naming/AccessorMethodName
401
+ def set_action(action_name)
402
402
  Extension.appsignal_set_transaction_action(
403
403
  pointer,
404
404
  make_appsignal_string(action_name)
405
405
  )
406
406
  end
407
407
 
408
- def set_namespace(namespace) # rubocop:disable Naming/AccessorMethodName
408
+ def set_namespace(namespace)
409
409
  Extension.appsignal_set_transaction_namespace(
410
410
  pointer,
411
411
  make_appsignal_string(namespace)
@@ -420,7 +420,7 @@ module Appsignal
420
420
  )
421
421
  end
422
422
 
423
- def set_queue_start(time) # rubocop:disable Naming/AccessorMethodName
423
+ def set_queue_start(time)
424
424
  Extension.appsignal_set_transaction_queue_start(pointer, time)
425
425
  end
426
426
 
@@ -496,7 +496,7 @@ module Appsignal
496
496
  )
497
497
  end
498
498
 
499
- def set_name(name) # rubocop:disable Naming/AccessorMethodName
499
+ def set_name(name)
500
500
  Extension.appsignal_set_span_name(
501
501
  pointer,
502
502
  make_appsignal_string(name)
@@ -547,6 +547,7 @@ module Appsignal
547
547
 
548
548
  class Data
549
549
  include StringHelpers
550
+
550
551
  attr_reader :pointer
551
552
 
552
553
  def initialize(pointer)
@@ -588,7 +589,7 @@ module Appsignal
588
589
  )
589
590
  end
590
591
 
591
- def set_nil(key) # rubocop:disable Naming/AccessorMethodName
592
+ def set_nil(key)
592
593
  Extension.appsignal_data_map_set_null(
593
594
  pointer,
594
595
  make_appsignal_string(key)