Package Products :: Package ZenWin :: Package services :: Module WinServiceConfig |
[hide private]
[frames] | no frames]

# Source Code for Module Products.ZenWin.services.WinServiceConfig

      1  ###########################################################################
      2  #
      3  # This program is part of Zenoss Core, an open source monitoring platform.
      4  # Copyright (C) 2007-2009, Zenoss Inc.
      5  #
      6  # This program is free software; you can redistribute it and/or modify it
      7  # under the terms of the GNU General Public License version 2 or (at your
      8  # option) any later version as published by the Free Software Foundation.
      9  #
     10  # For complete information please visit: http://www.zenoss.com/oss/
     11  #
     12  ###########################################################################
     13
     14  "Provides Wmi config to zenwin clients."
     15
     16  from Products.ZenCollector.services.config import CollectorConfigService
     17
     18  import logging
     19  log = logging.getLogger('zen.ModelerService.WinServiceConfig')
     20
     21 -class SmartService(object):
     22      "wraps a service and provides helper methods"
     23
     24 -    def __init__(self, service):
     25          self._service = service
     26
     27 -    def __getattr__(self, name):
     28          "delegate to the wrapped service"
     29          return getattr(self._service, name)
     30
     31      @property
     32 -    def isMonitored(self):
     33          "is the service monitored"
     34          return self._service.isMonitored()
     35
     36      @property
     37 -    def name(self):
     38          "converts unicode service names"
     39          name = self._service.name()
     40          if isinstance(name, unicode):
     41              name = name.encode(self._service.zCollectorDecoding)
     42          return name
     43
     44      @property
     45 -    def severity(self):
     46          return self._service.getAqProperty('zFailSeverity')
     47
     48 -def genServices(device):
     49      "generate services wrapped as SmartServices"
     50      for service in device.getMonitoredComponents(type='WinService'):
     51          yield SmartService(service)
     52
     53 -class WinServiceConfig(CollectorConfigService):
     54
     55 -    def __init__(self, dmd, instance):
     56          deviceProxyAttributes = ('zWmiMonitorIgnore',
     57                                   'zWinUser',
     58                                   'zWinPassword')
     59          CollectorConfigService.__init__(self, dmd, instance, deviceProxyAttributes)
     60
     61 -    def _filterDevice(self, device):
     62          include = CollectorConfigService._filterDevice(self, device)
     63
     64          if getattr(device, 'zWmiMonitorIgnore', False):
     65              self.log.debug("Device %s skipped because zWmiMonitorIgnore is True",
     66                             device.id)
     67              include = False
     68
     69          return include
     70
     71 -    def _createDeviceProxy(self, device):
     72          proxy = CollectorConfigService._createDeviceProxy(self, device)
     73
     74          # for now, every device gets a single configCycleInterval based upon
     75          # the collector's winCycleInterval configuration which is typically
     76          # located at dmd.Monitors.Performance._getOb('localhost').
     77          # TODO: create a zProperty that allows for individual device schedules
     78          proxy.configCycleInterval = self._prefs.winCycleInterval
     79
     80          proxy.services = {}
     81          for service in genServices(device):
     82              if service.isMonitored:
     83                  running = None
     84                  if service.getStatus() > 0:
     85                      running = False
     86                  else:
     87                      running = True
     88
     89                  proxy.services[service.name] = (
     90                      running, service.severity, None,
     91                      service.getMonitoredStartModes())
     92
     93          # don't bother adding this device proxy if there aren't any services
     94          # to monitor
     95          if not proxy.services:
     96              log.debug("Device %s skipped because there are no services",
     97                        proxy.id)
     98              return None
     99
    100          return proxy
    101