ManageIQ/manageiq-providers-ovirt

View on GitHub
app/models/manageiq/providers/ovirt/infra_manager/metrics_capture.rb

Summary

Maintainability
A
0 mins
Test Coverage
B
80%
class ManageIQ::Providers::Ovirt::InfraManager::MetricsCapture < ManageIQ::Providers::InfraManager::MetricsCapture
  #
  # Connect / Disconnect / Intialize methods
  #

  def perf_init_rhevm
    raise "no metrics credentials defined" unless target.ext_management_system.has_authentication_type?(:metrics)

    username, password = target.ext_management_system.auth_user_pwd(:metrics)
    metrics_hostname = target.ext_management_system.connection_configuration_by_role('metrics')
      .try(:endpoint)
      .try(:hostname)
    host = metrics_hostname || target.ext_management_system.hostname

    conn_info = {
      :host     => host,
      :database => target.ext_management_system.history_database_name,
      :username => username,
      :password => password
    }

    require 'ovirt_metrics'
    OvirtMetrics.establish_connection(conn_info)
  end

  def perf_release_rhevm
  end

  #
  # Capture methods
  #

  def perf_collect_metrics(interval_name, start_time = nil, end_time = nil)
    require 'ovirt_metrics'
    target_description = "[#{target.class.name}], [#{target.id}], [#{target.name}]"
    unless target.ext_management_system.has_authentication_type?(:metrics)
      _log.warn("No C&U credentials defined for: #{target_description} returning empty stats")
      return {}, {}
    end

    log_header = "[#{interval_name}] for: #{target_description}"
    start_time ||= Metric::Capture.historical_start_time

    begin
      Benchmark.realtime_block(:rhevm_connect) { perf_init_rhevm }
      counters, = Benchmark.realtime_block(:collect_data) do
        case target
        when Host then OvirtMetrics.host_realtime(target.uid_ems, start_time, end_time)
        when Vm then   OvirtMetrics.vm_realtime(target.uid_ems, start_time, end_time)
        end
      end
      return counters
    rescue Exception => err
      _log.error("#{log_header} Unhandled exception during perf data collection: [#{err}], class: [#{err.class}]")
      _log.error("#{log_header}   Timings at time of error: #{Benchmark.current_realtime.inspect}")
      _log.log_backtrace(err)
      raise
    ensure
      perf_release_rhevm
    end
  end
end