prosopite 1.3.3 → 1.4.1

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: 8c8b1d214700a04038d35504395ed1fa721fdd5104ae1f35543e3413911c3b02
4
- data.tar.gz: 26916d6b3aa02125a33a68c088bfc0ea6d45c7c59176fb94cba71d141262fc15
3
+ metadata.gz: 9353ec80e12bf0261cfb9c02f9845c2bedfd4285770e6691a18490542c551e24
4
+ data.tar.gz: 29ad5098ea8739119a54fdbc58d241debf166b6c0453388247b9d02b007d021a
5
5
  SHA512:
6
- metadata.gz: 24e5417f68bdec3257ce28f1c0f08e3cd4c7ada8c39306e97afebde974e996655000dd6418799d0974c67793d83415c07ba3df68a19b66a37dc88f57166fb8ff
7
- data.tar.gz: ffa1c74fb3e3d20fb0b34a68259ebe7098a54aade4224b7f4ae92fb933e33eee68e9ff6bb7f656d281874ee7b1a6447af72e8e063e6d11cae2271d451dac2905
6
+ metadata.gz: 40e9fe96155a0837e355c5a4292a592ecef3e71defaea97a62dc700164ea64c0647fce33975bc0ab3b79b6d09c4115c10d4c18e2bec0852f52b8a5df287ace0b
7
+ data.tar.gz: 8176697cd034b20ca5aacbae33377424a56694cd9fc3faa90cb3dce61b6815fa5bf532939d87edb919448dee098e9abe55c52fc1422b20e76545d3d1fdb56079
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- prosopite (1.3.3)
4
+ prosopite (1.4.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -122,6 +122,7 @@ The preferred type of notifications can be configured with:
122
122
  * `Prosopite.stderr_logger = true`: Send warnings to STDERR
123
123
  * `Prosopite.backtrace_cleaner = my_custom_backtrace_cleaner`: use a different [ActiveSupport::BacktraceCleaner](https://api.rubyonrails.org/classes/ActiveSupport/BacktraceCleaner.html). Defaults to `Rails.backtrace_cleaner`.
124
124
  * `Prosopite.custom_logger = my_custom_logger`:
125
+ * `Prosopite.enabled = true`: Enables or disables the gem. Defaults to `true`.
125
126
 
126
127
  ### Custom Logging Configuration
127
128
 
@@ -203,6 +204,37 @@ end
203
204
 
204
205
  WARNING: scan/finish should run before/after **each** test and NOT before/after the whole suite.
205
206
 
207
+ ## Middleware
208
+
209
+ ### Rack
210
+
211
+ Instead of using an `around_action` hook in a Rails Controller, you can also use the rack middleware instead
212
+ implementing auto detect for all controllers.
213
+
214
+ Add the following line into your `config/initializers/prosopite.rb` file.
215
+
216
+ ```ruby
217
+ unless Rails.env.production?
218
+ require 'prosopite/middleware/rack'
219
+ Rails.configuration.middleware.use(Prosopite::Middleware::Rack)
220
+ end
221
+ ```
222
+
223
+ ### Sidekiq
224
+ We also provide a middleware for sidekiq so that you can auto detect n+1 queries that may occur in a sidekiq job.
225
+ You just need to add the following to your sidekiq initializer.
226
+
227
+ ```ruby
228
+ Sidekiq.configure_server do |config|
229
+ unless Rails.production?
230
+ config.server_middleware do |chain|
231
+ require 'prosopite/middleware/sidekiq'
232
+ chain.add(Prosopite::Middleware::Sidekiq)
233
+ end
234
+ end
235
+ end
236
+ ```
237
+
206
238
  ## Allow list
207
239
 
208
240
  Ignore notifications for call stacks containing one or more substrings / regex:
@@ -0,0 +1,13 @@
1
+ module Prosopite
2
+ module Middleware
3
+ class Rack
4
+ def initialize(app)
5
+ @app = app
6
+ end
7
+
8
+ def call(env)
9
+ Prosopite.scan { @app.call(env) }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Prosopite
2
+ module Middleware
3
+ class Sidekiq
4
+ include ::Sidekiq::ServerMiddleware
5
+
6
+ def call(_worker, _msg, _queue)
7
+ Prosopite.scan
8
+ yield
9
+ ensure
10
+ Prosopite.finish
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Prosopite
4
- VERSION = "1.3.3"
4
+ VERSION = "1.4.1"
5
5
  end
data/lib/prosopite.rb CHANGED
@@ -13,7 +13,8 @@ module Prosopite
13
13
  :prosopite_logger,
14
14
  :custom_logger,
15
15
  :ignore_pauses,
16
- :backtrace_cleaner
16
+ :backtrace_cleaner,
17
+ :enabled
17
18
 
18
19
  attr_accessor :allow_stack_paths,
19
20
  :ignore_queries,
@@ -29,9 +30,21 @@ module Prosopite
29
30
  @backtrace_cleaner ||= Rails.backtrace_cleaner
30
31
  end
31
32
 
33
+ def enabled?
34
+ @enabled = true if @enabled.nil?
35
+
36
+ @enabled
37
+ end
38
+
39
+ def disabled?
40
+ !enabled?
41
+ end
42
+
32
43
  def scan
33
44
  tc[:prosopite_scan] ||= false
34
- return if scan?
45
+ if scan? || disabled?
46
+ return block_given? ? yield : nil
47
+ end
35
48
 
36
49
  subscribe
37
50
 
@@ -131,7 +144,8 @@ module Prosopite
131
144
  end
132
145
 
133
146
  def fingerprint(query)
134
- if ActiveRecord::Base.connection.adapter_name.downcase.include?('mysql')
147
+ db_adapter = ActiveRecord::Base.connection.adapter_name.downcase
148
+ if db_adapter.include?('mysql') || db_adapter.include?('trilogy')
135
149
  mysql_fingerprint(query)
136
150
  else
137
151
  begin
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prosopite
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mpampis Kostas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-09 00:00:00.000000000 Z
11
+ date: 2023-09-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -123,6 +123,8 @@ files:
123
123
  - README.md
124
124
  - Rakefile
125
125
  - lib/prosopite.rb
126
+ - lib/prosopite/middleware/rack.rb
127
+ - lib/prosopite/middleware/sidekiq.rb
126
128
  - lib/prosopite/version.rb
127
129
  - prosopite.gemspec
128
130
  homepage: https://github.com/charkost/prosopite