def metric_publisher()

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