judoscale-rails 1.11.1 → 1.12.0

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: 2c29391e2e1f325012b0a1597aa45800f4087bef039772e47bd2d06c91ea62ac
4
- data.tar.gz: ed8f5d30b36a4241365a4cda20bc37960db8412f877af0a6d2848134ac6e30ff
3
+ metadata.gz: cd84a96b80ba7ac1ad9e1fbfd1150e3046c6a0985f4eb9aa947a85018d6fb11b
4
+ data.tar.gz: 6ff5e46eb8ef7733b883348cea95bdf4cb014e030993428aa7d565f21a76ddbf
5
5
  SHA512:
6
- metadata.gz: c7ddebe2f73ba2f2848f7c998c9d03d452fba53dbf9149fee9240ae9d1a5db984a9c8a6187608bf5d38c0cf9a0f51fe832a2309d4317d01678b87c1bb47a657b
7
- data.tar.gz: caecc435343f2db8606a20f2c22651f609103df1a21b93cbb080f6db886edb71843ddc68c4cb4f78ede83945ded3aa119564dd7c61faf11da5608355c3f099ad
6
+ metadata.gz: fe7ed89ede18c54380c6e86d16a18f71196200f018c4c679b6a4af85b49df8f6ce096310233fecf200f3777b03ffeffc80f8fbbcaf7a0ab9b7aeb11eded5996b
7
+ data.tar.gz: 3a518c809357e5323d599982987d158368bd480ae0be3153cf82ff710d62e9485c57e367b3583a038e5a6fcfe619906777fc31d7d3366d2e5aa895ef56e82c21
@@ -3,15 +3,12 @@ require "judoscale/config"
3
3
  module Judoscale
4
4
  module Rails
5
5
  module Config
6
- attr_accessor :start_reporter_after_initialize, :rake_task_ignore_regex, :utilization_enabled, :utilization_interval
6
+ attr_accessor :start_reporter_after_initialize, :rake_task_ignore_regex
7
7
 
8
8
  def reset
9
9
  super
10
10
  @start_reporter_after_initialize = true
11
11
  @rake_task_ignore_regex = /assets:|db:/
12
-
13
- @utilization_enabled = ENV["JUDOSCALE_UTILIZATION_ENABLED"] == "true"
14
- @utilization_interval = (ENV["JUDOSCALE_UTILIZATION_INTERVAL"] || 1.0).to_f
15
12
  end
16
13
  end
17
14
 
@@ -4,7 +4,6 @@ require "rails"
4
4
  require "rails/engine"
5
5
  require "judoscale/request_middleware"
6
6
  require "judoscale/rails/config"
7
- require "judoscale/rails/utilization_middleware"
8
7
  require "judoscale/logger"
9
8
  require "judoscale/reporter"
10
9
 
@@ -41,12 +40,6 @@ module Judoscale
41
40
  app.middleware.insert_before Rack::Runtime, RequestMiddleware
42
41
  end
43
42
 
44
- initializer "judoscale.utilization_middleware", after: :load_config_initializers do |app|
45
- if judoscale_config.utilization_enabled
46
- app.middleware.insert_before RequestMiddleware, UtilizationMiddleware, interval: judoscale_config.utilization_interval
47
- end
48
- end
49
-
50
43
  config.after_initialize do
51
44
  if in_rails_console_or_runner?
52
45
  logger.debug "No reporting since we're in a Rails console or runner process"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: judoscale-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.11.1
4
+ version: 1.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam McCrea
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 1.11.1
20
+ version: 1.12.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 1.11.1
27
+ version: 1.12.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: railties
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -49,7 +49,6 @@ files:
49
49
  - lib/judoscale/rails.rb
50
50
  - lib/judoscale/rails/config.rb
51
51
  - lib/judoscale/rails/railtie.rb
52
- - lib/judoscale/rails/utilization_middleware.rb
53
52
  homepage: https://judoscale.com
54
53
  licenses:
55
54
  - MIT
@@ -73,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
72
  - !ruby/object:Gem::Version
74
73
  version: '0'
75
74
  requirements: []
76
- rubygems_version: 3.6.7
75
+ rubygems_version: 3.6.9
77
76
  specification_version: 4
78
77
  summary: Autoscaling for Ruby on Rails applications.
79
78
  test_files: []
@@ -1,70 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "singleton"
4
- require "concurrent"
5
- require "judoscale/metrics_store"
6
-
7
- module Judoscale
8
- module Rails
9
- class UtilizationMiddleware
10
- def initialize(app, interval:)
11
- @app = app
12
- @interval = interval
13
- end
14
-
15
- def call(env)
16
- tracker = UtilizationTracker.instance
17
- tracker.start!(interval: @interval)
18
- tracker.incr
19
-
20
- @app.call(env)
21
- ensure
22
- tracker.decr
23
- end
24
- end
25
-
26
- class UtilizationTracker
27
- include Singleton
28
-
29
- def initialize
30
- @active_request_counter = Concurrent::AtomicFixnum.new(0)
31
- @thread_ref = Concurrent::AtomicReference.new(nil)
32
- end
33
-
34
- def start!(interval:)
35
- @thread_ref.update do |current_thread|
36
- next current_thread if current_thread&.alive?
37
-
38
- Thread.new do
39
- # Advise multi-threaded app servers to ignore this thread for the purposes of fork safety warnings.
40
- Thread.current.thread_variable_set(:fork_safe, true)
41
-
42
- loop do
43
- sleep interval
44
- track_current_state
45
- end
46
- end
47
- end
48
- end
49
-
50
- def incr
51
- @active_request_counter.increment
52
- end
53
-
54
- def decr
55
- @active_request_counter.decrement
56
- end
57
-
58
- def track_current_state
59
- active_requests = @active_request_counter.value
60
- active_processes = (active_requests > 0) ? 1 : 0
61
- time = Time.now.utc
62
-
63
- MetricsStore.instance.tap do |store|
64
- store.push :pu, active_processes, time # pu = process utilization
65
- store.push :ru, active_requests, time # ru = request utilization
66
- end
67
- end
68
- end
69
- end
70
- end