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 28
def logger
  action_logger
end
plan() click to toggle source
# File lib/insights_cloud/async/insights_resolutions_sync.rb, line 10
def plan
  unless cloud_auth_available?
    logger.debug('Cloud authentication is not available, skipping resolutions sync')
    return
  end

  plan_self
end
run() click to toggle source
# File lib/insights_cloud/async/insights_resolutions_sync.rb, line 19
def run
  InsightsResolution.transaction do
    InsightsResolution.delete_all
    rule_ids = relevant_rules
    api_response = query_insights_resolutions(rule_ids) unless rule_ids.empty?
    write_resolutions(api_response) if api_response
  end
end

Private Instance Methods

query_insights_resolutions(rule_ids) click to toggle source
# File lib/insights_cloud/async/insights_resolutions_sync.rb, line 34
def query_insights_resolutions(rule_ids)
  resolutions_response = execute_cloud_request(
    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 49
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 75
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 53
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 71
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 63
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)
end