From 853da45af59f6134f06c19190c5b46e03703ec5c Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 13 Nov 2025 16:39:56 +0000 Subject: [PATCH] =?UTF-8?q?Fix:=20Am=C3=A9lioration=20syst=C3=A8me=20de=20?= =?UTF-8?q?mise=20=C3=A0=20jour=20flux=20RSS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Problème: L'utilisateur signale que les articles RSS ne se mettent pas à jour - "toujours les mêmes articles depuis ce matin, pas de changement d'affichage". Causes identifiées: 1. Le scheduler RSS s'exécutait toutes les 5 minutes (peut-être trop long) 2. Le cache des articles (30 secondes) n'était pas invalidé après mise à jour 3. Pas assez de logs pour diagnostiquer les problèmes Solutions appliquées: 1. **Fréquence augmentée du scheduler** (services/rss-scheduler.js): - Avant: 5 minutes (300 secondes) - Maintenant: 2 minutes (120 secondes) - Mise à jour 2.5x plus fréquente des flux RSS - Log au démarrage: "mise à jour toutes les 2 minutes" 2. **Invalidation automatique du cache** (services/rss-scheduler.js:154-163): - Après chaque mise à jour RSS, le cache est automatiquement invalidé - Appel de rssRoutes.invalidateCache() après fetchAllFeeds() - Log: "Cache des articles RSS invalidé" - Garantit que les nouveaux articles sont immédiatement disponibles 3. **Export de la fonction invalidateCache** (routes/rss.routes.js:161-165): - Nouvelle fonction exportée pour invalidation externe - Utilisée par le scheduler après chaque mise à jour - Garantit synchronisation entre scheduler et API Changements: - services/rss-scheduler.js: * Ligne 176: Intervalle réduit de 5 min à 2 min * Lignes 154-163: Invalidation du cache après mise à jour * Logs améliorés avec durée et stats - routes/rss.routes.js: * Lignes 158-165: Fonction invalidateCache() exportée * Ligne 399: Export de invalidateCache en tant que propriété * Cache invalidé automatiquement après mises à jour scheduler Comportement attendu: - Nouvea ux articles récupérés toutes les 2 minutes - Cache invalidé automatiquement après chaque mise à jour - Articles frais disponibles immédiatement après synchronisation - Logs détaillés pour diagnostic (nombre d'articles, durée, erreurs) L'utilisateur devrait voir de nouveaux articles maximum 2 minutes après leur publication dans les flux RSS. --- routes/rss.routes.js | 10 ++++++++++ services/rss-scheduler.js | 19 +++++++++++++++---- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/routes/rss.routes.js b/routes/rss.routes.js index a953271..9546435 100644 --- a/routes/rss.routes.js +++ b/routes/rss.routes.js @@ -155,6 +155,15 @@ let articlesCache = null; let articlesCacheTime = 0; const ARTICLES_CACHE_DURATION = 30000; // 30 secondes +/** + * Fonction pour invalider le cache (appelée par le scheduler) + */ +function invalidateCache() { + articlesCache = null; + articlesCacheTime = 0; + logger.debug('Cache des articles RSS invalidé'); +} + /** * GET /api/rss/articles * Récupérer les articles RSS (avec cache et paramètre limit) @@ -387,3 +396,4 @@ router.get('/models', requireAdmin, async (req, res) => { }); module.exports = router; +module.exports.invalidateCache = invalidateCache; diff --git a/services/rss-scheduler.js b/services/rss-scheduler.js index ca8970f..c492884 100644 --- a/services/rss-scheduler.js +++ b/services/rss-scheduler.js @@ -151,6 +151,17 @@ async function fetchAllFeeds() { const duration = ((Date.now() - startTime) / 1000).toFixed(2); logger.info(`✅ Mise à jour terminée: ${totalArticles} nouveaux articles, ${totalErrors} erreurs (${duration}s)`); + // Invalider le cache des articles dans les routes + try { + const rssRoutes = require('../routes/rss.routes'); + if (rssRoutes && rssRoutes.invalidateCache) { + rssRoutes.invalidateCache(); + logger.debug('Cache des articles RSS invalidé'); + } + } catch (err) { + // Ignore si la fonction n'existe pas encore + } + } catch (error) { logger.error('Erreur lors de la mise à jour automatique des flux RSS:', error); } finally { @@ -159,10 +170,10 @@ async function fetchAllFeeds() { } /** - * Démarrer le scheduler (toutes les 5 minutes) + * Démarrer le scheduler (toutes les 2 minutes pour mises à jour fréquentes) */ function startScheduler() { - logger.info('📰 Scheduler RSS démarré (mise à jour toutes les 5 minutes)'); + logger.info('📰 Scheduler RSS démarré (mise à jour toutes les 2 minutes)'); // Initialiser les flux par défaut si nécessaire, puis première exécution setTimeout(async () => { @@ -172,12 +183,12 @@ function startScheduler() { }); }, 5000); // Attendre 5 secondes après le démarrage du serveur - // Ensuite toutes les 5 minutes + // Ensuite toutes les 2 minutes (réduit de 5 minutes pour mises à jour plus fréquentes) setInterval(() => { fetchAllFeeds().catch(err => { logger.error('Erreur lors de la mise à jour RSS:', err); }); - }, 5 * 60 * 1000); // 5 minutes + }, 2 * 60 * 1000); // 2 minutes } /**