class OnesnooperServer::SqlStore

Class wrapping common features of all SQL-based stores. Using ‘sequel’ to abstract differences.

Constants

SQL_TABLE_NAME

constant table name

Public Instance Methods

save!(timestamp, data) click to toggle source
# File lib/onesnooper_server/sql_store.rb, line 10
def save!(timestamp, data)
  ::OnesnooperServer::Log.debug "[#{self.class.name}] Saving #{timestamp.to_s} => #{data.inspect}"
  fail "DB connection has to be initialized from subclasses, " \
       "::OnesnooperServer::SqlStore cannot be used directly!" unless @db_conn

  if insert_data = data_in_vm_groups(timestamp, data)
    @db_conn[SQL_TABLE_NAME].multi_insert(insert_data)
  else
    ::OnesnooperServer::Log.debug "[#{self.class.name}] Skipping SQL INSERT for an empty dataset"
  end
end

Private Instance Methods

data_in_vm_groups(timestamp, data) click to toggle source

Converts parsed datagram payload into table rows for direct insert into the DB.

@param timestamp [DateTime] payload time stamp @param data [Hash] hash-like parsed payload structure @return [Array, NilClass] array with row hashes

# File lib/onesnooper_server/sql_store.rb, line 30
def data_in_vm_groups(timestamp, data)
  data_ary = []

  data['VM'].each do |vm_on_host|
    next if vm_on_host.blank?
    data_ary << {
      :timestamp => timestamp,
      :vm_id => vm_on_host['ID'],
      :vm_deploy_id => vm_on_host['DEPLOY_ID'],
      :vm_netrx => vm_on_host['POLL']['NETRX'],
      :vm_nettx => vm_on_host['POLL']['NETTX'],
      :vm_used_cpu => vm_on_host['POLL']['USEDCPU'],
      :vm_used_memory => vm_on_host['POLL']['USEDMEMORY'],
      :vm_state => vm_on_host['POLL']['STATE'],
      :host_name => data['HOSTNAME'],
      :host_arch => data['ARCH'],
      :host_model => data['MODELNAME'],
      :host_hypervisor => data['HYPERVISOR'],
      :host_ds_total => data['DS_LOCATION_TOTAL_MB'],
      :host_ds_used => data['DS_LOCATION_USED_MB'],
      :host_ds_free => data['DS_LOCATION_FREE_MB'],
      :host_total_cpu => data['TOTALCPU'],
      :host_cpu_speed => data['CPUSPEED'],
      :host_used_cpu => data['USEDCPU'],
      :host_free_cpu => data['FREECPU'],
      :host_total_memory => data['TOTALMEMORY'],
      :host_free_memory => data['FREEMEMORY'],
      :host_used_memory => data['USEDMEMORY'],
      :one_version => data['VERSION'],
    }
  end unless data['VM'].blank?

  data_ary.empty? ? nil : data_ary
end