* 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 增加「开源与许可」章节与许可标识
26 行
890 B
Python
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)
|