Добавлены новые возможности для работы с файловыми логами Docker-сервисов: - Эндпоинты для получения списка логов и хвоста лог-файла. - Очистка лог-файлов с возможностью выбора режима (truncate или delete) и запись в аудит очистки. - Обновлена документация и конфигурация для поддержки новых функций. Co-authored-by: Cursor <[email protected]>
52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package runtimelogs
|
|
|
|
import (
|
|
"os"
|
|
|
|
"evobgp/internal/store"
|
|
)
|
|
|
|
// Cleanup truncates or deletes a runtime log file synchronously.
|
|
func (s *Service) Cleanup(filename, mode string) (sizeBefore int64, sizeAfter *int64, err error) {
|
|
if !s.Available() {
|
|
return 0, nil, ErrUnavailable
|
|
}
|
|
if !store.ValidRuntimeLogCleanupAction(mode) {
|
|
return 0, nil, ErrInvalidFilename
|
|
}
|
|
path, err := ResolveLogPath(s.cfg.RootDir, filename)
|
|
if err != nil {
|
|
return 0, nil, err
|
|
}
|
|
st, err := os.Stat(path)
|
|
if err != nil {
|
|
if os.IsNotExist(err) {
|
|
return 0, nil, ErrNotFound
|
|
}
|
|
return 0, nil, err
|
|
}
|
|
if st.IsDir() {
|
|
return 0, nil, ErrNotAFile
|
|
}
|
|
sizeBefore = st.Size()
|
|
if sizeBefore > MaxCleanupBytes {
|
|
return 0, nil, ErrFileTooLarge
|
|
}
|
|
|
|
switch mode {
|
|
case store.RuntimeLogCleanupTruncate:
|
|
if err := os.Truncate(path, 0); err != nil {
|
|
return 0, nil, err
|
|
}
|
|
zero := int64(0)
|
|
return sizeBefore, &zero, nil
|
|
case store.RuntimeLogCleanupDelete:
|
|
if err := os.Remove(path); err != nil {
|
|
return 0, nil, err
|
|
}
|
|
return sizeBefore, nil, nil
|
|
default:
|
|
return 0, nil, ErrInvalidFilename
|
|
}
|
|
}
|