appsignal 2.5.3 → 2.6.0.beta.1

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 (91) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -1
  3. data/.rubocop_todo.yml +1 -1
  4. data/.travis.yml +8 -1
  5. data/CHANGELOG.md +12 -0
  6. data/appsignal.gemspec +2 -2
  7. data/benchmark.rake +6 -0
  8. data/ext/agent.yml +35 -35
  9. data/ext/appsignal_extension.c +27 -9
  10. data/lib/appsignal.rb +15 -19
  11. data/lib/appsignal/auth_check.rb +2 -0
  12. data/lib/appsignal/capistrano.rb +2 -0
  13. data/lib/appsignal/cli.rb +2 -0
  14. data/lib/appsignal/cli/demo.rb +2 -0
  15. data/lib/appsignal/cli/diagnose.rb +2 -0
  16. data/lib/appsignal/cli/helpers.rb +2 -0
  17. data/lib/appsignal/cli/install.rb +15 -1
  18. data/lib/appsignal/cli/notify_of_deploy.rb +8 -0
  19. data/lib/appsignal/config.rb +44 -5
  20. data/lib/appsignal/demo.rb +2 -0
  21. data/lib/appsignal/event_formatter.rb +2 -0
  22. data/lib/appsignal/event_formatter/action_view/render_formatter.rb +2 -0
  23. data/lib/appsignal/event_formatter/active_record/instantiation_formatter.rb +2 -0
  24. data/lib/appsignal/event_formatter/active_record/sql_formatter.rb +2 -0
  25. data/lib/appsignal/event_formatter/elastic_search/search_formatter.rb +2 -0
  26. data/lib/appsignal/event_formatter/faraday/request_formatter.rb +2 -0
  27. data/lib/appsignal/event_formatter/mongo_ruby_driver/query_formatter.rb +2 -0
  28. data/lib/appsignal/event_formatter/moped/query_formatter.rb +2 -0
  29. data/lib/appsignal/extension.rb +2 -0
  30. data/lib/appsignal/extension/jruby.rb +15 -13
  31. data/lib/appsignal/garbage_collection_profiler.rb +2 -0
  32. data/lib/appsignal/hooks.rb +2 -0
  33. data/lib/appsignal/hooks/action_cable.rb +2 -0
  34. data/lib/appsignal/hooks/active_support_notifications.rb +2 -0
  35. data/lib/appsignal/hooks/celluloid.rb +2 -0
  36. data/lib/appsignal/hooks/data_mapper.rb +2 -0
  37. data/lib/appsignal/hooks/delayed_job.rb +2 -0
  38. data/lib/appsignal/hooks/mongo_ruby_driver.rb +2 -0
  39. data/lib/appsignal/hooks/net_http.rb +2 -0
  40. data/lib/appsignal/hooks/passenger.rb +2 -0
  41. data/lib/appsignal/hooks/puma.rb +2 -0
  42. data/lib/appsignal/hooks/que.rb +2 -0
  43. data/lib/appsignal/hooks/rake.rb +2 -0
  44. data/lib/appsignal/hooks/redis.rb +2 -0
  45. data/lib/appsignal/hooks/sequel.rb +2 -0
  46. data/lib/appsignal/hooks/shoryuken.rb +6 -2
  47. data/lib/appsignal/hooks/sidekiq.rb +4 -2
  48. data/lib/appsignal/hooks/unicorn.rb +2 -0
  49. data/lib/appsignal/hooks/webmachine.rb +2 -0
  50. data/lib/appsignal/integrations/capistrano/capistrano_2_tasks.rb +2 -0
  51. data/lib/appsignal/integrations/data_mapper.rb +2 -0
  52. data/lib/appsignal/integrations/delayed_job_plugin.rb +6 -2
  53. data/lib/appsignal/integrations/grape.rb +2 -0
  54. data/lib/appsignal/integrations/mongo_ruby_driver.rb +2 -0
  55. data/lib/appsignal/integrations/object.rb +2 -0
  56. data/lib/appsignal/integrations/padrino.rb +3 -4
  57. data/lib/appsignal/integrations/que.rb +2 -0
  58. data/lib/appsignal/integrations/railtie.rb +2 -0
  59. data/lib/appsignal/integrations/rake.rb +2 -0
  60. data/lib/appsignal/integrations/resque.rb +2 -0
  61. data/lib/appsignal/integrations/resque_active_job.rb +6 -2
  62. data/lib/appsignal/integrations/sinatra.rb +2 -0
  63. data/lib/appsignal/integrations/webmachine.rb +2 -0
  64. data/lib/appsignal/js_exception_transaction.rb +2 -0
  65. data/lib/appsignal/marker.rb +2 -0
  66. data/lib/appsignal/minutely.rb +2 -0
  67. data/lib/appsignal/rack/generic_instrumentation.rb +2 -0
  68. data/lib/appsignal/rack/js_exception_catcher.rb +2 -0
  69. data/lib/appsignal/rack/rails_instrumentation.rb +2 -0
  70. data/lib/appsignal/rack/sinatra_instrumentation.rb +2 -0
  71. data/lib/appsignal/rack/streaming_listener.rb +2 -0
  72. data/lib/appsignal/system.rb +2 -0
  73. data/lib/appsignal/transaction.rb +13 -10
  74. data/lib/appsignal/transmitter.rb +2 -0
  75. data/lib/appsignal/utils.rb +3 -1
  76. data/lib/appsignal/utils/{params_sanitizer.rb → hash_sanitizer.rb} +12 -11
  77. data/lib/appsignal/utils/query_params_sanitizer.rb +2 -0
  78. data/lib/appsignal/version.rb +3 -1
  79. data/lib/sequel/extensions/appsignal_integration.rb +2 -0
  80. data/resources/appsignal.yml.erb +5 -0
  81. data/spec/lib/appsignal/auth_check_spec.rb +11 -2
  82. data/spec/lib/appsignal/cli/install_spec.rb +33 -0
  83. data/spec/lib/appsignal/config_spec.rb +76 -18
  84. data/spec/lib/appsignal/extension_spec.rb +3 -3
  85. data/spec/lib/appsignal/integrations/padrino_spec.rb +8 -28
  86. data/spec/lib/appsignal/transaction_spec.rb +63 -30
  87. data/spec/lib/appsignal/utils/{params_sanitizer_spec.rb → hash_sanitizer_spec.rb} +6 -6
  88. data/spec/lib/appsignal_spec.rb +180 -158
  89. data/spec/support/helpers/std_streams_helper.rb +19 -12
  90. data/spec/support/project_fixture/config/appsignal.yml +21 -0
  91. metadata +11 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 51559e9d756705491711f5bb6ee35ec81fa6e51b
4
- data.tar.gz: 18c532d7a7b82d21906abc9c98b280b7cd8ed8a5
3
+ metadata.gz: 4f6e2eaa16fe3379daa8cc8082a6b96486c066f6
4
+ data.tar.gz: 67d609d9cd2d8b8ba2a0492b40bca3cb90ef029d
5
5
  SHA512:
6
- metadata.gz: 4135dd1b52bc7d3223f55712dd566933566e9fe01c1ff831d73113ab36a61669acb9848ed0df9c6c31d7ba0e0ba4e33b24e7a6275d456da14183ef19601daf23
7
- data.tar.gz: e5b6ebedb7db4da3afba2fed1a1dd7f543951cc71d1f4a562d2318d74e1c1c1382ab190ce0533633886d897414eb851acb3f470da6586c24fdaf6f6b11297914
6
+ metadata.gz: c338ad09369de8ba41909e800d62d05fef5ffc9f3265b21ff41a781fc5160aef5972380b1661cecd1d2fd9a1cf009e5b97dd6d012b121d74831b1b7f82d187e1
7
+ data.tar.gz: 5463f2f232071da5fe070b4e5b8b3d360eb211c570396ae79bb1310a34a3a3eac05a89e75a2513aa58d1b7afec919a0623c078d8f733c7c7190fa51507985ad8
@@ -17,6 +17,9 @@ AllCops:
17
17
  UseCache: true
18
18
  CacheRootDirectory: ./tmp
19
19
 
20
+ Lint/RescueWithoutErrorClass:
21
+ Enabled: false
22
+
20
23
  Style/Documentation:
21
24
  Enabled: false
22
25
 
@@ -55,7 +58,10 @@ Style/MethodMissing:
55
58
  Style/TrailingUnderscoreVariable:
56
59
  Enabled: false
57
60
 
58
- Style/FileName:
61
+ Style/Encoding: # For Ruby 1.9 as it doesn't default to UTF-8
62
+ Enabled: false
63
+
64
+ Naming/FileName:
59
65
  Exclude:
60
66
  - "ext/Rakefile"
61
67
 
@@ -63,5 +69,8 @@ Metrics/BlockLength:
63
69
  Exclude:
64
70
  - "Rakefile"
65
71
 
72
+ Style/FrozenStringLiteralComment:
73
+ Enabled: true
74
+
66
75
  # Metrics/LineLength:
67
76
  # Max: 80
@@ -55,7 +55,7 @@ Metrics/PerceivedComplexity:
55
55
  Max: 14
56
56
 
57
57
  # Offense count: 10
58
- Style/AccessorMethodName:
58
+ Naming/AccessorMethodName:
59
59
  Exclude:
60
60
  - 'lib/appsignal.rb'
61
61
  - 'lib/appsignal/transaction.rb'
@@ -6,7 +6,9 @@ branches:
6
6
  - "develop"
7
7
 
8
8
  language: ruby
9
- cache: bundler
9
+ cache:
10
+ directories:
11
+ - vendor/bundle
10
12
 
11
13
  rvm:
12
14
  - "2.0.0"
@@ -14,6 +16,7 @@ rvm:
14
16
  - "2.2.4"
15
17
  - "2.3.0"
16
18
  - "2.4.0"
19
+ - "2.5.1"
17
20
  - "jruby-19mode"
18
21
 
19
22
  gemfile:
@@ -51,6 +54,10 @@ matrix:
51
54
  gemfile: "gemfiles/rails-5.1.gemfile"
52
55
  - rvm: "2.1.8"
53
56
  gemfile: "gemfiles/rails-5.1.gemfile"
57
+ - rvm: "2.5.1"
58
+ gemfile: "gemfiles/rails-4.0.gemfile"
59
+ - rvm: "2.5.1"
60
+ gemfile: "gemfiles/rails-4.1.gemfile"
54
61
 
55
62
  allow_failures:
56
63
  - rvm: "2.4.0"
@@ -1,3 +1,15 @@
1
+ # 2.6.0
2
+ - Enable frozen strings by default. PR #384
3
+ - Add `revision` config option. PR #388
4
+ - Avoid generating unique action names for Padrino. PR #393
5
+ - Add `request_headers` filter configuration. PR #395
6
+ - Support tags for custom metrics. PR #398
7
+ - Add filter_session_data config option. PR #402 & #409
8
+ - Move default hostname behavior to extension. PR #404
9
+ - Add `request_headers` config to installation step. PR #406
10
+ - Rename ParamsSanitizer to HashSanitizer. PR #408
11
+ - Fix empty action name issue. Commit b292c2c93c8935ab54fc4d16598fa534c9cc9c90
12
+
1
13
  # 2.5.3
2
14
  - Fix Sidekiq action names containing arguments. PR #401
3
15
 
@@ -25,10 +25,10 @@ Gem::Specification.new do |gem|
25
25
  gem.add_dependency "rack"
26
26
 
27
27
  gem.add_development_dependency "rake", "~> 11"
28
- gem.add_development_dependency "rspec", "~> 3.6"
28
+ gem.add_development_dependency "rspec", "~> 3.7"
29
29
  gem.add_development_dependency "pry"
30
30
  gem.add_development_dependency "timecop"
31
31
  gem.add_development_dependency "webmock"
32
- gem.add_development_dependency "rubocop", "0.49.0"
32
+ gem.add_development_dependency "rubocop", "0.50.0"
33
33
  gem.add_development_dependency "yard"
34
34
  end
@@ -1,6 +1,10 @@
1
1
  require 'appsignal'
2
2
  require 'benchmark'
3
3
 
4
+ def process_rss
5
+ `ps -o rss= -p #{Process.pid}`.to_i
6
+ end
7
+
4
8
  GC.disable
5
9
 
6
10
  task :default => :'benchmark:all'
@@ -27,6 +31,7 @@ def run_benchmark
27
31
 
28
32
  total_objects = ObjectSpace.count_objects[:TOTAL]
29
33
  puts "Initializing, currently #{total_objects} objects"
34
+ puts "RSS: #{process_rss}"
30
35
 
31
36
  Appsignal.config = Appsignal::Config.new(Dir.pwd, 'production', :endpoint => 'http://localhost:8080')
32
37
  Appsignal.start
@@ -74,4 +79,5 @@ def run_benchmark
74
79
  end)
75
80
 
76
81
  puts "Done, currently #{ObjectSpace.count_objects[:TOTAL] - total_objects} objects created"
82
+ puts "RSS: #{process_rss}"
77
83
  end
@@ -1,64 +1,64 @@
1
1
  ---
2
- version: ea78a58
2
+ version: 6ce11c8
3
3
  triples:
4
4
  x86_64-darwin:
5
5
  static:
6
- checksum: f3546e3e99823d5079dd2424f776be9aa51a736b7a36573902076f5c01e85d11
7
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-x86_64-darwin-all-static.tar.gz
6
+ checksum: 270f44902bcd278277b4e5de598fd081145a35f09ccdad1bc2511cd83d37c2f7
7
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-x86_64-darwin-all-static.tar.gz
8
8
  dynamic:
9
- checksum: e5c04a5de130374bf226966a30ce18c4d01ab478d3665618fc982ce0980116d4
10
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-x86_64-darwin-all-dynamic.tar.gz
9
+ checksum: 502b5ac7f83c70c27f768181dc4e2a4e6d27a794c0221a0d0c9977709ba2e98b
10
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-x86_64-darwin-all-dynamic.tar.gz
11
11
  universal-darwin:
12
12
  static:
13
- checksum: f3546e3e99823d5079dd2424f776be9aa51a736b7a36573902076f5c01e85d11
14
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-x86_64-darwin-all-static.tar.gz
13
+ checksum: 270f44902bcd278277b4e5de598fd081145a35f09ccdad1bc2511cd83d37c2f7
14
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-x86_64-darwin-all-static.tar.gz
15
15
  dynamic:
16
- checksum: e5c04a5de130374bf226966a30ce18c4d01ab478d3665618fc982ce0980116d4
17
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-x86_64-darwin-all-dynamic.tar.gz
16
+ checksum: 502b5ac7f83c70c27f768181dc4e2a4e6d27a794c0221a0d0c9977709ba2e98b
17
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-x86_64-darwin-all-dynamic.tar.gz
18
18
  i686-linux:
19
19
  static:
20
- checksum: 82708a13163fa6e03860a8d3c06e0617a4c15cca08fab29e6f2761752374d927
21
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-i686-linux-all-static.tar.gz
20
+ checksum: 3b7d7b01650d419a5a4cf08cbf149e60a9fedef2a21f06f48672c86fc6087bcc
21
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-i686-linux-all-static.tar.gz
22
22
  dynamic:
23
- checksum: ef43a7865a71d88a6929b0983a97c17462ba613990d0463e93cf0ed16364e390
24
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-i686-linux-all-dynamic.tar.gz
23
+ checksum: 2ff19f08d8f3d8aa3d78745d58cde3e8fe640ef28556bb885cbab1a9419f8cde
24
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-i686-linux-all-dynamic.tar.gz
25
25
  x86-linux:
26
26
  static:
27
- checksum: 82708a13163fa6e03860a8d3c06e0617a4c15cca08fab29e6f2761752374d927
28
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-i686-linux-all-static.tar.gz
27
+ checksum: 3b7d7b01650d419a5a4cf08cbf149e60a9fedef2a21f06f48672c86fc6087bcc
28
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-i686-linux-all-static.tar.gz
29
29
  dynamic:
30
- checksum: ef43a7865a71d88a6929b0983a97c17462ba613990d0463e93cf0ed16364e390
31
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-i686-linux-all-dynamic.tar.gz
30
+ checksum: 2ff19f08d8f3d8aa3d78745d58cde3e8fe640ef28556bb885cbab1a9419f8cde
31
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-i686-linux-all-dynamic.tar.gz
32
32
  i686-linux-musl:
33
33
  static:
34
- checksum: 01dcbeea6e39976d0da4ec36b16ecf6af4bf1f6821e0452671999129a541e6e4
35
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-i686-linux-musl-all-static.tar.gz
34
+ checksum: c5a0b5f156e94ab9ab763ebd031d002d53b2905d8d5d44eecaecea4f3b757cb5
35
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-i686-linux-musl-all-static.tar.gz
36
36
  x86-linux-musl:
37
37
  static:
38
- checksum: 01dcbeea6e39976d0da4ec36b16ecf6af4bf1f6821e0452671999129a541e6e4
39
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-i686-linux-musl-all-static.tar.gz
38
+ checksum: c5a0b5f156e94ab9ab763ebd031d002d53b2905d8d5d44eecaecea4f3b757cb5
39
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-i686-linux-musl-all-static.tar.gz
40
40
  x86_64-linux:
41
41
  static:
42
- checksum: c40ac2149c30bbc66b448685941c30965f9ab19f62cb4af37d437d0da3fb6760
43
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-x86_64-linux-all-static.tar.gz
42
+ checksum: 2c3f49329e6549a0f168238ed771d89f128ce3ac56a3d7f950ba58151fc2e03d
43
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-x86_64-linux-all-static.tar.gz
44
44
  dynamic:
45
- checksum: fe86db778c37639f8ea6a5269ffb4aa842a8cc334faae7b496e30ca387275867
46
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-x86_64-linux-all-dynamic.tar.gz
45
+ checksum: 2a6d28da207f52ff73b9fb9e9337621b95a7b2329eeb4f9da7a83156af519e20
46
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-x86_64-linux-all-dynamic.tar.gz
47
47
  x86_64-linux-musl:
48
48
  static:
49
- checksum: 694618273ef00e3cce1b156770eee51dfb3c31be5ee16d8e61e1c3970a943705
50
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-x86_64-linux-musl-all-static.tar.gz
49
+ checksum: 7a148a871f61f697eb921828ef93232574c71e8d0ea79d30cd4e27b4f5609bc2
50
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-x86_64-linux-musl-all-static.tar.gz
51
51
  x86_64-freebsd:
52
52
  static:
53
- checksum: 666b3ec59f03fa8ae3c87348065866f30d9f868a4402809b9e5036214da943d5
54
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-x86_64-freebsd-all-static.tar.gz
53
+ checksum: 5cc8e1702275930e4e1d213ad57b64d892d175b9e84242d757bd23b98ae35d85
54
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-x86_64-freebsd-all-static.tar.gz
55
55
  dynamic:
56
- checksum: afaff145ed01ec0fc661c9ecc2aa72089fbddec8e64591aa5868da0d764996e0
57
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-x86_64-freebsd-all-dynamic.tar.gz
56
+ checksum: 05d18c8571bb4baa5bafcfca10c8919f94713067cfe4b1ae3fc9e66ca561bb07
57
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-x86_64-freebsd-all-dynamic.tar.gz
58
58
  amd64-freebsd:
59
59
  static:
60
- checksum: 666b3ec59f03fa8ae3c87348065866f30d9f868a4402809b9e5036214da943d5
61
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-x86_64-freebsd-all-static.tar.gz
60
+ checksum: 5cc8e1702275930e4e1d213ad57b64d892d175b9e84242d757bd23b98ae35d85
61
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-x86_64-freebsd-all-static.tar.gz
62
62
  dynamic:
63
- checksum: afaff145ed01ec0fc661c9ecc2aa72089fbddec8e64591aa5868da0d764996e0
64
- download_url: https://appsignal-agent-releases.global.ssl.fastly.net/ea78a58/appsignal-x86_64-freebsd-all-dynamic.tar.gz
63
+ checksum: 05d18c8571bb4baa5bafcfca10c8919f94713067cfe4b1ae3fc9e66ca561bb07
64
+ download_url: https://appsignal-agent-releases.global.ssl.fastly.net/6ce11c8/appsignal-x86_64-freebsd-all-dynamic.tar.gz
@@ -545,13 +545,19 @@ static VALUE data_to_s(VALUE self) {
545
545
  }
546
546
  }
547
547
 
548
- static VALUE set_gauge(VALUE self, VALUE key, VALUE value) {
548
+ static VALUE set_gauge(VALUE self, VALUE key, VALUE value, VALUE tags) {
549
+ appsignal_data_t* tags_data;
550
+
549
551
  Check_Type(key, T_STRING);
550
552
  Check_Type(value, T_FLOAT);
553
+ Check_Type(tags, RUBY_T_DATA);
554
+
555
+ Data_Get_Struct(tags, appsignal_data_t, tags_data);
551
556
 
552
557
  appsignal_set_gauge(
553
558
  make_appsignal_string(key),
554
- NUM2DBL(value)
559
+ NUM2DBL(value),
560
+ tags_data
555
561
  );
556
562
  return Qnil;
557
563
  }
@@ -578,24 +584,36 @@ static VALUE set_process_gauge(VALUE self, VALUE key, VALUE value) {
578
584
  return Qnil;
579
585
  }
580
586
 
581
- static VALUE increment_counter(VALUE self, VALUE key, VALUE count) {
587
+ static VALUE increment_counter(VALUE self, VALUE key, VALUE count, VALUE tags) {
588
+ appsignal_data_t* tags_data;
589
+
582
590
  Check_Type(key, T_STRING);
583
591
  Check_Type(count, T_FIXNUM);
592
+ Check_Type(tags, RUBY_T_DATA);
593
+
594
+ Data_Get_Struct(tags, appsignal_data_t, tags_data);
584
595
 
585
596
  appsignal_increment_counter(
586
597
  make_appsignal_string(key),
587
- FIX2INT(count)
598
+ FIX2INT(count),
599
+ tags_data
588
600
  );
589
601
  return Qnil;
590
602
  }
591
603
 
592
- static VALUE add_distribution_value(VALUE self, VALUE key, VALUE value) {
604
+ static VALUE add_distribution_value(VALUE self, VALUE key, VALUE value, VALUE tags) {
605
+ appsignal_data_t* tags_data;
606
+
593
607
  Check_Type(key, T_STRING);
594
608
  Check_Type(value, T_FLOAT);
609
+ Check_Type(tags, RUBY_T_DATA);
610
+
611
+ Data_Get_Struct(tags, appsignal_data_t, tags_data);
595
612
 
596
613
  appsignal_add_distribution_value(
597
614
  make_appsignal_string(key),
598
- NUM2DBL(value)
615
+ NUM2DBL(value),
616
+ tags_data
599
617
  );
600
618
  return Qnil;
601
619
  }
@@ -684,9 +702,9 @@ void Init_appsignal_extension(void) {
684
702
  rb_define_singleton_method(Extension, "running_in_container?", running_in_container, 0);
685
703
 
686
704
  // Metrics
687
- rb_define_singleton_method(Extension, "set_gauge", set_gauge, 2);
705
+ rb_define_singleton_method(Extension, "set_gauge", set_gauge, 3);
688
706
  rb_define_singleton_method(Extension, "set_host_gauge", set_host_gauge, 2);
689
707
  rb_define_singleton_method(Extension, "set_process_gauge", set_process_gauge, 2);
690
- rb_define_singleton_method(Extension, "increment_counter", increment_counter, 2);
691
- rb_define_singleton_method(Extension, "add_distribution_value", add_distribution_value, 2);
708
+ rb_define_singleton_method(Extension, "increment_counter", increment_counter, 3);
709
+ rb_define_singleton_method(Extension, "add_distribution_value", add_distribution_value, 3);
692
710
  }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "json"
2
4
  require "logger"
3
5
  require "securerandom"
@@ -93,7 +95,7 @@ module Appsignal
93
95
  #
94
96
  # @return [void]
95
97
  # @since 0.7.0
96
- def start # rubocop:disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
98
+ def start
97
99
  unless extension_loaded?
98
100
  logger.info("Not starting appsignal, extension is not loaded")
99
101
  return
@@ -101,12 +103,10 @@ module Appsignal
101
103
 
102
104
  logger.debug("Starting appsignal")
103
105
 
104
- unless @config
105
- @config = Config.new(
106
- Dir.pwd,
107
- ENV["APPSIGNAL_APP_ENV"] || ENV["RAILS_ENV"] || ENV["RACK_ENV"]
108
- )
109
- end
106
+ @config ||= Config.new(
107
+ Dir.pwd,
108
+ ENV["APPSIGNAL_APP_ENV"] || ENV["RAILS_ENV"] || ENV["RACK_ENV"]
109
+ )
110
110
 
111
111
  if config.valid?
112
112
  logger.level =
@@ -189,10 +189,6 @@ module Appsignal
189
189
  # This helper method also captures any exception that occurs in the given
190
190
  # block.
191
191
  #
192
- # The other (request) `env` argument hash keys, not listed here, can be
193
- # found on the {Appsignal::Transaction::ENV_METHODS} array.
194
- # Each of these keys are available as keys in the `env` hash argument.
195
- #
196
192
  # @example
197
193
  # Appsignal.monitor_transaction("perform_job.nightly_update") do
198
194
  # # your code
@@ -605,8 +601,8 @@ module Appsignal
605
601
  instrument(name, title, body, Appsignal::EventFormatter::SQL_BODY_FORMAT, &block)
606
602
  end
607
603
 
608
- def set_gauge(key, value)
609
- Appsignal::Extension.set_gauge(key.to_s, value.to_f)
604
+ def set_gauge(key, value, tags = {})
605
+ Appsignal::Extension.set_gauge(key.to_s, value.to_f, Appsignal::Utils.data_generate(tags))
610
606
  rescue RangeError
611
607
  Appsignal.logger.warn("Gauge value #{value} for key '#{key}' is too big")
612
608
  end
@@ -623,14 +619,14 @@ module Appsignal
623
619
  Appsignal.logger.warn("Process gauge value #{value} for key '#{key}' is too big")
624
620
  end
625
621
 
626
- def increment_counter(key, value = 1)
627
- Appsignal::Extension.increment_counter(key.to_s, value)
622
+ def increment_counter(key, value = 1, tags = {})
623
+ Appsignal::Extension.increment_counter(key.to_s, value, Appsignal::Utils.data_generate(tags))
628
624
  rescue RangeError
629
625
  Appsignal.logger.warn("Counter value #{value} for key '#{key}' is too big")
630
626
  end
631
627
 
632
- def add_distribution_value(key, value)
633
- Appsignal::Extension.add_distribution_value(key.to_s, value.to_f)
628
+ def add_distribution_value(key, value, tags = {})
629
+ Appsignal::Extension.add_distribution_value(key.to_s, value.to_f, Appsignal::Utils.data_generate(tags))
634
630
  rescue RangeError
635
631
  Appsignal.logger.warn("Distribution value #{value} for key '#{key}' is too big")
636
632
  end
@@ -736,14 +732,14 @@ module Appsignal
736
732
  end
737
733
 
738
734
  # @deprecated No replacement
739
- def is_ignored_error?(error) # rubocop:disable Style/PredicateName
735
+ def is_ignored_error?(error) # rubocop:disable Naming/PredicateName
740
736
  Appsignal.config[:ignore_errors].include?(error.class.name)
741
737
  end
742
738
  alias :is_ignored_exception? :is_ignored_error?
743
739
  deprecate :is_ignored_error?, :none, 2017, 3
744
740
 
745
741
  # @deprecated No replacement
746
- def is_ignored_action?(action) # rubocop:disable Style/PredicateName
742
+ def is_ignored_action?(action) # rubocop:disable Naming/PredicateName
747
743
  Appsignal.config[:ignore_actions].include?(action)
748
744
  end
749
745
  deprecate :is_ignored_action?, :none, 2017, 3
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  # Class used to perform a Push API validation / authentication check against
3
5
  # the AppSignal Push API.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "appsignal"
2
4
  require "capistrano/version"
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "optparse"
2
4
  require "logger"
3
5
  require "appsignal"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "appsignal/demo"
2
4
 
3
5
  module Appsignal
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rbconfig"
2
4
  require "bundler/cli"
3
5
  require "bundler/cli/common"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class CLI
3
5
  module Helpers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "erb"
2
4
  require "ostruct"
3
5
  require "io/console"
@@ -162,7 +164,7 @@ module Appsignal
162
164
  puts "How do you want to configure AppSignal?"
163
165
  puts " (1) a config file"
164
166
  puts " (2) environment variables"
165
- loop do
167
+ loop do # rubocop:disable Metrics/BlockLength
166
168
  print " Choose (1/2): "
167
169
  case ask_for_input
168
170
  when "1"
@@ -174,6 +176,7 @@ module Appsignal
174
176
  write_config_file(
175
177
  :push_api_key => config[:push_api_key],
176
178
  :app_name => config[:name],
179
+ :request_headers => multiline_request_headers,
177
180
  :environments => environments
178
181
  )
179
182
  puts
@@ -189,6 +192,7 @@ module Appsignal
189
192
  if name_overwritten
190
193
  puts " export APPSIGNAL_APP_NAME=#{config[:name]}"
191
194
  end
195
+ puts " export APPSIGNAL_REQUEST_HEADERS=#{single_line_request_headers}"
192
196
  puts
193
197
  puts " See the documentation for more configuration options:"
194
198
  puts " http://docs.appsignal.com/gem-settings/configuration.html"
@@ -271,6 +275,16 @@ module Appsignal
271
275
  def new_config
272
276
  Appsignal::Config.new(Dir.pwd, "")
273
277
  end
278
+
279
+ def multiline_request_headers
280
+ Appsignal::Config::SUGGESTED_REQUEST_HEADERS.map do |row|
281
+ row.map(&:inspect).join(", ")
282
+ end.join(",\n ")
283
+ end
284
+
285
+ def single_line_request_headers
286
+ Appsignal::Config::SUGGESTED_REQUEST_HEADERS.flatten.join(",")
287
+ end
274
288
  end
275
289
  end
276
290
  end