implemented cleaner: stored not more than 0.5Gb of data
This commit is contained in:
79
main.py
79
main.py
@ -40,6 +40,7 @@ STANDARD_FOURIER_ROWS = 60
|
||||
STANDARD_FOURIER_COLS = 100
|
||||
|
||||
MAX_PROCESSING_TIME_MS = 250
|
||||
FILES_STORED_N_MAX = 100
|
||||
|
||||
# ПЕРЕЧИСЛЕНИЕ ТИПОВ ДАННЫХ
|
||||
DATA_TYPE_RAW = "RAW"
|
||||
@ -58,7 +59,7 @@ DEFAULT_FILE_INTERVAL_MS = 300 # 300 мс
|
||||
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.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)
|
||||
|
||||
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
|
||||
|
||||
|
||||
# ================================================================================
|
||||
# ТОЧКА ВХОДА
|
||||
|
||||
Reference in New Issue
Block a user