ManageIQ/manageiq-providers-vmware

View on GitHub
app/models/manageiq/providers/vmware/infra_manager/inventory/saver.rb

Summary

Maintainability
A
0 mins
Test Coverage
B
86%
class ManageIQ::Providers::Vmware::InfraManager::Inventory::Saver
  include Vmdb::Logging

  def save_inventory(persister)
    save_inventory_start_time = Time.now.utc
    persister.persist!
    update_ems_refresh_stats(persister.manager)
    post_refresh(persister.manager, save_inventory_start_time)
  rescue => err
    log_header = log_header_for_ems(persister.manager)

    _log.error("#{log_header} Save Inventory failed")
    _log.log_backtrace(err)

    update_ems_refresh_stats(persister.manager, :error => err.to_s)
  end

  private

  def update_ems_refresh_stats(ems, error: nil)
    refresh_date = Time.now.utc

    ems.last_refresh_error        = error
    ems.last_refresh_date         = refresh_date
    ems.last_refresh_success_date = refresh_date if error.nil?
    ems.save!
  end

  def post_refresh(ems, save_inventory_start_time)
    log_header = log_header_for_ems(ems)

    # Do any post-operations for this EMS
    post_process_refresh_classes.each do |klass|
      next unless klass.respond_to?(:post_refresh_ems)

      _log.info("#{log_header} Performing post-refresh operations for #{klass} instances...")
      klass.post_refresh_ems(ems.id, save_inventory_start_time)
      _log.info("#{log_header} Performing post-refresh operations for #{klass} instances...Complete")
    end
  end

  def post_process_refresh_classes
    [VmOrTemplate]
  end

  def log_header_for_ems(ems)
    "EMS: [#{ems.name}], id: [#{ems.id}]"
  end
end