class NewRelic::F5Plugin::Rules

Constants

OID_LTM_RULES
OID_LTM_RULE_ENTRY
OID_LTM_RULE_STAT
OID_LTM_RULE_STAT_ABORTS
OID_LTM_RULE_STAT_AVG_CYCLES
OID_LTM_RULE_STAT_FAILURES
OID_LTM_RULE_STAT_NAME
OID_LTM_RULE_STAT_TOT_EXEC
OID_LTM_RULE_STAT_TYPE

Attributes

names[RW]
snmp_manager[RW]

Public Class Methods

new(snmp = nil) click to toggle source

Init

# File lib/newrelic_f5_plugin/rules.rb, line 39
def initialize(snmp = nil)
  @names = [ ]

  if snmp
    @snmp_manager = snmp
  else
    @snmp_manager = nil
  end
end

Public Instance Methods

get_aborts(snmp = nil) click to toggle source

Gather Total iRule Aborts

# File lib/newrelic_f5_plugin/rules.rb, line 128
def get_aborts(snmp = nil)
  snmp = snmp_manager unless snmp

  get_names(snmp) if @names.empty?
  res = gather_snmp_metrics_by_name("Rules/Aborts", @names, OID_LTM_RULE_STAT_ABORTS, snmp)
  NewRelic::PlatformLogger.debug("Rules: Got #{res.size}/#{@names.size} Abort metrics")
  return res
end
get_average_cycles(snmp = nil) click to toggle source

Gather Average iRule execution time (in cycles)

# File lib/newrelic_f5_plugin/rules.rb, line 142
def get_average_cycles(snmp = nil)
  snmp = snmp_manager unless snmp

  get_names(snmp) if @names.empty?
  res = gather_snmp_metrics_by_name("Rules/Time", @names, OID_LTM_RULE_STAT_AVG_CYCLES, snmp)
  NewRelic::PlatformLogger.debug("Rules: Got #{res.size}/#{@names.size} Average Cycle metrics")
  return res
end
get_executions(snmp = nil) click to toggle source

Gather Total iRule Executions

# File lib/newrelic_f5_plugin/rules.rb, line 100
def get_executions(snmp = nil)
  snmp = snmp_manager unless snmp

  get_names(snmp) if @names.empty?
  res = gather_snmp_metrics_by_name("Rules/Executions", @names, OID_LTM_RULE_STAT_TOT_EXEC, snmp)
  NewRelic::PlatformLogger.debug("Rules: Got #{res.size}/#{@names.size} Execution metrics")
  return res
end
get_failures(snmp = nil) click to toggle source

Gather Total iRule Failures

# File lib/newrelic_f5_plugin/rules.rb, line 114
def get_failures(snmp = nil)
  snmp = snmp_manager unless snmp

  get_names(snmp) if @names.empty?
  res = gather_snmp_metrics_by_name("Rules/Failures", @names, OID_LTM_RULE_STAT_FAILURES, snmp)
  NewRelic::PlatformLogger.debug("Rules: Got #{res.size}/#{@names.size} Failure metrics")
  return res
end
get_names(snmp = nil) click to toggle source

Get the list of iRule names

# File lib/newrelic_f5_plugin/rules.rb, line 76
def get_names(snmp = nil)
  snmp = snmp_manager unless snmp

  if snmp
    @names.clear

    begin
      snmp.walk([OID_LTM_RULE_STAT_NAME, OID_LTM_RULE_STAT_TYPE]) do |rule, func|
        @names.push("#{rule.value}/#{func.value}")
      end
    rescue Exception => e
      NewRelic::PlatformLogger.error("Unable to gather iRule names with error: #{e}")
    end

    NewRelic::PlatformLogger.debug("Rules: Found #{@names.size} iRules")
    return @names
  end
end
poll(agent, snmp) click to toggle source

Perform polling and reportings of metrics

# File lib/newrelic_f5_plugin/rules.rb, line 54
def poll(agent, snmp)
  @snmp_manager = snmp

  unless get_names.empty?
    rule_execs = get_executions
    rule_execs.each_key { |m| agent.report_counter_metric m, "execs/sec", rule_execs[m] } unless rule_execs.nil?

    rule_failures = get_failures
    rule_failures.each_key { |m| agent.report_counter_metric m, "failures/sec", rule_failures[m] } unless rule_failures.nil?

    rule_aborts = get_aborts
    rule_aborts.each_key { |m| agent.report_counter_metric m, "aborts/sec", rule_aborts[m] } unless rule_aborts.nil?

    rule_cycles = get_average_cycles
    rule_cycles.each_key { |m| agent.report_metric m, "cycles", rule_cycles[m] } unless rule_cycles.nil?
  end
end