问题 - 索引中该目录记为小写 `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 条。
81 lines
2.6 KiB
Python
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()
|