Arborescence des pages

Sur notre Pod les vidéos issues des enregistreurs sont revendiquées manuellement. On a crée ce script pour supprimer automatiquement les vidéos non revendiquées.

Le script récupère toutes vidéos de la table recorder_recordingfiletreatment. Si le délai de rétention est dépassé l'enregistrement est supprimé en base mais également le fichier de la vidéo.

Ajouter le délai de rétention dans le fichier de configuration custom/settings_local.py

RECORD_RETENTION = 30


Créer le fichier /pod/custom/management/commands/enregistrement.py

import os
import shutil
from django.core.management.base import BaseCommand
from django.conf import settings
from django.utils import translation, timezone
from pod.recorder.models import Recorder, Recording, RecordingFileTreatment
from datetime import timedelta, datetime
import logging

LANGUAGE_CODE = getattr(settings, "LANGUAGE_CODE", "fr")

RECORD_RETENTION = getattr(
    settings, "RECORD_RETENTION", "30")

DEFAULT_RECORDER_PATH = getattr(settings, "DEFAULT_RECORDER_PATH", "/data/ftp-pod/ftp/")

log = logging.getLogger(__name__)

def checkRecordingRetention():
    if RecordingFileTreatment.objects.all().count() > 0:
        enregistrements = RecordingFileTreatment.objects.all()
        for enregistrement in enregistrements:
            print(enregistrement.file)
            if retention_depasee(enregistrement):
                print("rétention dépassée")
                supprimer_enregistrement(enregistrement)

def supprimer_enregistrement(enregistrement):
    if os.path.isfile(enregistrement.file):
        log.info("SUPPRESSION DE L'ENREGISTREMENT %s" % enregistrement.file)
        os.remove(enregistrement.file)
        enregistrement.delete()

def retention_depasee(enregistrement):
    resultat = False
    dateretention = enregistrement.date_added + timedelta(days=int(RECORD_RETENTION))
    print(dateretention)
    if dateretention < timezone.now():
        resultat = True
    return resultat

class Command(BaseCommand):
    valid_args = ["checkRecordingRetention"]

    def add_arguments(self, parser):
        parser.add_argument("checkRecordingRetention", help="Supprime les enregistrements non revendiqués")

    def handle(self, *args, **options):
        translation.activate(LANGUAGE_CODE)
        if options["checkRecordingRetention"]:
            checkRecordingRetention()


Pour exécuter la commande manuellement

python manage.py enregistrement checkRecordingRetention


Pour exécuter la commande par cron

crontab -e

*/15 * * * * /usr/bin/bash -c 'export WORKON_HOME=/data/www/%userpod%/.virtualenvs; export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.6; cd /data/www/%userpod%/django_projects/podv2; source /usr/bin/virtualenvwrapper.sh; workon django_pod; python manage.py enregistrement checkRecordingRetention'


  • Aucune étiquette