Example #1
0
    def reportDatabaseTopology(self, dsnInfo, dependentObject):
        """

        :param dsnInfo: list of all DSN's for which need to report topology
        :type dsnInfo: odbc.DSNInfo
        :return: vector which include all osh's for created topology
        :rtype: appilog.common.system.types.vectors.ObjectStateHolderVector
        """
        vector = ObjectStateHolderVector()
        try:
            database_pdo = self.__builder.buildDatabaseServerPdo(dsnInfo)
            platform = db_platform.findPlatformBySignature(dsnInfo.driver)
            builder = db_builder.getBuilderByPlatform(platform)
            db_reporter = db.getReporter(platform, builder)
            host_descriptor = self.__builder.buildHostDescriptor(dsnInfo.address)
            host_descriptor = host_descriptor._replace(name=None)
            reporter = host_topology.Reporter()
            host_osh, ip_oshs, oshs = reporter.report_host(host_descriptor)
            server_osh, ipseOsh, database_oshs, topology = db_reporter.reportServerWithDatabases(database_pdo, host_osh, [dependentObject])
            vector.addAll(topology)
            vector.addAll(oshs)
            return vector
        except dns_resolver.ResolveException:
            logger.reportWarning("Cannot resolve ip of node")
            return ObjectStateHolderVector()
Example #2
0
    def reportDatabaseTopology(self, dsnInfo, dependentObject):
        """

        :param dsnInfo: list of all DSN's for which need to report topology
        :type dsnInfo: odbc.DSNInfo
        :return: vector which include all osh's for created topology
        :rtype: appilog.common.system.types.vectors.ObjectStateHolderVector
        """
        vector = ObjectStateHolderVector()
        try:
            database_pdo = self.__builder.buildDatabaseServerPdo(dsnInfo)
            platform = db_platform.findPlatformBySignature(dsnInfo.driver)
            builder = db_builder.getBuilderByPlatform(platform)
            db_reporter = db.getReporter(platform, builder)
            host_descriptor = self.__builder.buildHostDescriptor(
                dsnInfo.address)
            host_descriptor = host_descriptor._replace(name=None)
            reporter = host_topology.Reporter()
            host_osh, ip_oshs, oshs = reporter.report_host(host_descriptor)
            server_osh, ipseOsh, database_oshs, topology = db_reporter.reportServerWithDatabases(
                database_pdo, host_osh, [dependentObject])
            vector.addAll(topology)
            vector.addAll(oshs)
            return vector
        except dns_resolver.ResolveException:
            logger.reportWarning("Cannot resolve ip of node")
            return ObjectStateHolderVector()
Example #3
0
 def reportDatasources(self, container, *datasources):
     r'@types: entity.HasOsh, tuple(jdbc.Datasource)'
     if not (container and container.getOsh()):
         raise ValueError(
             "Datasource container is not specified or not built")
     vector = ObjectStateHolderVector()
     for datasource in datasources:
         vector.addAll(self.reportDataSource(datasource, container))
         # based on URL we can report information about database server and used databases
         if datasource.url:
             try:
                 urlParser = jdbc_url_parser.getUrlParser(datasource.url)
             except (Exception, JException):
                 logger.warnException(
                     "Failed to find appropriate parser for the url %s " %
                     datasource.url)
             else:
                 logger.debug("Use %s for %s" % (urlParser, datasource.url))
                 try:
                     parsedResult = urlParser.parse(datasource.url)
                 except (Exception, JException):
                     logger.warnException("Failed to parse datasource URL")
                 else:
                     # dispatch reporting of parsed result as parse method
                     # may return different types like DatabaseServer and OracleRac
                     vector.addAll(
                         self.__reportParsedData(urlParser.getPlatform(),
                                                 datasource, parsedResult))
         elif datasource.getServer():
             # resolve address
             server = datasource.getServer()
             if server.address:
                 try:
                     ips = self.__dnsResolver.resolveIpsByHostname(
                         server.address)
                     server.address = ips[0]
                 except (Exception, JException):
                     logger.warnException(
                         "Failed to resolve IP for the %s" % server)
                 else:
                     # report database server using generic builder if one is not found by the signature
                     signature = ';'.join(
                         map(str, (datasource.description,
                                   datasource.driverClass)))
                     platform = db_platform.findPlatformBySignature(
                         signature)
                     if platform:
                         databaseBuilder = db_builder.getBuilderByPlatform(
                             platform)
                     else:
                         databaseBuilder = db_builder.Generic()
                     databaseServerReporter = db.getReporter(
                         platform, databaseBuilder)
                     _, _, _, oshs = databaseServerReporter.reportServerWithDatabasesFromAddress(
                         server, (datasource.getOsh(), ))
                     vector.addAll(oshs)
     return vector
Example #4
0
def report_db(server, host_osh, dependants):
    r'''@types: db.DatabaseServer, osh, seq[osh] -> tuple[osh, list[osh]]
    @raise ValueError: Platform is not found
    @return: tuple of built server OSH and vector where all related topology
    included
    '''
    oshs = []

    builder = db_builder.getBuilderByPlatform(server.getPlatform())
    reporter = db.getReporter(server.getPlatform(), builder)

    result = reporter.reportServerWithDatabases(server, host_osh, dependants)
    server_osh, _, _, vector_ = result
    oshs.extend(vector_)
    return server_osh, oshs
Example #5
0
def report_db(server, host_osh, dependants):
    r'''@types: db.DatabaseServer, osh, seq[osh] -> tuple[osh, list[osh]]
    @raise ValueError: Platform is not found
    @return: tuple of built server OSH and vector where all related topology
    included
    '''
    oshs = []

    builder = db_builder.getBuilderByPlatform(server.getPlatform())
    reporter = db.getReporter(server.getPlatform(), builder)

    result = reporter.reportServerWithDatabases(server, host_osh, dependants)
    server_osh, _, _, vector_ = result
    oshs.extend(vector_)
    return server_osh, oshs
Example #6
0
 def reportDatasources(self, container, *datasources):
     r'@types: entity.HasOsh, tuple(jdbc.Datasource)'
     if not (container and container.getOsh()):
         raise ValueError("Datasource container is not specified or not built")
     vector = ObjectStateHolderVector()
     for datasource in datasources:
         vector.addAll(self.reportDataSource(datasource, container))
         # based on URL we can report information about database server and used databases
         if datasource.url:
             try:
                 urlParser = jdbc_url_parser.getUrlParser(datasource.url)
             except (Exception, JException):
                 logger.warnException("Failed to find appropriate parser for the url %s " % datasource.url)
             else:
                 logger.debug("Use %s for %s" % (urlParser, datasource.url))
                 try:
                     parsedResult = urlParser.parse(datasource.url)
                 except (Exception, JException):
                     logger.warnException("Failed to parse datasource URL")
                 else:
                     # dispatch reporting of parsed result as parse method
                     # may return different types like DatabaseServer and OracleRac
                     vector.addAll(self.__reportParsedData(
                         urlParser.getPlatform(), datasource, parsedResult))
         elif datasource.getServer():
             # resolve address
             server = datasource.getServer()
             if server.address:
                 try:
                     ips = self.__dnsResolver.resolveIpsByHostname(server.address)
                     server.address = ips[0]
                 except (Exception, JException):
                     logger.warnException("Failed to resolve IP for the %s" % server)
                 else:
                     # report database server using generic builder if one is not found by the signature
                     signature = ';'.join(map(str, (datasource.description, datasource.driverClass)))
                     platform = db_platform.findPlatformBySignature(signature)
                     if platform:
                         databaseBuilder = db_builder.getBuilderByPlatform(platform)
                     else:
                         databaseBuilder = db_builder.Generic()
                     databaseServerReporter = db.getReporter(platform, databaseBuilder)
                     _, _, _, oshs = databaseServerReporter.reportServerWithDatabasesFromAddress(server, (datasource.getOsh(), ))
                     vector.addAll(oshs)
     return vector
Example #7
0
 def __reportParsedServer(self, platform, datasource, databaseServer):
     vector = ObjectStateHolderVector()
     # get merged database server instance
     server = self.__mergeDatabaseServers(datasource.getServer(), databaseServer)
     # If server doesn't contain databases we can create one from the datasource information if present
     if not server.getDatabases() and datasource.databaseName:
         server.addDatabases(db.Database(datasource.databaseName))
     # resolve address
     try:
         ips = self.__dnsResolver.resolveIpsByHostname(server.address)
         server.address = ips[0]
     except (Exception, JException):
         logger.warnException("Failed to resolve IP for the %s" % server.address)
     else:
         # report database server
         databaseBuilder = db_builder.getBuilderByPlatform(platform)
         databaseServerReporter = db.getReporter(platform, databaseBuilder)
         _, _, _, oshs = databaseServerReporter.reportServerWithDatabasesFromAddress(server, (datasource.getOsh(), ))
         vector.addAll(oshs)
     return vector
Example #8
0
 def __reportParsedServer(self, platform, datasource, databaseServer):
     vector = ObjectStateHolderVector()
     # get merged database server instance
     server = self.__mergeDatabaseServers(datasource.getServer(),
                                          databaseServer)
     # If server doesn't contain databases we can create one from the datasource information if present
     if not server.getDatabases() and datasource.databaseName:
         server.addDatabases(db.Database(datasource.databaseName))
     # resolve address
     try:
         ips = self.__dnsResolver.resolveIpsByHostname(server.address)
         server.address = ips[0]
     except (Exception, JException):
         logger.warnException("Failed to resolve IP for the %s" %
                              server.address)
     else:
         # report database server
         databaseBuilder = db_builder.getBuilderByPlatform(platform)
         databaseServerReporter = db.getReporter(platform, databaseBuilder)
         _, _, _, oshs = databaseServerReporter.reportServerWithDatabasesFromAddress(
             server, (datasource.getOsh(), ))
         vector.addAll(oshs)
     return vector