gvl_metrics_middleware 0.2.0 → 0.2.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: e3ed6765b65e47dc4b7b194c206994881750a0029d07ab40125c4300b93bcba2
4
- data.tar.gz: 66ce9746ef0ec48e258f34c5bf34c79325addc2393d29b19cc142c697d64edff
3
+ metadata.gz: 81e9afea6ad5c3271fb91da6b0f69efcd3e1f49153b7e5a278483701295ebbac
4
+ data.tar.gz: 22363d1d03ee82e7a5e6475226fdf73414d9b643728dd0da6c4b7f05b86c6b29
5
5
  SHA512:
6
- metadata.gz: f091d8530abd00c5aef08300d33ee3e50323d6e62cfb3a117fa478817af00d81a6a30cf33c98eba87a37731d01afda3a82751ea81f3bafaa37aba96af3891a88
7
- data.tar.gz: f92832fddb6530a4ea8699c609b36f0fd283918740c2938a22dfe16e5a67059c21cf78b96e01b24b823fb64a76d193105a6174083d381c365713e670f5225125
6
+ metadata.gz: 4ba04171e7a5a1ae4eb7da1f9cbb32302d79e07679d05edc12f9d6dcc100bce0f514002368e94440f9b6cd00c313372d35b22accfda0905dae16083a29e26341
7
+ data.tar.gz: cdcf224fafb3879e806e8a033c5622431baf77c14fda3b76baef184f4e8cf60862ce41838527b31ebc831124349d6b4995da1248114d8af483e8a19027688fef
data/Appraisals CHANGED
@@ -5,7 +5,6 @@ appraise "rails_edge" do
5
5
  gem "rails"
6
6
  gem "railties"
7
7
  gem "activesupport"
8
- gem "activemodel"
9
8
  end
10
9
  end
11
10
 
@@ -13,19 +12,22 @@ appraise "rails_80" do
13
12
  gem "rails", "~> 8.0.0"
14
13
  gem "railties", "~> 8.0.0"
15
14
  gem "activesupport", "~> 8.0.0"
16
- gem "activemodel", "~> 8.0.0"
15
+ end
16
+
17
+ appraise "rails_81" do
18
+ gem "rails", "~> 8.1.0"
19
+ gem "railties", "~> 8.1.0"
20
+ gem "activesupport", "~> 8.1.0"
17
21
  end
18
22
 
19
23
  appraise "rails_72" do
20
24
  gem "rails", "~> 7.2.0"
21
25
  gem "railties", "~> 7.2.0"
22
26
  gem "activesupport", "~> 7.2.0"
23
- gem "activemodel", "~> 7.2.0"
24
27
  end
25
28
 
26
29
  appraise "rails_71" do
27
30
  gem "rails", "~> 7.1.0"
28
31
  gem "railties", "~> 7.1.0"
29
32
  gem "activesupport", "~> 7.1.0"
30
- gem "activemodel", "~> 7.1.0"
31
33
  end
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.2.1] - 2025-11-14
4
+
5
+ - Fixed errors when middleware stack may have been modified ([#18](https://github.com/speedshop/gvl_metrics_middleware/pull/18))
6
+
3
7
  ## [0.2.0] - 2025-10-30
4
8
 
5
9
  - Add sampling support ([#7](https://github.com/speedshop/gvl_metrics_middleware/pull/7)). Set `config.sampling_rate = 0.1` to sample 10% of requests/jobs (defaults to 1%).
data/README.md CHANGED
@@ -15,7 +15,7 @@ gem 'gvl_metrics_middleware', git: "https://github.com/speedshop/gvl_metrics_mid
15
15
 
16
16
  ## Usage
17
17
 
18
- The `gvl_metrics_middleware` automatically inserts the nessecary middleware into your application’s stack. To get
18
+ The `gvl_metrics_middleware` automatically inserts the necessary middleware into your application’s stack. To get
19
19
  started, configure a callback to handle the GVL metrics. Place the following configuration in your
20
20
  application’s `config/initializers`directory:
21
21
 
@@ -112,7 +112,7 @@ where both the control and experiment groups ran identical code, and the differe
112
112
  consistent with those reported in [Shopify's `gvltools`](https://github.com/Shopify/gvltools?tab=readme-ov-file#usage),
113
113
  where the overhead was measured at 1-5% in a production environment.
114
114
 
115
- As stated in [the README of `gvltools`](https://github.com/Shopify/gvltools?tab=readme-ov-file#usage)`, the exact
115
+ As stated in [the README of `gvltools`](https://github.com/Shopify/gvltools?tab=readme-ov-file#usage), the exact
116
116
  overhead is not yet known. However, unless you observe an immediate, significant jump in response times after
117
117
  deployment, the overhead is negligible and should not impact application performance. This makes the middleware a
118
118
  reliable choice for tracking GVL metrics in production environments.
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  # This file was generated by Appraisal
4
2
 
5
3
  source "https://rubygems.org"
@@ -7,9 +5,9 @@ source "https://rubygems.org"
7
5
  gem "minitest", "~> 5.16"
8
6
  gem "rake", "~> 13.0"
9
7
  gem "rubocop", require: false
8
+ gem "rack-attack", "~> 6.8"
10
9
  gem "rails", "~> 7.1.0"
11
10
  gem "railties", "~> 7.1.0"
12
11
  gem "activesupport", "~> 7.1.0"
13
- gem "rackup"
14
12
 
15
13
  gemspec path: "../"
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  # This file was generated by Appraisal
4
2
 
5
3
  source "https://rubygems.org"
@@ -7,9 +5,9 @@ source "https://rubygems.org"
7
5
  gem "minitest", "~> 5.16"
8
6
  gem "rake", "~> 13.0"
9
7
  gem "rubocop", require: false
8
+ gem "rack-attack", "~> 6.8"
10
9
  gem "rails", "~> 7.2.0"
11
10
  gem "railties", "~> 7.2.0"
12
11
  gem "activesupport", "~> 7.2.0"
13
- gem "rackup"
14
12
 
15
13
  gemspec path: "../"
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  # This file was generated by Appraisal
4
2
 
5
3
  source "https://rubygems.org"
@@ -7,9 +5,9 @@ source "https://rubygems.org"
7
5
  gem "minitest", "~> 5.16"
8
6
  gem "rake", "~> 13.0"
9
7
  gem "rubocop", require: false
8
+ gem "rack-attack", "~> 6.8"
10
9
  gem "rails", "~> 8.0.0"
11
10
  gem "railties", "~> 8.0.0"
12
11
  gem "activesupport", "~> 8.0.0"
13
- gem "rackup"
14
12
 
15
13
  gemspec path: "../"
@@ -0,0 +1,13 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "minitest", "~> 5.16"
6
+ gem "rake", "~> 13.0"
7
+ gem "rubocop", require: false
8
+ gem "rack-attack", "~> 6.8"
9
+ gem "rails", "~> 8.1.0"
10
+ gem "railties", "~> 8.1.0"
11
+ gem "activesupport", "~> 8.1.0"
12
+
13
+ gemspec path: "../"
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  # This file was generated by Appraisal
4
2
 
5
3
  source "https://rubygems.org"
@@ -13,6 +11,6 @@ end
13
11
  gem "minitest", "~> 5.16"
14
12
  gem "rake", "~> 13.0"
15
13
  gem "rubocop", require: false
16
- gem "rackup"
14
+ gem "rack-attack", "~> 6.8"
17
15
 
18
16
  gemspec path: "../"
@@ -8,23 +8,20 @@ module GvlMetricsMiddleware
8
8
  config.gvl_metrics_middleware.enabled = !Rails.env.test?
9
9
  config.gvl_metrics_middleware.safe_guard = Rails.env.production?
10
10
 
11
- initializer "gvl_metrics_middleware", after: :load_config_initializers do |app|
12
- if app.config.gvl_metrics_middleware.enabled && app.config.gvl_metrics_middleware.safe_guard
13
- GvlMetricsMiddleware.on_report_failure.nil? && GvlMetricsMiddleware.on_report_failure do |source, exception|
14
- Rails.logger.error("GVL Metrics Middleware failed to report metrics from #{source}: #{exception.class} (#{exception.message})")
15
- end
16
-
17
- GvlMetricsMiddleware.safe_guard = app.config.gvl_metrics_middleware.safe_guard
18
- end
11
+ initializer "gvl_metrics_middleware.rack" do |app|
12
+ app.config.middleware.insert(0, GvlMetricsMiddleware::Rack)
19
13
  end
20
14
 
21
- initializer "gvl_metrics_middleware.rack", after: :load_config_initializers do |app|
22
- app.config.middleware.insert(0, GvlMetricsMiddleware::Rack) if app.config.gvl_metrics_middleware.enabled
15
+ config.after_initialize do |app|
16
+ GvlMetricsMiddleware.enabled = app.config.gvl_metrics_middleware.enabled
17
+ setup_safe_guard(app.config)
18
+ configure_sidekiq_middleware(app.config)
23
19
  end
24
20
 
25
- initializer "gvl_metrics_middleware.sidekiq", after: :load_config_initializers do |app|
26
- if defined?(::Sidekiq) && app.config.gvl_metrics_middleware.enabled
21
+ def self.configure_sidekiq_middleware(app_config)
22
+ if defined?(::Sidekiq) && app_config.gvl_metrics_middleware.enabled
27
23
  require "gvl_metrics_middleware/sidekiq"
24
+
28
25
  ::Sidekiq.configure_server do |config|
29
26
  config.server_middleware do |chain|
30
27
  chain.prepend(GvlMetricsMiddleware::Sidekiq)
@@ -32,5 +29,15 @@ module GvlMetricsMiddleware
32
29
  end
33
30
  end
34
31
  end
32
+
33
+ def self.setup_safe_guard(app_config)
34
+ if app_config.gvl_metrics_middleware.enabled && app_config.gvl_metrics_middleware.safe_guard
35
+ GvlMetricsMiddleware.on_report_failure.nil? && GvlMetricsMiddleware.on_report_failure do |source, exception|
36
+ Rails.logger.error("GVL Metrics Middleware failed to report metrics from #{source}: #{exception.class} (#{exception.message})")
37
+ end
38
+
39
+ GvlMetricsMiddleware.safe_guard = app_config.gvl_metrics_middleware.safe_guard
40
+ end
41
+ end
35
42
  end
36
43
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GvlMetricsMiddleware
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.1"
5
5
  end
@@ -25,6 +25,14 @@ module GvlMetricsMiddleware
25
25
  end
26
26
  end
27
27
 
28
+ @@enabled = true
29
+
30
+ def self.enabled? = @@enabled
31
+
32
+ def self.enabled=(value)
33
+ @@enabled = value
34
+ end
35
+
28
36
  @@on_report_failure = nil
29
37
 
30
38
  def self.on_report_failure(&block)
@@ -62,6 +70,6 @@ module GvlMetricsMiddleware
62
70
  return true if @@sampling_rate == 1.0
63
71
  return false if @@sampling_rate == 0.0
64
72
 
65
- rand < @@sampling_rate
73
+ enabled? && (rand < @@sampling_rate)
66
74
  end
67
75
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gvl_metrics_middleware
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nate Berkopec
@@ -84,6 +84,7 @@ files:
84
84
  - gemfiles/rails_71.gemfile
85
85
  - gemfiles/rails_72.gemfile
86
86
  - gemfiles/rails_80.gemfile
87
+ - gemfiles/rails_81.gemfile
87
88
  - gemfiles/rails_edge.gemfile
88
89
  - gvl-metrics.png
89
90
  - lib/gvl_metrics_middleware.rb