in orders/src/on_events/main.py [0:0]
def handler(event, _):
"""
Lambda handler
"""
order_ids = event["resources"]
metrics_data = defaultdict(int)
for order_id in order_ids:
logger.info({
"message": "Got event of type {} from {} for order {}".format(event["detail-type"], event["source"], order_id),
"source": event["source"],
"eventType": event["detail-type"],
"orderId": order_id
})
tracer.put_annotation("orderId", order_id)
if event["source"] == "ecommerce.warehouse":
if event["detail-type"] == "PackageCreated":
metrics_data["orderPackaged"] += 1
update_order(order_id, "PACKAGED", event["detail"]["products"])
elif event["detail-type"] == "PackagingFailed":
metrics_data["orderFailed"] += 1
update_order(order_id, "PACKAGING_FAILED")
else:
logger.warning({
"message": "Unknown event type {} for order {}".format(event["detail-type"], order_id),
"source": event["source"],
"eventType": event["detail-type"],
"orderId": order_id
})
elif event["source"] == "ecommerce.delivery":
if event["detail-type"] == "DeliveryCompleted":
metrics_data["orderFulfilled"] += 1
update_order(order_id, "FULFILLED")
elif event["detail-type"] == "DeliveryFailed":
metrics_data["orderFailed"] += 1
update_order(order_id, "DELIVERY_FAILED")
else:
logger.warning({
"message": "Unknown event type {} for order {}".format(event["detail-type"], order_id),
"source": event["source"],
"eventType": event["detail-type"],
"orderId": order_id
})
else:
logger.warning({
"message": "Unknown source {} for order {}".format(event["source"], order_id),
"source": event["source"],
"eventType": event["detail-type"],
"orderId": order_id
})
# Add custom metrics
metrics.add_dimension(name="environment", value=ENVIRONMENT)
for key, value in metrics_data.items():
metrics.add_metric(name=key, unit=MetricUnit.Count, value=value)