diff --git a/requirements.txt b/requirements.txt index c75f50a..a63707d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,3 +3,5 @@ uvicorn[standard]>=0.29.0 pyyaml>=6.0 requests>=2.31.0 python-dotenv>=1.0.0 +# Mu2e DAQ service discovery (stdlib-only; from the sibling submodule). +mu2edaq-discovery diff --git a/server/mu2e-resource-manager.py b/server/mu2e-resource-manager.py index dfb44db..1a51206 100644 --- a/server/mu2e-resource-manager.py +++ b/server/mu2e-resource-manager.py @@ -233,7 +233,25 @@ def parse_args(): responder.start() print(f"Discovery: UDP port {args.discovery_port} (broadcast)") - uvicorn.run(app, host=args.host, port=args.port) + # Mu2e DAQ service discovery (standard multicast protocol): advertise the + # HTTP port so the app appears in mu2edaq-discover scans and the control + # room browser. Separate from the resource manager's own UDP broadcast + # discovery above. Best-effort so a missing package never blocks startup. + mu2e_responder = None + try: + from mu2edaq_discovery import Responder + mu2e_responder = Responder(name="Resource Manager", + app="resource-manager", + port=args.port, scheme="http") + mu2e_responder.start() + except Exception as exc: + print(f"[Discovery] mu2edaq responder not started: {exc}") + + try: + uvicorn.run(app, host=args.host, port=args.port) + finally: + if mu2e_responder is not None: + mu2e_responder.stop() else: # When imported (e.g., by uvicorn directly), use defaults rm = ResourceManager(