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)
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 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))
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)
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
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)
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 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, '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)
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 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)
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
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 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)
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')
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')
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)
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)
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))
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()
def remove_device_from_cache(self, device_id): if hasattr(self, "networks_per_device_cache"): self.networks_per_device_cache.remove_device(device_id)
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)
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)
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()
def cutover(self, dmd): if not hasattr(dmd, TriggerManager.root): manage_addTriggerManager(dmd)
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)
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)