Guides
Breakout Sélectif
Breakout Automatique

Breakout Automatique

Automatiser le breakout avec le Web Scheduler intégré, cron jobs ou webhooks pour un traitement en continu.

Recommandé : Utilisez le Web Scheduler (interface graphique) pour planifier vos breakouts. Les méthodes cron manuel et webhook restent disponibles pour les cas avancés.


Avec le Web Scheduler (Recommandé)

Le Web Scheduler permet de configurer la planification de breakout par dictionnaire directement depuis l'interface web, sans accès SSH.

Configuration rapide

  1. Naviguer vers Settings > Data dans l'interface CSWeb
  2. Cliquer sur l'onglet Breakout Scheduler
  3. Cliquer Add Schedule et sélectionner un dictionnaire
  4. Saisir l'expression cron (ex: 0 2 * * * pour tous les jours à 2h)
  5. Activer le schedule et sauvegarder

Crontab unique requis

Le Web Scheduler nécessite un seul cron système qui pilote tous les schedules :

# Ajouter une seule fois dans crontab
* * * * * php /var/www/html/bin/console csweb:scheduler-run --env=prod >> /var/log/scheduler.log 2>&1

Avec Docker, le cron est déjà intégré dans le conteneur et démarre automatiquement. Aucune configuration supplémentaire nécessaire.

Alternative depuis l'hôte :

* * * * * docker compose exec -T csweb php bin/console csweb:scheduler-run --env=prod >> /var/log/scheduler.log 2>&1

Fonctionnalités

  • Un schedule par dictionnaire avec expression cron indépendante
  • Toggle on/off sans supprimer la configuration
  • Logs individuels : var/logs/breakout/{DICT_NAME}_{datetime}.log
  • Monitoring : Last Run, Next Run visibles dans le tableau
  • Breakout Logs : Onglet dédié avec viewer, filtrage par dictionnaire, téléchargement et suppression
  • Protection concurrence : verrou automatique via LockableTrait

Pour une documentation complète du Web Scheduler : Administration - Web Scheduler


Avec Cron Jobs (Méthode manuelle)

Pour les cas où le Web Scheduler ne convient pas (schedules très spécifiques, scripts personnalisés).

Configuration Cron

# Éditer crontab
crontab -e
 
# Breakout toutes les heures
0 * * * * cd /path/to/csweb && php bin/console csweb:process-cases-by-dict EVAL_DICT >> /var/log/breakout.log 2>&1
 
# Breakout tous les jours à 2h du matin
0 2 * * * cd /path/to/csweb && php bin/console csweb:process-cases-by-dict ALL_DICTS >> /var/log/breakout.log 2>&1

Script Wrapper

Créer /usr/local/bin/csweb-breakout.sh :

#!/bin/bash
set -e
 
DICT=$1
LOG_FILE="/var/log/csweb/breakout-$(date +%Y%m%d-%H%M%S).log"
 
echo "[$(date)] Starting breakout for $DICT" >> $LOG_FILE
 
cd /var/www/html
php bin/console csweb:process-cases-by-dict $DICT >> $LOG_FILE 2>&1
 
echo "[$(date)] Breakout completed" >> $LOG_FILE
chmod +x /usr/local/bin/csweb-breakout.sh

Cron avec Script

# Crontab
0 * * * * /usr/local/bin/csweb-breakout.sh EVAL_DICT

Avec Docker

Docker Exec Cron

# Éditer crontab de l'hôte
crontab -e
 
# Exécuter dans container
0 * * * * docker compose exec -T csweb php bin/console csweb:process-cases-by-dict EVAL_DICT >> /var/log/breakout.log 2>&1

Cron Intégré au Conteneur

Le Dockerfile CSWeb inclut déjà un cron intégré pour le scheduler. Au démarrage du conteneur, le docker-entrypoint.sh lance automatiquement le daemon cron qui exécute csweb:scheduler-run chaque minute.

Les logs du cron sont dans var/logs/scheduler-cron.log à l'intérieur du conteneur.


Avec Webhooks CSPro

Configuration Webhook

Recevoir événements CSPro et déclencher breakout automatiquement.

Webhook URL : http://your-server/breakout-webhook.php

Fichier : breakout-webhook.php

<?php
// Recevoir événement CSPro
$payload = file_get_contents('php://input');
$event = json_decode($payload, true);
 
if ($event['type'] === 'case_uploaded') {
    $dictionary = $event['dictionary'];
 
    // Lancer breakout async
    exec("php bin/console csweb:process-cases-by-dict $dictionary > /dev/null 2>&1 &");
 
    http_response_code(200);
    echo json_encode(['status' => 'breakout_scheduled']);
}

Sécurité Webhook

Vérifier signature :

<?php
$signature = $_SERVER['HTTP_X_CSWEB_SIGNATURE'];
$secret = 'your_webhook_secret';
 
$expectedSignature = 'sha256=' . hash_hmac('sha256', $payload, $secret);
 
if (!hash_equals($expectedSignature, $signature)) {
    http_response_code(401);
    exit('Invalid signature');
}

Monitoring Jobs

Logs

# Logs Web Scheduler (individuels par dict)
ls -la var/logs/breakout/
 
# Tail logs en temps réel
tail -f /var/log/csweb/breakout-*.log
 
# Rechercher erreurs
grep ERROR /var/log/csweb/breakout-*.log

Notifications Email

Ajouter à script breakout :

#!/bin/bash
DICT=$1
LOG_FILE="/tmp/breakout.log"
 
php bin/console csweb:process-cases-by-dict $DICT > $LOG_FILE 2>&1
 
if [ $? -ne 0 ]; then
    # Erreur : envoyer email
    mail -s "Breakout Failed: $DICT" admin@example.com < $LOG_FILE
fi

Gestion Concurrence

LockableTrait (Web Scheduler)

La commande csweb:scheduler-run utilise LockableTrait de Symfony pour empêcher les exécutions concurrentes. Aucune configuration supplémentaire nécessaire.

Flock (Cron Manuel)

#!/bin/bash
flock -n /tmp/breakout.lock -c "php bin/console csweb:process-cases-by-dict EVAL_DICT"

Comparaison des Méthodes

CritèreWeb SchedulerCron ManuelWebhook
Complexité setupFaibleMoyenneÉlevée
Interface graphiqueOuiNonNon
Logs individuelsOuiManuelManuel
Monitoring intégréOuiNonNon
Temps réelNon (polling min.)NonOui
Accès SSH requisNon (sauf cron initial)OuiNon

Ressources