feat: add runtime diagnostics and path management
This commit is contained in:
66
src/coinhunter/doctor.py
Normal file
66
src/coinhunter/doctor.py
Normal file
@@ -0,0 +1,66 @@
|
||||
"""Runtime diagnostics for CoinHunter CLI."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import platform
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
from .runtime import ensure_runtime_dirs, get_runtime_paths, load_env_file, resolve_hermes_executable
|
||||
|
||||
|
||||
REQUIRED_ENV_VARS = ["BINANCE_API_KEY", "BINANCE_API_SECRET"]
|
||||
|
||||
|
||||
def main() -> int:
|
||||
paths = ensure_runtime_dirs(get_runtime_paths())
|
||||
env_file = load_env_file(paths)
|
||||
hermes_executable = resolve_hermes_executable(paths)
|
||||
|
||||
env_checks = {}
|
||||
missing_env = []
|
||||
for name in REQUIRED_ENV_VARS:
|
||||
present = bool(os.getenv(name))
|
||||
env_checks[name] = present
|
||||
if not present:
|
||||
missing_env.append(name)
|
||||
|
||||
file_checks = {
|
||||
"env_file_exists": env_file.exists(),
|
||||
"config_exists": paths.config_file.exists(),
|
||||
"positions_exists": paths.positions_file.exists(),
|
||||
"logrotate_config_exists": paths.logrotate_config.exists(),
|
||||
}
|
||||
dir_checks = {
|
||||
"root_exists": paths.root.exists(),
|
||||
"state_dir_exists": paths.state_dir.exists(),
|
||||
"logs_dir_exists": paths.logs_dir.exists(),
|
||||
"reviews_dir_exists": paths.reviews_dir.exists(),
|
||||
"cache_dir_exists": paths.cache_dir.exists(),
|
||||
}
|
||||
command_checks = {
|
||||
"hermes": bool(shutil.which("hermes") or paths.hermes_bin.exists()),
|
||||
"logrotate": bool(shutil.which("logrotate") or shutil.which("/usr/sbin/logrotate")),
|
||||
}
|
||||
|
||||
report = {
|
||||
"ok": not missing_env,
|
||||
"python": sys.version.split()[0],
|
||||
"platform": platform.platform(),
|
||||
"env_file": str(env_file),
|
||||
"hermes_executable": hermes_executable,
|
||||
"paths": paths.as_dict(),
|
||||
"env_checks": env_checks,
|
||||
"missing_env": missing_env,
|
||||
"file_checks": file_checks,
|
||||
"dir_checks": dir_checks,
|
||||
"command_checks": command_checks,
|
||||
}
|
||||
print(json.dumps(report, ensure_ascii=False, indent=2))
|
||||
return 0 if report["ok"] else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user