Class: Bosh::Director::ProblemScanner::VmScanStage

Inherits:
Object
  • Object
show all
Defined in:
lib/bosh/director/problem_scanner/vm_scan_stage.rb

Constant Summary collapse

AGENT_TIMEOUT_IN_SECONDS =
10

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(instance_manager, problem_register, cloud, deployment, event_logger, logger) ⇒ VmScanStage

Returns a new instance of VmScanStage.



8
9
10
11
12
13
14
15
16
# File 'lib/bosh/director/problem_scanner/vm_scan_stage.rb', line 8

def initialize(instance_manager, problem_register, cloud, deployment, event_logger, logger)
  @instance_manager = instance_manager
  @problem_register = problem_register
  @cloud = cloud
  @deployment = deployment
  @event_logger = event_logger
  @logger = logger
  @agent_disks = {}
end

Instance Attribute Details

#agent_disksObject (readonly)

Returns the value of attribute agent_disks.



6
7
8
# File 'lib/bosh/director/problem_scanner/vm_scan_stage.rb', line 6

def agent_disks
  @agent_disks
end

Instance Method Details

#scan(vms = nil) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/bosh/director/problem_scanner/vm_scan_stage.rb', line 18

def scan(vms=nil)
  if vms
    instances = vms.map do |job, index|
      @instance_manager.find_by_name(@deployment, job, index)
    end
  else
    instances = Models::Instance.filter(deployment: @deployment).exclude(vm_cid: nil).all
  end

  @event_logger.begin_stage("Scanning #{instances.size} VMs", 2)
  results = Hash.new(0)
  lock = Mutex.new

  @event_logger.track_and_log('Checking VM states') do
    ThreadPool.new(max_threads: Config.max_threads).wrap do |pool|
      instances.each do |instance|
        pool.process do
          scan_result = scan_vm(instance)
          lock.synchronize { results[scan_result] += 1 }
        end
      end
    end
  end

  @event_logger.track_and_log("#{results[:ok]} OK, " +
    "#{results[:unresponsive]} unresponsive, " +
    "#{results[:missing]} missing, " +
    "#{results[:unbound]} unbound")
end