def cutover(self, dmd):
     rel = dmd.zenMenus.Manage.zenMenuItems
     if hasattr(rel, 'deleteDevice'):
         rel._delObject('deleteDevice')
     if hasattr(rel, 'renameDevice'):
         rel._delObject('renameDevice')
     if hasattr(rel, 'lockObject'):
         rel._delObject('lockObject')
Example #2
0
 def cutover(self, dmd):
     rel = dmd.zenMenus.Manage.zenMenuItems
     if hasattr(rel, 'deleteDevice'):
         rel._delObject('deleteDevice')
     if hasattr(rel, 'renameDevice'):
         rel._delObject('renameDevice')
     if hasattr(rel, 'lockObject'):
         rel._delObject('lockObject')
 def cutover(self, dmd):
     if not hasattr(dmd.Manufacturers, PRODUCT_CLASS_MIGRATED_MARKER):
         for manufacturer in dmd.Manufacturers.values():
             if isinstance(manufacturer, Manufacturer) and hasattr(manufacturer, "products"):
                 for product in manufacturer.products():
                     if hasattr(aq_base(product), "instances") and isinstance(product.instances, ToManyRelationship):
                         instances = product.instances()
                         product._delObject("instances", suppress_events=True)
                         for instance in instances:
                             if hasattr(aq_base(instance), "productClass") and isinstance(instance.productClass, ToOneRelationship):
                                 instance._delObject("productClass", suppress_events=True)
                                 instance.setProductClass(product, raiseIndexEvent=False)
Example #4
0
 def _perfIdFilter(self, obj):
     """
     Return True if obj is not a device (has no perfServer attribute)
     or if the device's associated monitor has a name matching this
     collector's name.  Otherise, return False.
     """
     return not hasattr(obj, "perfServer") or obj.perfServer.getRelatedId() == self.instance
Example #5
0
 def createCatalog(self):
     """make the catalog for device searching"""
     from Products.Zuul.catalog.legacy import LegacyCatalogAdapter
     if hasattr(self, self.default_catalog):
         self._delObject(self.default_catalog)
     setattr(self, self.default_catalog,
             LegacyCatalogAdapter(self, self.default_catalog))
Example #6
0
 def initialize_network_cache(self, network_root):
     if hasattr(network_root, self.NETWORK_CACHE_ATTR):
         setattr(network_root, self.NETWORK_CACHE_ATTR, None)
     network_cache = NetworkCache()
     setattr(network_root, self.NETWORK_CACHE_ATTR, network_cache)
     for net in network_root.getSubNetworks():
         network_cache.add_net(net)
Example #7
0
    def _pushConfig(self, device):
        """
        push device config and deletes to relevent collectors/instances
        """
        deferreds = []

        if self._perfIdFilter(device) and self._filterDevice(device):
            proxies = self._wrapFunction(self._createDeviceProxies, device)
            if proxies:
                self._wrapFunction(self._postCreateDeviceProxy, proxies)
        else:
            proxies = None

        prev_collector = device.dmd.Monitors.primaryAq().getPreviousCollectorForDevice(device.id)
        for listener in self.listeners:
            if not proxies:
                if hasattr(device, 'getPerformanceServer'):
                    # The invalidation is only sent to the previous and current collectors
                    if self.instance in ( prev_collector, device.getPerformanceServer().getId() ):
                        self.log.debug('Invalidation: Performing remote call for device {0} on collector {1}'.format(device.id, self.instance))
                        deferreds.append(listener.callRemote('deleteDevice', device.id))
                    else:
                        self.log.debug('Invalidation: Skipping remote call for device {0} on collector {1}'.format(device.id, self.instance))
                else:
                    deferreds.append(listener.callRemote('deleteDevice', device.id))
                    self.log.debug('Invalidation: Performing remote call for device {0} on collector {1}'.format(device.id, self.instance))
            else:
                options = self.listenerOptions.get(listener, None)
                deviceFilter = self._getOptionsFilter(options)
                for proxy in proxies:
                    if deviceFilter(proxy):
                        deferreds.append(self._sendDeviceProxy(listener, proxy))

        return defer.DeferredList(deferreds)
Example #8
0
    def _pushConfig(self, device):
        """
        push device config and deletes to relevent collectors/instances
        """
        deferreds = []

        if self._perfIdFilter(device) and self._filterDevice(device):
            proxies = self._wrapFunction(self._createDeviceProxies, device)
            if proxies:
                self._wrapFunction(self._postCreateDeviceProxy, proxies)
        else:
            proxies = None

        prev_collector = device.dmd.Monitors.primaryAq().getPreviousCollectorForDevice(device.id)
        for listener in self.listeners:
            if not proxies:
                if hasattr(device, 'getPerformanceServer'):
                    # The invalidation is only sent to the previous and current collectors
                    if self.instance in ( prev_collector, device.getPerformanceServer().getId() ):
                        self.log.debug('Invalidation: Performing remote call for device {0} on collector {1}'.format(device.id, self.instance))
                        deferreds.append(listener.callRemote('deleteDevice', device.id))
                    else:
                        self.log.debug('Invalidation: Skipping remote call for device {0} on collector {1}'.format(device.id, self.instance))
                else:
                    deferreds.append(listener.callRemote('deleteDevice', device.id))
                    self.log.debug('Invalidation: Performing remote call for device {0} on collector {1}'.format(device.id, self.instance))
            else:
                options = self.listenerOptions.get(listener, None)
                deviceFilter = self._getOptionsFilter(options)
                for proxy in proxies:
                    if deviceFilter(proxy):
                        deferreds.append(self._sendDeviceProxy(listener, proxy))

        return defer.DeferredList(deferreds)
 def cutover(self, dmd):
     if hasattr(dmd, "IPv6Networks"):
         for brain in ICatalogTool(dmd.IPv6Networks).search(IpNetwork):
             try:
                 org = brain.getObject()
                 org.version = 6
             except Exception:
                 pass
Example #10
0
 def _perfIdFilter(self, obj):
     """
     Return True if obj is not a device (has no perfServer attribute)
     or if the device's associated monitor has a name matching this
     collector's name.  Otherise, return False.
     """
     return (not hasattr(obj, 'perfServer')
             or obj.perfServer.getRelatedId() == self.instance)
 def cutover(self, dmd):
     # Create a jobtype -> jobname lookup table for registered jobs.
     table = dict((task.getJobType(), task.name)
                  for task in (t for t in current_app.tasks.values()
                               if isinstance(t, Job)))
     # Update/add job_name field for all JobRecords.
     for rec in dmd.JobManager.getAllJobs():
         if not hasattr(rec, "job_name") or not rec.job_name:
             rec.job_name = table.get(rec.job_type)
Example #12
0
 def getBulkLoadProperty(self, name):
     """
     Will return None if not present
     otherwise the cached value set from
     the setBulkLoadProperty method
     """
     if not hasattr(self, '_props'):
         return None
     return self._props.get(name)
Example #13
0
 def handle(results):
     if hasattr(results, "type") and results.type is HubDown:
         self.log.warning("Collection aborted: %s",
                          results.getErrorMessage())
         return
     self.log.critical("%s is not a valid organizer.",
                       self.options.path)
     reactor.running = False
     sys.exit(1)
Example #14
0
 def getBulkLoadProperty(self, name):
     """
     Will return None if not present
     otherwise the cached value set from
     the setBulkLoadProperty method
     """
     if not hasattr(self, '_props'):
         return None
     return self._props.get(name)
    def cutover(self, dmd):
        if not hasattr(dmd, 'UserInterfaceSettings'):
            settings = UserInterfaceSettings('UserInterfaceSettings')

            # copy settings that were previously on the data root
            settings.enableLiveSearch = getattr(dmd, 'enableLiveSearch', True)
            settings.incrementalTreeLoad = getattr(dmd, 'incrementalTreeLoad', False)

            dmd._setObject('UserInterfaceSettings', settings)
Example #16
0
 def setBulkLoadProperty(self, name, value):
     """
     Sets a property that can later be retrieved
     by the marshaller. You will have to check
     the property manually. If set twice it will
     overwrite the previous entry.
     """
     if not hasattr(self, '_props'):
         self._props = {}
     self._props[name] = value
    def cutover(self, dmd):
        if not hasattr(dmd, 'UserInterfaceSettings'):
            settings = UserInterfaceSettings('UserInterfaceSettings')

            # copy settings that were previously on the data root
            settings.enableLiveSearch = getattr(dmd, 'enableLiveSearch', True)
            settings.incrementalTreeLoad = getattr(dmd, 'incrementalTreeLoad',
                                                   False)

            dmd._setObject('UserInterfaceSettings', settings)
Example #18
0
 def setBulkLoadProperty(self, name, value):
     """
     Sets a property that can later be retrieved
     by the marshaller. You will have to check
     the property manually. If set twice it will
     overwrite the previous entry.
     """
     if not hasattr(self, '_props'):
         self._props = {}
     self._props[name] = value
Example #19
0
 def handle(results):
     if hasattr(results, "type") and results.type is HubDown:
         self.log.warning(
             "Collection aborted: %s", results.getErrorMessage()
         )
         return
     self.log.critical(
         "%s is not a valid organizer.", self.options.path
     )
     reactor.running = False
     sys.exit(1)
 def cutover(self, dmd):
     if not hasattr(dmd.Manufacturers, PRODUCT_CLASS_MIGRATED_MARKER):
         for manufacturer in dmd.Manufacturers.values():
             if isinstance(manufacturer, Manufacturer) and hasattr(
                     manufacturer, "products"):
                 for product in manufacturer.products():
                     if hasattr(aq_base(product),
                                "instances") and isinstance(
                                    product.instances, ToManyRelationship):
                         instances = product.instances()
                         product._delObject("instances",
                                            suppress_events=True)
                         for instance in instances:
                             if hasattr(aq_base(instance),
                                        "productClass") and isinstance(
                                            instance.productClass,
                                            ToOneRelationship):
                                 instance._delObject("productClass",
                                                     suppress_events=True)
                                 instance.setProductClass(
                                     product, raiseIndexEvent=False)
Example #21
0
 def _editDetails(self, info, data):
     """
     Will apply every property in data to the info if
     it has that attribute
     @param IInfoBase (or descendant)
     @param Dictionary of the form {propertyName: propertyValue}
     @return IInfoBase with the properties changed
     """
     for key in data.keys():
         if hasattr(info, key):
             setattr(info, key, data[key])
     return info
Example #22
0
 def _editDetails(self, info, data):
     """
     Will apply every property in data to the info if
     it has that attribute
     @param IInfoBase (or descendant)
     @param Dictionary of the form {propertyName: propertyValue}
     @return IInfoBase with the properties changed
     """
     for key in data.keys():
         if hasattr(info, key):
             setattr(info, key, data[key])
     return info
Example #23
0
    def events(self):
        severities = self.getEventSeverities()
        events = {}
        zep = getFacade('zep')
        events = dict((zep.getSeverityName(sev).lower(), counts) for (sev, counts) in severities.iteritems())

        # If the user does not have view permissions, we reset the rainbow
        if hasattr(self, "_object") and not Zuul.checkPermission(ZEN_VIEW, self._object):
            for sev, counts in events.iteritems():
                counts['count'] = 0
                counts['acknowledged_count'] = 0

        return events
Example #24
0
    def getFetchedDataPoint(self, name):
        result = super(BulkMetricLoadMixin, self).getBulkLoadProperty(name)
        if result is not None:
            return result

        # if we load the data and it turns out to be missing or None don't try to fetch again
        if hasattr(self, "_metricsloaded") and self._metricsloaded:
            return result

        self._metricsloaded = True
        facade = Zuul.getFacade('device', self._object.dmd)
        facade.bulkLoadMetricData([self])
        return super(BulkMetricLoadMixin, self).getBulkLoadProperty(name)
Example #25
0
    def render(self, fieldsets=True):
        ob = self.context._object

        # find out if we can edit this form
        readOnly = True
        if hasattr(ob, 'isUserCreated'):
            readOnly = not ob.isUserCreated()

        # construct the form
        form = super(ComponentFormBuilder, self).render(fieldsets,
                                                        readOnly=readOnly)
        form['userCanModify'] = not readOnly or self.hasAlwaysEditableField
        return form
 def cutover(self, dmd):
     # Create a jobtype -> jobname lookup table for registered jobs.
     table = dict(
             (task.getJobType(), task.name)
             for task in (
                 t for t in current_app.tasks.values()
                     if isinstance(t, Job)
             )
         )
     # Update/add job_name field for all JobRecords.
     for rec in dmd.JobManager.getAllJobs():
         if not hasattr(rec, "job_name") or not rec.job_name:
             rec.job_name = table.get(rec.job_type)
 def cutover(self, dmd):
     jmgr = getattr(dmd, 'JobManager', None)
     if jmgr:
         log.info("Removing old job records")
         for ob in ICatalogTool(dmd.JobManager).search():
             try:
                 if ob.getPath() != '/zport/dmd/JobManager':
                     dmd.global_catalog._catalog.uncatalogObject(ob.getPath())
             except Exception:
                 log.warn("Error removing %s", ob.getPath())
         log.info("Removing old job relationship")
         if hasattr(jmgr, 'jobs'):
             jmgr._delOb('jobs')
Example #28
0
    def getFetchedDataPoint(self, name):
        result = super(BulkMetricLoadMixin, self).getBulkLoadProperty(name)
        if result is not None:
            return result

        # if we load the data and it turns out to be missing or None don't try to fetch again
        if hasattr(self, "_metricsloaded") and self._metricsloaded:
            return result

        self._metricsloaded = True
        facade = Zuul.getFacade('device', self._object.dmd)
        facade.bulkLoadMetricData([self])
        return super(BulkMetricLoadMixin, self).getBulkLoadProperty(name)
Example #29
0
    def render(self, fieldsets=True):
        ob = self.context._object

        # find out if we can edit this form
        readOnly = True
        if hasattr(ob, 'isUserCreated'):
            readOnly = not ob.isUserCreated()

        # construct the form
        form = super(ComponentFormBuilder, self).render(fieldsets,
                                                        readOnly=readOnly)
        form['userCanModify'] = not readOnly or self.hasAlwaysEditableField
        return form
 def cutover(self, dmd):
     # This needs to get run a second time after re-indexing has occurred
     run_count = getattr(dmd.Manufacturers, PRODUCT_CLASS_MIGRATED_MARKER, 0)
     if run_count < 2:
         for brain in IModelCatalogTool(dmd).search("Products.ZenModel.MEProduct.MEProduct"):
             try:
                 product = brain.getObject()
             except KeyError:
                 log.warn("Found stale object in catalog: {}".format(brain.getPath()))
             else:
                 if hasattr(aq_base(product), "productClass") and isinstance(product.productClass, ToOneRelationship):
                     if not product.productClass():
                         product._delObject("productClass", suppress_events=True)
         setattr(dmd.Manufacturers, PRODUCT_CLASS_MIGRATED_MARKER, run_count + 1)
 def cutover(self, dmd):
     jmgr = getattr(dmd, 'JobManager', None)
     if jmgr:
         log.info("Removing old job records")
         for ob in ICatalogTool(dmd.JobManager).search():
             try:
                 if ob.getPath() != '/zport/dmd/JobManager':
                     dmd.global_catalog._catalog.uncatalogObject(
                         ob.getPath())
             except Exception:
                 log.warn("Error removing %s", ob.getPath())
         log.info("Removing old job relationship")
         if hasattr(jmgr, 'jobs'):
             jmgr._delOb('jobs')
Example #32
0
    def events(self):
        severities = self.getEventSeverities()
        events = {}
        zep = getFacade('zep')
        events = dict((zep.getSeverityName(sev).lower(), counts)
                      for (sev, counts) in severities.iteritems())

        # If the user does not have view permissions, we reset the rainbow
        if hasattr(self, "_object") and not Zuul.checkPermission(
                ZEN_VIEW, self._object):
            for sev, counts in events.iteritems():
                counts['count'] = 0
                counts['acknowledged_count'] = 0

        return events
 def cutover(self, dmd):
     # This needs to get run a second time after re-indexing has occurred
     run_count = getattr(dmd.Manufacturers, PRODUCT_CLASS_MIGRATED_MARKER,
                         0)
     if run_count < 2:
         for brain in IModelCatalogTool(dmd).search(
                 "Products.ZenModel.MEProduct.MEProduct"):
             try:
                 product = brain.getObject()
             except KeyError:
                 log.warn("Found stale object in catalog: {}".format(
                     brain.getPath()))
             else:
                 if hasattr(aq_base(product),
                            "productClass") and isinstance(
                                product.productClass, ToOneRelationship):
                     if not product.productClass():
                         product._delObject("productClass",
                                            suppress_events=True)
         setattr(dmd.Manufacturers, PRODUCT_CLASS_MIGRATED_MARKER,
                 run_count + 1)
 def cutover(self, dmd):
     if not hasattr(dmd, NotificationSubscriptionManager.root):
         manage_addNotificationSubscriptionManager(dmd)
Example #35
0
 def get_network_cache(self, version=None):
     if not hasattr(self.getNetworkRoot(version), self.NETWORK_CACHE_ATTR):
         self.initialize_network_cache(self.getNetworkRoot(version))
     return getattr(self.getNetworkRoot(version), self.NETWORK_CACHE_ATTR)
Example #36
0
def _create_legacy_catalog_adapter(mgr, catalog_name):
    from Products.Zuul.catalog.legacy import LegacyCatalogAdapter
    if hasattr(mgr, catalog_name):
        mgr._delObject(catalog_name)
    setattr(mgr, catalog_name, LegacyCatalogAdapter(mgr.dmd, catalog_name))
Example #37
0
 def get_device_networks_from_cache(self, device_id):
     if hasattr(self, "networks_per_device_cache"):
         return self.networks_per_device_cache.get_device_networks(device_id)
     else:
         return set()
Example #38
0
 def remove_device_from_cache(self, device_id):
     if hasattr(self, "networks_per_device_cache"):
         self.networks_per_device_cache.remove_device(device_id)
Example #39
0
def _create_legacy_catalog_adapter(mgr, catalog_name):
    from Products.Zuul.catalog.legacy import LegacyCatalogAdapter
    if hasattr(mgr, catalog_name):
        mgr._delObject(catalog_name)
    setattr(mgr, catalog_name, LegacyCatalogAdapter(mgr.dmd, catalog_name))
Example #40
0
 def unregister_devtype(self, description, protocol):
     t = (description, protocol)
     if hasattr(self, 'devtypes'):
         if t in self.devtypes:
             self.devtypes.remove(t)
             self._p_changed = True
 def cutover(self, dmd):
     if not hasattr(dmd, 'IPv6Networks'):
         manage_addIpNetwork(dmd, "IPv6Networks", netmask=64, version=6)
Example #42
0
 def add_device_network_to_cache(self, device_id, network_id):
     if hasattr(self, "networks_per_device_cache"):
         self.networks_per_device_cache.add_device_network(
             device_id, network_id)
Example #43
0
 def remove_device_from_cache(self, device_id):
     if hasattr(self, "networks_per_device_cache"):
         self.networks_per_device_cache.remove_device(device_id)
Example #44
0
 def get_device_networks_from_cache(self, device_id):
     if hasattr(self, "networks_per_device_cache"):
         return self.networks_per_device_cache.get_device_networks(
             device_id)
     else:
         return set()
Example #45
0
 def cutover(self, dmd):
     if not hasattr(dmd, TriggerManager.root):
         manage_addTriggerManager(dmd)
Example #46
0
from Products.ZenUtils.Watchdog import Reporter
from Products.Zuul.utils import safe_hasattr as hasattr
from Products.ZenUtils.dumpthreads import dump_threads

# Daemon creation code below based on Recipe by Chad J. Schroeder
# File mode creation mask of the daemon.
UMASK = 0022

# Default working directory for the daemon.
WORKDIR = "/"

# only close stdin/out/err
MAXFD = 3

# The standard I/O file descriptors are redirected to /dev/null by default.
REDIRECT_TO = os.devnull if hasattr(os, "devnull") else "/dev/null"


class ZenDaemon(CmdBase):
    """
    Base class for creating daemons
    """

    pidfile = None

    def __init__(self, noopts=0, keeproot=False):
        """
        Initializer that takes care of basic daemon options.
        Creates a PID file.
        """
        super(ZenDaemon, self).__init__(noopts)
Example #47
0
 def add_device_network_to_cache(self, device_id, network_id):
     if hasattr(self, "networks_per_device_cache"):
         self.networks_per_device_cache.add_device_network(device_id, network_id)