feat(core): initial commit unified architecture (scud_ai v2.5 with modular web_api)

This commit is contained in:
2026-08-14 15:01:50 +03:00
commit cc12397e29
59 changed files with 11031 additions and 0 deletions
+90
View File
@@ -0,0 +1,90 @@
import sqlite3
import os
from datetime import datetime
DB_PATH = 'data/scud_orion_ai.db'
def parse_to_date(date_str):
"""Надежное преобразование даты логов и времени снапшота в объект date."""
if not date_str:
return None
date_str = str(date_str).split(" ")[0].strip()
if "." in date_str:
try:
return datetime.strptime(date_str, "%d.%m.%Y").date()
except ValueError:
return None
elif "-" in date_str:
try:
return datetime.strptime(date_str, "%Y-%m-%d").date()
except ValueError:
return None
return None
def fix_snapshots():
"""
Переиндексирует снапшоты в таблице scud_logs.
Нумерация веников (001, 002, 003...) сквозная внутри каждого ДНЯ СОЗДАНИЯ.
Префикс Y выставляется только если дата логов < даты создания.
"""
if not os.path.exists(DB_PATH):
print(f"База данных {DB_PATH} не найдена.")
return
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
# Группируем по уникальным выгрузкам
cursor.execute("""
SELECT snapshot_time, log_date
FROM scud_logs
WHERE snapshot_time IS NOT NULL
GROUP BY snapshot_time, log_date
ORDER BY snapshot_time ASC, log_date ASC
""")
rows = cursor.fetchall()
if not rows:
print("Снапшоты не найдены.")
conn.close()
return
print("=== ИСПРАВЛЕНИЕ СКВОЗНОЙ НУМЕРАЦИИ ВНУТРИ ДНЯ СОЗДАНИЯ ===")
# Счетчик текущего порядкового номера strictly за ДЕНЬ СОЗДАНИЯ (YYYYMMDD)
seq_counters = {}
for snap_time_raw, log_date_raw in rows:
d_snap = parse_to_date(snap_time_raw)
d_log = parse_to_date(log_date_raw)
if not d_snap or not d_log:
continue
date_prefix = d_snap.strftime("%Y%m%d")
# Если дата логов строго раньше даты создания снапшота — ставим Y
is_yesterday = (d_log < d_snap)
prefix = "Y" if is_yesterday else ""
# Приращиваем сквозной счетчик за ЭТОТ ДЕНЬ СОЗДАНИЯ
seq_counters[date_prefix] = seq_counters.get(date_prefix, 0) + 1
seq_num = seq_counters[date_prefix]
new_id = f"{prefix}{date_prefix}-{seq_num:03d}"
cursor.execute(
"UPDATE scud_logs SET snapshot_id = ? WHERE snapshot_time = ? AND log_date = ?",
(new_id, snap_time_raw, log_date_raw)
)
print(f" • Срез создания: {snap_time_raw} | Логи за: {log_date_raw} ===> Назначен ID: [{new_id}]")
conn.commit()
conn.close()
print("\n[✓] Переиндексация внутри дней создания успешно выполнена!")
if __name__ == "__main__":
fix_snapshots()