docs(runtime-logs): implement runtime log management features
Добавлены новые возможности для работы с файловыми логами Docker-сервисов: - Эндпоинты для получения списка логов и хвоста лог-файла. - Очистка лог-файлов с возможностью выбора режима (truncate или delete) и запись в аудит очистки. - Обновлена документация и конфигурация для поддержки новых функций. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user