Package Products :: Package ZenModel :: Module BasicDeviceLoader |
[hide private]
[frames] | no frames]

# Source Code for Module Products.ZenModel.BasicDeviceLoader

      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__="""BasicDeviceLoader.py
     12
     13  BasicDeviceLoader.py populates the dmd with devices from a file.  The input file
     14  only needs to have a list of machines.  It uses the Classifier system
     15  to figure out where in the DeviceClass a new device should be created.
     16  If no location is found it will use a specified default path or put
     17  the device in the top level of the DevicesClass tree.
     18  """
     19
     20  from logging import info
     21
     22  from Products.ZenModel.Exceptions import *
     23
     24
     25 -class BasicDeviceLoader:
     26      '''Load a machine'''
     27
     28 -    def loadDevice(self, deviceName, devicePath="", systemPath="",
     29                  manufacturer="", model="", groupPath="",
     30                  locationPath="", rack="",
     31                  perfMonitorName="localhost",
     32                  snmpCommunity="", snmpPort=None,
     33                  loginName="", loginPassword=""):
     34          """load a device into the database"""
     35          info("adding device %s" % deviceName)
     36          device = self.getDevice(deviceName, devicePath, snmpCommunity, snmpPort,
     37                              loginName, loginPassword)
     38
     39          if manufacturer and model:
     40              info("setting manufacturer to %s model to %s"
     41                              % (manufacturer, model))
     42              device.setModel(manufacturer, model)
     43
     44          if not locationPath: locationPath = self.getLocationPath()
     45          if locationPath:
     46              if rack:
     47                  locationPath += "/%s" % rack
     48                  info("setting rack location to %s" % locationPath)
     49                  device.setRackLocation(locationPath)
     50              else:
     51                  info("setting location to %s" % locationPath)
     52                  device.setLocation(locationPath)
     53
     54          if not groupPath: groupPath = self.getGroupPath()
     55          if groupPath:
     56              info("setting group %s" % groupPath)
     57              device.setGroups(groupPath)
     58
     59          if not systemPath: systemPath = self.getSystemPath()
     60          if systemPath:
     61              info("setting system %s" % systemPath)
     62              device.setSystems(systemPath)
     63
     64          if not perfMonitorName:
     65              perfMonitorName = self.getPerformanceMonitorName()
     66          info("setting performance monitor to %s" % perfMonitorName)
     67          device.setPerformanceMonitor(perfMonitorName)
     68
     69          return device
     70
     71
     72 -    def getDevice(self, deviceName, devicePath,
     73                  snmpCommunity, snmpPort, loginName, loginPassword):
     74          """get a device if devicePath is None try classifier"""
     75          self.classificationEntry = None
     76          dev = self.getDmdRoot("Devices").findDevice(deviceName)
     77          if dev:
     78              raise DeviceExistsError("Device %s already exists" %
     79                                      deviceName, dev)
     80          if not devicePath:
     81              self.classificationEntry = \
     82                  self.getDmdRoot("Devices").ZenClassifier.classifyDevice(
     83                                          deviceName,
     84                                          snmpCommunity, snmpPort,
     85                                          loginName, loginPassword)
     86              if not self.classificationEntry:
     87                  raise NotImplemented(
     88                      "Classifier failed to classify device %s" % deviceName)
     89              devicePath = self.classificationEntry.getDeviceClassPath
     90
     91          deviceClass = self.getDmdRoot("Devices").getOrganizer(devicePath)
     92          if not deviceClass:
     93              raise PathNotFoundError(
     94                  "Path to device %s is not valid" % deviceName)
     95          return deviceClass.createInstance(deviceName)
     96
     97
     98 -    def getLocationPath(self):
     99          """get the location path for an object"""
    100          pass
    101
    102
    103 -    def getGroupPath(self):
    104          """override if you need to derive the group name from something else"""
    105          pass
    106
    107
    108 -    def getSystemPath(self):
    109          """override if you need to derive the system name from something else"""
    110          pass
    111
    112
    113 -    def getPerformanceMonitorName(self):
    114          """return the performance monitor name, default is localhost"""
    115          return "localhost"
    116
    117
    118  if __name__ == "__main__":
    119      loader = BasicDeviceLoader()
    120      loader.loadDatabase()
    121      print "Database Load is finished!"
    122