blob: 87e524ce24f206e03217dc830e2a0ff92b4811ff [file]
# Copyright 2026 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import json
import sys
from typing import Any, Final
from daemon_manager.manager import UDS_PATH, DaemonManager, DaemonManagerError
DAEMON_STARTUP_TIMEOUT_SECS: Final[float] = 10.0
from cli.commands.base import BaseCommand
class Command(BaseCommand):
@staticmethod
def register_cli(subparsers: Any) -> None:
start_parser = subparsers.add_parser("start", help="Start the daemon")
start_parser.add_argument(
"--port", type=int, help="Port for DAP server", default=None
)
start_parser.add_argument(
"--connect",
action="store_true",
help="Connect to existing DAP server",
)
@staticmethod
async def execute(args: argparse.Namespace) -> int:
return await start_daemon(args.port, args.connect)
async def start_daemon(
port: int | None, connect_to_existing: bool = False
) -> int:
"""Spawns the daemon process and waits for it to be ready."""
manager = DaemonManager(
socket_path=UDS_PATH,
port=port,
connect_to_existing=connect_to_existing,
startup_timeout=DAEMON_STARTUP_TIMEOUT_SECS,
)
try:
proc = await manager.start()
if proc is None:
print(
json.dumps(
{
"success": True,
"message": "Connected to existing daemon",
}
)
)
else:
print(
json.dumps(
{
"success": True,
"message": "Daemon started successfully",
}
)
)
return 0
except DaemonManagerError as e:
print(
json.dumps(
{
"success": False,
"message": str(e),
}
),
file=sys.stderr,
)
return 1
except Exception as e:
print(
json.dumps(
{
"success": False,
"message": f"Failed to start daemon: {e}",
}
),
file=sys.stderr,
)
return 1