feat: complete client runtime foundation
This commit is contained in:
@@ -11,7 +11,12 @@ from typing import Sequence
|
||||
|
||||
from archive_clients.config import ClientConfig
|
||||
from archive_clients.daemon import ArchiveClientDaemon
|
||||
from archive_clients.probes import probe_root
|
||||
from archive_clients.logging_config import configure_logging
|
||||
from archive_clients.probes import probe_root, probe_writable_directory
|
||||
from archive_clients.services import probe_qbittorrent, probe_syncthing
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def main(argv: Sequence[str] | None = None) -> int:
|
||||
@@ -20,15 +25,16 @@ def main(argv: Sequence[str] | None = None) -> int:
|
||||
parser.add_argument("--mode", choices=("archive", "cache"))
|
||||
parser.add_argument("--check-config", action="store_true")
|
||||
arguments = parser.parse_args(argv)
|
||||
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
|
||||
config = ClientConfig.load(arguments.config, arguments.mode)
|
||||
probes = [
|
||||
probe_root(config.qbittorrent.local_root),
|
||||
probe_root(config.syncthing.local_root),
|
||||
]
|
||||
config.read_shared_token()
|
||||
config.qbittorrent.read_password()
|
||||
config.syncthing.read_api_key()
|
||||
probe_writable_directory(config.state_db.parent)
|
||||
probe_writable_directory(config.backup_dir)
|
||||
shared_token = config.read_shared_token()
|
||||
qb_password = config.qbittorrent.read_password()
|
||||
syncthing_key = config.syncthing.read_api_key()
|
||||
if arguments.check_config:
|
||||
print(json.dumps({
|
||||
"client_id": config.client_id,
|
||||
@@ -36,5 +42,32 @@ def main(argv: Sequence[str] | None = None) -> int:
|
||||
"filesystems": [probe.__dict__ | {"root": str(probe.root)} for probe in probes],
|
||||
}, sort_keys=True))
|
||||
return 0
|
||||
asyncio.run(ArchiveClientDaemon(config, probes).run())
|
||||
configure_logging(
|
||||
secret for secret in (shared_token, qb_password, syncthing_key) if secret
|
||||
)
|
||||
logger.info(
|
||||
"client_starting",
|
||||
extra={"client_id": config.client_id, "role": config.role},
|
||||
)
|
||||
try:
|
||||
service_probes = [
|
||||
probe_qbittorrent(config.qbittorrent),
|
||||
probe_syncthing(config.syncthing),
|
||||
]
|
||||
for service in service_probes:
|
||||
logger.info(
|
||||
"service_probe_completed",
|
||||
extra={
|
||||
"client_id": config.client_id,
|
||||
"role": config.role,
|
||||
"service": service.service,
|
||||
"health": service.state,
|
||||
},
|
||||
)
|
||||
asyncio.run(ArchiveClientDaemon(config, probes, service_probes).run())
|
||||
except KeyboardInterrupt:
|
||||
logger.info(
|
||||
"client_stopped",
|
||||
extra={"client_id": config.client_id, "role": config.role},
|
||||
)
|
||||
return 0
|
||||
|
||||
Reference in New Issue
Block a user