diff --git a/apps/api/routes/health.py b/apps/api/routes/health.py index 38ddddd..33e426e 100644 --- a/apps/api/routes/health.py +++ b/apps/api/routes/health.py @@ -1,16 +1,28 @@ from __future__ import annotations +import logging + from fastapi import APIRouter from packages.config import get_settings from packages.db import Repository router = APIRouter(tags=["health"]) +log = logging.getLogger("health") @router.get("/health") def health() -> dict: - s = get_settings() + try: + s = get_settings() + except Exception as e: # noqa: BLE001 + log.exception("settings load failed: %s", e) + return { + "ok": False, + "service": "market_intel", + "product": "比特骆驼行情采集分析", + "error": f"settings: {e}", + } repo = Repository(s.db_path) try: hb = repo.get_heartbeat() @@ -29,5 +41,13 @@ def health() -> dict: "option_quotes": repo.count_option_quotes(), "index_ticks": repo.count_index_ticks(), } + except Exception as e: # noqa: BLE001 + log.exception("health db failed: %s", e) + return { + "ok": False, + "service": "market_intel", + "product": "比特骆驼行情采集分析", + "error": f"db: {e}", + } finally: - repo.close() + repo.close() \ No newline at end of file diff --git a/deploy/lib/common.sh b/deploy/lib/common.sh index 6786537..29bfa46 100644 --- a/deploy/lib/common.sh +++ b/deploy/lib/common.sh @@ -223,8 +223,10 @@ ensure_dotenv() { ensure_env_key "${envf}" "AUTH_SECRET" "鉴权密钥(disabled 关闭)" "change-me" ensure_env_key "${envf}" "ADMIN_USERNAME" "管理员用户名" "admin" ensure_env_key "${envf}" "ADMIN_PASSWORD" "管理员密码" "admin123" + ensure_env_key "${envf}" "BACKUP_DIR" "" "/root/market_intel_backups" ensure_env_key "${envf}" "BACKUP_AUTO_ENABLED" "自动备份 1/0" "1" ensure_env_key "${envf}" "BACKUP_INTERVAL_HOURS" "自动备份间隔小时" "24" + ensure_env_key "${envf}" "BACKUP_KEEP_COUNT" "" "30" ensure_env_key "${envf}" "OKX_API_KEY" "OKX API Key(可空)" "" ensure_env_key "${envf}" "OKX_API_SECRET" "OKX API Secret(可空)" "" ensure_env_key "${envf}" "OKX_API_PASSPHRASE" "OKX Passphrase(可空)" "" @@ -323,7 +325,7 @@ verify_health() { local url="http://127.0.0.1:${port}/health" step "健康检查 ${url}" local i - for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do + for i in $(seq 1 30); do if curl -fsS "${url}" >/dev/null 2>&1; then log "health OK" curl -fsS "${url}" || true @@ -332,7 +334,7 @@ verify_health() { fi sleep 2 done - log "警告: health 暂未就绪,请检查: docker compose -f ${REPO_ROOT}/docker-compose.yml logs" + log "警告: health 暂未就绪,请检查: docker compose -f ${REPO_ROOT}/docker-compose.yml logs api --tail 80" return 1 } diff --git a/packages/config/settings.py b/packages/config/settings.py index 46e93da..94bfacc 100644 --- a/packages/config/settings.py +++ b/packages/config/settings.py @@ -13,6 +13,7 @@ class Settings(BaseSettings): model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", + env_ignore_empty=True, extra="ignore", )