Files
FinDataHub/Scripts/bin/check_db.py
T
FinDataHub 11d36d1c1e fix(repo): 修正 Scripts 目录索引大小写并补齐未入库脚本
问题
- 索引中该目录记为小写 `scripts/`,工作区实为 `Scripts/`。因 core.ignorecase=true,
  本地 `git diff -- Scripts/bin/x.py` 会**静默返回空**(看似无改动),
  且在大小写敏感环境(Linux CI / Docker 挂载)会检出 `scripts/`,
  与全仓所有 `Scripts/...` 引用不匹配。
- 该目录此前 10 个脚本(check_python_version.py、perf_snapshot.py、
  install_collector_launchd.py、mysql_toggle.sh 等)从未入库,
  而 CI 第 31 行正调用 `Scripts/bin/check_python_version.py --strict` ——
  全新检出必然失败。

改动
- 索引路径统一为 `Scripts/`(工作区文件未移动,仅索引改名)。
- 补齐上述 10 个未跟踪脚本及其测试。

影响
- 修正前索引 35 条(全为小写路径),修正后 45 条。
2026-09-18 22:37:32 +08:00

81 lines
2.6 KiB
Python

#!/usr/bin/env python3
"""FinDataHub 数据库状态检测"""
import sys
import json
import os
MYSQL_HOST = os.environ.get("MYSQL_HOST", "localhost")
MYSQL_PORT = int(os.environ.get("MYSQL_PORT", "3306"))
MYSQL_USER = os.environ.get("MYSQL_USER", "root")
MYSQL_PASSWORD = os.environ.get("MYSQL_PASSWORD", "")
MYSQL_DATABASE = os.environ.get("MYSQL_DATABASE", "news_flash")
MYSQL_DATABASE_AKSHARE = os.environ.get("MYSQL_DATABASE_AKSHARE", "akshare_data")
MYSQL_DATABASE_TUSHARE = os.environ.get("MYSQL_DATABASE_TUSHARE", "tushare_data")
def connect(host, port, user, password, database=None):
import pymysql
return pymysql.connect(
host=host, port=port, user=user, password=password,
database=database, charset="utf8mb4",
connect_timeout=5
)
def main():
result = {
"mysql_reachable": False,
"news_flash_exists": False,
"news_flash_tables": [],
"akshare_data_exists": False,
"akshare_data_tables": [],
"tushare_data_exists": False,
"tushare_data_tables": [],
"ready": False,
"error": None
}
try:
conn = connect(MYSQL_HOST, MYSQL_PORT, MYSQL_USER, MYSQL_PASSWORD)
result["mysql_reachable"] = True
cursor = conn.cursor()
cursor.execute("SHOW DATABASES")
dbs = [row[0] for row in cursor.fetchall()]
result["news_flash_exists"] = MYSQL_DATABASE in dbs
result["akshare_data_exists"] = MYSQL_DATABASE_AKSHARE in dbs
result["tushare_data_exists"] = MYSQL_DATABASE_TUSHARE in dbs
if MYSQL_DATABASE in dbs:
conn.select_db(MYSQL_DATABASE)
cursor.execute("SHOW TABLES")
result["news_flash_tables"] = [row[0] for row in cursor.fetchall()]
if MYSQL_DATABASE_AKSHARE in dbs:
conn.select_db(MYSQL_DATABASE_AKSHARE)
cursor.execute("SHOW TABLES")
result["akshare_data_tables"] = [row[0] for row in cursor.fetchall()]
if MYSQL_DATABASE_TUSHARE in dbs:
conn.select_db(MYSQL_DATABASE_TUSHARE)
cursor.execute("SHOW TABLES")
result["tushare_data_tables"] = [row[0] for row in cursor.fetchall()]
conn.close()
required_nf_tables = ["news_sources", "news_flash", "push_log", "fetch_log"]
has_nf_tables = all(t in result["news_flash_tables"] for t in required_nf_tables)
result["ready"] = result["news_flash_exists"] and has_nf_tables
except Exception as e:
result["error"] = str(e)
print(json.dumps(result, ensure_ascii=False))
if __name__ == "__main__":
main()