예제 #1
0
def initializeGlobalCatalog(catalog):
    catalog.addIndex('id', makeCaseSensitiveFieldIndex('id'))
    catalog.addIndex('uid', makeCaseSensitiveFieldIndex('uid'))
    catalog.addIndex('meta_type', makeCaseSensitiveFieldIndex('meta_type'))
    catalog.addIndex('name', makeCaseInsensitiveFieldIndex('name'))
    catalog.addIndex('ipAddress', makeCaseSensitiveFieldIndex('ipAddress'))
    catalog.addIndex('objectImplements',
                     makeCaseSensitiveKeywordIndex('objectImplements'))
    catalog.addIndex('allowedRolesAndUsers',
                     makeCaseSensitiveKeywordIndex('allowedRolesAndUsers'))
    catalog.addIndex('monitored', makeCaseSensitiveFieldIndex('monitored'))
    catalog.addIndex('path', makeMultiPathIndex('path'))
    catalog.addIndex('collectors', makeCaseSensitiveKeywordIndex('collectors'))
    catalog.addIndex('productKeys',
                     makeCaseSensitiveKeywordIndex('productKeys'))
    catalog.addIndex('searchKeywords',
                     makeCaseInsensitiveKeywordIndex('searchKeywords'))
    catalog.addIndex('macAddresses',
                     makeCaseInsensitiveKeywordIndex('macAddresses'))

    catalog.addColumn('id')
    catalog.addColumn('uuid')
    catalog.addColumn('name')
    catalog.addColumn('meta_type')
    catalog.addColumn('monitored')
    catalog.addColumn('collectors')
    catalog.addColumn('zProperties')
    catalog.addColumn('searchIcon')
    catalog.addColumn('searchExcerpt')
    def setUp(cls):
        zope.component.testing.setUp(cls)
        zope.component.provideAdapter(DefaultTraversable, (None,))
        import Products.ZenTestCase
        zcml.load_config('testing-noevent.zcml', Products.ZenTestCase)
        import Products.ZenTestCase
        zcml.load_config('testing-noevent.zcml', Products.ZenTestCase)
        import ZenPacks.zenoss.OpenStackInfrastructure
        zcml.load_config('configure.zcml', ZenPacks.zenoss.OpenStackInfrastructure)

        # Silly trickery here.
        # We create a single TestCase, and share the environment that it creates
        # across all our ModelTestCases (which we have inheriting from unittest.TestCase
        # instead)
        class DummyTestCase(zenpacklib.TestCase):
            disableLogging = False
            maxDiff = None
            zenpack_module_name = 'ZenPacks.zenoss.OpenStackInfrastructure'

            def test_donothing(self):
                pass
        cls.tc = DummyTestCase("test_donothing")
        cls.tc.setUp()
        cls.tc.afterSetUp()
        cls.tc.dmd.REQUEST = None

        # Workaround for IMP-389:
        # When Impact 5.2.1-5.2.3 (at least) are installed, setProdState
        # is patched to re-index the object in the global catalog specifically
        # on the productionState column, but at least on older verions of RM,
        # the sandboxed version of global_catalog does not index that column,
        # which causes setProdState to fail.  Add the index for now, to
        # work around this.
        if (hasattr(cls.tc.dmd.global_catalog, 'indexes') and
                'productionState' not in cls.tc.dmd.global_catalog.indexes()):
            from Products.ZenUtils.Search import makeCaseSensitiveFieldIndex
            cls.tc.dmd.global_catalog.addIndex('productionState', makeCaseSensitiveFieldIndex('productionState'))
            cls.tc.dmd.global_catalog.addColumn('productionState')

        dc = cls.tc.dmd.Devices.createOrganizer('/Devices/OpenStack/Infrastructure')

        dc.setZenProperty('zPythonClass', 'ZenPacks.zenoss.OpenStackInfrastructure.Endpoint')
        dc.setZenProperty('zOpenStackHostDeviceClass', '/Server/SSH/Linux/NovaHost')
        dc.setZenProperty('zOpenStackRegionName', 'RegionOne')
        dc.setZenProperty('zOpenStackAuthUrl', 'http://1.2.3.4:5000/v2.0')
        dc.setZenProperty('zOpenStackNovaApiHosts', [])
        dc.setZenProperty('zOpenStackExtraHosts', [])
        dc.setZenProperty('zOpenStackHostMapToId', [])
        dc.setZenProperty('zOpenStackHostMapSame', [])
        dc.setZenProperty('zOpenStackHostLocalDomain', '')
        dc.setZenProperty('zOpenStackExtraApiEndpoints', [])

        # Create catalog
        try:
            from Products.ZenTestCase.BaseTestCase import init_model_catalog_for_tests
            init_model_catalog_for_tests()
        except ImportError:
            pass
예제 #3
0
    def updateNetworkCatalog(self, zcat):
        idxs = []
        # field indexes
        for indexName in fieldIndexes:
            try:
                zcat._catalog.addIndex(
                    indexName, makeCaseInsensitiveFieldIndex(indexName))
                idxs.append(indexName)
            except CatalogError:
                pass
        try:
            zcat._catalog.addIndex(
                'ipAddressAsInt',
                makeCaseSensitiveFieldIndex('ipAddressAsInt'))
            idxs.append(indexName)
        except CatalogError:
            pass

        # permissions
        try:
            zcat._catalog.addIndex(
                'allowedRolesAndUsers',
                makeCaseSensitiveKeywordIndex('allowedRolesAndUsers'))
            idxs.append('allowedRolesAndUsers')
        except CatalogError:
            pass
        # path index
        try:
            zcat._catalog.addIndex('path', makeMultiPathIndex('path'))
            idxs.append('path')
        except CatalogError:
            pass

        # json in the meta data
        try:
            zcat.addColumn('details')
        except CatalogError:
            pass

        i = 0
        tstart = time.time()
        starttotal = time.time()
        for brain in zcat():
            obj = brain.getObject()
            # we don't want to reindex the links on migrate so explicitly index
            # from the catalog
            obj.index_object(idxs=idxs)
            i += 1
            if i % 200 == 0:
                log.info("rate=%.2f/sec count=%d",
                         200 / (time.time() - tstart), i)
                tstart = time.time()
        log.info("Finished total time=%.2f rate=%.2f count=%d",
                 time.time() - starttotal, i / (time.time() - starttotal), i)
예제 #4
0
def initializeGlobalCatalog(catalog):
    catalog.addIndex('id', makeCaseSensitiveFieldIndex('id'))
    catalog.addIndex('uid', makeCaseSensitiveFieldIndex('uid'))
    catalog.addIndex('meta_type', makeCaseSensitiveFieldIndex('meta_type'))
    catalog.addIndex('name', makeCaseInsensitiveFieldIndex('name'))
    catalog.addIndex('ipAddress', makeCaseSensitiveFieldIndex('ipAddress'))
    catalog.addIndex('objectImplements', makeCaseSensitiveKeywordIndex('objectImplements'))
    catalog.addIndex('allowedRolesAndUsers', makeCaseSensitiveKeywordIndex('allowedRolesAndUsers'))
    catalog.addIndex('productionState', makeCaseSensitiveFieldIndex('productionState'))
    catalog.addIndex('monitored', makeCaseSensitiveFieldIndex('monitored'))
    catalog.addIndex('path', makeMultiPathIndex('path'))
    catalog.addIndex('collectors', makeCaseSensitiveKeywordIndex('collectors'))
    catalog.addIndex('productKeys', makeCaseSensitiveKeywordIndex('productKeys'))
    catalog.addIndex('searchKeywords', makeCaseInsensitiveKeywordIndex('searchKeywords'))
    catalog.addIndex('macAddresses', makeCaseInsensitiveKeywordIndex('macAddresses'))

    catalog.addColumn('id')
    catalog.addColumn('uuid')
    catalog.addColumn('name')
    catalog.addColumn('meta_type')
    catalog.addColumn('monitored')
    catalog.addColumn('productionState')
    catalog.addColumn('collectors')
    catalog.addColumn('zProperties')
    catalog.addColumn('searchIcon')
    catalog.addColumn('searchExcerpt')
예제 #5
0
    def createCatalog(self):
        """make the catalog for device searching"""
        from Products.ZCatalog.ZCatalog import manage_addZCatalog

        # XXX convert to ManagableIndex
        manage_addZCatalog(self, self.default_catalog, self.default_catalog)
        zcat = self._getOb(self.default_catalog)
        cat = zcat._catalog
        cat.addIndex('id', makeCaseInsensitiveFieldIndex('id'))

        zcat._catalog.addIndex('ipAddressAsInt',
                               makeCaseSensitiveFieldIndex('ipAddressAsInt'))
        zcat._catalog.addIndex('path', makeMultiPathIndex('path'))
예제 #6
0
    def createCatalog(self):
        """make the catalog for device searching"""
        from Products.ZCatalog.ZCatalog import manage_addZCatalog

        # XXX convert to ManagableIndex
        manage_addZCatalog(self, self.default_catalog,
                            self.default_catalog)
        zcat = self._getOb(self.default_catalog)
        cat = zcat._catalog
        cat.addIndex('id', makeCaseInsensitiveFieldIndex('id'))

        zcat._catalog.addIndex('ipAddressAsInt',  makeCaseSensitiveFieldIndex('ipAddressAsInt'))
        zcat._catalog.addIndex('path', makeMultiPathIndex('path'))
    def updateNetworkCatalog(self, zcat):
        idxs = []
        # field indexes
        for indexName in fieldIndexes:
            try:
                zcat._catalog.addIndex(indexName, makeCaseInsensitiveFieldIndex(indexName))
                idxs.append(indexName)
            except CatalogError:
                pass
        try:
            zcat._catalog.addIndex('ipAddressAsInt',  makeCaseSensitiveFieldIndex('ipAddressAsInt'))
            idxs.append(indexName)
        except CatalogError:
            pass

        # permissions
        try:
            zcat._catalog.addIndex('allowedRolesAndUsers', makeCaseSensitiveKeywordIndex('allowedRolesAndUsers'))
            idxs.append('allowedRolesAndUsers')
        except CatalogError:
            pass
        # path index
        try:
            zcat._catalog.addIndex('path', makeMultiPathIndex('path'))
            idxs.append('path')
        except CatalogError:
            pass

        # json in the meta data
        try:
            zcat.addColumn('details')
        except CatalogError:
            pass

        i = 0
        tstart=time.time()
        starttotal = time.time()
        for brain in zcat():
            obj = brain.getObject()
            # we don't want to reindex the links on migrate so explicitly index
            # from the catalog
            obj.index_object(idxs=idxs)
            i+=1
            if i % 200 == 0:
                log.info("rate=%.2f/sec count=%d", 200/(time.time()-tstart), i)
                tstart=time.time()
        log.info("Finished total time=%.2f rate=%.2f count=%d",
                time.time()-starttotal, i/(time.time()-starttotal),i)
def CreateZenPackPersistenceCatalog(dmd):
    '''
    Create the zenPackPersistence catalog if it does not exist.
    Return the catalog
    '''
    from Products.ZCatalog.ZCatalog import manage_addZCatalog
    from Products.ZenUtils.Search import makeCaseSensitiveFieldIndex
    zcat = getattr(dmd, ZENPACK_PERSISTENCE_CATALOG, None)
    if zcat is None:
        manage_addZCatalog(dmd, ZENPACK_PERSISTENCE_CATALOG,
                                ZENPACK_PERSISTENCE_CATALOG)
        zcat = dmd._getOb(ZENPACK_PERSISTENCE_CATALOG)
        cat = zcat._catalog
        cat.addIndex('getZenPackName',makeCaseSensitiveFieldIndex('getZenPackName'))
        cat.addColumn('id')
        cat.addColumn('getPrimaryId')
    return zcat
예제 #9
0
def CreateZenPackPersistenceCatalog(dmd):
    '''
    Create the zenPackPersistence catalog if it does not exist.
    Return the catalog
    '''
    from Products.ZCatalog.ZCatalog import manage_addZCatalog
    from Products.ZenUtils.Search import makeCaseSensitiveFieldIndex
    zcat = getattr(dmd, ZENPACK_PERSISTENCE_CATALOG, None)
    if zcat is None:
        manage_addZCatalog(dmd, ZENPACK_PERSISTENCE_CATALOG,
                           ZENPACK_PERSISTENCE_CATALOG)
        zcat = dmd._getOb(ZENPACK_PERSISTENCE_CATALOG)
        cat = zcat._catalog
        cat.addIndex('getZenPackName',
                     makeCaseSensitiveFieldIndex('getZenPackName'))
        cat.addColumn('id')
        cat.addColumn('getPrimaryId')
    return zcat
예제 #10
0
def CreateRRDTemplatesCatalog(dmd, rebuild=False):
    """
    Create the searchRRDTemplates catalog if it does not already exist.
    Return the catalog.
    """
    from Products.ZCatalog.ZCatalog import manage_addZCatalog
    from Products.ZenUtils.Search import makeCaseSensitiveFieldIndex, \
                                            makePathIndex
    zcat = getattr(dmd, RRDTEMPLATE_CATALOG, None)
    if zcat and rebuild:
        dmd._delObject(RRDTEMPLATE_CATALOG)
        zcat = None
    if zcat is None:
        manage_addZCatalog(dmd, RRDTEMPLATE_CATALOG, RRDTEMPLATE_CATALOG)
        zcat = dmd._getOb(RRDTEMPLATE_CATALOG)
        cat = zcat._catalog
        cat.addIndex('id', makeCaseSensitiveFieldIndex('id'))
        cat.addIndex('getPhysicalPath', makePathIndex('getPhysicalPath'))
    return zcat
예제 #11
0
def CreateRRDTemplatesCatalog(dmd, rebuild=False):
    """
    Create the searchRRDTemplates catalog if it does not already exist.
    Return the catalog.
    """
    from Products.ZCatalog.ZCatalog import manage_addZCatalog
    from Products.ZenUtils.Search import makeCaseSensitiveFieldIndex, \
                                            makePathIndex
    zcat = getattr(dmd, RRDTEMPLATE_CATALOG, None)
    if zcat and rebuild:
        dmd._delObject(RRDTEMPLATE_CATALOG)
        zcat = None
    if zcat is None:
        manage_addZCatalog(dmd, RRDTEMPLATE_CATALOG, RRDTEMPLATE_CATALOG)
        zcat = dmd._getOb(RRDTEMPLATE_CATALOG)
        cat = zcat._catalog
        cat.addIndex('id', makeCaseSensitiveFieldIndex('id'))
        cat.addIndex('getPhysicalPath', makePathIndex('getPhysicalPath'))
    return zcat
예제 #12
0
    def createCatalog(self):
        """make the catalog for device searching"""
        from Products.ZCatalog.ZCatalog import manage_addZCatalog

        # XXX convert to ManagableIndex
        manage_addZCatalog(self, self.default_catalog,
                            self.default_catalog)
        zcat = self._getOb(self.default_catalog)
        cat = zcat._catalog
        cat.addIndex('id', makeCaseInsensitiveFieldIndex('id'))
        zcat.addColumn('getPrimaryId')

        # add new columns
        fieldIndexes = ['getInterfaceName', 'getDeviceName', 'getInterfaceDescription', 'getInterfaceMacAddress']
        for indexName in fieldIndexes:
            zcat._catalog.addIndex(indexName, makeCaseInsensitiveFieldIndex(indexName))
        zcat._catalog.addIndex('allowedRolesAndUsers', makeCaseSensitiveKeywordIndex('allowedRolesAndUsers'))
        zcat._catalog.addIndex('ipAddressAsInt',  makeCaseSensitiveFieldIndex('ipAddressAsInt'))
        zcat._catalog.addIndex('path', makeMultiPathIndex('path'))
        zcat.addColumn('details')
    def setUp(cls):
        zope.component.testing.setUp(cls)
        zope.component.provideAdapter(DefaultTraversable, (None, ))
        import Products.ZenTestCase
        zcml.load_config('testing-noevent.zcml', Products.ZenTestCase)
        import Products.ZenTestCase
        zcml.load_config('testing-noevent.zcml', Products.ZenTestCase)
        import ZenPacks.zenoss.OpenStackInfrastructure
        zcml.load_config('configure.zcml',
                         ZenPacks.zenoss.OpenStackInfrastructure)

        # Silly trickery here.
        # We create a single TestCase, and share the environment that it creates
        # across all our ModelTestCases (which we have inheriting from unittest.TestCase
        # instead)
        class DummyTestCase(zenpacklib.TestCase):
            disableLogging = False
            maxDiff = None
            zenpack_module_name = 'ZenPacks.zenoss.OpenStackInfrastructure'

            def test_donothing(self):
                pass

        cls.tc = DummyTestCase("test_donothing")
        cls.tc.setUp()
        cls.tc.afterSetUp()
        cls.tc.dmd.REQUEST = None

        # Workaround for IMP-389:
        # When Impact 5.2.1-5.2.3 (at least) are installed, setProdState
        # is patched to re-index the object in the global catalog specifically
        # on the productionState column, but at least on older verions of RM,
        # the sandboxed version of global_catalog does not index that column,
        # which causes setProdState to fail.  Add the index for now, to
        # work around this.
        if (hasattr(cls.tc.dmd.global_catalog, 'indexes') and 'productionState'
                not in cls.tc.dmd.global_catalog.indexes()):
            from Products.ZenUtils.Search import makeCaseSensitiveFieldIndex
            cls.tc.dmd.global_catalog.addIndex(
                'productionState',
                makeCaseSensitiveFieldIndex('productionState'))
            cls.tc.dmd.global_catalog.addColumn('productionState')

        dc = cls.tc.dmd.Devices.createOrganizer(
            '/Devices/OpenStack/Infrastructure')

        dc.setZenProperty('zPythonClass',
                          'ZenPacks.zenoss.OpenStackInfrastructure.Endpoint')
        dc.setZenProperty('zOpenStackHostDeviceClass',
                          '/Server/SSH/Linux/NovaHost')
        dc.setZenProperty('zOpenStackRegionName', 'RegionOne')
        dc.setZenProperty('zOpenStackAuthUrl', 'http://1.2.3.4:5000/v2.0')
        dc.setZenProperty('zOpenStackNovaApiHosts', [])
        dc.setZenProperty('zOpenStackExtraHosts', [])
        dc.setZenProperty('zOpenStackHostMapToId', [])
        dc.setZenProperty('zOpenStackHostMapSame', [])
        dc.setZenProperty('zOpenStackHostLocalDomain', '')
        dc.setZenProperty('zOpenStackExtraApiEndpoints', [])

        # Create catalog
        try:
            from Products.ZenTestCase.BaseTestCase import init_model_catalog_for_tests
            init_model_catalog_for_tests()
        except ImportError:
            pass
    def afterSetUp(self):
        super(TestModel, self).afterSetUp()

        # Workaround for IMP-389:
        # When Impact 5.2.1-5.2.3 (at least) are installed, setProdState
        # is patched to re-index the object in the global catalog specifically
        # on the productionState column, but at least on older verions of RM,
        # the sandboxed version of global_catalog does not index that column,
        # which causes setProdState to fail.  Add the index for now, to
        # work around this.
        if (hasattr(self.dmd.global_catalog, 'indexes') and
                'productionState' not in self.dmd.global_catalog.indexes()):
            from Products.ZenUtils.Search import makeCaseSensitiveFieldIndex
            self.dmd.global_catalog.addIndex('productionState', makeCaseSensitiveFieldIndex('productionState'))
            self.dmd.global_catalog.addColumn('productionState')

        # Patch to remove DNS dependencies
        def getHostByName(name):
            return MOCK_DNS.get(name)

        def resolve_names(names):
            result = {}
            for name in names:
                result[name] = MOCK_DNS.get(name)
            return defer.maybeDeferred(lambda: result)

        self._real_resolve_names = hostmap.resolve_names
        hostmap.resolve_names = resolve_names

        self._real_getHostByName = Device.getHostByName
        Device.getHostByName = getHostByName

        dc = self.dmd.Devices.createOrganizer('/Devices/OpenStack/Infrastructure')

        dc.setZenProperty('zPythonClass', 'ZenPacks.zenoss.OpenStackInfrastructure.Endpoint')
        dc.setZenProperty('zOpenStackHostDeviceClass', '/Server/SSH/Linux/NovaHost')
        dc.setZenProperty('zOpenStackRegionName', 'RegionOne')
        dc.setZenProperty('zOpenStackAuthUrl', 'http://1.2.3.4:5000/v2.0')
        dc.setZenProperty('zOpenStackNovaApiHosts', [])
        dc.setZenProperty('zOpenStackExtraHosts', [])
        dc.setZenProperty('zOpenStackHostMapToId', [])
        dc.setZenProperty('zOpenStackHostMapSame', [])
        dc.setZenProperty('zOpenStackHostLocalDomain', '')
        dc.setZenProperty('zOpenStackExtraApiEndpoints', [])

        self.d = dc.createInstance('zenoss.OpenStackInfrastructure.testDevice')
        self.d.setPerformanceMonitor('localhost')
        self.d.index_object()
        notify(IndexingEvent(self.d))

        self.applyDataMap = ApplyDataMap()._applyDataMap

        # Required to prevent erroring out when trying to define viewlets in
        # ../browser/configure.zcml.
        import zope.viewlet
        zcml.load_config('meta.zcml', zope.viewlet)

        import ZenPacks.zenoss.OpenStackInfrastructure
        zcml.load_config('configure.zcml', ZenPacks.zenoss.OpenStackInfrastructure)

        self._loadBadHosts()
        self._loadZenossData()
    def afterSetUp(self):
        super(TestModel, self).afterSetUp()

        # Workaround for IMP-389:
        # When Impact 5.2.1-5.2.3 (at least) are installed, setProdState
        # is patched to re-index the object in the global catalog specifically
        # on the productionState column, but at least on older verions of RM,
        # the sandboxed version of global_catalog does not index that column,
        # which causes setProdState to fail.  Add the index for now, to
        # work around this.
        if (hasattr(self.dmd.global_catalog, 'indexes') and 'productionState'
                not in self.dmd.global_catalog.indexes()):
            from Products.ZenUtils.Search import makeCaseSensitiveFieldIndex
            self.dmd.global_catalog.addIndex(
                'productionState',
                makeCaseSensitiveFieldIndex('productionState'))
            self.dmd.global_catalog.addColumn('productionState')

        # Patch to remove DNS dependencies
        def getHostByName(name):
            return MOCK_DNS.get(name)

        def resolve_names(names):
            result = {}
            for name in names:
                result[name] = MOCK_DNS.get(name)
            return defer.maybeDeferred(lambda: result)

        self._real_resolve_names = hostmap.resolve_names
        hostmap.resolve_names = resolve_names

        self._real_getHostByName = Device.getHostByName
        Device.getHostByName = getHostByName

        dc = self.dmd.Devices.createOrganizer(
            '/Devices/OpenStack/Infrastructure')

        dc.setZenProperty('zPythonClass',
                          'ZenPacks.zenoss.OpenStackInfrastructure.Endpoint')
        dc.setZenProperty('zOpenStackHostDeviceClass',
                          '/Server/SSH/Linux/NovaHost')
        dc.setZenProperty('zOpenStackRegionName', 'RegionOne')
        dc.setZenProperty('zOpenStackAuthUrl', 'http://1.2.3.4:5000/v2.0')
        dc.setZenProperty('zOpenStackNovaApiHosts', [])
        dc.setZenProperty('zOpenStackExtraHosts', [])
        dc.setZenProperty('zOpenStackHostMapToId', [])
        dc.setZenProperty('zOpenStackHostMapSame', [])
        dc.setZenProperty('zOpenStackHostLocalDomain', '')
        dc.setZenProperty('zOpenStackExtraApiEndpoints', [])

        self.d = dc.createInstance('zenoss.OpenStackInfrastructure.testDevice')
        self.d.setPerformanceMonitor('localhost')
        self.d.index_object()
        notify(IndexingEvent(self.d))

        self.applyDataMap = ApplyDataMap()._applyDataMap

        # Required to prevent erroring out when trying to define viewlets in
        # ../browser/configure.zcml.
        import zope.viewlet
        zcml.load_config('meta.zcml', zope.viewlet)

        import ZenPacks.zenoss.OpenStackInfrastructure
        zcml.load_config('configure.zcml',
                         ZenPacks.zenoss.OpenStackInfrastructure)

        self._loadBadHosts()
        self._loadZenossData()