<?xml version="1.0" standalone="yes"?>

<!--

  $Header: //depot/DEV/Emerald/src/plugin/monitors/typedef/50_rfc2863_etherchannel.xml#4 $
        
  NOTICE:
    Copyright 2011 Zyrion, Inc. All Rights Reserved. 
    This software is the proprietary information of 
    Zyrion, Inc. Use is subject to license terms.
              
  DESCRIPTION:
    Configuration file for automatically discovering and 
    monitoring EtherChannel interface state, utilization, 
    errors, etc using IF-MIB section of standard MIB-2
  
-->
        
    
<NetVigil>
  <monitor type="snmp">

    <onLoad>
      <verify type="oid" 
        object=".1.3.6.1.2.1.2.1.0"
        pattern="\d+" 
        action="accept"/>
    </onLoad>
                                      
    <probeConfig>
      <subType name="interface_status" enabled="true">
        <snmpOid>
          <prefix>.1.3.6.1.2.1</prefix>
          <poll name="objectIndex" index="2.2.1.1"/>
          <poll name="objectName" index="2.2.1.2"/>
          <poll name="ifDescr" index="31.1.1.1.18"/>
          <poll name="portType" index="2.2.1.3"/>
          <poll name="portStatus" index="2.2.1.7"/>
          <poll name="input" index="2.2.1.8"/>
        </snmpOid>
        <filter name="input"
          pattern="^1$"
          action="accept"/>
        <filter name="portStatus"
          pattern="^2$"
          action="reject"/>
        <filter name="portType"
          pattern="^(53|161)$"
          action="accept"/>
        <filter name="objectName"
          pattern="^(port-channel|ae\d+|st\d+|reth\d+)"
          action="accept"/>
        <postProcess
          parser="interface"
          element="netif_desc"
          testName="[[$objectName]] [[$ifDescr =~ /\S+/ ? '('. $ifDescr .') ' : '';]]Status"
          directive="none"/>
      </subType>
    </probeConfig>

    <probeConfig>
      <subType name="bandwidth" enabled="true">
        <appliesTo agentVersion="2"/>
        <snmpOid>
          <prefix>.1.3.6.1.2.1</prefix>
          <poll name="objectIndex" index="2.2.1.1"/>
          <poll name="objectName" index="2.2.1.2"/>
          <poll name="ifDescr" index="31.1.1.1.18"/>
          <poll name="portType" index="2.2.1.3"/>
          <poll name="maximumValue" index="2.2.1.5"/>
          <poll name="ifHighSpeed" index="31.1.1.1.15"/>
          <poll name="portStatus" index="2.2.1.7"/>
          <poll name="ifOperStatus" index="2.2.1.8"/>
        </snmpOid>
        <filter name="ifOperStatus"
          pattern="^1$"
          action="accept"/>
        <filter name="portStatus"
          pattern="^2$"
          action="reject"/>
        <filter name="portType"
          pattern="^(53|161)$"
          action="accept"/>
        <filter name="objectName"
          pattern="^(port-channel|ae\d+|st\d+|reth\d+)"
          action="accept"/>
        <postProcess
          parser="interface"
          element="netif_desc"
          input="[[
            {
              if ($maximumValue > 20000000) {
                $input='.1.3.6.1.2.1.31.1.1.1.6.'.$objectIndex;
              } else {
                $input='.1.3.6.1.2.1.2.2.1.10.'.$objectIndex;
              }
            }
            return $input;
          ]]"
          output="[[
            {
              if ($maximumValue > 20000000) {
                $output= '.1.3.6.1.2.1.31.1.1.1.10.'.$objectIndex;
              } else {
                $output= '.1.3.6.1.2.1.2.2.1.16.'.$objectIndex;
              }
              return $output;
            }
          ]]"
          maximumValue="[[
            {
              $tempValue = $maximumValue;
              if ($tempValue == 4294967295) {
                if ($ifHighSpeed) {
                  $tempValue = $ifHighSpeed;
                  $tempValue *= 1000000;
                }
              }
              if ($tempValue == 0) {
                if ($ifDescr =~/^te\d+|^xe\d*-d+|tenge\d|tengi/i) {
                  $tempValue = 10000000000;
                }
                elsif ($ifDescr =~/^ge-\d+|^gi\d+|^gig\d+|gigabit/i) {
                  $tempValue = 1000000000;
                }
                else {
                  $tempValue = 100000000;
                }
              }
              return $tempValue;
            }
          ]]"
          testName="[[$objectName]] [[$ifDescr =~ /\S+/ ? '('. $ifDescr .') ' : '';]]Util"
          displayUnit="%"
          resultMultiplier="8"
          directive="ratepercent"/>
      </subType>
    </probeConfig>

    <probeConfig>
      <subType name="bandwidth" enabled="true">
        <appliesTo agentVersion="1"/>
        <snmpOid>
          <prefix>.1.3.6.1.2.1</prefix>
          <poll name="objectIndex" index="2.2.1.1"/>
          <poll name="objectName" index="2.2.1.2"/>
          <poll name="ifDescr" index="31.1.1.1.18"/>
          <poll name="portType" index="2.2.1.3"/>
          <poll name="maximumValue" index="2.2.1.5"/>
          <poll name="portStatus" index="2.2.1.7"/>
          <poll name="ifOperStatus" index="2.2.1.8"/>
          <poll name="input" index="2.2.1.10"/>
          <poll name="output" index="2.2.1.16"/>
        </snmpOid>
        <filter name="ifOperStatus"
          pattern="^1$"
          action="accept"/>
        <filter name="portStatus"
          pattern="^2$"
          action="reject"/>
        <filter name="portType"
          pattern="^(53|161)$"
          action="accept"/>
        <filter name="objectName"
          pattern="^(port-channel|ae\d+|st\d+|reth\d+)"
          action="accept"/>
        <postProcess
          parser="interface"
          element="netif_desc"
          testName="[[$objectName]] [[$ifDescr =~ /\S+/ ? '('. $ifDescr .') ' : '';]]Util"
          displayUnit="%"
          resultMultiplier="8"
      directive="ratepercent"/>
      </subType>
    </probeConfig>

    <probeConfig>
      <subType name="interface_bytes_rate" enabled="true">
        <appliesTo agentVersion="2"/>
        <snmpOid>
          <prefix>.1.3.6.1.2.1</prefix>
          <poll name="objectIndex" index="2.2.1.1"/>
          <poll name="objectName" index="2.2.1.2"/>
          <poll name="ifDescr" index="31.1.1.1.18"/>
          <poll name="portType" index="2.2.1.3"/>
          <poll name="maximumValue" index="2.2.1.5"/>
          <poll name="ifHighSpeed" index="31.1.1.1.15"/>
          <poll name="portStatus" index="2.2.1.7"/>
          <poll name="ifOperStatus" index="2.2.1.8"/>
        </snmpOid>
        <filter name="ifOperStatus"
          pattern="^1$"
          action="accept"/>
        <filter name="portStatus"
          pattern="^2$"
          action="reject"/>
        <filter name="portType"
          pattern="^(53|161)$"
          action="accept"/>
        <filter name="objectName"
          pattern="^(port-channel|ae\d+|st\d+|reth\d+)"
          action="accept"/>
        <postProcess
          parser="interface"
          element="netif_desc"
          input="[[
            {
              if ($maximumValue > 20000000) {
                $input='.1.3.6.1.2.1.31.1.1.1.6.'.$objectIndex;
              } else {
                $input='.1.3.6.1.2.1.2.2.1.10.'.$objectIndex;
              }
            }
            return $input;
          ]]"
          output="[[
            {
              if ($maximumValue > 20000000) {
                $output= '.1.3.6.1.2.1.31.1.1.1.10.'.$objectIndex;
              } else {
                $output= '.1.3.6.1.2.1.2.2.1.16.'.$objectIndex;
              }
              return $output;
            }
          ]]"
          maximumValue="[[
            {
              $tempValue = $maximumValue;
              if ($tempValue == 4294967295) {
                if ($ifHighSpeed) {
                  $tempValue = $ifHighSpeed;
                  $tempValue *= 1000000;
                }
              }
              if ($tempValue == 0) {
                if ($ifDescr =~/^te\d+|^xe\d*-d+|tenge\d|tengi/i) {
                  $tempValue = 10000000000;
                }
                elsif ($ifDescr =~/^ge-\d+|^gi\d+|^gig\d+|gigabit/i) {
                  $tempValue = 1000000000;
                }
                else {
                  $tempValue = 100000000;
                }
              }
              return $tempValue;
            }
          ]]"
          testName="[[$objectName]] [[$ifDescr =~ /\S+/ ? '('. $ifDescr .') ' : '';]]Traffic"
          displayUnit="kb/s"
          resultMultiplier="8/1000"
          displayMultiplier="1/1000"
          warningThreshold="[[ ($maximumValue * 0.00075) || '' ]]"
          criticalThreshold="[[ ($maximumValue * 0.00090) || '' ]]"
          directive="rate"/>
      </subType>
    </probeConfig>

    <probeConfig>
      <subType name="interface_bytes_rate" enabled="true">
        <appliesTo agentVersion="1"/>
        <snmpOid>
          <prefix>.1.3.6.1.2.1</prefix>
          <poll name="objectIndex" index="2.2.1.1"/>
          <poll name="objectName" index="2.2.1.2"/>
          <poll name="ifDescr" index="31.1.1.1.18"/>
          <poll name="portType" index="2.2.1.3"/>
          <poll name="maximumValue" index="2.2.1.5"/>
          <poll name="portStatus" index="2.2.1.7"/>
          <poll name="ifOperStatus" index="2.2.1.8"/>
          <poll name="input" index="2.2.1.10"/>
          <poll name="output" index="2.2.1.16"/>
        </snmpOid>
        <filter name="ifOperStatus"
          pattern="^1$"
          action="accept"/>
        <filter name="portStatus"
          pattern="^2$"
          action="reject"/>
        <filter name="portType"
          pattern="^(53|161)$"
          action="accept"/>
        <filter name="objectName"
          pattern="^(port-channel|ae\d+|st\d+|reth\d+)"
          action="accept"/>
        <postProcess
          parser="interface"
          element="netif_desc"
          testName="[[$objectName]] [[$ifDescr =~ /\S+/ ? '('. $ifDescr .') ' : '';]]Traffic"
          displayUnit="kb/s"
          resultMultiplier="8/1000"
          displayMultiplier="1/1000"
          warningThreshold="[[ ($maximumValue * 0.00075) || '' ]]"
          criticalThreshold="[[ ($maximumValue * 0.00090) || '' ]]"
          directive="rate"/>
      </subType>
    </probeConfig>

    <probeConfig>
      <subType name="interface_discards" enabled="true">
        <snmpOid>
          <prefix>.1.3.6.1.2.1</prefix>
          <poll name="objectIndex" index="2.2.1.1"/>
          <poll name="objectName" index="2.2.1.2"/>
          <poll name="ifDescr" index="31.1.1.1.18"/>
          <poll name="portType" index="2.2.1.3"/>
          <poll name="portStatus" index="2.2.1.7"/>
          <poll name="ifOperStatus" index="2.2.1.8"/>
          <poll name="input" index="2.2.1.13"/>
          <poll name="output" index="2.2.1.19"/>
        </snmpOid>
        <filter name="ifOperStatus"
          pattern="^1$"
          action="accept"/>
        <filter name="portStatus"
          pattern="^2$"
          action="reject"/>
        <filter name="portType"
          pattern="^(53|161)$"
          action="accept"/>
        <filter name="objectName"
          pattern="^(port-channel|ae\d+|st\d+|reth\d+)"
          action="accept"/>
        <postProcess
          parser="interface"
          element="netif_desc"
          testName="[[$objectName]] [[$ifDescr =~ /\S+/ ? '('. $ifDescr .') ' : '';]]Discards"
          displayUnit="crc/min"
          resultMultiplier="60"
      directive="rate"/>
      </subType>
    </probeConfig>

    <probeConfig>
      <subType name="interface_errs" enabled="true">
        <snmpOid>
          <prefix>.1.3.6.1.2.1</prefix>
          <poll name="objectIndex" index="2.2.1.1"/>
          <poll name="objectName" index="2.2.1.2"/>
          <poll name="ifDescr" index="31.1.1.1.18"/>
          <poll name="portType" index="2.2.1.3"/>
          <poll name="portStatus" index="2.2.1.7"/>
          <poll name="ifOperStatus" index="2.2.1.8"/>
          <poll name="input" index="2.2.1.14"/>
          <poll name="output" index="2.2.1.20"/>
        </snmpOid>
        <filter name="ifOperStatus"
          pattern="^1$"
          action="accept"/>
        <filter name="portStatus"
          pattern="^2$"
          action="reject"/>
        <filter name="portType"
          pattern="^(53|161)$"
          action="accept"/>
        <filter name="objectName"
          pattern="^(port-channel|ae\d+|st\d+|reth\d+)"
          action="accept"/>
        <postProcess
          parser="interface"
          element="netif_desc"
          testName="[[$objectName]] [[$ifDescr =~ /\S+/ ? '('. $ifDescr .') ' : '';]]Err"
          displayUnit="crc/min"
          resultMultiplier="60"
      directive="rate"/>
      </subType>
    </probeConfig>

    <probeConfig>
      <subType name="interface_pkt_rate" enabled="true">
        <appliesTo agentVersion="2"/>
        <snmpOid>
          <prefix>.1.3.6.1.2.1</prefix>
          <poll name="objectIndex" index="2.2.1.1"/>
          <poll name="objectName" index="2.2.1.2"/>
          <poll name="ifDescr" index="31.1.1.1.18"/>
          <poll name="portType" index="2.2.1.3"/>
          <poll name="portStatus" index="2.2.1.7"/>
          <poll name="ifOperStatus" index="2.2.1.8"/>
          <poll name="input" index="2.2.1.11"/>
          <poll name="output" index="2.2.1.17"/>
          <poll name="input64" index="31.1.1.1.7"/>
          <poll name="output64" index="31.1.1.1.11"/>
        </snmpOid>
        <filter name="ifOperStatus"
          pattern="^1$"
          action="accept"/>
        <filter name="portStatus"
          pattern="^2$"
          action="reject"/>
        <filter name="portType"
          pattern="^(53|161)$"
          action="accept"/>
        <filter name="objectName"
          pattern="^(port-channel|ae\d+|st\d+|reth\d+)"
          action="accept"/>
        <postProcess
          parser="interface"
          element="netif_desc"
          testName="[[$objectName]] [[$ifDescr =~ /\S+/ ? '('. $ifDescr .') ' : '';]]Packets"
          displayUnit="pkts/s"
          resultMultiplier="1"
      directive="rate"/>
      </subType>
    </probeConfig>

    <probeConfig>
      <subType name="interface_pkt_rate" enabled="true">
        <appliesTo agentVersion="1"/>
        <snmpOid>
          <prefix>.1.3.6.1.2.1</prefix>
          <poll name="objectIndex" index="2.2.1.1"/>
          <poll name="objectName" index="2.2.1.2"/>
          <poll name="ifDescr" index="31.1.1.1.18"/>
          <poll name="portType" index="2.2.1.3"/>
          <poll name="portStatus" index="2.2.1.7"/>
          <poll name="ifOperStatus" index="2.2.1.8"/>
          <poll name="input" index="2.2.1.11"/>
          <poll name="output" index="2.2.1.17"/>
        </snmpOid>
        <filter name="ifOperStatus"
          pattern="^1$"
          action="accept"/>
        <filter name="portStatus"
          pattern="^2$"
          action="reject"/>
        <filter name="portType"
          pattern="^(53|161)$"
          action="accept"/>
        <filter name="objectName"
          pattern="^(port-channel|ae\d+|st\d+|reth\d+)"
          action="accept"/>
        <postProcess
          parser="interface"
          element="netif_desc"
          testName="[[$objectName]] [[$ifDescr =~ /\S+/ ? '('. $ifDescr .') ' : '';]]Packets"
          displayUnit="pkts/s"
          resultMultiplier="1"
          directive="rate"/>
      </subType>
    </probeConfig>

  </monitor>
</NetVigil>
