class InventorySync::Async::InventoryFullSync

Public Instance Methods

plan(organization) click to toggle source
Calls superclass method
# File lib/inventory_sync/async/inventory_full_sync.rb, line 7
def plan(organization)
  unless cert_auth_available?(organization)
    logger.debug('Cloud authentication is not available, skipping inventory hosts sync')
    return
  end

  super(organization)
end
rescue_strategy_for_self() click to toggle source
# File lib/inventory_sync/async/inventory_full_sync.rb, line 40
def rescue_strategy_for_self
  Dynflow::Action::Rescue::Fail
end
setup_statuses() { || ... } click to toggle source
# File lib/inventory_sync/async/inventory_full_sync.rb, line 16
def setup_statuses
  @subscribed_hosts_ids = Set.new(affected_host_ids)

  InventorySync::InventoryStatus.transaction do
    InventorySync::InventoryStatus.where(host_id: @subscribed_hosts_ids).delete_all
    yield
    add_missing_hosts_statuses(@subscribed_hosts_ids)
    host_statuses[:disconnect] += @subscribed_hosts_ids.size
  end

  logger.debug("Synced hosts amount: #{host_statuses[:sync]}")
  logger.debug("Disconnected hosts amount: #{host_statuses[:disconnect]}")
  output[:host_statuses] = host_statuses
end
update_statuses_batch() { || ... } click to toggle source
# File lib/inventory_sync/async/inventory_full_sync.rb, line 31
def update_statuses_batch
  results = yield

  existing_hosts = results.status_hashes.select { |hash| @subscribed_hosts_ids.include?(hash[:host_id]) }

  update_hosts_status(existing_hosts)
  host_statuses[:sync] += existing_hosts.size
end

Private Instance Methods

add_missing_hosts_statuses(hosts_ids) click to toggle source
# File lib/inventory_sync/async/inventory_full_sync.rb, line 52
def add_missing_hosts_statuses(hosts_ids)
  InventorySync::InventoryStatus.create(
    hosts_ids.map do |host_id|
      {
        host_id: host_id,
        status: InventorySync::InventoryStatus::DISCONNECT,
        reported_at: DateTime.current,
      }
    end
  )
end
affected_host_ids() click to toggle source
# File lib/inventory_sync/async/inventory_full_sync.rb, line 71
def affected_host_ids
  ForemanInventoryUpload::Generators::Queries.for_slice(
    Host.unscoped.where(organization: organizations)
  ).pluck(:id)
end
host_statuses() click to toggle source
# File lib/inventory_sync/async/inventory_full_sync.rb, line 64
def host_statuses
  @host_statuses ||= {
    sync: 0,
    disconnect: 0,
  }
end
update_hosts_status(status_hashes) click to toggle source
# File lib/inventory_sync/async/inventory_full_sync.rb, line 46
def update_hosts_status(status_hashes)
  InventorySync::InventoryStatus.create(status_hashes)
  updated_ids = status_hashes.map { |hash| hash[:host_id] }
  @subscribed_hosts_ids.subtract(updated_ids)
end