예제 #1
0
    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
예제 #3
0
    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
예제 #4
0
    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 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
예제 #6
0
    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
예제 #8
0
    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)