Package Products :: Package DataCollector :: Package CommandParsers :: Module Linux_netstat_rn |
[hide private]
[frames] | no frames]

# Source Code for Module Products.DataCollector.CommandParsers.Linux_netstat_rn

     1  ##############################################################################
     2  #
     3  # Copyright (C) Zenoss, Inc. 2007, all rights reserved.
     4  #
     5  # This content is made available according to terms specified in
     6  # License.zenoss under the directory where your Zenoss product is installed.
     7  #
     8  ##############################################################################
     9
    10
    11  __doc__ = """CommandParser
    12
    13  CommandParser parses the output of a command to return a datamap
    14
    15  $Id: Uname_A.py,v 1.2 2003/10/01 23:40:51 edahl Exp $"""
    16
    17  __version__ = '$Revision: 1.2 $'[11:-2]
    18
    19  from Products.ZenUtils.IpUtil import isip, maskToBits
    20
    21  from CommandParser import CommandParser
    22
    23  TARGET=0
    24  GATEWAY=1
    25  NETMASK=2
    26  FLAGS=3
    27  INTERFACE=7
    28
    29 -class Linux_netstat_rn(CommandParser):
    30
    31      command = 'netstat -rn'
    32      componentName = "os"
    33
    34 -    def condition(self, device, log):
    35          osver = device.os.getProductName()
    36          return osver.find("Linux") > -1
    37
    38 -    def parse(self, device, results, log):
    39          log.info('Collecting routes for device %s' % device.id)
    40          indirectOnly = getattr(device, 'zRouteMapCollectOnlyIndirect', False)
    41          rm = self.newRelationshipMap("routes", "os")
    42          rlines = results.split("\n")
    43          for line in rlines:
    44              aline = line.split()
    45              if len(aline) != 8 or not isip(aline[0]): continue
    46              route = self.newObjectMap("Products.ZenModel.IpRouteEntry")
    47
    48              route['routemask'] = maskToBits(aline[NETMASK])
    49              if route['routemask'] == 32: continue
    50
    51              if "G" in aline[FLAGS]:
    52                  route['routetype'] = 'indirect'
    53              else:
    54                  route['routetype'] = 'direct'
    55              if indirectOnly and route['routetype'] != 'indirect':
    56                  continue
    57
    58              route['id'] = aline[TARGET]
    59              route['setTarget'] = route['id'] + "/" + str(route['routemask'])
    60              route['id'] = route['id'] + "_" + str(route['routemask'])
    61              route['setInterfaceName'] = aline[INTERFACE]
    62              route['setNextHopIp'] = aline[GATEWAY]
    63              rm.append(route)
    64          return rm
    65
    66 -    def description(self):
    67          return "run netstat -an on server to build ipservices"
    68