Доработка. Использование стандартных путей Linux

This commit is contained in:
Maxim
2026-06-09 16:02:47 +03:00
parent d84856ba3a
commit 730facdf59
7 changed files with 186 additions and 126 deletions

View File

@@ -10,15 +10,13 @@ import (
)
type Retention struct {
dataDir string
maxAgeHours int // максимальный возраст файлов в часах
maxSizeBytes int64 // максимальный размер всех файлов в байтах
maxAgeHours int
maxSizeBytes int64
eventLogger *EventLogger
}
func NewRetention(dataDir string, maxAgeHours int, maxSizeMB int, eventLogger *EventLogger) *Retention {
func NewRetention(maxAgeHours int, maxSizeMB int, eventLogger *EventLogger) *Retention {
return &Retention{
dataDir: dataDir,
maxAgeHours: maxAgeHours,
maxSizeBytes: int64(maxSizeMB) * 1024 * 1024,
eventLogger: eventLogger,
@@ -41,29 +39,38 @@ func (r *Retention) Start() {
}
func (r *Retention) Cleanup() {
// Получаем директорию с данными
dataDir, err := GetDataLogsDir()
if err != nil {
if r.eventLogger != nil {
r.eventLogger.Event("ОШИБКАОЛУЧЕНИЯ_ДИРЕКТОРИИ")
}
return
}
if r.eventLogger != nil {
r.eventLogger.Event("ЗАПУЩЕНА_ОЧИСТКАОГОВ")
}
// 1. Удаляем старые файлы
deletedByAge := r.cleanByAge()
deletedByAge := r.cleanByAge(dataDir)
// 2. Проверяем общий размер и удаляем самые старые если превышен лимит
deletedBySize := r.cleanBySize()
deletedBySize := r.cleanBySize(dataDir)
if r.eventLogger != nil && (deletedByAge > 0 || deletedBySize > 0) {
r.eventLogger.Event("УДАЛЕНОАЙЛОВ")
log.Printf("🧹 Очистка логов: удалено %d файлов (по возрасту: %d, по размеру: %d)",
log.Printf("Очистка логов: удалено %d файлов (по возрасту: %d, по размеру: %d)",
deletedByAge+deletedBySize, deletedByAge, deletedBySize)
}
}
func (r *Retention) cleanByAge() int {
func (r *Retention) cleanByAge(dataDir string) int {
cutoff := time.Now().Add(-time.Duration(r.maxAgeHours) * time.Hour)
deleted := 0
// Получаем все .bin файлы
files, err := filepath.Glob(filepath.Join(r.dataDir, "gpio-*.bin"))
files, err := filepath.Glob(filepath.Join(dataDir, "gpio-*.bin"))
if err != nil {
return 0
}
@@ -93,9 +100,9 @@ func (r *Retention) cleanByAge() int {
return deleted
}
func (r *Retention) cleanBySize() int {
func (r *Retention) cleanBySize(dataDir string) int {
// Получаем все файлы
files, err := filepath.Glob(filepath.Join(r.dataDir, "gpio-*.bin"))
files, err := filepath.Glob(filepath.Join(dataDir, "gpio-*.bin"))
if err != nil {
return 0
}
@@ -104,7 +111,7 @@ func (r *Retention) cleanBySize() int {
return 0
}
// Сортируем по времени (старые первыми)
// Сортируем по времени (старыми первыми)
type fileInfo struct {
path string
time time.Time
@@ -172,33 +179,4 @@ func (r *Retention) parseFilenameTime(filename string) time.Time {
hour, _ := time.Parse("15", parts[4])
return time.Date(year.Year(), month.Month(), day.Day(), hour.Hour(), 0, 0, 0, time.Local)
}
// GetAvailableRange возвращает диапазон доступных данных
func (r *Retention) GetAvailableRange() (oldest, newest time.Time, count int) {
files, err := filepath.Glob(filepath.Join(r.dataDir, "gpio-*.bin"))
if err != nil {
return
}
count = len(files)
if count == 0 {
return
}
for _, file := range files {
fileTime := r.parseFilenameTime(file)
if fileTime.IsZero() {
continue
}
if oldest.IsZero() || fileTime.Before(oldest) {
oldest = fileTime
}
if newest.IsZero() || fileTime.After(newest) {
newest = fileTime
}
}
return
}