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