Browse Source
* Add support for S3 cleanup + standardize firing cleanup. Closes #2646 * fix: manually fix post-mergepull/3058/head
5 changed files with 174 additions and 111 deletions
@ -1,78 +0,0 @@ |
|||||||
package transcoder |
|
||||||
|
|
||||||
import ( |
|
||||||
log "github.com/sirupsen/logrus" |
|
||||||
|
|
||||||
"os" |
|
||||||
"path/filepath" |
|
||||||
"sort" |
|
||||||
|
|
||||||
"github.com/owncast/owncast/core/data" |
|
||||||
) |
|
||||||
|
|
||||||
// CleanupOldContent will delete old files from the private dir that are no longer being referenced
|
|
||||||
// in the stream.
|
|
||||||
func CleanupOldContent(baseDirectory string) { |
|
||||||
// Determine how many files we should keep on disk
|
|
||||||
maxNumber := data.GetStreamLatencyLevel().SegmentCount |
|
||||||
buffer := 10 |
|
||||||
|
|
||||||
files, err := getAllFilesRecursive(baseDirectory) |
|
||||||
if err != nil { |
|
||||||
log.Debugln("Unable to cleanup old video files", err) |
|
||||||
return |
|
||||||
} |
|
||||||
|
|
||||||
// Delete old private HLS files on disk
|
|
||||||
for directory := range files { |
|
||||||
files := files[directory] |
|
||||||
if len(files) < maxNumber+buffer { |
|
||||||
continue |
|
||||||
} |
|
||||||
|
|
||||||
filesToDelete := files[maxNumber+buffer:] |
|
||||||
log.Traceln("Deleting", len(filesToDelete), "old files from", baseDirectory, "for video variant", directory) |
|
||||||
|
|
||||||
for _, file := range filesToDelete { |
|
||||||
fileToDelete := filepath.Join(baseDirectory, directory, file.Name()) |
|
||||||
err := os.Remove(fileToDelete) |
|
||||||
if err != nil { |
|
||||||
log.Debugln(err) |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
func getAllFilesRecursive(baseDirectory string) (map[string][]os.FileInfo, error) { |
|
||||||
var files = make(map[string][]os.FileInfo) |
|
||||||
|
|
||||||
var directory string |
|
||||||
err := filepath.Walk(baseDirectory, func(path string, info os.FileInfo, err error) error { |
|
||||||
if err != nil { |
|
||||||
return err |
|
||||||
} |
|
||||||
|
|
||||||
if info.IsDir() { |
|
||||||
directory = info.Name() |
|
||||||
} |
|
||||||
|
|
||||||
if filepath.Ext(info.Name()) == ".ts" { |
|
||||||
files[directory] = append(files[directory], info) |
|
||||||
} |
|
||||||
|
|
||||||
return nil |
|
||||||
}) |
|
||||||
|
|
||||||
if err != nil { |
|
||||||
return nil, err |
|
||||||
} |
|
||||||
|
|
||||||
// Sort by date so we can delete old files
|
|
||||||
for directory := range files { |
|
||||||
sort.Slice(files[directory], func(i, j int) bool { |
|
||||||
return files[directory][i].ModTime().UnixNano() > files[directory][j].ModTime().UnixNano() |
|
||||||
}) |
|
||||||
} |
|
||||||
|
|
||||||
return files, nil |
|
||||||
} |
|
Loading…
Reference in new issue