airbrake-ruby 3.1.0 → 3.2.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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/airbrake-ruby.rb +197 -43
  3. data/lib/airbrake-ruby/config.rb +43 -11
  4. data/lib/airbrake-ruby/deploy_notifier.rb +47 -0
  5. data/lib/airbrake-ruby/filter_chain.rb +32 -50
  6. data/lib/airbrake-ruby/filters/git_repository_filter.rb +9 -1
  7. data/lib/airbrake-ruby/filters/sql_filter.rb +104 -0
  8. data/lib/airbrake-ruby/hash_keyable.rb +37 -0
  9. data/lib/airbrake-ruby/ignorable.rb +44 -0
  10. data/lib/airbrake-ruby/notice.rb +2 -22
  11. data/lib/airbrake-ruby/{notifier.rb → notice_notifier.rb} +66 -46
  12. data/lib/airbrake-ruby/performance_notifier.rb +161 -0
  13. data/lib/airbrake-ruby/stat.rb +56 -0
  14. data/lib/airbrake-ruby/tdigest.rb +393 -0
  15. data/lib/airbrake-ruby/time_truncate.rb +17 -0
  16. data/lib/airbrake-ruby/version.rb +1 -1
  17. data/spec/airbrake_spec.rb +57 -13
  18. data/spec/async_sender_spec.rb +0 -2
  19. data/spec/backtrace_spec.rb +0 -2
  20. data/spec/code_hunk_spec.rb +0 -2
  21. data/spec/config/validator_spec.rb +0 -2
  22. data/spec/config_spec.rb +16 -4
  23. data/spec/deploy_notifier_spec.rb +41 -0
  24. data/spec/file_cache.rb +0 -2
  25. data/spec/filter_chain_spec.rb +1 -7
  26. data/spec/filters/context_filter_spec.rb +0 -2
  27. data/spec/filters/dependency_filter_spec.rb +0 -2
  28. data/spec/filters/exception_attributes_filter_spec.rb +0 -2
  29. data/spec/filters/gem_root_filter_spec.rb +0 -2
  30. data/spec/filters/git_last_checkout_filter_spec.rb +0 -2
  31. data/spec/filters/git_repository_filter.rb +0 -2
  32. data/spec/filters/git_revision_filter_spec.rb +0 -2
  33. data/spec/filters/keys_blacklist_spec.rb +0 -2
  34. data/spec/filters/keys_whitelist_spec.rb +0 -2
  35. data/spec/filters/root_directory_filter_spec.rb +0 -2
  36. data/spec/filters/sql_filter_spec.rb +219 -0
  37. data/spec/filters/system_exit_filter_spec.rb +0 -2
  38. data/spec/filters/thread_filter_spec.rb +0 -2
  39. data/spec/ignorable_spec.rb +14 -0
  40. data/spec/nested_exception_spec.rb +0 -2
  41. data/spec/{notifier_spec.rb → notice_notifier_spec.rb} +24 -114
  42. data/spec/{notifier_spec → notice_notifier_spec}/options_spec.rb +40 -39
  43. data/spec/notice_spec.rb +2 -4
  44. data/spec/performance_notifier_spec.rb +287 -0
  45. data/spec/promise_spec.rb +0 -2
  46. data/spec/response_spec.rb +0 -2
  47. data/spec/stat_spec.rb +35 -0
  48. data/spec/sync_sender_spec.rb +0 -2
  49. data/spec/tdigest_spec.rb +230 -0
  50. data/spec/time_truncate_spec.rb +13 -0
  51. data/spec/truncator_spec.rb +0 -2
  52. metadata +34 -15
  53. data/lib/airbrake-ruby/route_sender.rb +0 -175
  54. data/spec/route_sender_spec.rb +0 -130
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ef793e3a5a123860495003999ff322f5272a0eb1
4
- data.tar.gz: 8d7e363516e3db624ca4944b4857e1e53038faa5
3
+ metadata.gz: d9434113b46be898d421f70cba2eb683fc5fdc1a
4
+ data.tar.gz: d9f06c9d709dbc0c11c5210d52b7f2d3ca030e27
5
5
  SHA512:
6
- metadata.gz: f33dab2de0022cd34ee28b3d08746e5136f577af9148fcbbdfb5cf08dbde0f6224e122e8a371b6b145d131fe39d5bcd5fb99bc7a98cdbaef59d5b131c27f2666
7
- data.tar.gz: 8119742353a0f1596cff32c453f100d4c3af846bde52183875fc00dadee96ae93d648dce2480d1ae7b6752ca78a92d62e441dbeb4082ced542cc32d2c795943c
6
+ metadata.gz: 10d9a2fef303a9b785e33ee7300c2b26773edb4f617ffede7fbf3b0185ca2bed955d4f865db344079a15b1bb83f7cc8306f866250bcb7c68b4d7201db7762a68
7
+ data.tar.gz: d1a63fa071431c4333c657d8843bebb684919d68983b5abf476e6a3208cc18894a272a6a64a7adf9520e9ee01eca87b25f2d7cc0f0837464b280018a1cd44213
data/lib/airbrake-ruby.rb CHANGED
@@ -14,6 +14,7 @@ require 'airbrake-ruby/sync_sender'
14
14
  require 'airbrake-ruby/async_sender'
15
15
  require 'airbrake-ruby/response'
16
16
  require 'airbrake-ruby/nested_exception'
17
+ require 'airbrake-ruby/ignorable'
17
18
  require 'airbrake-ruby/notice'
18
19
  require 'airbrake-ruby/backtrace'
19
20
  require 'airbrake-ruby/truncator'
@@ -30,11 +31,17 @@ require 'airbrake-ruby/filters/dependency_filter'
30
31
  require 'airbrake-ruby/filters/git_revision_filter'
31
32
  require 'airbrake-ruby/filters/git_repository_filter'
32
33
  require 'airbrake-ruby/filters/git_last_checkout_filter'
34
+ require 'airbrake-ruby/filters/sql_filter'
33
35
  require 'airbrake-ruby/filter_chain'
34
- require 'airbrake-ruby/notifier'
35
36
  require 'airbrake-ruby/code_hunk'
36
37
  require 'airbrake-ruby/file_cache'
37
- require 'airbrake-ruby/route_sender'
38
+ require 'airbrake-ruby/hash_keyable'
39
+ require 'airbrake-ruby/performance_notifier'
40
+ require 'airbrake-ruby/notice_notifier'
41
+ require 'airbrake-ruby/deploy_notifier'
42
+ require 'airbrake-ruby/stat'
43
+ require 'airbrake-ruby/time_truncate'
44
+ require 'airbrake-ruby/tdigest'
38
45
 
39
46
  # This module defines the Airbrake API. The user is meant to interact with
40
47
  # Airbrake via its public class methods. Before using the library, you must to
@@ -67,7 +74,7 @@ require 'airbrake-ruby/route_sender'
67
74
  # params = {}
68
75
  # Airbrake[:my_other_project].notify('Oops', params)
69
76
  #
70
- # @see Airbrake::Notifier
77
+ # @see Airbrake::NoticeNotifier
71
78
  # @since v1.0.0
72
79
  module Airbrake
73
80
  # The general error that this library uses when it wants to raise.
@@ -83,11 +90,12 @@ module Airbrake
83
90
  # @!macro see_public_api_method
84
91
  # @see Airbrake.$0
85
92
 
86
- # NilNotifier is a no-op notifier, which mimics +Airbrake::Notifier+ and
87
- # serves only for the purpose of making the library API easier to use.
93
+ # NilNoticeNotifier is a no-op notice notifier, which mimics
94
+ # +Airbrake::NoticeNotifier+ and serves only the purpose of making the library
95
+ # API easier to use.
88
96
  #
89
- # @since 2.1.0
90
- class NilNotifier
97
+ # @since v2.1.0
98
+ class NilNoticeNotifier
91
99
  # @macro see_public_api_method
92
100
  def notify(_exception, _params = {}, &block); end
93
101
 
@@ -106,9 +114,6 @@ module Airbrake
106
114
  # @macro see_public_api_method
107
115
  def close; end
108
116
 
109
- # @macro see_public_api_method
110
- def create_deploy(_deploy_params); end
111
-
112
117
  # @macro see_public_api_method
113
118
  def configured?
114
119
  false
@@ -116,15 +121,61 @@ module Airbrake
116
121
 
117
122
  # @macro see_public_api_method
118
123
  def merge_context(_context); end
124
+ end
119
125
 
120
- # @macro see_public_api_method
121
- def notify_request(_request_info); end
126
+ # @deprecated Use {Airbrake::NoticeNotifier} instead
127
+ Notifier = NoticeNotifier
128
+ deprecate_constant(:Notifier) if respond_to?(:deprecate_constant)
129
+
130
+ # @deprecated Use {Airbrake::NilNoticeNotifier} instead
131
+ NilNotifier = NilNoticeNotifier
132
+ deprecate_constant(:NilNotifier) if respond_to?(:deprecate_constant)
133
+
134
+ # NilPerformanceNotifier is a no-op notifier, which mimics
135
+ # {Airbrake::PerformanceNotifier} and serves only the purpose of making the
136
+ # library API easier to use.
137
+ #
138
+ # @since v3.2.0
139
+ class NilPerformanceNotifier
140
+ # @see Airbrake.notify_request
141
+ # @see Airbrake.notify_query
142
+ def notify(_performance_info); end
143
+
144
+ # @see Airbrake.notify_request
145
+ # @see Airbrake.notify_query
146
+ def add_filter(_filter = nil, &_block); end
147
+
148
+ # @see Airbrake.notify_request
149
+ # @see Airbrake.notify_query
150
+ def delete_filter(_filter_class); end
151
+ end
152
+
153
+ # NilDeployNotifier is a no-op notifier, which mimics
154
+ # {Airbrake::DeployNotifier} and serves only the purpose of making the library
155
+ # API easier to use.
156
+ #
157
+ # @since v3.2.0
158
+ class NilDeployNotifier
159
+ # @see Airbrake.create_deploy
160
+ def notify(_deploy_info); end
122
161
  end
123
162
 
124
- # A Hash that holds all notifiers. The keys of the Hash are notifier
125
- # names, the values are Airbrake::Notifier instances. If a notifier is not
126
- # assigned to the hash, then it returns a null object (NilNotifier).
127
- @notifiers = Hash.new(NilNotifier.new)
163
+ # A Hash that holds all notice notifiers. The keys of the Hash are notifier
164
+ # names, the values are {Airbrake::NoticeNotifier} instances. If a notifier is
165
+ # not assigned to the hash, then it returns a null object (NilNoticeNotifier).
166
+ @notice_notifiers = Hash.new(NilNoticeNotifier.new)
167
+
168
+ # A Hash that holds all performance notifiers. The keys of the Hash are
169
+ # notifier names, the values are {Airbrake::PerformanceNotifier} instances. If
170
+ # a notifier is not assigned to the hash, then it returns a null object
171
+ # (NilPerformanceNotifier).
172
+ @performance_notifiers = Hash.new(NilPerformanceNotifier.new)
173
+
174
+ # A Hash that holds all deploy notifiers. The keys of the Hash are notifier
175
+ # names, the values are {Airbrake::DeployNotifier} instances. If a deploy
176
+ # notifier is not assigned to the hash, then it returns a null object
177
+ # (NilDeployNotifier).
178
+ @deploy_notifiers = Hash.new(NilDeployNotifier.new)
128
179
 
129
180
  class << self
130
181
  # Retrieves configured notifiers.
@@ -132,11 +183,23 @@ module Airbrake
132
183
  # @example
133
184
  # Airbrake[:my_notifier].notify('oops')
134
185
  #
135
- # @param [Symbol] notifier_name the name of the notifier you want to use
136
- # @return [Airbrake::Notifier, NilClass]
186
+ # @param [Symbol] notifier_name the name of the notice notifier you want to
187
+ # use
188
+ # @return [Airbrake::NoticeNotifier, NilClass]
137
189
  # @since v1.8.0
138
190
  def [](notifier_name)
139
- @notifiers[notifier_name]
191
+ @notice_notifiers[notifier_name]
192
+ end
193
+
194
+ # @return [Hash{Symbol=>Array<Object>}] a Hash with all configured notifiers
195
+ # (notice, performance, deploy)
196
+ # @since v3.2.0
197
+ def notifiers
198
+ {
199
+ notice: @notice_notifiers,
200
+ performance: @performance_notifiers,
201
+ deploy: @deploy_notifiers
202
+ }
140
203
  end
141
204
 
142
205
  # Configures a new +notifier+ with the given name. If the name is not given,
@@ -162,23 +225,29 @@ module Airbrake
162
225
  # @return [void]
163
226
  # @raise [Airbrake::Error] when trying to reconfigure already
164
227
  # existing notifier
228
+ # @raise [Airbrake::Error] when either +project_id+ or +project_key+
229
+ # is missing (or both)
165
230
  # @note There's no way to reconfigure a notifier
166
231
  # @note There's no way to read config values outside of this library
167
232
  def configure(notifier_name = :default)
168
233
  yield config = Airbrake::Config.new
169
234
 
170
- if @notifiers.key?(notifier_name)
235
+ if @notice_notifiers.key?(notifier_name)
171
236
  raise Airbrake::Error,
172
237
  "the '#{notifier_name}' notifier was already configured"
173
- else
174
- @notifiers[notifier_name] = Notifier.new(config)
175
238
  end
239
+
240
+ raise Airbrake::Error, config.validation_error_message unless config.valid?
241
+
242
+ @notice_notifiers[notifier_name] = NoticeNotifier.new(config)
243
+ @performance_notifiers[notifier_name] = PerformanceNotifier.new(config)
244
+ @deploy_notifiers[notifier_name] = DeployNotifier.new(config)
176
245
  end
177
246
 
178
247
  # @return [Boolean] true if the notifier was configured, false otherwise
179
- # @since 2.3.0
248
+ # @since v2.3.0
180
249
  def configured?
181
- @notifiers[:default].configured?
250
+ @notice_notifiers[:default].configured?
182
251
  end
183
252
 
184
253
  # Sends an exception to Airbrake asynchronously.
@@ -203,7 +272,7 @@ module Airbrake
203
272
  # @return [Airbrake::Promise]
204
273
  # @see .notify_sync
205
274
  def notify(exception, params = {}, &block)
206
- @notifiers[:default].notify(exception, params, &block)
275
+ @notice_notifiers[:default].notify(exception, params, &block)
207
276
  end
208
277
 
209
278
  # Sends an exception to Airbrake synchronously.
@@ -223,7 +292,7 @@ module Airbrake
223
292
  # @return [Hash{String=>String}] the reponse from the server
224
293
  # @see .notify
225
294
  def notify_sync(exception, params = {}, &block)
226
- @notifiers[:default].notify_sync(exception, params, &block)
295
+ @notice_notifiers[:default].notify_sync(exception, params, &block)
227
296
  end
228
297
 
229
298
  # Runs a callback before {.notify} or {.notify_sync} kicks in. This is
@@ -251,7 +320,7 @@ module Airbrake
251
320
  # @yieldreturn [void]
252
321
  # @return [void]
253
322
  def add_filter(filter = nil, &block)
254
- @notifiers[:default].add_filter(filter, &block)
323
+ @notice_notifiers[:default].add_filter(filter, &block)
255
324
  end
256
325
 
257
326
  # Deletes a filter added via {Airbrake#add_filter}.
@@ -268,7 +337,7 @@ module Airbrake
268
337
  # @since v3.1.0
269
338
  # @note This method cannot delete filters assigned via the Proc form.
270
339
  def delete_filter(filter_class)
271
- @notifiers[:default].delete_filter(filter_class)
340
+ @notice_notifiers[:default].delete_filter(filter_class)
272
341
  end
273
342
 
274
343
  # Builds an Airbrake notice. This is useful, if you want to add or modify a
@@ -286,12 +355,12 @@ module Airbrake
286
355
  # @return [Airbrake::Notice] the notice built with help of the given
287
356
  # arguments
288
357
  def build_notice(exception, params = {})
289
- @notifiers[:default].build_notice(exception, params)
358
+ @notice_notifiers[:default].build_notice(exception, params)
290
359
  end
291
360
 
292
- # Makes the notifier a no-op, which means you cannot use the {.notify} and
293
- # {.notify_sync} methods anymore. It also stops the notifier's worker
294
- # threads.
361
+ # Makes the notice notifier a no-op, which means you cannot use the
362
+ # {.notify} and {.notify_sync} methods anymore. It also stops the notice
363
+ # notifier's worker threads.
295
364
  #
296
365
  # @example
297
366
  # Airbrake.close
@@ -299,21 +368,21 @@ module Airbrake
299
368
  #
300
369
  # @return [void]
301
370
  def close
302
- @notifiers[:default].close
371
+ @notice_notifiers[:default].close
303
372
  end
304
373
 
305
374
  # Pings the Airbrake Deploy API endpoint about the occurred deploy. This
306
375
  # method is used by the airbrake gem for various integrations.
307
376
  #
308
- # @param [Hash{Symbol=>String}] deploy_params The params for the API
309
- # @option deploy_params [Symbol] :environment
310
- # @option deploy_params [Symbol] :username
311
- # @option deploy_params [Symbol] :repository
312
- # @option deploy_params [Symbol] :revision
313
- # @option deploy_params [Symbol] :version
377
+ # @param [Hash{Symbol=>String}] deploy_info The params for the API
378
+ # @option deploy_info [Symbol] :environment
379
+ # @option deploy_info [Symbol] :username
380
+ # @option deploy_info [Symbol] :repository
381
+ # @option deploy_info [Symbol] :revision
382
+ # @option deploy_info [Symbol] :version
314
383
  # @return [void]
315
- def create_deploy(deploy_params)
316
- @notifiers[:default].create_deploy(deploy_params)
384
+ def create_deploy(deploy_info)
385
+ @deploy_notifiers[:default].notify(deploy_info)
317
386
  end
318
387
 
319
388
  # Merges +context+ with the current context.
@@ -361,7 +430,7 @@ module Airbrake
361
430
  # @param [Hash{Symbol=>Object}] context
362
431
  # @return [void]
363
432
  def merge_context(context)
364
- @notifiers[:default].merge_context(context)
433
+ @notice_notifiers[:default].merge_context(context)
365
434
  end
366
435
 
367
436
  # Increments request statistics of a certain +route+ that was invoked on
@@ -388,8 +457,93 @@ module Airbrake
388
457
  # @option request_info [Time] :end_time When the request ended (optional)
389
458
  # @return [void]
390
459
  # @since v3.0.0
460
+ # @see Airbrake::PerformanceNotifier#notify
391
461
  def notify_request(request_info)
392
- @notifiers[:default].notify_request(request_info)
462
+ @performance_notifiers[:default].notify(Request.new(request_info))
463
+ end
464
+
465
+ # Increments SQL statistics of a certain +query+ that was invoked on
466
+ # +start_time+ and finished on +end_time+. When +method+ and +route+ are
467
+ # provided, the query is grouped by these parameters.
468
+ #
469
+ # After a certain amount of time (n seconds) the aggregated query
470
+ # information will be sent to Airbrake.
471
+ #
472
+ # @example
473
+ # Airbrake.notify_query(
474
+ # method: 'GET',
475
+ # route: '/things',
476
+ # query: 'SELECT * FROM things',
477
+ # start_time: timestamp,
478
+ # end_time: Time.now
479
+ # )
480
+ #
481
+ # @param [Hash{Symbol=>Object}] query_info
482
+ # @option request_info [String] :method The HTTP method that triggered this
483
+ # SQL query (optional)
484
+ # @option request_info [String] :route The route that triggered this SQL
485
+ # query (optional)
486
+ # @option request_info [String] :query The query that was executed
487
+ # @option request_info [Date] :start_time When the query started executing
488
+ # @option request_info [Time] :end_time When the query finished (optional)
489
+ # @return [void]
490
+ # @since v3.2.0
491
+ # @see Airbrake::PerformanceNotifier#notify
492
+ def notify_query(query_info)
493
+ @performance_notifiers[:default].notify(Query.new(query_info))
494
+ end
495
+
496
+ # Runs a callback before {.notify_request} or {.notify_query} kicks in. This
497
+ # is useful if you want to ignore specific resources or filter the data the
498
+ # resource contains.
499
+ #
500
+ # @example Ignore all resources
501
+ # Airbrake.add_performance_filter(&:ignore!)
502
+ # @example Filter sensitive data
503
+ # Airbrake.add_performance_filter do |resource|
504
+ # case resource
505
+ # when Airbrake::Query
506
+ # resource.route = '[Filtered]'
507
+ # when Airbrake::Request
508
+ # resource.query = '[Filtered]'
509
+ # end
510
+ # end
511
+ # @example Filter with help of a class
512
+ # class MyFilter
513
+ # def call(resource)
514
+ # # ...
515
+ # end
516
+ # end
517
+ #
518
+ # Airbrake.add_performance_filter(MyFilter.new)
519
+ #
520
+ # @param [#call] filter The filter object
521
+ # @yield [resource] The resource to filter
522
+ # @yieldparam [Airbrake::Query, Airbrake::Request]
523
+ # @yieldreturn [void]
524
+ # @return [void]
525
+ # @since v3.2.0
526
+ # @see Airbrake::PerformanceNotifier#add_filter
527
+ def add_performance_filter(filter = nil, &block)
528
+ @performance_notifiers[:default].add_filter(filter, &block)
529
+ end
530
+
531
+ # Deletes a filter added via {Airbrake#add_performance_filter}.
532
+ #
533
+ # @example
534
+ # # Add a MyFilter filter (we pass an instance here).
535
+ # Airbrake.add_performance_filter(MyFilter.new)
536
+ #
537
+ # # Delete the filter (we pass class name here).
538
+ # Airbrake.delete_performance_filter(MyFilter)
539
+ #
540
+ # @param [Class] filter_class The class of the filter you want to delete
541
+ # @return [void]
542
+ # @since v3.2.0
543
+ # @note This method cannot delete filters assigned via the Proc form.
544
+ # @see Airbrake::PerformanceNotifier#delete_filter
545
+ def delete_performance_filter(filter_class)
546
+ @performance_notifiers[:default].delete_filter(filter_class)
393
547
  end
394
548
  end
395
549
  end
@@ -2,7 +2,7 @@ module Airbrake
2
2
  # Represents the Airbrake config. A config contains all the options that you
3
3
  # can use to configure an Airbrake instance.
4
4
  #
5
- # @api private
5
+ # @api public
6
6
  # @since v1.0.0
7
7
  class Config
8
8
  # @return [Integer] the project identificator. This value *must* be set.
@@ -68,13 +68,13 @@ module Airbrake
68
68
  # @return [Array<String, Symbol, Regexp>] the keys, which should be
69
69
  # filtered
70
70
  # @api public
71
- # @since 1.2.0
71
+ # @since v1.2.0
72
72
  attr_accessor :blacklist_keys
73
73
 
74
74
  # @return [Array<String, Symbol, Regexp>] the keys, which shouldn't be
75
75
  # filtered
76
76
  # @api public
77
- # @since 1.2.0
77
+ # @since v1.2.0
78
78
  attr_accessor :whitelist_keys
79
79
 
80
80
  # @return [Boolean] true if the library should attach code hunks to each
@@ -83,17 +83,17 @@ module Airbrake
83
83
  # @since v2.5.0
84
84
  attr_accessor :code_hunks
85
85
 
86
- # @return [Boolean] true if the library should send route stats information
87
- # to Airbrake, false otherwise
86
+ # @return [Boolean] true if the library should send performance stats
87
+ # information to Airbrake (routes, SQL queries), false otherwise
88
88
  # @api public
89
- # @since v3.0.0
90
- attr_accessor :route_stats
89
+ # @since v3.2.0
90
+ attr_accessor :performance_stats
91
91
 
92
92
  # @return [Integer] how many seconds to wait before sending collected route
93
93
  # stats
94
94
  # @api public
95
- # @since v3.0.0
96
- attr_accessor :route_stats_flush_period
95
+ # @since v3.2.0
96
+ attr_accessor :performance_stats_flush_period
97
97
 
98
98
  # @param [Hash{Symbol=>Object}] user_config the hash to be used to build the
99
99
  # config
@@ -126,8 +126,8 @@ module Airbrake
126
126
  )
127
127
 
128
128
  self.versions = {}
129
- self.route_stats = false
130
- self.route_stats_flush_period = 15
129
+ self.performance_stats = false
130
+ self.performance_stats_flush_period = 15
131
131
 
132
132
  merge(user_config)
133
133
  end
@@ -195,6 +195,38 @@ module Airbrake
195
195
  end
196
196
  end
197
197
 
198
+ def route_stats
199
+ logger.warn(
200
+ "#{LOG_LABEL} the 'route_stats' option is deprecated. " \
201
+ "Use 'performance_stats' instead"
202
+ )
203
+ @performance_stats
204
+ end
205
+
206
+ def route_stats=(value)
207
+ logger.warn(
208
+ "#{LOG_LABEL} the 'route_stats' option is deprecated. " \
209
+ "Use 'performance_stats_flush_period' instead"
210
+ )
211
+ @performance_stats = value
212
+ end
213
+
214
+ def route_stats_flush_period
215
+ logger.warn(
216
+ "#{LOG_LABEL} the 'route_stats_flush_period' option is deprecated. " \
217
+ "Use 'performance_stats_flush_period' instead"
218
+ )
219
+ @performance_stats_flush_period
220
+ end
221
+
222
+ def route_stats_flush_period=(value)
223
+ logger.warn(
224
+ "#{LOG_LABEL} the 'route_stats_flush_period' option is deprecated. " \
225
+ "Use 'performance_stats' instead"
226
+ )
227
+ @performance_stats_flush_period = value
228
+ end
229
+
198
230
  private
199
231
 
200
232
  def set_option(option, value)