Class: Judoscale::UtilizationTracker
- Inherits:
-
Object
- Object
- Judoscale::UtilizationTracker
- Includes:
- Singleton
- Defined in:
- lib/judoscale/utilization_tracker.rb
Instance Method Summary collapse
- #decr ⇒ Object
- #incr ⇒ Object
-
#initialize ⇒ UtilizationTracker
constructor
A new instance of UtilizationTracker.
- #start! ⇒ Object
- #started? ⇒ Boolean
- #utilization_pct(reset: true) ⇒ Object
Constructor Details
#initialize ⇒ UtilizationTracker
Returns a new instance of UtilizationTracker.
9 10 11 12 13 |
# File 'lib/judoscale/utilization_tracker.rb', line 9 def initialize @mutex = Mutex.new @active_request_counter = 0 @started = false end |
Instance Method Details
#decr ⇒ Object
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/judoscale/utilization_tracker.rb', line 40 def decr @mutex.synchronize do @active_request_counter -= 1 if @active_request_counter == 0 # We're now idle - start tracking idle time @idle_started_at = get_current_time end end end |
#incr ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/judoscale/utilization_tracker.rb', line 28 def incr @mutex.synchronize do if @active_request_counter == 0 && @idle_started_at # We were idle and now we're not - add to total idle time @total_idle_time += get_current_time - @idle_started_at @idle_started_at = nil end @active_request_counter += 1 end end |
#start! ⇒ Object
15 16 17 18 19 20 21 22 |
# File 'lib/judoscale/utilization_tracker.rb', line 15 def start! @mutex.synchronize do unless started? @started = true init_idle_report_cycle! end end end |
#started? ⇒ Boolean
24 25 26 |
# File 'lib/judoscale/utilization_tracker.rb', line 24 def started? @started end |
#utilization_pct(reset: true) ⇒ Object
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/judoscale/utilization_tracker.rb', line 51 def utilization_pct(reset: true) @mutex.synchronize do current_time = get_current_time idle_ratio = get_idle_ratio(current_time: current_time) reset_idle_report_cycle!(current_time: current_time) if reset ((1.0 - idle_ratio) * 100.0).to_i end end |