示例#1
0
def _discover(client, framework, dns_resolver, cred_id, dbname, port):
    r'@types: Client, db2_flow.RichFramework, dns_resolver.Resolver, str, str, str -> list[osh], list[osh], list[errorobject.ErrorObject]'
    warnings = []
    oshs = []
    executor = ChainedCmdlet(SqlCommandExecutor(client),
                             command.cmdlet.produceResult)
    version, warnings_ = discover_or_warn(
        ('db2 version', db2_sql_discoverer.get_db2_version, executor), )
    warnings.extend(warnings_)

    discoverer = db2_sql_discoverer.registry.get_discoverer(version)
    version = version and db2_topology.build_version_pdo(version)

    dbname_, svcename, host, instance_name, warnings_ = discover_or_warn(
        ('db2 database name', discoverer.get_current_dbname, executor),
        ('db2 database svcename', discoverer.get_current_svcename, executor),
        ('db2 instance host', discoverer.get_instance_host, executor,
         dns_resolver),
        ('db2 instance name', discoverer.get_instance_name, executor),
    )
    warnings.extend(warnings_)

    oshs_, db_oshs = _report_remote(host, svcename, instance_name, version,
                                    dbname_)
    oshs.extend(oshs_)

    return db_oshs, oshs, warnings
def _discover(client, framework, dns_resolver, cred_id, dbname, port):
    r'@types: Client, db2_flow.RichFramework, dns_resolver.Resolver, str, str, str -> list[osh], list[osh], list[errorobject.ErrorObject]'
    warnings = []
    oshs = []
    executor = ChainedCmdlet(SqlCommandExecutor(client),
                                 command.cmdlet.produceResult)
    version, warnings_ = discover_or_warn(('db2 version',
                                           db2_sql_discoverer.get_db2_version,
                                           executor),)
    warnings.extend(warnings_)

    discoverer = db2_sql_discoverer.registry.get_discoverer(version)
    version = version and db2_topology.build_version_pdo(version)

    dbname_, svcename, host, instance_name, warnings_ = discover_or_warn(
       ('db2 database name', discoverer.get_current_dbname, executor),
       ('db2 database svcename', discoverer.get_current_svcename, executor),
       ('db2 instance host', discoverer.get_instance_host, executor, dns_resolver),
       ('db2 instance name', discoverer.get_instance_name, executor),
    )
    warnings.extend(warnings_)

    oshs_, db_oshs = _report_remote(host, svcename, instance_name, version, dbname_)
    oshs.extend(oshs_)

    return db_oshs, oshs, warnings
示例#3
0
    def process(self, context):
        r'''
         @types: applications.ApplicationSignatureContext
        '''

        shell = context.client
        language = shell.getOsLanguage().bundlePostfix

        db2_instance_osh = context.application.applicationOsh

        instance_name = self.get_instance_name(context)

        if instance_name:
            db2_home_path = self.get_db2_home_path(context)
            if db2_home_path:
                version = self.get_db2_version(context)

                SoftwareBuilder.updateName(db2_instance_osh, instance_name)
                SoftwareBuilder.updateVersion(db2_instance_osh,
                                              build_version_pdo(version))
                SoftwareBuilder.updateApplciationPath(db2_instance_osh, db2_home_path)

                application_port = self.get_application_port(context)
                if application_port:
                    SoftwareBuilder.updateApplicationPort(db2_instance_osh,
                                                          application_port)

                discoverer = self.get_shell_based_discoverer(context)
                executor = discoverer.get_db2_command_executor(shell)
                interpreter = shell_interpreter.Factory().create(shell)

                base_shell_discoverer.Db2.set_db2_bundle(language)

                self._discover_local_databases(context, instance_name, application_port, db2_home_path, discoverer, executor, interpreter)

                self._discover_remote_databases(context, instance_name, db2_home_path, discoverer, executor, interpreter)

            else:
                logger.debug('No db2 home path found')
        else:
            logger.debug('Failed to discover instance instance_name')
示例#4
0
def _discover(client, dns_resolver, cred_id, ip, config):
    warnings = []
    executor = ChainedCmdlet(db2_sql_base_discoverer.SqlCommandExecutor(client),
                                 command.cmdlet.produceResult)
    db2_version, warnings_ = discover_or_warn(('db2 version',
                                           db2_sql_discoverer.get_db2_version,
                                           executor),)
    warnings.extend(warnings_)
    discoverer = db2_sql_discoverer.registry.get_discoverer(db2_version)

    version_info, warnings_ = discover_or_warn(
       ('db2 version description', discoverer.get_db2_version_info, executor),
    )
    warnings.extend(warnings_)

    (tablespaces, containers, sessions, schemas,
     partition_groups, partitions, partition_name_pg_name_pairs,
     buffer_pools_by_partition_nr, warnings_) = discover_or_warn(
       ('tablespaces', discoverer.get_tablespaces, executor),
       ('containers', discoverer.get_containers, executor),
       ('sessions', discoverer.get_db_sessions, executor, config.db_name),
       ('schemas', discoverer.get_schemas, executor),
       ('partition groups', discoverer.get_partition_groups, executor),
       ('partitions', discoverer.get_partitions, executor),
       ('partition to partition group relation', discoverer.get_partition_number_to_pg_name_relation, executor),
       ('buffer pools', discoverer.get_buffer_pools, executor),
    )
    warnings.extend(warnings_)

    tables = ()
    if config.discover_tables:
        tables, warnings_ = discover_or_warn(
           ('tables', discoverer.get_tables, executor),
           )
        warnings.extend(warnings_)

    instance_name, svcename = None, None
    if not config.db2_id or not config.ipse_id:
        instance_name, svcename, warnings_ = discover_or_warn(
         ('db2 instance name', discoverer.get_instance_name, executor),
         ('db2 database svcename', discoverer.get_current_svcename, executor),)
        warnings.extend(warnings_)

    partition_nr_by_container = {}
    for tbsp_id, container_name, partition_nr in containers:
        partition_nr_by_container[container_name] = partition_nr
    containers_by_tablespace_id = groupby(containers, first, second)
    containers = map(second, containers)

    mountpoint_by_container = dict(zip(containers,
                                       map(parse_mountpoint_from_path,
                                           containers)))

    resolve_ips = safeFunc(dns_resolver.resolve_ips)
    get_host = fptools.safeFunc(db2_discoverer.get_host)
    partitions = ((partition, get_host(hostname, resolve_ips),
                   port, switch_name)
                    for partition, hostname, port, switch_name in partitions)

    pg_names_by_partition_number = groupby(partition_name_pg_name_pairs,
                                         first, second)

    partition_numbers_by_pg_name = groupby(partition_name_pg_name_pairs,
                                         second, first)

    if config.discover_tables and not config.discover_system_tables:
        tables = ifilterfalse(comp(discoverer.is_reserved_schema_name,
                                   third), tables)

    default_client_program = comp(operator.not_,
                                  discoverer.is_default_client_program_name,
                                  process.Process.getName,
                                  discoverer.Session.client_process.fget)
    sessions = ifilter(default_client_program, sessions)

    version = db2_version and db2_topology.build_version_pdo(db2_version)
    oshs = _report(ip, config, version_info, partition_groups, partitions,
                   pg_names_by_partition_number, buffer_pools_by_partition_nr,
                   tablespaces, partition_numbers_by_pg_name,
                   mountpoint_by_container,
                   containers_by_tablespace_id, partition_nr_by_container,
                   schemas, tables, sessions, instance_name, svcename, version)

    return oshs, warnings