84 lines
1.7 KiB
Go
84 lines
1.7 KiB
Go
package core
|
|
|
|
import (
|
|
"github.com/rs/zerolog"
|
|
"os"
|
|
"path/filepath"
|
|
"sort"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func TrimLogEntries(dir string, logger *zerolog.Logger) {
|
|
// Get all log files in the directory
|
|
entries, err := os.ReadDir(dir)
|
|
if err != nil {
|
|
logger.Error().Err(err).Msg("core: Failed to read log directory")
|
|
return
|
|
}
|
|
|
|
// Get the total size of all log entries
|
|
var totalSize int64
|
|
for _, file := range entries {
|
|
if file.IsDir() {
|
|
continue
|
|
}
|
|
info, err := file.Info()
|
|
if err != nil {
|
|
continue
|
|
}
|
|
totalSize += info.Size()
|
|
}
|
|
|
|
var files []os.FileInfo
|
|
for _, entry := range entries {
|
|
if entry.IsDir() {
|
|
continue
|
|
}
|
|
info, err := entry.Info()
|
|
if err != nil {
|
|
continue
|
|
}
|
|
files = append(files, info)
|
|
}
|
|
|
|
var serverLogFiles []os.FileInfo
|
|
var scanLogFiles []os.FileInfo
|
|
|
|
for _, file := range files {
|
|
if strings.HasPrefix(file.Name(), "seanime-") {
|
|
serverLogFiles = append(serverLogFiles, file)
|
|
} else if strings.Contains(file.Name(), "-scan") {
|
|
scanLogFiles = append(scanLogFiles, file)
|
|
}
|
|
}
|
|
|
|
for _, _files := range [][]os.FileInfo{serverLogFiles, scanLogFiles} {
|
|
files := _files
|
|
if len(files) <= 1 {
|
|
continue
|
|
}
|
|
|
|
// Sort from newest to oldest
|
|
sort.Slice(files, func(i, j int) bool {
|
|
return files[i].ModTime().After(files[j].ModTime())
|
|
})
|
|
|
|
// Delete all log files older than 14 days
|
|
deleted := 0
|
|
for i := 1; i < len(files); i++ {
|
|
if time.Since(files[i].ModTime()) > 14*24*time.Hour {
|
|
err := os.Remove(filepath.Join(dir, files[i].Name()))
|
|
if err != nil {
|
|
continue
|
|
}
|
|
deleted++
|
|
}
|
|
}
|
|
if deleted > 0 {
|
|
logger.Info().Msgf("app: Deleted %d log files older than 14 days", deleted)
|
|
}
|
|
}
|
|
|
|
}
|