diff --git a/ansible/playbook.yml b/ansible/playbook.yml index 1b1a3b8..ace6da1 100644 --- a/ansible/playbook.yml +++ b/ansible/playbook.yml @@ -256,6 +256,14 @@ job: "php {{ path }}/bin/console app:backup" user: "root" state: present + - name: "Cron Task - Clean Data (Performance & Tracking)" + ansible.builtin.cron: + name: "Intranet Ludikevent - Clean Data" + minute: "0" + hour: "20" + job: "php {{ path }}/bin/console app:clean" + user: "root" + state: present - name: Set correct permissions for Symfony cache and logs directories ansible.builtin.file: path: "{{ item }}" diff --git a/src/Command/CleanCommand.php b/src/Command/CleanCommand.php new file mode 100644 index 0000000..ce0fc85 --- /dev/null +++ b/src/Command/CleanCommand.php @@ -0,0 +1,62 @@ +title('Lancement du nettoyage de la base de données'); + + // 1. Nettoyage SitePerformance (<= 3 jours) + $limitPerformance = new \DateTime('-3 days'); + $perfCount = $this->entityManager->createQueryBuilder() + ->delete(SitePerformance::class, 'p') + ->where('p.createdAt <= :limit') + ->setParameter('limit', $limitPerformance) + ->getQuery() + ->execute(); + + $io->note(sprintf('%d entrées de performance supprimées (plus de 3 jours).', $perfCount)); + + // 2. Nettoyage CustomerTracking (<= 30 jours) + $limitTracking = new \DateTime('-30 days'); + $trackCount = $this->entityManager->createQueryBuilder() + ->delete(CustomerTracking::class, 't') + ->where('t.createAT <= :limit') + ->setParameter('limit', $limitTracking) + ->getQuery() + ->execute(); + + $io->note(sprintf('%d entrées de tracking supprimées (plus de 30 jours).', $trackCount)); + + // Sauvegarde des changements + $this->entityManager->flush(); + + $io->success('Nettoyage terminé avec succès.'); + + return Command::SUCCESS; + } +}