sync: system_audit.py cache审计(笑笑)
This commit is contained in:
@@ -139,6 +139,33 @@ def audit_portfolio(conn):
|
|||||||
log_issue("组合", "MEDIUM", f"查询失败: {e}")
|
log_issue("组合", "MEDIUM", f"查询失败: {e}")
|
||||||
|
|
||||||
|
|
||||||
|
# ── 8. 编译缓存审计 ──
|
||||||
|
def audit_cache():
|
||||||
|
"""检查 __pycache__ 中是否有比 .py 源文件更老的 .pyc(陈旧缓存)。"""
|
||||||
|
try:
|
||||||
|
base = Path(__file__).resolve().parent
|
||||||
|
stale = []
|
||||||
|
for pyc in base.rglob("__pycache__/*.pyc"):
|
||||||
|
py = pyc.with_suffix("") # remove .cpython-*.pyc extension
|
||||||
|
# The .py file is at parent_of___pycache__ / stem_without_cpython_suffix
|
||||||
|
# e.g., __pycache__/foo.cpython-312.pyc -> ../foo.py
|
||||||
|
stem = pyc.stem # e.g. "foo.cpython-312"
|
||||||
|
# Remove the .cpython-NNN suffix to get original module name
|
||||||
|
import re
|
||||||
|
m = re.match(r"^(.*?)\.cpython-\d+", stem)
|
||||||
|
if not m:
|
||||||
|
continue
|
||||||
|
py_path = pyc.parent.parent / f"{m.group(1)}.py"
|
||||||
|
if py_path.exists() and pyc.stat().st_mtime < py_path.stat().st_mtime:
|
||||||
|
stale.append(str(py_path.name))
|
||||||
|
if stale:
|
||||||
|
log_issue("编译缓存", "MEDIUM", f"{len(stale)}个陈旧.pyc:{', '.join(stale)}", "删除对应__pycache__/.pyc")
|
||||||
|
else:
|
||||||
|
log_ok("编译缓存", "所有.pyc文件与源文件一致")
|
||||||
|
except Exception as e:
|
||||||
|
log_issue("编译缓存", "LOW", f"检查失败: {e}")
|
||||||
|
|
||||||
|
|
||||||
# ── 6. 数据管道审计 ──
|
# ── 6. 数据管道审计 ──
|
||||||
def audit_pipeline():
|
def audit_pipeline():
|
||||||
# 检查DB市场数据是否今天更新
|
# 检查DB市场数据是否今天更新
|
||||||
@@ -195,6 +222,7 @@ def main():
|
|||||||
audit_portfolio(conn)
|
audit_portfolio(conn)
|
||||||
audit_pipeline()
|
audit_pipeline()
|
||||||
audit_services()
|
audit_services()
|
||||||
|
audit_cache()
|
||||||
|
|
||||||
conn.close()
|
conn.close()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user