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()