newrelic_f5_plugin 1.0.15 → 1.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES +9 -0
- data/README.rdoc +8 -0
- data/lib/newrelic_f5_plugin.rb +1 -0
- data/lib/newrelic_f5_plugin/agent.rb +6 -1
- data/lib/newrelic_f5_plugin/interfaces.rb +381 -0
- data/newrelic_f5_plugin.gemspec +3 -2
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6b7cc8b0330af44b1a00392f0d9dc7a048c0ce79
         | 
| 4 | 
            +
              data.tar.gz: 0aab0890155622be2e12ab0ba2263cb7593f1ba7
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: dd8e326a708d65cf0f2f799328fe2802e059154d531e10317385234b67c1b4abfa495cf6e7010fbe891e044903565268e3d7f5d52d3b03de4113c1e227fd53c5
         | 
| 7 | 
            +
              data.tar.gz: aa3406c4791ab4ffe72ef4a7b15eedd04d7f0797c636938fd06aa0e148222daf3bf121264db28f79b0af3533aa3ba87681389ed368152f3c134efa25cefc5db5
         | 
    
        data/CHANGES
    CHANGED
    
    | @@ -1,3 +1,12 @@ | |
| 1 | 
            +
            * 1.0.16
         | 
| 2 | 
            +
              - Added Interface statistics
         | 
| 3 | 
            +
                - State
         | 
| 4 | 
            +
                - Throughput
         | 
| 5 | 
            +
                - Packets per second (Unicast/Multicast)
         | 
| 6 | 
            +
                - Errors per second
         | 
| 7 | 
            +
                - Dropped packets per second
         | 
| 8 | 
            +
                - Collisions per second
         | 
| 9 | 
            +
             | 
| 1 10 | 
             
            * 1.0.15
         | 
| 2 11 | 
             
              - Fix bug in 1.0.14 where pool data collection was multiplied by 8 twice
         | 
| 3 12 |  | 
    
        data/README.rdoc
    CHANGED
    
    | @@ -14,6 +14,14 @@ Device wide Metrics | |
| 14 14 | 
             
            * TCP Details (Current connections, connection rate, Server/Client side, Wait State)
         | 
| 15 15 | 
             
            * Node status
         | 
| 16 16 |  | 
| 17 | 
            +
            Interface Statistics
         | 
| 18 | 
            +
            * State (Up/Down)
         | 
| 19 | 
            +
            * Throughput
         | 
| 20 | 
            +
            * Packets per Second (Unicast / Multicast)
         | 
| 21 | 
            +
            * Errors per Second
         | 
| 22 | 
            +
            * Dropped packets per Second
         | 
| 23 | 
            +
            * Collisions per Second
         | 
| 24 | 
            +
             | 
| 17 25 | 
             
            Virtual Server Statistics
         | 
| 18 26 | 
             
            * Requests per Second
         | 
| 19 27 | 
             
            * Current Connections
         | 
    
        data/lib/newrelic_f5_plugin.rb
    CHANGED
    
    | @@ -2,6 +2,7 @@ require 'rubygems' | |
| 2 2 | 
             
            require 'newrelic_f5_plugin/util'
         | 
| 3 3 | 
             
            require 'newrelic_f5_plugin/client_ssl'
         | 
| 4 4 | 
             
            require 'newrelic_f5_plugin/device'
         | 
| 5 | 
            +
            require 'newrelic_f5_plugin/interfaces'
         | 
| 5 6 | 
             
            require 'newrelic_f5_plugin/nodes'
         | 
| 6 7 | 
             
            require 'newrelic_f5_plugin/pools'
         | 
| 7 8 | 
             
            require 'newrelic_f5_plugin/rules'
         | 
| @@ -4,7 +4,7 @@ require 'newrelic_plugin' | |
| 4 4 | 
             
            require 'snmp'
         | 
| 5 5 |  | 
| 6 6 | 
             
            module NewRelic::F5Plugin
         | 
| 7 | 
            -
              VERSION = '1.0. | 
| 7 | 
            +
              VERSION = '1.0.16'
         | 
| 8 8 |  | 
| 9 9 | 
             
              # Register and run the agent
         | 
| 10 10 | 
             
              def self.run
         | 
| @@ -77,6 +77,11 @@ module NewRelic::F5Plugin | |
| 77 77 | 
             
                  @system ||= NewRelic::F5Plugin::Device.new
         | 
| 78 78 | 
             
                  @system.poll(self, snmp)
         | 
| 79 79 |  | 
| 80 | 
            +
                  # Device Interface metrics
         | 
| 81 | 
            +
                  NewRelic::PlatformLogger.debug("Collecting Interface stats")
         | 
| 82 | 
            +
                  @interfaces ||= NewRelic::F5Plugin::Interfaces.new
         | 
| 83 | 
            +
                  @interfaces.poll(self, snmp)
         | 
| 84 | 
            +
             | 
| 80 85 | 
             
                  # Node stats
         | 
| 81 86 | 
             
                  NewRelic::PlatformLogger.debug("Collecting Node stats")
         | 
| 82 87 | 
             
                  @nodes ||= NewRelic::F5Plugin::Nodes.new
         | 
| @@ -0,0 +1,381 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'newrelic_plugin'
         | 
| 4 | 
            +
            require 'snmp'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            # sysInterfaceEntry
         | 
| 7 | 
            +
            #    sysInterfaceName                                       LongDisplayString,
         | 
| 8 | 
            +
            #    sysInterfaceMediaMaxSpeed                              Integer32,
         | 
| 9 | 
            +
            #    sysInterfaceMediaMaxDuplex                             INTEGER,
         | 
| 10 | 
            +
            #    sysInterfaceMediaActiveSpeed                           Integer32,
         | 
| 11 | 
            +
            #    sysInterfaceMediaActiveDuplex                          INTEGER,
         | 
| 12 | 
            +
            #    sysInterfaceMacAddr                                    MacAddress,
         | 
| 13 | 
            +
            #    sysInterfaceMtu                                        Integer32,
         | 
| 14 | 
            +
            #    sysInterfaceEnabled                                    INTEGER,
         | 
| 15 | 
            +
            #    sysInterfaceLearnMode                                  INTEGER,
         | 
| 16 | 
            +
            #    sysInterfaceFlowCtrlReq                                INTEGER,
         | 
| 17 | 
            +
            #    sysInterfaceStpLink                                    INTEGER,
         | 
| 18 | 
            +
            #    sysInterfaceStpEdge                                    INTEGER,
         | 
| 19 | 
            +
            #    sysInterfaceStpEdgeActive                              INTEGER,
         | 
| 20 | 
            +
            #    sysInterfaceStpAuto                                    INTEGER,
         | 
| 21 | 
            +
            #    sysInterfaceStpEnable                                  INTEGER,
         | 
| 22 | 
            +
            #    sysInterfaceStpReset                                   INTEGER,
         | 
| 23 | 
            +
            #    sysInterfaceStatus                                     INTEGER,
         | 
| 24 | 
            +
            #    sysInterfaceComboPort                                  INTEGER,
         | 
| 25 | 
            +
            #    sysInterfacePreferSfp                                  INTEGER,
         | 
| 26 | 
            +
            #    sysInterfaceSfpMedia                                   INTEGER,
         | 
| 27 | 
            +
            #    sysInterfacePhyMaster                                  INTEGER
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            # sysInterfaceStatEntry
         | 
| 30 | 
            +
            #    sysInterfaceStatName                                   LongDisplayString,
         | 
| 31 | 
            +
            #    sysInterfaceStatPktsIn                                 Counter64,
         | 
| 32 | 
            +
            #    sysInterfaceStatBytesIn                                Counter64,
         | 
| 33 | 
            +
            #    sysInterfaceStatPktsOut                                Counter64,
         | 
| 34 | 
            +
            #    sysInterfaceStatBytesOut                               Counter64,
         | 
| 35 | 
            +
            #    sysInterfaceStatMcastIn                                Counter64,
         | 
| 36 | 
            +
            #    sysInterfaceStatMcastOut                               Counter64,
         | 
| 37 | 
            +
            #    sysInterfaceStatErrorsIn                               Counter64,
         | 
| 38 | 
            +
            #    sysInterfaceStatErrorsOut                              Counter64,
         | 
| 39 | 
            +
            #    sysInterfaceStatDropsIn                                Counter64,
         | 
| 40 | 
            +
            #    sysInterfaceStatDropsOut                               Counter64,
         | 
| 41 | 
            +
            #    sysInterfaceStatCollisions                             Counter64,
         | 
| 42 | 
            +
            #    sysInterfaceStatPauseActive                            INTEGER
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            module NewRelic
         | 
| 45 | 
            +
              module F5Plugin
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                class Interfaces
         | 
| 48 | 
            +
                  attr_accessor :names, :snmp_manager
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  INTERFACE_ENABLED_STATES = {
         | 
| 51 | 
            +
                    0 => 'Disabled',
         | 
| 52 | 
            +
                    1 => 'Enabled',
         | 
| 53 | 
            +
                  }
         | 
| 54 | 
            +
                  INTERFACE_STATUS_STATES = {
         | 
| 55 | 
            +
                    0 => 'Up',
         | 
| 56 | 
            +
                    1 => 'Down',
         | 
| 57 | 
            +
                    3 => 'Uninitialized',
         | 
| 58 | 
            +
                    5 => 'Unpopulated',
         | 
| 59 | 
            +
                  }
         | 
| 60 | 
            +
                  INTERFACE_DUPLEX_STATES = {
         | 
| 61 | 
            +
                    0 => 'None',
         | 
| 62 | 
            +
                    1 => 'Half',
         | 
| 63 | 
            +
                    2 => 'Full',
         | 
| 64 | 
            +
                  }
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                  OID_SYS_INTERFACES                    = "1.3.6.1.4.1.3375.2.1.2.4"
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  # Config
         | 
| 69 | 
            +
                  OID_SYS_INTERFACE                     = "#{OID_SYS_INTERFACES}.1"
         | 
| 70 | 
            +
                  OID_SYS_INTERFACE_ENTRY               = "#{OID_SYS_INTERFACE}.2.1"
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  OID_SYS_INTERFACE_NAME                = "#{OID_SYS_INTERFACE_ENTRY}.1"
         | 
| 73 | 
            +
                  OID_SYS_INTERFACE_MEDIA_MAX_SPEED     = "#{OID_SYS_INTERFACE_ENTRY}.2"
         | 
| 74 | 
            +
                  OID_SYS_INTERFACE_MEDIA_MAX_DUPLEX    = "#{OID_SYS_INTERFACE_ENTRY}.3"
         | 
| 75 | 
            +
                  OID_SYS_INTERFACE_MEDIA_ACTIVE_SPEED  = "#{OID_SYS_INTERFACE_ENTRY}.4"
         | 
| 76 | 
            +
                  OID_SYS_INTERFACE_MEDIA_ACTIVE_DUPLEX = "#{OID_SYS_INTERFACE_ENTRY}.5"
         | 
| 77 | 
            +
                  OID_SYS_INTERFACE_MAC_ADDR            = "#{OID_SYS_INTERFACE_ENTRY}.6"
         | 
| 78 | 
            +
                  OID_SYS_INTERFACE_MTU                 = "#{OID_SYS_INTERFACE_ENTRY}.7"
         | 
| 79 | 
            +
                  OID_SYS_INTERFACE_ENABLED             = "#{OID_SYS_INTERFACE_ENTRY}.8"
         | 
| 80 | 
            +
                  OID_SYS_INTERFACE_STATUS              = "#{OID_SYS_INTERFACE_ENTRY}.17"
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                  # Stats
         | 
| 83 | 
            +
                  OID_SYS_INTERFACE_STAT                = "#{OID_SYS_INTERFACES}.4"
         | 
| 84 | 
            +
                  OID_SYS_INTERFACE_STAT_ENTRY          = "#{OID_SYS_INTERFACE_STAT}.3.1"
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                  OID_SYS_INTERFACE_STAT_NAME           = "#{OID_SYS_INTERFACE_STAT_ENTRY}.1"
         | 
| 87 | 
            +
                  OID_SYS_INTERFACE_STAT_PKTS_IN        = "#{OID_SYS_INTERFACE_STAT_ENTRY}.2"
         | 
| 88 | 
            +
                  OID_SYS_INTERFACE_STAT_BYTES_IN       = "#{OID_SYS_INTERFACE_STAT_ENTRY}.3"
         | 
| 89 | 
            +
                  OID_SYS_INTERFACE_STAT_PKTS_OUT       = "#{OID_SYS_INTERFACE_STAT_ENTRY}.4"
         | 
| 90 | 
            +
                  OID_SYS_INTERFACE_STAT_BYTES_OUT      = "#{OID_SYS_INTERFACE_STAT_ENTRY}.5"
         | 
| 91 | 
            +
                  OID_SYS_INTERFACE_STAT_MCAST_IN       = "#{OID_SYS_INTERFACE_STAT_ENTRY}.6"
         | 
| 92 | 
            +
                  OID_SYS_INTERFACE_STAT_MCAST_OUT      = "#{OID_SYS_INTERFACE_STAT_ENTRY}.7"
         | 
| 93 | 
            +
                  OID_SYS_INTERFACE_STAT_ERRORS_IN      = "#{OID_SYS_INTERFACE_STAT_ENTRY}.8"
         | 
| 94 | 
            +
                  OID_SYS_INTERFACE_STAT_ERRORS_OUT     = "#{OID_SYS_INTERFACE_STAT_ENTRY}.9"
         | 
| 95 | 
            +
                  OID_SYS_INTERFACE_STAT_DROPS_IN       = "#{OID_SYS_INTERFACE_STAT_ENTRY}.10"
         | 
| 96 | 
            +
                  OID_SYS_INTERFACE_STAT_DROPS_OUT      = "#{OID_SYS_INTERFACE_STAT_ENTRY}.11"
         | 
| 97 | 
            +
                  OID_SYS_INTERFACE_STAT_COLLISIONS     = "#{OID_SYS_INTERFACE_STAT_ENTRY}.12"
         | 
| 98 | 
            +
             | 
| 99 | 
            +
             | 
| 100 | 
            +
             | 
| 101 | 
            +
                  #
         | 
| 102 | 
            +
                  # Init
         | 
| 103 | 
            +
                  #
         | 
| 104 | 
            +
                  def initialize(snmp = nil)
         | 
| 105 | 
            +
                    @names = [ ]
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                    if snmp
         | 
| 108 | 
            +
                      @snmp_manager = snmp
         | 
| 109 | 
            +
                    else
         | 
| 110 | 
            +
                      @snmp_manager = nil
         | 
| 111 | 
            +
                    end
         | 
| 112 | 
            +
                  end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
             | 
| 115 | 
            +
             | 
| 116 | 
            +
                  #
         | 
| 117 | 
            +
                  # Perform polling and reportings of metrics
         | 
| 118 | 
            +
                  #
         | 
| 119 | 
            +
                  def poll(agent, snmp)
         | 
| 120 | 
            +
                    @snmp_manager = snmp
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                    unless get_names.empty?
         | 
| 123 | 
            +
                      throughput_in = get_throughput_in
         | 
| 124 | 
            +
                      throughput_in.each_key { |m| agent.report_counter_metric m, "bits/sec", throughput_in[m] } unless throughput_in.nil?
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                      throughput_out = get_throughput_out
         | 
| 127 | 
            +
                      throughput_out.each_key { |m| agent.report_counter_metric m, "bits/sec", throughput_out[m] } unless throughput_out.nil?
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                      packets_in = get_packets_in
         | 
| 130 | 
            +
                      packets_in.each_key { |m| agent.report_counter_metric m, "pkts/sec", packets_in[m] } unless packets_in.nil?
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                      packets_out = get_packets_out
         | 
| 133 | 
            +
                      packets_out.each_key { |m| agent.report_counter_metric m, "pkts/sec", packets_out[m] } unless packets_out.nil?
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                      mcast_in = get_mcast_in
         | 
| 136 | 
            +
                      mcast_in.each_key { |m| agent.report_counter_metric m, "pkts/sec", mcast_in[m] } unless mcast_in.nil?
         | 
| 137 | 
            +
             | 
| 138 | 
            +
                      mcast_out = get_mcast_out
         | 
| 139 | 
            +
                      mcast_out.each_key { |m| agent.report_counter_metric m, "pkts/sec", mcast_out[m] } unless mcast_out.nil?
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                      errors_in = get_errors_in
         | 
| 142 | 
            +
                      errors_in.each_key { |m| agent.report_counter_metric m, "errors/sec", errors_in[m] } unless errors_in.nil?
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                      errors_out = get_errors_out
         | 
| 145 | 
            +
                      errors_out.each_key { |m| agent.report_counter_metric m, "errors/sec", errors_out[m] } unless errors_out.nil?
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                      drops_in = get_drops_in
         | 
| 148 | 
            +
                      drops_in.each_key { |m| agent.report_counter_metric m, "drops/sec", drops_in[m] } unless drops_in.nil?
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                      drops_out = get_drops_out
         | 
| 151 | 
            +
                      drops_out.each_key { |m| agent.report_counter_metric m, "drops/sec", drops_out[m] } unless drops_out.nil?
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                      collisions = get_collisions
         | 
| 154 | 
            +
                      collisions.each_key { |m| agent.report_counter_metric m, "collisions/sec", collisions[m] } unless collisions.nil?
         | 
| 155 | 
            +
             | 
| 156 | 
            +
                      status = get_status
         | 
| 157 | 
            +
                      status.each_key { |m| agent.report_metric m, status[m][:label], status[m][:count] } unless status.nil?
         | 
| 158 | 
            +
                    end
         | 
| 159 | 
            +
                  end
         | 
| 160 | 
            +
             | 
| 161 | 
            +
             | 
| 162 | 
            +
             | 
| 163 | 
            +
                  #
         | 
| 164 | 
            +
                  # Get the list of Interface names
         | 
| 165 | 
            +
                  #
         | 
| 166 | 
            +
                  def get_names(snmp = nil)
         | 
| 167 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 168 | 
            +
             | 
| 169 | 
            +
                    if snmp
         | 
| 170 | 
            +
                      @names.clear
         | 
| 171 | 
            +
             | 
| 172 | 
            +
                      begin
         | 
| 173 | 
            +
                        snmp.walk([OID_SYS_INTERFACE_NAME]) do |row|
         | 
| 174 | 
            +
                          row.each do |vb|
         | 
| 175 | 
            +
                            @names.push(vb.value)
         | 
| 176 | 
            +
                          end
         | 
| 177 | 
            +
                        end
         | 
| 178 | 
            +
                      rescue Exception => e
         | 
| 179 | 
            +
                        NewRelic::PlatformLogger.error("Unable to gather Interface names with error: #{e}")
         | 
| 180 | 
            +
                      end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                      NewRelic::PlatformLogger.debug("Interfaces: Found #{@names.size} interfaces")
         | 
| 183 | 
            +
                      return @names
         | 
| 184 | 
            +
                    end
         | 
| 185 | 
            +
                  end
         | 
| 186 | 
            +
             | 
| 187 | 
            +
             | 
| 188 | 
            +
             | 
| 189 | 
            +
                  #
         | 
| 190 | 
            +
                  # Gather Throughput Inbound (returns in bits)
         | 
| 191 | 
            +
                  #
         | 
| 192 | 
            +
                  def get_throughput_in(snmp = nil)
         | 
| 193 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 194 | 
            +
             | 
| 195 | 
            +
                    get_names(snmp) if @names.empty?
         | 
| 196 | 
            +
                    res = gather_snmp_metrics_by_name("Interfaces/Throughput/In", @names, OID_SYS_INTERFACE_STAT_BYTES_IN, snmp)
         | 
| 197 | 
            +
                    res = res.each_key { |n| res[n] *= 8 }
         | 
| 198 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{res.size}/#{@names.size} Inbound Throughput metrics")
         | 
| 199 | 
            +
                    return res
         | 
| 200 | 
            +
                  end
         | 
| 201 | 
            +
             | 
| 202 | 
            +
             | 
| 203 | 
            +
             | 
| 204 | 
            +
                  #
         | 
| 205 | 
            +
                  # Gather Throughput Inbound (returns in bits)
         | 
| 206 | 
            +
                  #
         | 
| 207 | 
            +
                  def get_throughput_out(snmp = nil)
         | 
| 208 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 209 | 
            +
             | 
| 210 | 
            +
                    get_names(snmp) if @names.empty?
         | 
| 211 | 
            +
                    res = gather_snmp_metrics_by_name("Interfaces/Throughput/Out", @names, OID_SYS_INTERFACE_STAT_BYTES_OUT, snmp)
         | 
| 212 | 
            +
                    res = res.each_key { |n| res[n] *= 8 }
         | 
| 213 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{res.size}/#{@names.size} Outbound Throughput metrics")
         | 
| 214 | 
            +
                    return res
         | 
| 215 | 
            +
                  end
         | 
| 216 | 
            +
             | 
| 217 | 
            +
             | 
| 218 | 
            +
             | 
| 219 | 
            +
                  #
         | 
| 220 | 
            +
                  # Gather Packets Inbound
         | 
| 221 | 
            +
                  #
         | 
| 222 | 
            +
                  def get_packets_in(snmp = nil)
         | 
| 223 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 224 | 
            +
             | 
| 225 | 
            +
                    get_names(snmp) if @names.empty?
         | 
| 226 | 
            +
                    res = gather_snmp_metrics_by_name("Interfaces/Packets/In", @names, OID_SYS_INTERFACE_STAT_PKTS_IN, snmp)
         | 
| 227 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{res.size}/#{@names.size} Inbound packet metrics")
         | 
| 228 | 
            +
                    return res
         | 
| 229 | 
            +
                  end
         | 
| 230 | 
            +
             | 
| 231 | 
            +
             | 
| 232 | 
            +
             | 
| 233 | 
            +
                  #
         | 
| 234 | 
            +
                  # Gather Packets Outbound
         | 
| 235 | 
            +
                  #
         | 
| 236 | 
            +
                  def get_packets_out(snmp = nil)
         | 
| 237 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 238 | 
            +
             | 
| 239 | 
            +
                    get_names(snmp) if @names.empty?
         | 
| 240 | 
            +
                    res = gather_snmp_metrics_by_name("Interfaces/Packets/Out", @names, OID_SYS_INTERFACE_STAT_PKTS_OUT, snmp)
         | 
| 241 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{res.size}/#{@names.size} Outbound packet metrics")
         | 
| 242 | 
            +
                    return res
         | 
| 243 | 
            +
                  end
         | 
| 244 | 
            +
             | 
| 245 | 
            +
             | 
| 246 | 
            +
             | 
| 247 | 
            +
                  #
         | 
| 248 | 
            +
                  # Gather Multicast Packets Inbound
         | 
| 249 | 
            +
                  #
         | 
| 250 | 
            +
                  def get_mcast_in(snmp = nil)
         | 
| 251 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 252 | 
            +
             | 
| 253 | 
            +
                    get_names(snmp) if @names.empty?
         | 
| 254 | 
            +
                    res = gather_snmp_metrics_by_name("Interfaces/Multicast/In", @names, OID_SYS_INTERFACE_STAT_MCAST_IN, snmp)
         | 
| 255 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{res.size}/#{@names.size} Inbound multicast metrics")
         | 
| 256 | 
            +
                    return res
         | 
| 257 | 
            +
                  end
         | 
| 258 | 
            +
             | 
| 259 | 
            +
             | 
| 260 | 
            +
             | 
| 261 | 
            +
                  #
         | 
| 262 | 
            +
                  # Gather Multicast Packets Outbound
         | 
| 263 | 
            +
                  #
         | 
| 264 | 
            +
                  def get_mcast_out(snmp = nil)
         | 
| 265 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 266 | 
            +
             | 
| 267 | 
            +
                    get_names(snmp) if @names.empty?
         | 
| 268 | 
            +
                    res = gather_snmp_metrics_by_name("Interfaces/Multicast/Out", @names, OID_SYS_INTERFACE_STAT_MCAST_OUT, snmp)
         | 
| 269 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{res.size}/#{@names.size} Outbound multicast metrics")
         | 
| 270 | 
            +
                    return res
         | 
| 271 | 
            +
                  end
         | 
| 272 | 
            +
             | 
| 273 | 
            +
             | 
| 274 | 
            +
             | 
| 275 | 
            +
                  #
         | 
| 276 | 
            +
                  # Gather Errors Inbound
         | 
| 277 | 
            +
                  #
         | 
| 278 | 
            +
                  def get_errors_in(snmp = nil)
         | 
| 279 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 280 | 
            +
             | 
| 281 | 
            +
                    get_names(snmp) if @names.empty?
         | 
| 282 | 
            +
                    res = gather_snmp_metrics_by_name("Interfaces/Errors/In", @names, OID_SYS_INTERFACE_STAT_ERRORS_IN, snmp)
         | 
| 283 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{res.size}/#{@names.size} Inbound error metrics")
         | 
| 284 | 
            +
                    return res
         | 
| 285 | 
            +
                  end
         | 
| 286 | 
            +
             | 
| 287 | 
            +
             | 
| 288 | 
            +
             | 
| 289 | 
            +
                  #
         | 
| 290 | 
            +
                  # Gather Errors Outbound
         | 
| 291 | 
            +
                  #
         | 
| 292 | 
            +
                  def get_errors_out(snmp = nil)
         | 
| 293 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 294 | 
            +
             | 
| 295 | 
            +
                    get_names(snmp) if @names.empty?
         | 
| 296 | 
            +
                    res = gather_snmp_metrics_by_name("Interfaces/Errors/Out", @names, OID_SYS_INTERFACE_STAT_ERRORS_OUT, snmp)
         | 
| 297 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{res.size}/#{@names.size} Outbound error metrics")
         | 
| 298 | 
            +
                    return res
         | 
| 299 | 
            +
                  end
         | 
| 300 | 
            +
             | 
| 301 | 
            +
             | 
| 302 | 
            +
             | 
| 303 | 
            +
                  #
         | 
| 304 | 
            +
                  # Gather Drops Inbound
         | 
| 305 | 
            +
                  #
         | 
| 306 | 
            +
                  def get_drops_in(snmp = nil)
         | 
| 307 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 308 | 
            +
             | 
| 309 | 
            +
                    get_names(snmp) if @names.empty?
         | 
| 310 | 
            +
                    res = gather_snmp_metrics_by_name("Interfaces/Drops/In", @names, OID_SYS_INTERFACE_STAT_DROPS_IN, snmp)
         | 
| 311 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{res.size}/#{@names.size} Inbound drop metrics")
         | 
| 312 | 
            +
                    return res
         | 
| 313 | 
            +
                  end
         | 
| 314 | 
            +
             | 
| 315 | 
            +
             | 
| 316 | 
            +
             | 
| 317 | 
            +
                  #
         | 
| 318 | 
            +
                  # Gather Drops Outbound
         | 
| 319 | 
            +
                  #
         | 
| 320 | 
            +
                  def get_drops_out(snmp = nil)
         | 
| 321 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 322 | 
            +
             | 
| 323 | 
            +
                    get_names(snmp) if @names.empty?
         | 
| 324 | 
            +
                    res = gather_snmp_metrics_by_name("Interfaces/Drops/Out", @names, OID_SYS_INTERFACE_STAT_DROPS_OUT, snmp)
         | 
| 325 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{res.size}/#{@names.size} Outbound drop metrics")
         | 
| 326 | 
            +
                    return res
         | 
| 327 | 
            +
                  end
         | 
| 328 | 
            +
             | 
| 329 | 
            +
             | 
| 330 | 
            +
             | 
| 331 | 
            +
                  #
         | 
| 332 | 
            +
                  # Gather Collisions
         | 
| 333 | 
            +
                  #
         | 
| 334 | 
            +
                  def get_collisions(snmp = nil)
         | 
| 335 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 336 | 
            +
             | 
| 337 | 
            +
                    get_names(snmp) if @names.empty?
         | 
| 338 | 
            +
                    res = gather_snmp_metrics_by_name("Interfaces/Collisions", @names, OID_SYS_INTERFACE_STAT_COLLISIONS, snmp)
         | 
| 339 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{res.size}/#{@names.size} Collision metrics")
         | 
| 340 | 
            +
                    return res
         | 
| 341 | 
            +
                  end
         | 
| 342 | 
            +
             | 
| 343 | 
            +
             | 
| 344 | 
            +
             | 
| 345 | 
            +
                  #
         | 
| 346 | 
            +
                  # Gather Interface Status
         | 
| 347 | 
            +
                  #
         | 
| 348 | 
            +
                  def get_status(snmp = nil)
         | 
| 349 | 
            +
                    snmp = snmp_manager unless snmp
         | 
| 350 | 
            +
                    metrics = { }
         | 
| 351 | 
            +
                    counter = 0
         | 
| 352 | 
            +
             | 
| 353 | 
            +
                    if snmp
         | 
| 354 | 
            +
                      # Init all the states with zeros so we always get them
         | 
| 355 | 
            +
                      base_name = "Interfaces/Status"
         | 
| 356 | 
            +
                      INTERFACE_STATUS_STATES.each do |key,value|
         | 
| 357 | 
            +
                        metrics["#{base_name}/#{value}"] = { :label => "interfaces", :count => 0 }
         | 
| 358 | 
            +
                      end
         | 
| 359 | 
            +
             | 
| 360 | 
            +
                      # ltmNodeAddrMonitorStatus
         | 
| 361 | 
            +
                      begin
         | 
| 362 | 
            +
                        snmp.walk([OID_SYS_INTERFACE_STATUS]) do |row|
         | 
| 363 | 
            +
                          row.each do |vb|
         | 
| 364 | 
            +
                            metric_name = "#{base_name}/#{INTERFACE_STATUS_STATES[vb.value.to_i]}"
         | 
| 365 | 
            +
                            metrics[metric_name][:count]  += 1
         | 
| 366 | 
            +
                            counter += 1
         | 
| 367 | 
            +
                          end
         | 
| 368 | 
            +
                        end
         | 
| 369 | 
            +
                      rescue Exception => e
         | 
| 370 | 
            +
                        NewRelic::PlatformLogger.error("Unable to gather Interface status metrics with error: #{e}")
         | 
| 371 | 
            +
                      end
         | 
| 372 | 
            +
                    end
         | 
| 373 | 
            +
             | 
| 374 | 
            +
                    NewRelic::PlatformLogger.debug("Interfaces: Got #{counter} Status metrics")
         | 
| 375 | 
            +
                    return metrics
         | 
| 376 | 
            +
                  end
         | 
| 377 | 
            +
             | 
| 378 | 
            +
                end
         | 
| 379 | 
            +
              end
         | 
| 380 | 
            +
            end
         | 
| 381 | 
            +
             | 
    
        data/newrelic_f5_plugin.gemspec
    CHANGED
    
    | @@ -13,8 +13,8 @@ Gem::Specification.new do |s| | |
| 13 13 | 
             
              ## If your rubyforge_project name is different, then edit it and comment out
         | 
| 14 14 | 
             
              ## the sub! line in the Rakefile
         | 
| 15 15 | 
             
              s.name              = 'newrelic_f5_plugin'
         | 
| 16 | 
            -
              s.version           = '1.0. | 
| 17 | 
            -
              s.date              = '2014- | 
| 16 | 
            +
              s.version           = '1.0.16'
         | 
| 17 | 
            +
              s.date              = '2014-08-18'
         | 
| 18 18 | 
             
              s.rubyforge_project = 'newrelic_f5_plugin'
         | 
| 19 19 | 
             
              s.licenses          = ['MIT']
         | 
| 20 20 |  | 
| @@ -78,6 +78,7 @@ to find out how to install and run the plugin agent. | |
| 78 78 | 
             
                lib/newrelic_f5_plugin/agent.rb
         | 
| 79 79 | 
             
                lib/newrelic_f5_plugin/client_ssl.rb
         | 
| 80 80 | 
             
                lib/newrelic_f5_plugin/device.rb
         | 
| 81 | 
            +
                lib/newrelic_f5_plugin/interfaces.rb
         | 
| 81 82 | 
             
                lib/newrelic_f5_plugin/nodes.rb
         | 
| 82 83 | 
             
                lib/newrelic_f5_plugin/pools.rb
         | 
| 83 84 | 
             
                lib/newrelic_f5_plugin/rules.rb
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: newrelic_f5_plugin
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0. | 
| 4 | 
            +
              version: 1.0.16
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Jonathan Thurman
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014- | 
| 11 | 
            +
            date: 2014-08-18 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: newrelic_plugin
         | 
| @@ -73,6 +73,7 @@ files: | |
| 73 73 | 
             
            - lib/newrelic_f5_plugin/agent.rb
         | 
| 74 74 | 
             
            - lib/newrelic_f5_plugin/client_ssl.rb
         | 
| 75 75 | 
             
            - lib/newrelic_f5_plugin/device.rb
         | 
| 76 | 
            +
            - lib/newrelic_f5_plugin/interfaces.rb
         | 
| 76 77 | 
             
            - lib/newrelic_f5_plugin/nodes.rb
         | 
| 77 78 | 
             
            - lib/newrelic_f5_plugin/pools.rb
         | 
| 78 79 | 
             
            - lib/newrelic_f5_plugin/rules.rb
         |