class Bosh::Director::ProblemScanner::ProblemRegister
Public Class Methods
new(deployment, logger)
click to toggle source
# File lib/bosh/director/problem_scanner/problem_register.rb, line 3 def initialize(deployment, logger) @deployment = deployment @logger = logger @problem_lock = Mutex.new end
Public Instance Methods
get_disk(instance)
click to toggle source
# File lib/bosh/director/problem_scanner/problem_register.rb, line 43 def get_disk(instance) mounted_disk_cid = nil @problem_lock.synchronize do mounted_disk_cid = instance.persistent_disk_cid if instance end mounted_disk_cid end
problem_found(type, resource, data = {})
click to toggle source
# File lib/bosh/director/problem_scanner/problem_register.rb, line 10 def problem_found(type, resource, data = {}) @problem_lock.synchronize do similar_open_problems = Bosh::Director::Models::DeploymentProblem. filter(deployment_id: @deployment.id, type: type.to_s, resource_id: resource.id, state: 'open').all if similar_open_problems.size > 1 raise Bosh::Director::CloudcheckTooManySimilarProblems, "More than one problem of type '#{type}' " + "exists for resource #{type} #{resource.id}" end if similar_open_problems.empty? problem = Bosh::Director::Models::DeploymentProblem. create(type: type.to_s, resource_id: resource.id, state: 'open', deployment_id: @deployment.id, data: data, counter: 1) @logger.info("Created problem #{problem.id} (#{problem.type})") else # This assumes we are running with deployment lock acquired, # so there is no possible update conflict problem = similar_open_problems[0] problem.data = data problem.last_seen_at = Time.now problem.counter += 1 problem.save @logger.info("Updated problem #{problem.id} (#{problem.type}), " + "count is now #{problem.counter}") end end end