in CWMetricsToOpenSearch/handler.py [0:0]
def get_single_domain_metric_values(domain_name, region, metric_descriptions):
# TODO: Make this multi-domain?
ret = list()
cw = boto3.client('cloudwatch', region)
queries = build_metric_data_queries(domain_name, region, metric_descriptions)
# The CW query runs from now to the last time this retrieved data. It could miss
# data points on edge case boundaries.
time_now = datetime.utcfromtimestamp(time.time())
last_timestamp = get_last_timestamp_ddb(domain_name, region)
if not last_timestamp:
last_timestamp = time_now - timedelta(minutes=15)
for group in grouper(queries, 100):
try:
paginator = cw.get_paginator('get_metric_data')
iter = paginator.paginate(MetricDataQueries=group,
StartTime=last_timestamp,
EndTime=time_now)
for page in iter:
for result in page['MetricDataResults']:
# TODO: Error handling
(result_domain, result_region, metric_name, stat) = result['Label'].split(' ')
for val in zip(result['Timestamps'], result['Values']):
ts = val[0].replace(microsecond=0, tzinfo=tz.tzutc())
ret.append(SingleMetricValue(
domain_name=result_domain,
region=result_region,
metric_name=metric_name,
stat=stat,
timestamp=ts.isoformat(),
value=val[1]
))
update_metric_timestamp_ddb(domain_name, region, time_now)
except Exception as e:
# Handle me better
print('Exception', domain_name, region)
print(e)
print()
return ret