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
- Naviguer vers Settings > Data dans l'interface CSWeb
- Cliquer sur l'onglet Breakout Scheduler
- Cliquer Add Schedule et sélectionner un dictionnaire
- Saisir l'expression cron (ex:
0 2 * * *pour tous les jours à 2h) - 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>&1Avec 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>&1Fonctionnalité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>&1Script 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_FILEchmod +x /usr/local/bin/csweb-breakout.shCron avec Script
# Crontab
0 * * * * /usr/local/bin/csweb-breakout.sh EVAL_DICTAvec 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>&1Cron 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-*.logNotifications 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
fiGestion 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ère | Web Scheduler | Cron Manuel | Webhook |
|---|---|---|---|
| Complexité setup | Faible | Moyenne | Élevée |
| Interface graphique | Oui | Non | Non |
| Logs individuels | Oui | Manuel | Manuel |
| Monitoring intégré | Oui | Non | Non |
| Temps réel | Non (polling min.) | Non | Oui |
| Accès SSH requis | Non (sauf cron initial) | Oui | Non |
Ressources
- Web Scheduler - Guide Complet - Documentation complète du Web Scheduler
- Breakout Sélectif - Breakout à la demande
- Monitoring Breakout - Surveillance des breakouts
- CLI - scheduler-run - Référence de la commande
- Webhooks API - Configuration webhooks
- CLI Reference - Commande process-cases