def run_analyze_vacuum()

in src/AnalyzeVacuumUtility/lib/analyze_vacuum.py [0:0]


def run_analyze_vacuum(**kwargs):
    global debug
    if config_constants.DEBUG in os.environ:
        debug = os.environ[config_constants.DEBUG]
    if config_constants.DEBUG in kwargs and kwargs[config_constants.DEBUG]:
        debug = True

    # connect to cloudwatch
    region_key = 'AWS_REGION'
    if region_key in os.environ:
        aws_region = os.environ[region_key]
    else:
        aws_region = 'us-east-1'

    cw = None
    if config_constants.SUPPRESS_CLOUDWATCH not in kwargs or not kwargs[config_constants.SUPPRESS_CLOUDWATCH]:
        try:
            cw = boto3.client('cloudwatch', region_name=aws_region)
            comment("Connected to CloudWatch in %s" % aws_region)
        except Exception as e:
            if debug:
                print(traceback.format_exc())
    else:
        if debug:
            comment("Suppressing CloudWatch connection and metrics export")

    # extract the cluster name
    if config_constants.CLUSTER_NAME in kwargs:
        cluster_name = kwargs[config_constants.CLUSTER_NAME]

        # remove the cluster name argument from kwargs as it's a positional arg
        del kwargs[config_constants.CLUSTER_NAME]
    else:
        cluster_name = kwargs[config_constants.DB_HOST].split('.')[0]

    if debug:
        comment("Using Cluster Name %s" % cluster_name)

        comment("Supplied Args:")
        print(kwargs)

    # get the password using .pgpass, environment variables, and then fall back to config
    db_pwd = None
    try:
        db_pwd = pgpasslib.getpass(kwargs[config_constants.DB_HOST], kwargs[config_constants.DB_PORT],
                                   kwargs[config_constants.DB_NAME], kwargs[config_constants.DB_USER])
    except pgpasslib.FileNotFound as e:
        pass

    if db_pwd is None:
        db_pwd = kwargs[config_constants.DB_PASSWORD]

    if config_constants.SCHEMA_NAME not in kwargs:
        kwargs[config_constants.SCHEMA_NAME] = 'public'

    # get a connection for the controlling processes
    master_conn = get_pg_conn(kwargs[config_constants.DB_HOST],
                              kwargs[config_constants.DB_NAME],
                              kwargs[config_constants.DB_USER],
                              db_pwd,
                              kwargs[config_constants.SCHEMA_NAME],
                              kwargs[config_constants.DB_PORT],
                              None if config_constants.QUERY_GROUP not in kwargs else kwargs[
                                  config_constants.QUERY_GROUP],
                              None if config_constants.QUERY_SLOT_COUNT not in kwargs else kwargs[
                                  config_constants.QUERY_SLOT_COUNT],
                              None if config_constants.SSL not in kwargs else kwargs[config_constants.SSL])

    if master_conn is None:
        raise Exception("No Connection was established")

    vacuum_flag = kwargs.get(config_constants.DO_VACUUM, True)
    if vacuum_flag is True:
        # Run vacuum based on the Unsorted , Stats off and Size of the table
        run_vacuum(master_conn, cluster_name, cw, **kwargs)
    else:
        comment("Vacuum flag arg is not set. Vacuum not performed.")

    analyze_flag = kwargs.get(config_constants.DO_ANALYZE, True)
    if analyze_flag is True:
        if not vacuum_flag:
            comment("Warning - Analyze without Vacuum may result in sub-optimal performance")

        # Run Analyze based on the  Stats off Metrics table
        run_analyze(master_conn, cluster_name, cw, **kwargs)
    else:
        comment("Analyze flag arg is set as %s. Analyze is not performed." % analyze_flag)

    comment('Processing Complete')

    cleanup(master_conn)

    return OK