文件
workbuddy-portal/docker/healthcheck.py
T
wangchuanli 23799b4ea5 feat(oss): 补齐开源声明体系(MIT + 第三方声明 + 贡献/安全/行为准则)
* LICENSE              —— MIT
  * THIRD-PARTY-NOTICES  —— 依赖清单、再分发合规说明(含随仓库分发的
                            Apache ECharts 5.6.0 / Apache-2.0)与自查清单
  * CONTRIBUTING.md      —— 开发环境、五层验证、必须遵守的不变量、提交规范
  * SECURITY.md          —— 漏洞私有报告渠道、已有措施、已知非目标
  * CODE_OF_CONDUCT.md   —— 改编自 Contributor Covenant 2.1
  * .github/             —— Bug 报告 / 功能建议表单 + PR 模板
  * .editorconfig        —— 与 .gitattributes 保持一致
  * 全部 Python / Shell 源文件加 SPDX-License-Identifier: MIT 头
  * README 增加「开源与许可」章节与许可标识
2026-09-14 16:15:26 +08:00

26 行
890 B
Python

# -*- coding: utf-8 -*-
# SPDX-License-Identifier: MIT
# Copyright (c) 2026 Wang Chuanli
"""容器健康检查。
只用标准库:slim 镜像里没有 curl。`/login` 是唯一免登录页面,拿到 200 即认为
Web 进程已就绪(不用 /api/*,那些未登录只会返回 401,反而会误判为不健康)。
必须显式清空代理:容器里若继承了宿主的 HTTP_PROXY,127.0.0.1 也会被拦。
"""
import os
import sys
import urllib.request
PORT = os.environ.get("WB_PORT", "8848")
URL = "http://127.0.0.1:%s/login" % PORT
opener = urllib.request.build_opener(urllib.request.ProxyHandler({}))
try:
with opener.open(URL, timeout=4) as r:
sys.exit(0 if r.status == 200 else 1)
except Exception as exc: # noqa: BLE001 —— 健康检查只关心成败
print("healthcheck failed: %s" % exc, file=sys.stderr)
sys.exit(1)