in metricpublisher/publisher_handler.py [0:0]
def metric_publisher(event, context):
"""Publish metrics to cloudwatch.
Parameters:
None
Returns:
number_of_metrics (int): number of new
metrics that were published successfully
"""
item_data = DYNAMODB_CLIENT.get_item(
Key={
'cursor': {
'S': CURSOR_KEY
}
},
TableName=get_table_name()
)
if 'Item' not in item_data:
start_time = 0
else:
start_time = int(item_data['Item']['cursor_timestamp']['N'])
next_timestamp = get_current_time()
log_events = LOG_CLIENT.filter_log_events(
logGroupName=get_log_group_name(),
startTime=start_time,
endTime=next_timestamp
)['events']
if len(log_events) == 0:
return 0
next_batch = batch_metrics(log_events)
metrics_to_put = [format_metric(metric) for metric in next_batch]
batches = [metrics_to_put[start:start+MAX_BATCH_SIZE]
for start in range(0, len(metrics_to_put), MAX_BATCH_SIZE)]
number_of_metrics = 0
for batch in batches:
try:
CLOUDWATCH_CLIENT.put_metric_data(
Namespace=get_namespace(),
MetricData=batch
)
number_of_metrics += len(batch)
except Exception:
logger_handler.log_event(convert_batch_to_event(batch), None)
DYNAMODB_CLIENT.put_item(
TableName=get_table_name(),
Item={
'cursor': {
'S': CURSOR_KEY
},
'cursor_timestamp': {
'N': str(next_timestamp),
},
},
ReturnConsumedCapacity='NONE',
)
return number_of_metrics