implemented cleaner: stored not more than 0.5Gb of data

This commit is contained in:
2025-11-14 00:16:38 +03:00
parent d70b016c0d
commit fccccc62ff

79
main.py
View File

@ -40,6 +40,7 @@ STANDARD_FOURIER_ROWS = 60
STANDARD_FOURIER_COLS = 100 STANDARD_FOURIER_COLS = 100
MAX_PROCESSING_TIME_MS = 250 MAX_PROCESSING_TIME_MS = 250
FILES_STORED_N_MAX = 100
# ПЕРЕЧИСЛЕНИЕ ТИПОВ ДАННЫХ # ПЕРЕЧИСЛЕНИЕ ТИПОВ ДАННЫХ
DATA_TYPE_RAW = "RAW" DATA_TYPE_RAW = "RAW"
@ -58,7 +59,7 @@ DEFAULT_FILE_INTERVAL_MS = 300 # 300 мс
GAP_THRESHOLD_MULTIPLIER = 1.5 GAP_THRESHOLD_MULTIPLIER = 1.5
# Начальное время опроса файлов (в миллисекундах) # Начальное время опроса файлов (в миллисекундах)
DEFAULT_FILE_POLL_INTERVAL_MS = 100 # 100 мс DEFAULT_FILE_POLL_INTERVAL_MS = 80 # 100 мс
# ================================================================================ # ================================================================================
@ -1253,9 +1254,85 @@ class DataAnalyzerApp:
self.processed_files.add(fname) self.processed_files.add(fname)
self.do_pending_update() self.do_pending_update()
# Очистка старых файлов, чтобы хранить не более FILES_STORED_N_MAX
#self.cleanup_old_files() //stores only last FILES_STORED_N_MAX files
self.cleanup_by_size(max_bytes=500*1024*1024) #stores not more than 0.5 Gb of data
# Используем переменное время опроса # Используем переменное время опроса
self.root.after(self.file_poll_interval_ms, self.process_files) self.root.after(self.file_poll_interval_ms, self.process_files)
def cleanup_old_files(self):
try:
files = [
f for f in os.listdir()
if f.lower().endswith(('.txt', '.txt1', '.txt2', '.csv'))
]
if len(files) <= FILES_STORED_N_MAX:
return
# Сортировка по времени изменения (старые сначала)
files_sorted = sorted(files, key=lambda fn: os.path.getmtime(fn))
to_delete = files_sorted[:len(files) - FILES_STORED_N_MAX]
deleted = 0
for fn in to_delete:
try:
os.remove(fn)
deleted += 1
# Поддерживаем список обработанных
if fn in self.processed_files:
self.processed_files.discard(fn)
except Exception:
pass
if deleted:
timestamp = datetime.now().strftime("%H:%M:%S.%f")[:-3]
print(f"[{timestamp}] 🧹 Cleanup: removed {deleted} old file(s)")
except Exception:
pass
def cleanup_by_size(self, max_bytes=500 * 1024 * 1024):
"""Альтернативный сборщик: удаляет самые старые .csv/.txt,
если суммарный объём в папке превышает max_bytes (по умолчанию ~500 МБ)."""
try:
# Берём только обычные файлы текущей директории данных
files = [
f for f in os.listdir()
if os.path.isfile(f) and f.lower().endswith(('.csv', '.txt'))
]
# Подсчёт общего объёма
meta = [] # (name, size, mtime)
total_size = 0
for fn in files:
try:
sz = os.path.getsize(fn)
mt = os.path.getmtime(fn)
meta.append((fn, sz, mt))
total_size += sz
except Exception:
continue
if total_size <= max_bytes:
return
# Сортируем по времени изменения (старые сначала) и удаляем, пока не уложимся
meta.sort(key=lambda t: t[2])
deleted = 0
for fn, sz, _ in meta:
if total_size <= max_bytes:
break
try:
os.remove(fn)
total_size -= sz
deleted += 1
if fn in self.processed_files:
self.processed_files.discard(fn)
except Exception:
continue
if deleted:
timestamp = datetime.now().strftime("%H:%M:%S.%f")[:-3]
mb = max_bytes / (1024 * 1024)
print(f"[{timestamp}] 🧹 Collector: removed {deleted} file(s) to keep <= {mb:.0f} MB")
except Exception:
pass
# ================================================================================ # ================================================================================
# ТОЧКА ВХОДА # ТОЧКА ВХОДА