def emf_instance_registration()

in src/ECSInstancesRegistration/MetricToCW/app.py [0:0]


def emf_instance_registration(availability_zone, ecs_cluster,
                              instance_type, instance_id, metric_name,
                              metric_time, metrics):

    logger.info(f"Adding metric for {instance_id} for {ecs_cluster}")
    ecs_cluster = ecs_cluster.split('/')[-1].split('_Batch')[0]

    # use the event timestamp instead of using the EMF context timestamp
    metric_converted_time = datetime.datetime.strptime(metric_time, '%Y-%m-%dT%H:%M:%SZ')
    metric_converted_time = int(round(metric_converted_time.timestamp()*1000))
    metrics.context.meta['Timestamp'] = metric_converted_time

    try:
        metrics.set_namespace("AWSBatchMetrics")
        metrics.set_dimensions({
            "AvailabilityZone": availability_zone
        }, {
            "ECSCluster": ecs_cluster
        }, {
            "InstanceType": instance_type
        })
        metrics.put_metric(metric_name, 1, "Count")
        metrics.set_property("InstanceId", instance_id)
        metrics.set_property("ECSCluster", ecs_cluster)
        metrics.set_property("InstanceType", instance_type)
        metrics.set_property("AvailabilityZone", availability_zone)

    except ClientError as e:
        message = f"Error adding CloudWatch metric job resubmission: {format(e)}"
        logger.warning(message)
        raise Exception(message)
    return