class WSDirector::Result

Handle results from all clients from the group

Attributes

all[R]
errors[R]
failures[R]
group[R]
sampling_counter[R]
sampling_mutex[R]
success[R]

Public Class Methods

new(group) click to toggle source
# File lib/wsdirector/result.rb, line 8
def initialize(group)
  @group = group
  @errors = Concurrent::Array.new

  @all = Concurrent::AtomicFixnum.new(0)
  @failures = Concurrent::AtomicFixnum.new(0)

  @sampling_mutex = Mutex.new
  @sampling_counter = Hash.new { |h, k| h[k] = 0 }
end

Public Instance Methods

failed(error_message) click to toggle source

Called when client failed

# File lib/wsdirector/result.rb, line 25
def failed(error_message)
  errors << error_message
  all.increment
  failures.increment
end
failures_count() click to toggle source
# File lib/wsdirector/result.rb, line 39
def failures_count
  failures.value
end
succeed() click to toggle source

Called when client successfully finished it's work

# File lib/wsdirector/result.rb, line 20
def succeed
  all.increment
end
success?() click to toggle source
# File lib/wsdirector/result.rb, line 31
def success?
  failures.value.zero?
end
total_count() click to toggle source
# File lib/wsdirector/result.rb, line 35
def total_count
  all.value
end
track_sample(id, max) click to toggle source
# File lib/wsdirector/result.rb, line 43
def track_sample(id, max)
  sampling_mutex.synchronize do
    return false if sampling_counter[id] >= max

    sampling_counter[id] += 1
    true
  end
end