#!/usr/bin/env python3 # -*- coding: utf-8 -*- """Почему замолчал журнал отказов. Только чтение.""" import os, re, subprocess def sh(c,t=60): try: r=subprocess.run(c,shell=True,capture_output=True,text=True,timeout=t) return (r.stdout or r.stderr or "").strip() except Exception as e: return f"<{type(e).__name__}>" F="/opt/sovereign-v5/grafana/sync_to_db.py" print("=== ОТКУДА sync_to_db БЕРЁТ ОТКАЗЫ ===") src=open(F,encoding="utf-8",errors="replace").read() if os.path.exists(F) else "" # источники: файлы, которые он открывает for m in sorted(set(re.findall(r'["\']([/~][\w./\-]+\.(?:json|jsonl|log|csv|db))["\']', src))): st="есть" if os.path.exists(m) else "НЕТ ФАЙЛА" mt=sh(f"stat -c %y '{m}' 2>/dev/null | cut -d. -f1") if os.path.exists(m) else "" sz=sh(f"du -h '{m}' 2>/dev/null | cut -f1") if os.path.exists(m) else "" print(f" {m:52} {st:10} {sz:>7} {mt}") print("\n=== ФУНКЦИЯ, ПИШУЩАЯ rejected_signals ===") i=src.find("rejected_signals") if i>0: seg=src[max(0,i-1400):i+200] fns=re.findall(r"def (\w+)\(", seg) print(" функции рядом:", ", ".join(fns[-3:]) or "—") for m in sorted(set(re.findall(r'["\']([/~][\w./\-]+)["\']', seg))): print(f" источник в этой функции: {m} {'есть' if os.path.exists(m) else 'НЕТ'}") print("\n=== ПРОЦЕСС И ЕГО ЛОГ ===") print(" запущен:", sh("ps -eo etimes,cmd | grep '[s]ync_to_db' | head -1")) print(" юнит:", sh("systemctl list-units --all --no-legend --no-pager | grep -io '[a-z0-9-]*sync[a-z0-9-]*\\.service' | head -1") or "нет юнита, запущен вручную") log=sh("ls -t /opt/sovereign-v5/*.log /opt/sovereign-v5/grafana/*.log 2>/dev/null | head -3") for l in log.splitlines(): print(f" лог {l}: {sh(f'stat -c %y {l} | cut -d. -f1')} {sh(f'du -h {l} | cut -f1')}") print(" последние строки:") print(sh(f"tail -4 {l} | sed 's/^/ /'")) print("\n=== ЧТО ЕЩЁ ЗАМОЛЧАЛО 20 ИЮЛЯ ===") print(sh("find /opt/arena /opt/sovereign-v5 -maxdepth 2 -name '*.log' -newermt '2026-07-19' " "! -newermt '2026-07-21' -printf '%TY-%Tm-%Td %TH:%TM %p\\n' 2>/dev/null | sort | head -10")) print("\n=== ЛОГИ, КОТОРЫЕ ПИШУТСЯ ПРЯМО СЕЙЧАС ===") print(sh("find /opt/arena /opt/sovereign-v5 -maxdepth 2 -name '*.log' -mmin -60 " "-printf '%TH:%TM %p\\n' 2>/dev/null | sort -r | head -8"))