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
|
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
|
||||||
|
|
||||||
|
|
||||||
# ================================================================================
|
# ================================================================================
|
||||||
# ТОЧКА ВХОДА
|
# ТОЧКА ВХОДА
|
||||||
|
|||||||
Reference in New Issue
Block a user