time_bandits 0.14.1 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3597bdf1515a72122e85b16fffdcedc74a22c479012fa0fb2f7c42f64e0434de
4
- data.tar.gz: a6acc865643fc97ce247b33fd55da8399323488435234d15d75766b26fc853c5
3
+ metadata.gz: 56bb0eb9adc75541319ab152fee15ca29bb60d92135a85e2dee0dc192334c03e
4
+ data.tar.gz: 51c3edf811d144bd2221d57994b1a53ccbbe92228a42252628037d1cae8b3113
5
5
  SHA512:
6
- metadata.gz: c1451d6f063d1fd7feb18dd66c0650f10bf8398f7407fd4f3f7a63bef57a4bf52846267e8bf82c4e7295e41f1d999b70a16aadd1a08d1fc44fc9f174e18e74a4
7
- data.tar.gz: cb1ff1654db60be898992d20a9b7b4825483033637147e94b8fc0192c2566ef096ce49f14b71f7ffd61a6524fa883030c78a69feb10eb90d012bca20321618a6
6
+ metadata.gz: 5a020882e44e5b0244b2a426b31cfa855b4aa4c4cb2fb3b7e0c2e9b7a9bf37eb4a4ccb86484b8e851e7902fe5afc4e3a6a7f2803a47de0d5b286055ba5db3edc
7
+ data.tar.gz: e74877201e8880fd4eb0d5e52728badcb0dfd89b8b9429cde69dacae7ba5afcef4b3d82ea016f2c342139f3f6447e07f96b8c35b68e03195ff65bdabb8a90367
@@ -13,13 +13,13 @@ jobs:
13
13
 
14
14
  strategy:
15
15
  matrix:
16
- ruby-version: [3.2.2, 3.1.4, 3.0.6, 2.7.8]
16
+ ruby-version: [3.3.1, 3.2.4, 3.1.5, 3.0.7]
17
17
 
18
18
  steps:
19
- - uses: actions/checkout@v3
19
+ - uses: actions/checkout@v4
20
20
 
21
21
  - name: Start containers
22
- run: docker-compose -f docker-compose.yml up -d
22
+ run: docker compose -f docker-compose.yml up -d
23
23
 
24
24
  - name: Set up Ruby ${{ matrix.ruby-version }}
25
25
  uses: ruby/setup-ruby@v1
@@ -43,4 +43,4 @@ jobs:
43
43
 
44
44
  - name: Stop containers
45
45
  if: always()
46
- run: docker-compose -f "docker-compose.yml" down
46
+ run: docker compose -f "docker-compose.yml" down
data/Appraisals CHANGED
@@ -1,11 +1,12 @@
1
1
  appraisals = [
2
- "6.0.6.1",
3
- "6.1.7.6",
4
- "7.0.8",
5
- "7.1.0"
2
+ "6.1.7.8",
3
+ "7.0.8.4",
4
+ "7.1.3.4",
6
5
  ]
7
6
 
8
- appraisals.insert(0, "5.2.8.1") if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("3.0.0")
7
+ if RUBY_VERSION >= "3.1"
8
+ appraisals << "7.2.0.rc1"
9
+ end
9
10
 
10
11
  appraisals.each do |rails_version|
11
12
  %w(4.0 5.0).each do |redis_version|
data/Gemfile CHANGED
@@ -3,4 +3,18 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in time_bandits.gemspec
4
4
  gemspec
5
5
 
6
+ gem "ansi"
7
+ gem "appraisal"
8
+ gem "byebug"
9
+ gem "dalli"
10
+ gem "memcached", "~> 1.8.0" if RUBY_VERSION < "3.3.0"
11
+ gem "minitest"
12
+ gem "mocha"
13
+ gem "mysql2"
14
+ gem "rake"
15
+ gem "redis"
16
+ gem "sequel"
17
+ gem "activerecord"
18
+ gem "beetle", ">= 3.4.1"
19
+
6
20
  gem "hiredis-client"
@@ -1,29 +1,44 @@
1
1
  # This file monkey patches class ActiveRecord::RuntimeRegistry to
2
2
  # additionally store call counts and cache hits and subscribes an
3
- # event listener to manage those counters.
3
+ # event listener to manage those counters. It is used if the active
4
+ # record version is 7.1.0 or higher.
4
5
 
5
6
  require "active_record/runtime_registry"
6
7
 
7
8
  module ActiveRecord
8
9
  module RuntimeRegistry
9
10
 
10
- def self.call_count
11
- ActiveSupport::IsolatedExecutionState[:active_record_sql_call_count] ||= 0
12
- end
11
+ if respond_to?(:queries_count)
12
+ alias_method :call_count, :queries_count
13
+ alias_method :call_count=, :queries_count=
14
+ else
15
+ def self.call_count
16
+ ActiveSupport::IsolatedExecutionState[:active_record_sql_call_count] ||= 0
17
+ end
13
18
 
14
- def self.call_count=(value)
15
- ActiveSupport::IsolatedExecutionState[:active_record_sql_call_count] = value
19
+ def self.call_count=(value)
20
+ ActiveSupport::IsolatedExecutionState[:active_record_sql_call_count] = value
21
+ end
16
22
  end
17
23
 
18
- def self.query_cache_hits
19
- ActiveSupport::IsolatedExecutionState[:active_record_sql_query_cache_hits] ||= 0
20
- end
24
+ if respond_to?(:cached_queries_count)
25
+ alias_method :query_cache_hits, :cached_queries_count
26
+ alias_method :query_cache_hits=, :cached_queries_count=
27
+ else
28
+ def self.query_cache_hits
29
+ ActiveSupport::IsolatedExecutionState[:active_record_sql_query_cache_hits] ||= 0
30
+ end
21
31
 
22
- def self.query_cache_hits=(value)
23
- ActiveSupport::IsolatedExecutionState[:active_record_sql_query_cache_hits] = value
24
- end
32
+ def self.query_cache_hits=(value)
33
+ ActiveSupport::IsolatedExecutionState[:active_record_sql_query_cache_hits] = value
34
+ end
35
+ end
25
36
 
26
- alias_method :reset_runtime, :reset
37
+ if respond_to?(:reset_runtimes)
38
+ alias_method :reset_runtime, :reset_runtimes
39
+ else
40
+ alias_method :reset_runtime, :reset
41
+ end
27
42
  alias_method :runtime, :sql_runtime
28
43
  alias_method :runtime=, :sql_runtime=
29
44
 
@@ -42,9 +57,14 @@ module ActiveRecord
42
57
  end
43
58
  end
44
59
 
45
- require "active_support/notifications"
46
60
 
47
- ActiveSupport::Notifications.subscribe("sql.active_record") do |event|
48
- ActiveRecord::RuntimeRegistry.call_count += 1
49
- ActiveRecord::RuntimeRegistry.query_cache_hits += 1 if event.payload[:cached]
61
+ # Rails 7.2 already collects query counts and cache hits, so we no
62
+ # longer need our own event handler.
63
+ unless ActiveRecord::RuntimeRegistry.respond_to?(:queries_count)
64
+ require "active_support/notifications"
65
+
66
+ ActiveSupport::Notifications.monotonic_subscribe("sql.active_record") do |event|
67
+ ActiveRecord::RuntimeRegistry.call_count += 1
68
+ ActiveRecord::RuntimeRegistry.query_cache_hits += 1 if event.payload[:cached]
69
+ end
50
70
  end
@@ -1,3 +1,3 @@
1
1
  module TimeBandits
2
- VERSION = "0.14.1"
2
+ VERSION = "0.15.0"
3
3
  end
@@ -46,6 +46,8 @@ class DatabaseTest < Test::Unit::TestCase
46
46
 
47
47
  test "accessing current runtime" do
48
48
  metrics_store.runtime += 1.234
49
+ assert_equal 1.234, metrics_store.runtime
50
+ assert_equal 1.234, bandit.current_runtime
49
51
  assert_equal 1.234, TimeBandits.consumed
50
52
  assert_equal 0, metrics_store.runtime
51
53
  metrics_store.runtime += 4.0
@@ -66,8 +68,13 @@ class DatabaseTest < Test::Unit::TestCase
66
68
  ActiveRecord::Base.connection.execute "SELECT 1"
67
69
  bandit.consumed
68
70
  assert(bandit.current_runtime > 0)
69
- # 2 calls, because one configures the connection
70
- assert_equal 2, bandit.calls
71
+ if ActiveRecord::VERSION::STRING =~ /\A7.2\..*\Z/
72
+ # registry ingores schema calls now
73
+ assert_equal 1, bandit.calls
74
+ else
75
+ # 2 calls, because one configures the connection
76
+ assert_equal 2, bandit.calls
77
+ end
71
78
  assert_equal 0, bandit.sql_query_cache_hits
72
79
  end
73
80
 
@@ -75,11 +82,17 @@ class DatabaseTest < Test::Unit::TestCase
75
82
  skip if Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new("7.1.0")
76
83
  ActiveRecord::Base.logger.level = Logger::ERROR
77
84
  ActiveRecord::LogSubscriber.expects(:sql).never
85
+ assert_equal 0, bandit.calls
78
86
  ActiveRecord::Base.connection.execute "SELECT 1"
79
87
  bandit.consumed
80
88
  assert(bandit.current_runtime > 0)
81
- # 2 calls, because one configures the connection
82
- assert_equal 2, bandit.calls
89
+ if ActiveRecord::VERSION::STRING =~ /\A7.2\..*\Z/
90
+ # registry ingores schema calls now
91
+ assert_equal 1, bandit.calls
92
+ else
93
+ # 2 calls, because one configures the connection
94
+ assert_equal 2, bandit.calls
95
+ end
83
96
  assert_equal 0, bandit.sql_query_cache_hits
84
97
  end
85
98
 
@@ -2,6 +2,7 @@ require_relative '../test_helper'
2
2
 
3
3
  class MemcachedTest < Test::Unit::TestCase
4
4
  def setup
5
+ skip "memcached is currently not supported on Ruby #{RUBY_VERSION} as the gem does not compile" unless RUBY_VERSION < "3.3.0"
5
6
  TimeBandits.time_bandits = []
6
7
  TimeBandits.add TimeBandits::TimeConsumers::Memcached
7
8
  TimeBandits.reset
data/time_bandits.gemspec CHANGED
@@ -23,19 +23,7 @@ Gem::Specification.new do |s|
23
23
 
24
24
  s.add_runtime_dependency("thread_variables")
25
25
  s.add_runtime_dependency("activesupport", [">= 5.2.0"])
26
-
27
- s.add_development_dependency("ansi")
28
- s.add_development_dependency("appraisal")
29
- s.add_development_dependency("byebug")
30
- s.add_development_dependency("dalli")
31
- s.add_development_dependency("memcached", "~> 1.8.0")
32
- s.add_development_dependency("minitest")
33
- s.add_development_dependency("mocha")
34
- s.add_development_dependency("mysql2")
35
- s.add_development_dependency("rake")
36
- s.add_development_dependency("redis")
37
- s.add_development_dependency("sequel")
38
- s.add_development_dependency("activerecord")
39
- s.add_development_dependency("beetle", ">= 3.4.1")
26
+ s.add_runtime_dependency("base64")
27
+ s.add_runtime_dependency("mutex_m")
40
28
  end
41
29
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: time_bandits
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.1
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Kaes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-11 00:00:00.000000000 Z
11
+ date: 2024-08-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thread_variables
@@ -39,153 +39,13 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 5.2.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: ansi
42
+ name: base64
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: appraisal
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: byebug
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: dalli
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: memcached
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: 1.8.0
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: 1.8.0
111
- - !ruby/object:Gem::Dependency
112
- name: minitest
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: mocha
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: mysql2
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: rake
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: redis
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
- - !ruby/object:Gem::Dependency
182
- name: sequel
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - ">="
186
- - !ruby/object:Gem::Version
187
- version: '0'
188
- type: :development
48
+ type: :runtime
189
49
  prerelease: false
190
50
  version_requirements: !ruby/object:Gem::Requirement
191
51
  requirements:
@@ -193,33 +53,19 @@ dependencies:
193
53
  - !ruby/object:Gem::Version
194
54
  version: '0'
195
55
  - !ruby/object:Gem::Dependency
196
- name: activerecord
56
+ name: mutex_m
197
57
  requirement: !ruby/object:Gem::Requirement
198
58
  requirements:
199
59
  - - ">="
200
60
  - !ruby/object:Gem::Version
201
61
  version: '0'
202
- type: :development
62
+ type: :runtime
203
63
  prerelease: false
204
64
  version_requirements: !ruby/object:Gem::Requirement
205
65
  requirements:
206
66
  - - ">="
207
67
  - !ruby/object:Gem::Version
208
68
  version: '0'
209
- - !ruby/object:Gem::Dependency
210
- name: beetle
211
- requirement: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - ">="
214
- - !ruby/object:Gem::Version
215
- version: 3.4.1
216
- type: :development
217
- prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - ">="
221
- - !ruby/object:Gem::Version
222
- version: 3.4.1
223
69
  description: Rails Completed Line on Steroids
224
70
  email:
225
71
  - skaes@railsexpress.de
@@ -292,7 +138,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
292
138
  - !ruby/object:Gem::Version
293
139
  version: '0'
294
140
  requirements: []
295
- rubygems_version: 3.4.10
141
+ rubygems_version: 3.5.9
296
142
  signing_key:
297
143
  specification_version: 4
298
144
  summary: Custom performance logging for Rails