module Hive

The Hive automated testing framework

Constants

DAEMON_NAME
LOG_DIRECTORY
PIDS_DIRECTORY

Public Class Methods

config() click to toggle source
# File lib/hive.rb, line 43
def self.config
  Chamber.env
end
hive_mind() click to toggle source
# File lib/hive.rb, line 68
def self.hive_mind
  Hive.logger.debug "Sysname: #{Sys::Uname.sysname}"
  Hive.logger.debug "Release: #{Sys::Uname.release}"
  if ! @hive_mind
    if @hive_mind = MindMeld::Hive.new(
      url: Chamber.env.network.hive_mind? ? Chamber.env.network.hive_mind : nil,
      pem: Chamber.env.network.cert ? Chamber.env.network.cert : nil,
      ca_file: Chamber.env.network.cafile ? Chamber.env.network.cafile : nil,
      verify_mode: Chamber.env.network.verify_mode ? Chamber.env.network.verify_mode : nil,
      device: {
        hostname: Hive.hostname,
        version: Gem::Specification.find_by_name('hive-runner').version.to_s,
        runner_plugins: Hash[Gem::Specification.all.select{ |g| g.name =~ /hive-runner-/ }.map { |p| [p.name, p.version.to_s] }],
        macs: Mac.addrs,
        ips: [Hive.ip_address],
        brand: Hive.config.brand? ? Hive.config.brand : 'BBC',
        model: Hive.config.model? ? Hive.config.model : 'Hive',
        operating_system_name: Sys::Uname.sysname,
        operating_system_version: Sys::Uname.release,
        device_type: 'Hive'
      }
    ) and Etc.respond_to?(:nprocessors) # Require Ruby >= 2.2
      @hive_mind.add_statistics(
        label: 'Processor count',
        value: Etc.nprocessors,
        format: 'integer'
      )
       
      if Chamber.env.diagnostics? && Chamber.env.diagnostics.hive? && Chamber.env.diagnostics.hive.load_warning? && Chamber.env.diagnostics.hive.load_error?
        @hive_mind.add_statistics(
          [
            {
              label: 'Load average warning threshold',
              value: Chamber.env.diagnostics.hive.load_warning,
              format: 'float'
            },
            {
              label: 'Load average error threshold',
              value: Chamber.env.diagnostics.hive.load_error,
              format: 'float'
            }
          ]
        )
      end
      @hive_mind.flush_statistics
      if @logger
        @logger.hive_mind = @hive_mind
      end
    end
  end

  @hive_mind
end
hostname() click to toggle source

Get the hostname of the Hive

# File lib/hive.rb, line 155
def self.hostname
  Socket.gethostname.split('.').first
end
ip_address() click to toggle source

Get the IP address of the Hive

# File lib/hive.rb, line 149
def self.ip_address
  ip = Socket.ip_address_list.detect { |intf| intf.ipv4_private? }
  ip.ip_address
end
logger() click to toggle source
# File lib/hive.rb, line 47
def self.logger
  if ! @logger
    @logger = Hive::Log.new

    if Hive.config.logging.main_filename?
      @logger.add_logger("#{LOG_DIRECTORY}/#{Hive.config.logging.main_filename}", Chamber.env.logging.main_level? ? Chamber.env.logging.main_level : 'INFO')
    end
    if Hive.config.logging.console_level?
      @logger.add_logger(STDOUT, Hive.config.logging.console_level)
    end

    @logger.default_progname = 'Hive core'
  end

  if ! @logger.hive_mind
    @logger.hive_mind = @hive_mind
  end

  @logger
end
poll() click to toggle source

Poll the device database

# File lib/hive.rb, line 127
def self.poll
  Hive.logger.debug "Polling hive"
  rtn = Hive.hive_mind.poll
  Hive.logger.debug "Return data: #{rtn}"
  if rtn.has_key? 'error'
    Hive.logger.warn "Hive polling failed: #{rtn['error']}"
  else
    Hive.logger.info "Successfully polled hive"
  end
end
register() click to toggle source
# File lib/hive.rb, line 122
def self.register
  @register ||= Hive::Register.new
end
send_statistics() click to toggle source

Gather and send statistics

# File lib/hive.rb, line 139
def self.send_statistics
  Hive.hive_mind.add_statistics(
    label: 'Load average',
    value: Sys::CPU.load_avg[0],
    format: 'float'
  )
  Hive.hive_mind.flush_statistics
end