def _discoverDatabases(solman, sysPairsBySysName, sendVector, reportError, resolveIps): try: logger.info("Discover Databases") query = GetDatabaseUsages() queryExecutor = TableQueryExecutor(solman) dbName = second usagePairsByDbName = groupby(dbName, queryExecutor.executeQuery(query)) logger.info("Found %s databases in use" % len(usagePairsByDbName)) query = GetDatabaseInstances() inDiscoveredSystems = F(_inDiscoveredSystems, fptools._, sysPairsBySysName) isUsedDb = comp(inDiscoveredSystems, usagePairsByDbName.get, _getDbInstance) findPlatform = comp(db_platform.findPlatformBySignature, _getDbVendor) dbInsts = queryExecutor.executeQuery(query) logger.info("Found %s database instances" % len(dbInsts)) dbs_1, dbs_2, dbs_3 = tee(ifilter(isUsedDb, dbInsts), 3) platforms = imap(findPlatform, dbs_1) ips = imap(comp(resolveIps, _getAddress), dbs_2) dbs = ifilter(all, izip(dbs_3, platforms, ips)) reported = len(map(comp(sendVector, _reportDatabase), dbs)) logger.info("Reported %s databases" % reported) except Exception: msg = 'Failed to discover databases' logger.debugException(msg) reportError(msg)
def _discoverHostToAddressMapping(solman, reportError): r'@types: ?, (str -> None) -> dict[str, sap.Address]' logger.info("Discovery hostname to IP mapping") mapping = {} try: query = GetHostToAddressMapping() queryExecutor = TableQueryExecutor(solman) addresses = queryExecutor.executeQuery(query) getHostname = lambda a: a.hostname mapping = applyMapping(getHostname, addresses) except (Exception, JException): msg = "Failed to discovery mappings" logger.warn(msg) reportError(msg) return mapping