class SensuPluginsOracle::Session

Session to handle oracle checks

Constants

PRIVILEDGES

Attributes

connect_string[R]
database[R]
error_message[R]
module[R]
name[R]
password[R]
priviledge[R]
rows[RW]
server_version[R]
username[R]

Public Class Methods

handle_multiple(args = {}) click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 103
def self.handle_multiple(args = {})
  # queue with sesssion
  queue_sessions = Queue.new

  # feed the queue with sessions
  args[:sessions].map { |session| queue_sessions.push(session) }

  if args[:config][:verbose]
    puts "Worker Threads: #{args[:config][:worker]}"
  end

  # start worker threads and handle requested sessions
  worker = (1..args[:config][:worker]).map do
    Thread.new do
      until queue_sessions.empty?
        session = queue_sessions.pop(true)
        start = Time.now
        message = "Processing #{session.name} - Method: #{args[:method]}"
        puts message if args[:config][:verbose]
        if args[:method_args]
          session.send(args[:method], args[:method_args])
        else
          session.send(args[:method])
        end
        message_done = format('Done       %s, took %0.1f ms',
                              session.name,
                              (Time.now - start) * 1000)
        puts message_done if args[:config][:verbose]
      end
    end
  end
  worker.map(&:join)
end
new(args) click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 24
def initialize(args)
  @name = args[:name]
  @error_message = nil
  @rows = []

  @connect_string = args[:connect_string]

  @username = args[:username]
  @password = args[:password]
  @database = args[:database]
  @priviledge = validate_priviledge(args[:priviledge])
  @module = args[:module]
  @provide_name_in_result = args[:provide_name_in_result] || false
end
parse_from_file(file, db_module=nil) click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 39
def self.parse_from_file(file, db_module=nil)
  sessions = []

  File.read(file).each_line do |line|
    line.strip!
    next if line.size.zero? || line =~ /^#/
    a = line.split(/:|,|;/)
    sessions << Session.new(name: a[0],
                            connect_string: a[1],
                            provide_name_in_result: true,
                            module: db_module)
  end

  sessions
end
timeout_properties(timeout) click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 94
def self.timeout_properties(timeout)
  return unless timeout
  timeout = timeout.to_i
  OCI8.properties[:tcp_connect_timeout] = timeout
  OCI8.properties[:connect_timeout] = timeout
  OCI8.properties[:send_timeout] = timeout
  OCI8.properties[:recv_timeout] = timeout
end

Public Instance Methods

alive?() click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 55
def alive?
  connect
  @server_version = @connection.oracle_server_version
  true
rescue StandardError, OCIError => e
  @error_message = [@name, e.message.split("\n").first].compact.join(': ')
  false
ensure
  disconnect
end
handle_query_result(config = {}) click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 84
def handle_query_result(config = {})
  # check if query is ok, warning, or critical
  value = @rows.size
  value = @rows[0][0].to_f if @rows[0] && !config[:tuples]

  method = evaluate(config, value)

  [method, show(config[:show])]
end
query(query_string) click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 66
def query(query_string)
  connect
  @rows = []

  cursor = @connection.exec(query_string)

  @rows = []
  while (row = cursor.fetch)
    @rows << row
  end
  cursor.close

  return true
rescue StandardError, OCIError => e
  @error_message = [@name, e.message.split("\n").first].compact.join(': ')
  return false
end

Private Instance Methods

connect() click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 170
def connect
  return if @connection

  if @username
    @connection = OCI8.new(@username.to_s, @password.to_s, @database.to_s)
  else
    @connection = OCI8.new(@connect_string.to_s)
  end

  set_session_module
end
disconnect() click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 189
def disconnect
  @connection.logoff if @connection
  @connection = nil
end
evaluate(config, value) click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 154
def evaluate(config, value)
  calc = Dentaku::Calculator.new

  method = :ok

  if config[:warning] && calc.evaluate(config[:warning], value: value)
    method = :warning
  end

  if config[:critical] && calc.evaluate(config[:critical], value: value)
    method = :critical
  end

  method
end
set_session_module() click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 182
def set_session_module
  return if !@module

  @connection.exec("call DBMS_APPLICATION_INFO.SET_MODULE ('%s', null)" % @module.to_s)

end
show(show_records = true) click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 146
def show(show_records = true)
  return nil unless show_records
  buffer = []
  buffer << "#{@name} (#{@rows.size})" if @provide_name_in_result
  buffer += @rows.map { |row| '- ' + row.join(', ') }
  buffer.join("\n")
end
validate_priviledge(priviledge) click to toggle source
# File lib/sensu-plugins-oracle/session.rb, line 139
def validate_priviledge(priviledge)
  return nil unless priviledge
  priviledge_symbol = priviledge.upcase.to_sym
  return nil unless PRIVILEDGES.include?(priviledge_symbol)
  priviledge_symbol
end