class KumoDockerCloud::StackChecker

Public Class Methods

new(specific_checks = {}, default_check = nil, timeout = 300) click to toggle source
# File lib/kumo_dockercloud/stack_checker.rb, line 3
def initialize(specific_checks = {}, default_check = nil, timeout = 300)
  @checks = specific_checks
  @default_check = default_check
  @timeout = timeout
end

Public Instance Methods

verify(stack) click to toggle source
# File lib/kumo_dockercloud/stack_checker.rb, line 9
def verify(stack)
  raise InvalidStackError.new("The stack being verified is not a valid KumoDockerCloud::Stack.") unless stack.instance_of? KumoDockerCloud::Stack

  services = stack.services

  default_checks = services.reduce({}) { |result, service| result.merge(service.name => default_check) }
  service_checks = default_checks.merge(@checks)

  begin
    service_checker_threads = services.map do |service|
      Thread.new { ServiceChecker.new(service_checks[service.name], @timeout).verify(service) }
    end
    service_checker_threads.each(&:join)
    true
  rescue ServiceDeployError
    raise StackCheckError.new("The stack is not in the expected state.")
  end
end

Private Instance Methods

default_check() click to toggle source
# File lib/kumo_dockercloud/stack_checker.rb, line 30
def default_check
  @default_check ||= [ServiceCheck.new(lambda { |container| container.state == 'Running' }, "Service is not running")]
end