time_bandits 0.14.1 → 0.15.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3597bdf1515a72122e85b16fffdcedc74a22c479012fa0fb2f7c42f64e0434de
4
- data.tar.gz: a6acc865643fc97ce247b33fd55da8399323488435234d15d75766b26fc853c5
3
+ metadata.gz: c8accff0f311ddde1179df3cc05c0eb0a879400c8a46303722f2c75ceae0a01b
4
+ data.tar.gz: 972da28dd9edb00a26bb55370999837d2a79eb57c357fea44031dac538edfd64
5
5
  SHA512:
6
- metadata.gz: c1451d6f063d1fd7feb18dd66c0650f10bf8398f7407fd4f3f7a63bef57a4bf52846267e8bf82c4e7295e41f1d999b70a16aadd1a08d1fc44fc9f174e18e74a4
7
- data.tar.gz: cb1ff1654db60be898992d20a9b7b4825483033637147e94b8fc0192c2566ef096ce49f14b71f7ffd61a6524fa883030c78a69feb10eb90d012bca20321618a6
6
+ metadata.gz: 76a298b94547bf8874be722d77785d464c5c6369d9df5edfd829634903d082b95050499fe5ba13ff98b842563f6ce15b8ad9b686b8f65e1a33d204af554da327
7
+ data.tar.gz: 914d0c357a3d61804a97b4f98ddcab98d8cad1c817eef78a73c6bb0307083abcec99f8699676ea3efe040fd7aa4276290a1bf0de9c1333caba3709bce5c91a56
@@ -9,17 +9,25 @@ on:
9
9
  jobs:
10
10
  test:
11
11
 
12
- runs-on: ubuntu-latest
13
-
14
12
  strategy:
15
13
  matrix:
16
- ruby-version: [3.2.2, 3.1.4, 3.0.6, 2.7.8]
14
+ include:
15
+ - os: ubuntu-latest
16
+ ruby-version: 3.4.2
17
+ - os: ubuntu-latest
18
+ ruby-version: 3.3.7
19
+ - os: ubuntu-20.04
20
+ ruby-version: 3.2.7
21
+ - os: ubuntu-20.04
22
+ ruby-version: 3.1.6
23
+
24
+ runs-on: ${{ matrix.os }}
17
25
 
18
26
  steps:
19
- - uses: actions/checkout@v3
27
+ - uses: actions/checkout@v4
20
28
 
21
29
  - name: Start containers
22
- run: docker-compose -f docker-compose.yml up -d
30
+ run: docker compose -f docker-compose.yml up -d
23
31
 
24
32
  - name: Set up Ruby ${{ matrix.ruby-version }}
25
33
  uses: ruby/setup-ruby@v1
@@ -43,4 +51,4 @@ jobs:
43
51
 
44
52
  - name: Stop containers
45
53
  if: always()
46
- run: docker-compose -f "docker-compose.yml" down
54
+ run: docker compose -f "docker-compose.yml" down
data/Appraisals CHANGED
@@ -1,11 +1,16 @@
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.10",
3
+ "7.0.8.7",
4
+ "7.1.5.1",
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.2.1"
9
+ end
10
+
11
+ if RUBY_VERSION >= "3.2"
12
+ appraisals << "8.0.0.1"
13
+ end
9
14
 
10
15
  appraisals.each do |rails_version|
11
16
  %w(4.0 5.0).each do |redis_version|
data/Gemfile CHANGED
@@ -3,4 +3,21 @@ 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 "minitest-reporters"
13
+ gem "mocha"
14
+ gem "mysql2"
15
+ gem "rake"
16
+ gem "redis"
17
+ gem "sequel"
18
+ gem "activerecord"
19
+ gem "beetle", ">= 3.4.1"
20
+ gem "ostruct"
21
+ gem "logger"
22
+
6
23
  gem "hiredis-client"
data/docker-compose.yml CHANGED
@@ -1,5 +1,3 @@
1
- version: '2'
2
-
3
1
  services:
4
2
  mysql:
5
3
  container_name: mysql
@@ -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.1"
3
3
  end
data/lib/time_bandits.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'logger'
1
2
  require 'active_support'
2
3
  require 'active_support/core_ext'
3
4
  require 'thread_variables'
data/test/test_helper.rb CHANGED
@@ -1,8 +1,14 @@
1
1
  require 'minitest'
2
2
  require 'mocha/minitest'
3
- require 'minitest/pride'
4
3
  require 'minitest/autorun'
5
4
 
5
+ require 'minitest/reporters'
6
+ if ENV['MINITEST_REPORTER']
7
+ Minitest::Reporters.use!
8
+ else
9
+ Minitest::Reporters.use!([Minitest::Reporters::DefaultReporter.new])
10
+ end
11
+
6
12
  require 'active_support/testing/declarative'
7
13
  module Test
8
14
  module Unit
@@ -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 >= Gem::Version.new("7.2.0")
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 >= Gem::Version.new("7.2.0")
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.1
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: 2025-03-12 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.20
296
142
  signing_key:
297
143
  specification_version: 4
298
144
  summary: Custom performance logging for Rails