75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Lease management CLI commands."""
|
|
from db.accounts_repo import (
|
|
cleanup_expired_leases,
|
|
list_active_leases,
|
|
release_lease,
|
|
release_lease_by_id,
|
|
)
|
|
from service._svc_common import _err_json, _ok_json, _say
|
|
from util.logging_config import get_skill_logger
|
|
|
|
|
|
def cmd_lease_release(lease_token: str) -> None:
|
|
"""lease release <token>"""
|
|
log = get_skill_logger()
|
|
log.info("cli_start subcommand=lease_release token_prefix=%s", lease_token[:8])
|
|
ok = release_lease(lease_token)
|
|
if ok:
|
|
_say(_ok_json({"lease_token": lease_token, "status": "released"}))
|
|
else:
|
|
_say(_err_json("ERROR:LEASE_NOT_FOUND", "未找到活跃的租约,或租约已释放/过期。"))
|
|
|
|
|
|
def cmd_lease_force_release(lease_id: int) -> None:
|
|
"""lease force-release --id <lease_row_id> — data-management row action."""
|
|
log = get_skill_logger()
|
|
log.info("cli_start subcommand=lease_force_release lease_id=%s", lease_id)
|
|
try:
|
|
lid = int(lease_id)
|
|
except (TypeError, ValueError):
|
|
_say(_err_json("ERROR:CLI_BAD_ARGS", "租约编号必须是数字。"))
|
|
return
|
|
if lid <= 0:
|
|
_say(_err_json("ERROR:CLI_BAD_ARGS", "租约编号必须是正整数。"))
|
|
return
|
|
released = release_lease_by_id(lid)
|
|
if not released:
|
|
_say(
|
|
_err_json(
|
|
"ERROR:LEASE_NOT_FOUND",
|
|
"未找到可释放的活跃租约(可能已释放、已过期清理,或不存在)。",
|
|
)
|
|
)
|
|
return
|
|
_say(
|
|
_ok_json(
|
|
{
|
|
"id": released["id"],
|
|
"account_id": released["account_id"],
|
|
"holder": released.get("holder") or "",
|
|
"purpose": released.get("purpose") or "",
|
|
"status": "released",
|
|
"message": "已强制释放租约,该账号可被其它任务占用。",
|
|
}
|
|
)
|
|
)
|
|
|
|
|
|
def cmd_lease_list(active_only: bool = False) -> None:
|
|
"""lease list [--active]"""
|
|
log = get_skill_logger()
|
|
log.info("cli_start subcommand=lease_list active_only=%s", active_only)
|
|
leases = list_active_leases()
|
|
if active_only:
|
|
pass
|
|
_say(_ok_json({"leases": leases}))
|
|
|
|
|
|
def cmd_lease_cleanup() -> None:
|
|
"""lease cleanup — mark expired leases as expired."""
|
|
log = get_skill_logger()
|
|
log.info("cli_start subcommand=lease_cleanup")
|
|
count = cleanup_expired_leases()
|
|
_say(_ok_json({"cleaned": count}))
|