Class: Judoscale::UtilizationTracker

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/judoscale/utilization_tracker.rb

Instance Method Summary collapse

Constructor Details

#initializeUtilizationTracker

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

#decrObject



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

#incrObject



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

Returns:

  • (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