cleanup.go
1382 bytes
1package handler
2
3import (
4 "context"
5 "errors"
6 "os"
7 "time"
8)
9
10func (h *handler) CleanupRoutine(ctx context.Context) {
11 ticker := time.NewTicker(h.config.CleanupInterval)
12 defer ticker.Stop()
13
14 h.log.Info("Starting cleanup goroutine", "interval", h.config.CleanupInterval, "age", h.config.CleanupAge)
15
16 for {
17 select {
18 case <-ctx.Done():
19 h.log.Info("Cleanup context done, stopping cleanup goroutine")
20 return
21 case <-ticker.C:
22 h.performCleanup(ctx)
23 }
24 }
25}
26
27func (h *handler) performCleanup(ctx context.Context) {
28 videos, err := h.db.GetVideosForCleanup(ctx, h.config.CleanupAge)
29 if err != nil {
30 h.log.Error("Failed to get videos for cleanup", "error", err)
31 return
32 }
33
34 for _, video := range videos {
35 if video.FilePath == nil {
36 continue
37 }
38
39 h.log.Info("Cleaning up video file", "video_id", video.ID, "path", *video.FilePath)
40
41 err := os.Remove(*video.FilePath)
42 if err != nil {
43 if !errors.Is(err, os.ErrNotExist) {
44 h.log.Error("Failed to delete file", "path", *video.FilePath, "error", err)
45 continue
46 }
47 h.log.Warn("File already deleted, cleaning DB entry", "path", *video.FilePath)
48 }
49
50 if err := h.db.DeleteVideoFile(ctx, video.ID); err != nil {
51 h.log.Error("Failed to update DB after cleanup", "video_id", video.ID, "error", err)
52 }
53 }
54
55 if len(videos) > 0 {
56 h.log.Info("Cleanup completed", "files_deleted", len(videos))
57 }
58}