feat: Semaine 8
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
import sys, os, json
|
||||
from collections import defaultdict
|
||||
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||||
|
||||
from kafka import KafkaConsumer
|
||||
from shared.events import BOOTSTRAP_SERVERS, TOPIC_ORDERS, TOPIC_PAYMENTS, TOPIC_NOTIFICATIONS
|
||||
|
||||
TOPIC_ORDERS_DLQ = "orders_dlq"
|
||||
|
||||
stats = defaultdict(int)
|
||||
|
||||
def run():
|
||||
consumer = KafkaConsumer(
|
||||
TOPIC_ORDERS,
|
||||
TOPIC_ORDERS_DLQ,
|
||||
TOPIC_PAYMENTS,
|
||||
bootstrap_servers=BOOTSTRAP_SERVERS,
|
||||
group_id="analytics_service",
|
||||
auto_offset_reset="earliest",
|
||||
value_deserializer=lambda v: json.loads(v.decode("utf-8"))
|
||||
)
|
||||
|
||||
print("[ANALYTICS SERVICE] Service d'analyse démarré, en attente d'évènements...")
|
||||
|
||||
for message in consumer:
|
||||
event = message.value
|
||||
event_type = event["type"]
|
||||
payload = event["payload"]
|
||||
|
||||
stats[event_type] += 1
|
||||
|
||||
if event_type == "order_created":
|
||||
order_id = payload["order_id"]
|
||||
total = payload["total_amount"]
|
||||
print(f"[ANALYTICS SERVICE] Nouvelle commande {order_id} - total {total}€ "
|
||||
f"| commandes reçues : {stats['order_created']}")
|
||||
|
||||
elif event_type == "payment.confirmed":
|
||||
stats["revenue"] = stats.get("revenue", 0) + payload["amount"]
|
||||
print(f"[ANALYTICS SERVICE] Paiement confirmé - commande {payload['order_id']}, "
|
||||
f"{payload['amount']}€ | CA total : {stats['revenue']}€")
|
||||
|
||||
elif event_type == "payment.failed":
|
||||
print(f"[ANALYTICS SERVICE] Paiement échoué - commande {payload['order_id']} "
|
||||
f"| échecs : {stats['payment.failed']}")
|
||||
|
||||
elif event_type == "order.preparation_started":
|
||||
print(f"[ANALYTICS SERVICE] Préparation démarrée - commande {payload['order_id']} "
|
||||
f"| en préparation : {stats['order.preparation_started']}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
run()
|
||||
Reference in New Issue
Block a user