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