Sha256: 773bdc1993e5c05b31e5db32405de66b4d958ff81ca09def859c8629fe1e691b

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 KB

Contents

module MyNagios
  class Check < ActiveRecord::Base
    belongs_to :group

    enum status:  [ :info, :success, :critical ]
    enum state:   [ :completed, :running ]

    def run!
      begin
        self.update(state: :running)

        Net::SSH.start( self.host, self.user, config: true, keys: [self.pem_key] ) do| ssh |
          result = ssh.exec! self.command
          self.update(status: Check.determinate_status_by_response(result), latest_state: result, latest_updated_at: Time.now)
        end
      rescue => e
        self.update(status: :critical, latest_state: e, latest_updated_at: Time.now)
      ensure
        self.update(state: :completed)
      end
    end

    def self.multiple_run!(check_ids, config)
      check_list = MyNagios::Check.where(id: check_ids)

      begin
        check_list.update_all(state: :running)

        Net::SSH.start( config['host'], config['user'], config: true, keys: [config['pem_key']] ) do |ssh|
          check_list.each do |check|
            result = ssh.exec! check.command
            check.update(status: Check.determinate_status_by_response(result), latest_state: result, latest_updated_at: Time.now)
          end
        end

      rescue => e
        check_list.update_all(status: :critical, latest_state: e, latest_updated_at: Time.now)
      ensure
        check_list.update_all(state: :completed)
      end
    end

    def self.determinate_status_by_response(response)
      return :critical if not response.scan('CRITICAL').blank?
      return :info     if response.nil? or not response.scan('No such file or directory').blank?
      :success
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
my_nagios-0.0.2 app/models/my_nagios/check.rb