deprecation_collector 0.0.4 → 0.0.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2342f445e6c89ba4ea74094dd39894d99ad6e546781405fe43a6ecba71396264
4
- data.tar.gz: d5d6edaa942f57a726f9336a06541dabc3eadae2731d01953443a88d84fc7c2e
3
+ metadata.gz: 6f45c8742c0a83f697b04d7a99af54749b354c25cfcffb78f152a680f8224584
4
+ data.tar.gz: ab25a06b38f3ebfe82a48136c8a58da8d61e4db93614af0c66e283771f0b61b7
5
5
  SHA512:
6
- metadata.gz: 9ac2e881d1687dc3756904840f21f98cc62dc497cac31804fcfeac8e4e01c780b5370497ed52da2d1ec22ca14a68ee3be4dc163c5d48cd47c38b775ef0df7b1c
7
- data.tar.gz: 5725ea9137d79a83ea8d1df1ae9b458fe0f94479d5e7c9643ac15368ef853f75fac38cce3b7e8543fd4d03df884fa3999019d08902ba437a196f6b5b3c78dd06
6
+ metadata.gz: d395dc4cedb786ab398911e5de19568f44317040352f1b85a6fc45a45fce465d6c82b8092c2f74e0a6b1d18e4dedfbc3284d59767dad2f3a2202143acd969b81
7
+ data.tar.gz: 0f9a6cd6f02b9b674710db839fcce21f69a2af31a41cc552ad3266b7cd1c3eaa21dac1ac7f94f0208833536e29c20d70e0261e6b087bc548597035c45bc47799
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ == 0.0.5 (unreleased)
2
+ - options `print_to_stderr`, `print_recurring`
3
+ - fix redis deprecated `pipelined` block arity (support for redis 5)
4
+
1
5
  == 0.0.4
2
6
  - added first_timestamp to deprecations (unix timestamp of first occurrence, not accurate because a worker with later timestamp may dump its deprecations earlier)
3
7
 
data/Gemfile CHANGED
@@ -18,3 +18,5 @@ gem "rubocop-rspec"
18
18
 
19
19
  # TODO: appraisals
20
20
  gem "rails", "6.0"
21
+
22
+ gem 'redis', '~>4.8'
data/Gemfile.lock CHANGED
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- deprecation_collector (0.0.4)
5
- redis (>= 2.0)
4
+ deprecation_collector (0.0.5)
5
+ redis (>= 3.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
@@ -84,8 +84,12 @@ GEM
84
84
  nokogiri (~> 1)
85
85
  rake
86
86
  mini_mime (1.1.2)
87
+ mini_portile2 (2.8.0)
87
88
  minitest (5.15.0)
88
89
  nio4r (2.5.8)
90
+ nokogiri (1.13.6)
91
+ mini_portile2 (~> 2.8.0)
92
+ racc (~> 1.4)
89
93
  nokogiri (1.13.6-x86_64-darwin)
90
94
  racc (~> 1.4)
91
95
  parallel (1.22.1)
@@ -123,7 +127,7 @@ GEM
123
127
  thor (>= 0.20.3, < 2.0)
124
128
  rainbow (3.1.1)
125
129
  rake (13.0.6)
126
- redis (4.7.1)
130
+ redis (4.8.0)
127
131
  regexp_parser (2.5.0)
128
132
  rexml (3.2.5)
129
133
  rspec (3.11.0)
@@ -181,12 +185,14 @@ GEM
181
185
  zeitwerk (2.5.4)
182
186
 
183
187
  PLATFORMS
188
+ ruby
184
189
  x86_64-darwin-21
185
190
 
186
191
  DEPENDENCIES
187
192
  deprecation_collector!
188
193
  rails (= 6.0)
189
194
  rake (~> 13.0)
195
+ redis (~> 4.8)
190
196
  rspec (~> 3.0)
191
197
  rubocop (~> 1.21)
192
198
  rubocop-performance
data/README.md CHANGED
@@ -28,6 +28,8 @@ Add an initializer with configuration, like
28
28
  instance.raise_on_deprecation = false
29
29
  instance.write_interval = (::Rails.env.production? && 15.minutes) || 1.minute
30
30
  instance.exclude_realms = %i[kernel] if Rails.env.production?
31
+ instance.print_to_stderr = true if Rails.env.development?
32
+ instance.print_recurring = false
31
33
  instance.ignored_messages = [
32
34
  "Ignoring db/schema_cache.yml because it has expired"
33
35
  ]
@@ -27,5 +27,5 @@ Gem::Specification.new do |spec|
27
27
  end
28
28
  spec.require_paths = ["lib"]
29
29
 
30
- spec.add_dependency "redis", ">= 2.0" # TODO: check exact minimum version
30
+ spec.add_dependency "redis", ">= 3.0"
31
31
  end
@@ -54,7 +54,7 @@ class DeprecationCollector
54
54
  end
55
55
 
56
56
  def digest_base
57
- "1:#{RUBY_VERSION}:#{Rails.version}:#{message_for_digest}:#{gem_traceline}:#{app_traceline}"
57
+ "1:#{RUBY_VERSION}:#{defined?(Rails) && Rails.version}:#{message_for_digest}:#{gem_traceline}:#{app_traceline}"
58
58
  end
59
59
 
60
60
  def as_json(_options = {})
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class DeprecationCollector
4
- VERSION = "0.0.4"
4
+ VERSION = "0.0.5"
5
5
  end
@@ -54,7 +54,8 @@ class DeprecationCollector
54
54
  attr_accessor :count, :raise_on_deprecation, :save_full_backtrace,
55
55
  :exclude_realms,
56
56
  :write_interval, :write_interval_jitter,
57
- :app_revision, :app_root
57
+ :app_revision, :app_root,
58
+ :print_to_stderr, :print_recurring
58
59
  attr_writer :redis
59
60
 
60
61
  def initialize(mutex: nil)
@@ -97,8 +98,8 @@ class DeprecationCollector
97
98
  raise "Deprecation: #{message}" if @raise_on_deprecation
98
99
 
99
100
  deprecation = Deprecation.new(message, realm, backtrace, cleanup_prefixes)
100
- store_deprecation(deprecation)
101
- log_deprecation_if_needed(deprecation)
101
+ fresh = store_deprecation(deprecation)
102
+ log_deprecation_if_needed(deprecation, fresh)
102
103
  end
103
104
 
104
105
  def unsent_data?
@@ -190,10 +191,10 @@ class DeprecationCollector
190
191
  def read_one(digest)
191
192
  decode_deprecation(
192
193
  digest,
193
- *@redis.pipelined do
194
- @redis.hget("deprecations:data", digest)
195
- @redis.hget("deprecations:counter", digest)
196
- @redis.hget("deprecations:notes", digest)
194
+ *@redis.pipelined do |pipe|
195
+ pipe.hget("deprecations:data", digest)
196
+ pipe.hget("deprecations:counter", digest)
197
+ pipe.hget("deprecations:notes", digest)
197
198
  end
198
199
  )
199
200
  end
@@ -201,10 +202,10 @@ class DeprecationCollector
201
202
  def delete_deprecations(remove_digests)
202
203
  return 0 unless remove_digests.any?
203
204
 
204
- @redis.pipelined do
205
- @redis.hdel("deprecations:data", *remove_digests)
206
- @redis.hdel("deprecations:notes", *remove_digests)
207
- @redis.hdel("deprecations:counter", *remove_digests) if @count
205
+ @redis.pipelined do |pipe|
206
+ pipe.hdel("deprecations:data", *remove_digests)
207
+ pipe.hdel("deprecations:notes", *remove_digests)
208
+ pipe.hdel("deprecations:counter", *remove_digests) if @count
208
209
  end.first
209
210
  end
210
211
 
@@ -226,18 +227,22 @@ class DeprecationCollector
226
227
 
227
228
  def store_deprecation(deprecation)
228
229
  return if deprecation.ignored?
230
+ fresh = !@deprecations.key?(deprecation.digest)
229
231
 
230
232
  @deprecations_mutex.synchronize do
231
233
  (@deprecations[deprecation.digest] ||= deprecation).touch
232
234
  end
233
235
 
234
236
  write_to_redis if current_time - @last_write_time > (@write_interval + rand(@write_interval_jitter))
237
+ fresh
235
238
  end
236
239
 
237
- def log_deprecation_if_needed(deprecation)
238
- return unless defined?(Rails) && Rails.env.development? && !deprecation.ignored?
239
-
240
- $stderr.puts(deprecation.message) # rubocop:disable Style/StderrPuts
240
+ def log_deprecation_if_needed(deprecation, fresh)
241
+ return unless print_to_stderr && !deprecation.ignored?
242
+ return unless fresh || print_recurring
243
+ msg = deprecation.message
244
+ msg = "DEPRECATION: #{msg}" unless msg.start_with?('DEPRECAT')
245
+ $stderr.puts(msg) # rubocop:disable Style/StderrPuts
241
246
  end
242
247
 
243
248
  def current_time
@@ -247,7 +252,12 @@ class DeprecationCollector
247
252
  end
248
253
 
249
254
  def decode_deprecation(digest, data, count, notes)
255
+ return nil unless data
250
256
  data = JSON.parse(data, symbolize_names: true)
257
+ unless data.is_a?(Hash)
258
+ binding.irb
259
+ return nil
260
+ end
251
261
  data[:digest] = digest
252
262
  data[:notes] = JSON.parse(notes, symbolize_names: true) if notes
253
263
  data[:count] = count.to_i if count
@@ -255,9 +265,9 @@ class DeprecationCollector
255
265
  end
256
266
 
257
267
  def write_count_to_redis(deprecations_to_flush)
258
- @redis.pipelined do
268
+ @redis.pipelined do |pipe|
259
269
  deprecations_to_flush.each_pair do |digest, deprecation|
260
- @redis.hincrby("deprecations:counter", digest, deprecation.occurences)
270
+ pipe.hincrby("deprecations:counter", digest, deprecation.occurences)
261
271
  end
262
272
  end
263
273
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deprecation_collector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasily Fedoseyev
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-29 00:00:00.000000000 Z
11
+ date: 2022-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '3.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '3.0'
27
27
  description: Collects and aggregates warnings and deprecations. Optimized for production
28
28
  environment.
29
29
  email:
@@ -54,7 +54,7 @@ metadata:
54
54
  homepage_uri: https://github.com/Vasfed/deprecation_collector
55
55
  source_code_uri: https://github.com/Vasfed/deprecation_collector
56
56
  changelog_uri: https://github.com/Vasfed/deprecation_collector/blob/main/CHANGELOG.md
57
- post_install_message:
57
+ post_install_message:
58
58
  rdoc_options: []
59
59
  require_paths:
60
60
  - lib
@@ -70,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
70
  version: '0'
71
71
  requirements: []
72
72
  rubygems_version: 3.1.6
73
- signing_key:
73
+ signing_key:
74
74
  specification_version: 4
75
75
  summary: Collector for ruby/rails deprecations and warnings, suitable for production
76
76
  test_files: []