def getComponentGraphs(self, uid, meta_type, graphId, allOnSame=False): obj = self._getObject(uid) # get the components we are rendering graphs for query = {} query['meta_type'] = meta_type components = list(getObjectsFromCatalog(obj.componentSearch, query, log)) graphDef = None # get the graph def for comp in components: # find the first instance for graph, ctx in comp.getGraphObjects(): if graph.id == graphId: graphDef = graph break if graphDef: break if not graphDef: return [] if allOnSame: return [MultiContextMetricServiceGraphDefinition(graphDef, components)] graphs = [] for comp in components: info = getMultiAdapter((graph, comp), IMetricServiceGraphDefinition) graphs.append(info) return graphs
def getGraphDefinitionsForComponent(self, *args, **kwargs): """Return dictionary of meta_type to associated graph definitions. component.getGraphObjects() can return pairs of (graphDef, context) where context is not the component. One example is FileSystem.getGraphObjects returning pairs for graphs on its underlying HardDisk. We have to make sure to return these graph definitions under their meta_type, not component's meta_type. We accept *args and **kwargs to be less brittle in case the monkeypatched method changes signature in an otherwise unaffecting way. args is expected to look something like this: ('/zport/dmd/Devices/Server/SSH/Linux/devices/centos-7',) kwargs is expected to look like this: {} """ obj = self._getObject(args[0]) # Limit the patch scope to this ZenPack even though it'd probably be a # good idea for everything. if not isinstance(obj, LinuxDevice): return original(self, *args, **kwargs) # NOQA graphDefs = collections.defaultdict(set) for component in getObjectsFromCatalog(obj.componentSearch): for graphDef, context in component.getGraphObjects(): graphDefs[context.meta_type].add(graphDef.id) return graphDefs
def getComponentGraphs(self, uid, meta_type, graphId, allOnSame=False): obj = self._getObject(uid) # get the components we are rendering graphs for query = {} query['meta_type'] = meta_type if isinstance(obj, ComponentGroup): components = [comp for comp in obj.getComponents() if comp.meta_type == meta_type] else: components = list(getObjectsFromCatalog(obj.componentSearch, query, log)) graphDef = None # get the graph def for comp in components: # find the first instance for graph, ctx in comp.getGraphObjects(): if graph.id == graphId: graphDef = graph break if graphDef: break if not graphDef: return [] if allOnSame: return [MultiContextMetricServiceGraphDefinition(graphDef, components)] graphs = [] for comp in components: info = getMultiAdapter((graph, comp), IMetricServiceGraphDefinition) graphs.append(info) return graphs
def getSubDevicesGen(self): """get all the devices under and instance of a DeviceGroup""" catalog = getToolByName(self.dmd.Devices, self.dmd.Devices.default_catalog) if not "path" in catalog.indexes(): LOG.warn("Please run zenmigrate to create device path indexes.") yield self.getSubDevicesGen_recursive(devfilter=None) devices = getObjectsFromCatalog(catalog, {"path": "/".join(self.getPhysicalPath())}, LOG) devices = ifilter(lambda dev: self.checkRemotePerm(ZEN_VIEW, dev), devices) for device in devices: yield device
def getGraphDefinitionsForComponent(self, uid): graphDefs = dict() obj = self._getObject(uid) if isinstance(obj, ComponentGroup): components = obj.getComponents() else: components = list(getObjectsFromCatalog(obj.componentSearch, None, log)) for component in components: if graphDefs.get(component.meta_type): continue graphDefs[component.meta_type] = [graphDef.id for graphDef, _ in component.getGraphObjects()] return graphDefs
def getSubDevicesGen(self): """get all the devices under and instance of a DeviceGroup""" catalog = getToolByName(self.dmd.Devices, self.dmd.Devices.default_catalog) if not 'path' in catalog.indexes(): LOG.warn('Please run zenmigrate to create device path indexes.') yield self.getSubDevicesGen_recursive(devfilter=None) devices = getObjectsFromCatalog( catalog, {'path': "/".join(self.getPhysicalPath())}, LOG) devices = ifilter(lambda dev: self.checkRemotePerm(ZEN_VIEW, dev), devices) for device in devices: yield device
def getGraphDefinitionsForComponent(self, uid): graphDefs = dict() obj = self._getObject(uid) if isinstance(obj, ComponentGroup): components = obj.getComponents() else: components = list(getObjectsFromCatalog(obj.componentSearch, None, log)) for component in components: current_def = [graphDef.id for graphDef, _ in component.getGraphObjects()] if component.meta_type in graphDefs: prev_def = graphDefs[component.meta_type] graphDefs[component.meta_type] = set(prev_def) | set(current_def) else: graphDefs[component.meta_type] = current_def return graphDefs
def getSubDevices(self, devfilter=None): """ Get all the devices under an instance of a DeviceOrganizer @param devfilter: Filter function applied to returned list @type devfilter: function @return: Devices @rtype: list """ catalog = getToolByName(self.dmd.Devices, self.dmd.Devices.default_catalog) if not "path" in catalog.indexes(): LOG.warn("Please run zenmigrate to create device path indexes.") return self.getSubDevices_recursive(devfilter) devices = getObjectsFromCatalog(catalog, {"path": "/".join(self.getPhysicalPath())}, LOG) devices = ifilter(lambda dev: self.checkRemotePerm(ZEN_VIEW, dev), devices) devices = ifilter(devfilter, devices) return list(devices)
def getGraphDefinitionsForComponent(self, *args, **kwargs): """Return dictionary of meta_type to associated graph definitions. component.getGraphObjects() can return pairs of (graphDef, context) where context is not the component. One example is FileSystem.getGraphObjects returning pairs for graphs on its underlying HardDisk. We have to make sure to return these graph definitions under their meta_type, not component's meta_type. We accept *args and **kwargs to be less brittle in case the monkeypatched method changes signature in an otherwise unaffecting way. args is expected to look something like this: ('/zport/dmd/Devices/OpenStack/Infrastructure/devices/OpenStackInfrKilo',) kwargs is expected to look like this: {} """ obj = self._getObject(args[0]) # Limit the patch scope to this ZenPack if not isinstance(obj, Endpoint): return original(self, *args, **kwargs) graphDefs = collections.defaultdict(set) for component in getObjectsFromCatalog(obj.componentSearch): for graphDef, context in component.getGraphObjects(): graphDefs[context.meta_type].add(graphDef.id) graphDefs = { meta_type: graphDefs[meta_type] for meta_type in graphDefs.iterkeys() if meta_type.startswith('OpenStackInfrastructure') and meta_type != 'OpenStackInfrastructureEndpoint' } return graphDefs
def getGraphDefinitionsForComponent(self, *args, **kwargs): """Return dictionary of meta_type to associated graph definitions. component.getGraphObjects() can return pairs of (graphDef, context) where context is not the component. One example is FileSystem.getGraphObjects returning pairs for graphs on its underlying HardDisk. We have to make sure to return these graph definitions under their meta_type, not component's meta_type. We accept *args and **kwargs to be less brittle in case the monkeypatched method changes signature in an otherwise unaffecting way. args is expected to look something like this: ('/zport/dmd/Devices/OpenStack/Infrastructure/devices/OpenStackInfrKilo',) kwargs is expected to look like this: {} """ obj = self._getObject(args[0]) # Limit the patch scope to this ZenPack if not isinstance(obj, Endpoint): return original(self, *args, **kwargs) graphDefs = collections.defaultdict(set) for component in getObjectsFromCatalog(obj.componentSearch): for graphDef, context in component.getGraphObjects(): graphDefs[context.meta_type].add(graphDef.id) graphDefs = { meta_type:graphDefs[meta_type] for meta_type in graphDefs.iterkeys() if meta_type.startswith('OpenStackInfrastructure') and meta_type != 'OpenStackInfrastructureEndpoint'} return graphDefs
def getSubDevices(self, devfilter=None): """ Get all the devices under an instance of a DeviceOrganizer @param devfilter: Filter function applied to returned list @type devfilter: function @return: Devices @rtype: list """ catalog = getToolByName(self.dmd.Devices, self.dmd.Devices.default_catalog) if not 'path' in catalog.indexes(): LOG.warn('Please run zenmigrate to create device path indexes.') return self.getSubDevices_recursive(devfilter) devices = getObjectsFromCatalog( catalog, {'path': "/".join(self.getPhysicalPath())}, LOG) devices = ifilter(lambda dev: self.checkRemotePerm(ZEN_VIEW, dev), devices) devices = ifilter(devfilter, devices) return list(devices)