Parent directory

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}