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 } }