#!/usr/bin/env python3 """Publisher NATS como proceso del sistema operativo independiente. Se conecta al broker y publica una rafaga de mensajes de telemetria, alternando entre los subjects `telemetria.cpu` y `telemetria.mem`. No sabe ni le importa cuantos subscribers hay escuchando: solo conoce el subject. Emite cada publicacion como linea JSON en stdout. """ import argparse import asyncio import json import os import random import time import nats NATS_URL = "nats://127.0.0.1:4222" def emit(event: dict) -> None: print(json.dumps(event), flush=True) async def main(count: int, interval: float) -> None: pid = os.getpid() nc = await nats.connect(NATS_URL, name="publisher") emit({"event": "ready", "pid": pid, "name": "publisher"}) for i in range(count): subject = "telemetria.cpu" if i % 2 == 0 else "telemetria.mem" payload = json.dumps({"i": i, "valor": round(random.uniform(0, 100), 1)}) await nc.publish(subject, payload.encode()) emit({"event": "published", "pid": pid, "subject": subject, "i": i}) await asyncio.sleep(interval) await nc.flush() emit({"event": "done", "pid": pid, "name": "publisher", "published": count}) await nc.drain() if __name__ == "__main__": parser = argparse.ArgumentParser(description="Publisher NATS de demostracion") parser.add_argument("--count", type=int, default=8, help="Numero de mensajes a publicar") parser.add_argument("--interval", type=float, default=0.15, help="Segundos entre publicaciones") args = parser.parse_args() asyncio.run(main(args.count, args.interval))