class InsightsCloud::Async::InsightsResolutionsSync

Constants

RULE_ID_REGEX

Public Instance Methods

logger() click to toggle source
# File lib/insights_cloud/async/insights_resolutions_sync.rb, line 25
def logger
  action_logger
end
try_execute() click to toggle source
# File lib/insights_cloud/async/insights_resolutions_sync.rb, line 11
def try_execute
  InsightsResolution.transaction do
    InsightsResolution.delete_all
    rule_ids = relevant_rules
    Organization.all.each do |organization|
      next if !cert_auth_available?(organization) || organization.manifest_expired?
      api_response = query_insights_resolutions(rule_ids, organization) unless rule_ids.empty?
      written_rules = write_resolutions(api_response) if api_response
      rule_ids -= Array(written_rules)
    end
  end
  done!
end

Private Instance Methods

query_insights_resolutions(rule_ids, organization) click to toggle source
# File lib/insights_cloud/async/insights_resolutions_sync.rb, line 31
def query_insights_resolutions(rule_ids, organization)
  resolutions_response = execute_cloud_request(
    organization: organization,
    method: :post,
    url: InsightsCloud.resolutions_url,
    headers: {
      content_type: :json,
    },
    payload: {
      issues: rule_ids,
    }.to_json
  )

  JSON.parse(resolutions_response)
end
relevant_rules() click to toggle source
# File lib/insights_cloud/async/insights_resolutions_sync.rb, line 47
def relevant_rules
  InsightsRule.all.pluck(:rule_id).map { |id| InsightsCloud.remediation_rule_id(id) }
end
rescue_strategy_for_self() click to toggle source
# File lib/insights_cloud/async/insights_resolutions_sync.rb, line 74
def rescue_strategy_for_self
  Dynflow::Action::Rescue::Fail
end
to_resolution_hash(rule_id, resolution_hash) click to toggle source
# File lib/insights_cloud/async/insights_resolutions_sync.rb, line 51
def to_resolution_hash(rule_id, resolution_hash)
  {
    rule_id: rule_id,
    description: resolution_hash['description'],
    resolution_type: resolution_hash['id'],
    needs_reboot: resolution_hash['needs_reboot'],
    resolution_risk: resolution_hash['resolution_risk'],
  }
end
to_rule_id(resolution_rule_id) click to toggle source
# File lib/insights_cloud/async/insights_resolutions_sync.rb, line 70
def to_rule_id(resolution_rule_id)
  RULE_ID_REGEX.match(resolution_rule_id).named_captures.fetch('id', resolution_rule_id)
end
write_resolutions(response) click to toggle source
# File lib/insights_cloud/async/insights_resolutions_sync.rb, line 61
def write_resolutions(response)
  all_resolutions = response.map do |rule_id, rule_details|
    rule_details['resolutions'].map { |resolution| to_resolution_hash(to_rule_id(rule_id), resolution) }
  end.flatten

  InsightsResolution.create(all_resolutions)
  response.keys
end