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
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class CLI
3
5
  # Command line tool to send a "Deploy Marker" for an application to
@@ -44,6 +46,12 @@ module Appsignal
44
46
  # @example help command
45
47
  # appsignal notify_of_deploy --help
46
48
  #
49
+ # @deprecated This method of sending AppSignal deploy markers is
50
+ # deprecated. Use the [`revision` config option]
51
+ # (https://docs.appsignal.com/ruby/configuration/options.html#app_revision-revision)
52
+ # instead. For more information, please read the [deploy markers]
53
+ # (https://docs.appsignal.com/application/markers/deploy-markers.html)
54
+ # documentation.
47
55
  # @since 0.2.5
48
56
  # @see Appsignal::Marker Appsignal::Marker
49
57
  # @see http://docs.appsignal.com/ruby/command-line/notify_of_deploy.html
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "erb"
2
4
  require "yaml"
3
5
  require "uri"
@@ -13,6 +15,7 @@ module Appsignal
13
15
  :ignore_errors => [],
14
16
  :ignore_namespaces => [],
15
17
  :filter_parameters => [],
18
+ :filter_session_data => [],
16
19
  :send_params => true,
17
20
  :endpoint => "https://push.appsignal.com",
18
21
  :instrument_net_http => true,
@@ -25,7 +28,6 @@ module Appsignal
25
28
  :enable_gc_instrumentation => false,
26
29
  :enable_host_metrics => true,
27
30
  :enable_minutely_probes => false,
28
- :hostname => ::Socket.gethostname,
29
31
  :ca_file_path => File.expand_path(File.join("../../../resources/cacert.pem"), __FILE__),
30
32
  :dns_servers => [],
31
33
  :files_world_accessible => true
@@ -49,6 +51,7 @@ module Appsignal
49
51
  "APPSIGNAL_IGNORE_ERRORS" => :ignore_errors,
50
52
  "APPSIGNAL_IGNORE_NAMESPACES" => :ignore_namespaces,
51
53
  "APPSIGNAL_FILTER_PARAMETERS" => :filter_parameters,
54
+ "APPSIGNAL_FILTER_SESSION_DATA" => :filter_session_data,
52
55
  "APPSIGNAL_SEND_PARAMS" => :send_params,
53
56
  "APPSIGNAL_HTTP_PROXY" => :http_proxy,
54
57
  "APPSIGNAL_ENABLE_ALLOCATION_TRACKING" => :enable_allocation_tracking,
@@ -60,8 +63,18 @@ module Appsignal
60
63
  "APPSIGNAL_HOSTNAME" => :hostname,
61
64
  "APPSIGNAL_CA_FILE_PATH" => :ca_file_path,
62
65
  "APPSIGNAL_DNS_SERVERS" => :dns_servers,
63
- "APPSIGNAL_FILES_WORLD_ACCESSIBLE" => :files_world_accessible
66
+ "APPSIGNAL_FILES_WORLD_ACCESSIBLE" => :files_world_accessible,
67
+ "APPSIGNAL_REQUEST_HEADERS" => :request_headers,
68
+ "APP_REVISION" => :revision
64
69
  }.freeze
70
+ # Formatted in two-dimensional array for easy printing
71
+ SUGGESTED_REQUEST_HEADERS = [
72
+ %w[HTTP_ACCEPT HTTP_ACCEPT_CHARSET HTTP_ACCEPT_ENCODING],
73
+ %w[HTTP_ACCEPT_LANGUAGE HTTP_CACHE_CONTROL HTTP_CONNECTION],
74
+ %w[CONTENT_LENGTH PATH_INFO HTTP_RANGE],
75
+ %w[REQUEST_METHOD REQUEST_URI SERVER_NAME SERVER_PORT],
76
+ %w[SERVER_PROTOCOL]
77
+ ].freeze
65
78
 
66
79
  # Mapping of old and deprecated AppSignal configuration keys
67
80
  DEPRECATED_CONFIG_KEY_MAPPING = {
@@ -153,7 +166,6 @@ module Appsignal
153
166
  ENV["_APPSIGNAL_IGNORE_ACTIONS"] = config_hash[:ignore_actions].join(",")
154
167
  ENV["_APPSIGNAL_IGNORE_ERRORS"] = config_hash[:ignore_errors].join(",")
155
168
  ENV["_APPSIGNAL_IGNORE_NAMESPACES"] = config_hash[:ignore_namespaces].join(",")
156
- ENV["_APPSIGNAL_FILTER_PARAMETERS"] = config_hash[:filter_parameters].join(",")
157
169
  ENV["_APPSIGNAL_SEND_PARAMS"] = config_hash[:send_params].to_s
158
170
  ENV["_APPSIGNAL_RUNNING_IN_CONTAINER"] = config_hash[:running_in_container].to_s
159
171
  ENV["_APPSIGNAL_WORKING_DIR_PATH"] = config_hash[:working_dir_path] if config_hash[:working_dir_path]
@@ -164,6 +176,7 @@ module Appsignal
164
176
  ENV["_APPSIGNAL_CA_FILE_PATH"] = config_hash[:ca_file_path].to_s
165
177
  ENV["_APPSIGNAL_DNS_SERVERS"] = config_hash[:dns_servers].join(",")
166
178
  ENV["_APPSIGNAL_FILES_WORLD_ACCESSIBLE"] = config_hash[:files_world_accessible].to_s
179
+ ENV["_APP_REVISION"] = config_hash[:revision].to_s
167
180
  end
168
181
 
169
182
  def validate
@@ -184,10 +197,35 @@ module Appsignal
184
197
  @valid = false
185
198
  @logger.error "Push api key not set after loading config"
186
199
  end
200
+
201
+ check_if_request_headers_option_is_set
187
202
  end
188
203
 
189
204
  private
190
205
 
206
+ def check_if_request_headers_option_is_set
207
+ return unless valid?
208
+ return if config_hash.key?(:request_headers) || env == "test"
209
+
210
+ multi_line_request_headers = SUGGESTED_REQUEST_HEADERS.map do |row|
211
+ row.map(&:inspect).join(", ")
212
+ end.join(",\n ")
213
+ single_line_request_headers = SUGGESTED_REQUEST_HEADERS.flatten.join(",")
214
+
215
+ puts "Warning: The `request_headers` config option was not set " \
216
+ " in the AppSignal configuration, falling back to the default list. " \
217
+ "Please explicitly list response headers to send to AppSignal in " \
218
+ "config/appsignal.yml:\n\n" \
219
+ " request_headers: [\n" \
220
+ " #{multi_line_request_headers}\n" \
221
+ "]\n\n" \
222
+ "Or set the APPSIGNAL_REQUEST_HEADERS environment variable:\n\n"\
223
+ " $ export APPSIGNAL_REQUEST_HEADERS=" \
224
+ "\"#{single_line_request_headers}\"\n\n" \
225
+ "Please check https://github.com/appsignal/appsignal-ruby/pull/406 " \
226
+ "for more information on this change."
227
+ end
228
+
191
229
  def config_file
192
230
  @config_file ||=
193
231
  root_path.nil? ? nil : File.join(root_path, "config", "appsignal.yml")
@@ -244,7 +282,7 @@ module Appsignal
244
282
  %w[APPSIGNAL_PUSH_API_KEY APPSIGNAL_APP_NAME APPSIGNAL_PUSH_API_ENDPOINT
245
283
  APPSIGNAL_FRONTEND_ERROR_CATCHING_PATH APPSIGNAL_HTTP_PROXY
246
284
  APPSIGNAL_LOG APPSIGNAL_LOG_PATH APPSIGNAL_WORKING_DIR_PATH
247
- APPSIGNAL_HOSTNAME APPSIGNAL_CA_FILE_PATH].each do |var|
285
+ APPSIGNAL_HOSTNAME APPSIGNAL_CA_FILE_PATH APP_REVISION].each do |var|
248
286
  env_var = ENV[var]
249
287
  next unless env_var
250
288
  config[ENV_TO_KEY_MAPPING[var]] = env_var
@@ -265,7 +303,8 @@ module Appsignal
265
303
 
266
304
  # Configuration with array of strings type
267
305
  %w[APPSIGNAL_IGNORE_ACTIONS APPSIGNAL_IGNORE_ERRORS
268
- APPSIGNAL_IGNORE_NAMESPACES APPSIGNAL_FILTER_PARAMETERS].each do |var|
306
+ APPSIGNAL_IGNORE_NAMESPACES APPSIGNAL_FILTER_PARAMETERS
307
+ APPSIGNAL_FILTER_SESSION_DATA APPSIGNAL_REQUEST_HEADERS].each do |var|
269
308
  env_var = ENV[var]
270
309
  next unless env_var
271
310
  config[ENV_TO_KEY_MAPPING[var]] = env_var.split(",")
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "rack/mock"
2
4
 
3
5
  module Appsignal
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  # Keeps track of formatters for types event that we can use to get
3
5
  # the title and body of an event. Formatters should inherit from this class
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class EventFormatter
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class EventFormatter
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class EventFormatter
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class EventFormatter
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class EventFormatter
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class EventFormatter
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class EventFormatter
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "yaml"
2
4
 
3
5
  begin
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "ffi"
2
4
 
3
5
  module Appsignal
@@ -61,7 +63,7 @@ module Appsignal
61
63
 
62
64
  # Metrics methods
63
65
  attach_function :appsignal_set_gauge,
64
- [:appsignal_string, :double],
66
+ [:appsignal_string, :double, :pointer],
65
67
  :void
66
68
  attach_function :appsignal_set_host_gauge,
67
69
  [:appsignal_string, :double],
@@ -70,10 +72,10 @@ module Appsignal
70
72
  [:appsignal_string, :double],
71
73
  :void
72
74
  attach_function :appsignal_increment_counter,
73
- [:appsignal_string, :int64],
75
+ [:appsignal_string, :int64, :pointer],
74
76
  :void
75
77
  attach_function :appsignal_add_distribution_value,
76
- [:appsignal_string, :double],
78
+ [:appsignal_string, :double, :pointer],
77
79
  :void
78
80
 
79
81
  # Transaction methods
@@ -222,8 +224,8 @@ module Appsignal
222
224
  appsignal_running_in_container
223
225
  end
224
226
 
225
- def set_gauge(key, value)
226
- appsignal_set_gauge(make_appsignal_string(key), value)
227
+ def set_gauge(key, value, tags)
228
+ appsignal_set_gauge(make_appsignal_string(key), value, tags.pointer)
227
229
  end
228
230
 
229
231
  def set_host_gauge(key, value)
@@ -234,12 +236,12 @@ module Appsignal
234
236
  appsignal_set_process_gauge(make_appsignal_string(key), value)
235
237
  end
236
238
 
237
- def increment_counter(key, value)
238
- appsignal_increment_counter(make_appsignal_string(key), value)
239
+ def increment_counter(key, value, tags)
240
+ appsignal_increment_counter(make_appsignal_string(key), value, tags.pointer)
239
241
  end
240
242
 
241
- def add_distribution_value(key, value)
242
- appsignal_add_distribution_value(make_appsignal_string(key), value)
243
+ def add_distribution_value(key, value, tags)
244
+ appsignal_add_distribution_value(make_appsignal_string(key), value, tags.pointer)
243
245
  end
244
246
 
245
247
  class Transaction # rubocop:disable Metrics/ClassLength
@@ -314,14 +316,14 @@ module Appsignal
314
316
  )
315
317
  end
316
318
 
317
- def set_action(action_name) # rubocop:disable Style/AccessorMethodName
319
+ def set_action(action_name) # rubocop:disable Naming/AccessorMethodName
318
320
  Extension.appsignal_set_transaction_action(
319
321
  pointer,
320
322
  make_appsignal_string(action_name)
321
323
  )
322
324
  end
323
325
 
324
- def set_namespace(namespace) # rubocop:disable Style/AccessorMethodName
326
+ def set_namespace(namespace) # rubocop:disable Naming/AccessorMethodName
325
327
  Extension.appsignal_set_transaction_namespace(
326
328
  pointer,
327
329
  make_appsignal_string(namespace)
@@ -336,7 +338,7 @@ module Appsignal
336
338
  )
337
339
  end
338
340
 
339
- def set_queue_start(time) # rubocop:disable Style/AccessorMethodName
341
+ def set_queue_start(time) # rubocop:disable Naming/AccessorMethodName
340
342
  Extension.appsignal_set_transaction_queue_start(pointer, time)
341
343
  end
342
344
 
@@ -405,7 +407,7 @@ module Appsignal
405
407
  )
406
408
  end
407
409
 
408
- def set_nil(key) # rubocop:disable Style/AccessorMethodName
410
+ def set_nil(key) # rubocop:disable Naming/AccessorMethodName
409
411
  Extension.appsignal_data_map_set_null(
410
412
  pointer,
411
413
  make_appsignal_string(key)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  # {Appsignal::GarbageCollectionProfiler} wraps Ruby's `GC::Profiler` to be
3
5
  # able to track garbage collection time for multiple transactions, while
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  # @api private
3
5
  class Hooks
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "net/http"
2
4
 
3
5
  module Appsignal
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -11,8 +13,10 @@ module Appsignal
11
13
  }
12
14
 
13
15
  args = body.is_a?(Hash) ? body : { :params => body }
14
- options[:params] = Appsignal::Utils::ParamsSanitizer.sanitize args,
15
- :filter_parameters => Appsignal.config[:filter_parameters]
16
+ options[:params] = Appsignal::Utils::HashSanitizer.sanitize(
17
+ args,
18
+ Appsignal.config[:filter_parameters]
19
+ )
16
20
 
17
21
  if sqs_msg.attributes.key?("SentTimestamp")
18
22
  options[:queue_start] = Time.at(sqs_msg.attributes["SentTimestamp"].to_i / 1000)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "yaml"
2
4
 
3
5
  module Appsignal
@@ -69,9 +71,9 @@ module Appsignal
69
71
  end
70
72
 
71
73
  def filtered_arguments(job)
72
- Appsignal::Utils::ParamsSanitizer.sanitize(
74
+ Appsignal::Utils::HashSanitizer.sanitize(
73
75
  parse_arguments(job),
74
- :filter_parameters => Appsignal.config[:filter_parameters]
76
+ Appsignal.config[:filter_parameters]
75
77
  )
76
78
  end
77
79
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Appsignal
2
4
  class Hooks
3
5
  # @api private