veza/veza-backend-api/internal/jobs/cleanup_hls_segments.go
2025-12-03 20:29:37 +01:00

56 lines
1.6 KiB
Go

package jobs
import (
"context"
"os"
"time"
"veza-backend-api/internal/database"
"veza-backend-api/internal/services"
"go.uber.org/zap"
)
// CleanupHLSSegments nettoie les segments HLS obsolètes
// T0338: Nettoie les segments de tracks supprimés et les segments orphelins
func CleanupHLSSegments(db *database.Database, logger *zap.Logger) error {
ctx := context.Background()
// Récupérer le répertoire de sortie HLS depuis la config ou un défaut
hlsOutputDir := os.Getenv("HLS_OUTPUT_DIR")
if hlsOutputDir == "" {
hlsOutputDir = "hls_output"
}
// Créer le service de cleanup
cleanupService := services.NewHLSCleanupService(db.GormDB, hlsOutputDir, logger)
// Exécuter le nettoyage
if err := cleanupService.CleanupAll(ctx); err != nil {
logger.Error("Failed to cleanup HLS segments", zap.Error(err))
return err
}
logger.Info("HLS segments cleanup completed successfully")
return nil
}
// ScheduleHLSCleanupJob programme le job de nettoyage HLS pour s'exécuter périodiquement
// T0338: Lance une goroutine qui exécute le nettoyage toutes les 24 heures
func ScheduleHLSCleanupJob(db *database.Database, logger *zap.Logger) {
ticker := time.NewTicker(24 * time.Hour)
go func() {
// Exécuter immédiatement au démarrage
if err := CleanupHLSSegments(db, logger); err != nil {
logger.Error("Initial HLS cleanup job failed", zap.Error(err))
}
// Puis exécuter toutes les 24 heures
for range ticker.C {
if err := CleanupHLSSegments(db, logger); err != nil {
logger.Error("Scheduled HLS cleanup job failed", zap.Error(err))
}
}
}()
logger.Info("HLS cleanup job scheduled to run daily")
}