Sha256: 335a0838398af05d2ab8dc8ec1399c4d898276ca175bc3558e5c70baf9646f48

Contents?: true

Size: 1.82 KB

Versions: 2

Compression:

Stored size: 1.82 KB

Contents

class Nagios::Runner

  def initialize(params, &callback)
    @params = params.with_indifferent_access
    @callback = callback
    @method = @params.delete(:method).to_s
    @method = @method.gsub(/[^_\.\-a-z0-9]/i, '')
    @klass_name = "Nagios::#{@method.camelize}"
    
    raise "method should be" if @method.blank?

    Nagios.mutex.synchronize{ load_initializers }
    load_class
    
    run
  rescue Exception, Timeout::Error => ex
    Nagios.logger.info "T= #{params.inspect} #{ex.message} (#{ex.backtrace.inspect})"
    callback[ Nagios::Check.default_error(ex.message) ]
  end

  # synchrony check, for manual call
  def self.check(params = {})
    result = nil
    
    self.new(params) do |res|
      result = res
    end
    
    result
  end

protected  

  def constantize
    @klass_name.constantize
  rescue LoadError, NameError
    nil               
  end
  
  def load_initializers
    unless Nagios.project_initializer_loaded
      Dir[Nagios.rails_root + "/app/nagios/initializers/*.rb"].each do |file|
        require File.expand_path(file)
      end                          
            
      Nagios.project_initializer_loaded = true
    end
  end

  def load_class
    klass = constantize
    
    unless klass 
      Dir[Nagios.rails_root + "/app/nagios/**/#{@method}.rb"].each do |file|
        require File.expand_path(file)
      end
      
      klass = constantize
    end
    
    raise "unknown klass #{@klass_name}" unless klass
    
    @klass = klass
    @ancestor = klass.ancestors.detect{|an| an == Nagios::Check || an == Nagios::CheckEM }
  end

  def run
    if @ancestor == Nagios::Check
      script = @klass.new(@params, &@callback)
      script.run
    elsif @ancestor == Nagios::CheckEM
      raise "cant run EM check in Sync Runner"
    else      
      raise "unknown klass #{@klass.inspect}"
    end
  end
  
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
nagios_helper-0.1.2 lib/nagios_helper/runner.rb
nagios_helper-0.1.1 lib/nagios_helper/runner.rb