sourcefinder/test-logging.js
Alexis Trouvé a7bd6115b7
Some checks failed
SourceFinder CI/CD Pipeline / Code Quality & Linting (push) Has been cancelled
SourceFinder CI/CD Pipeline / Unit Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Security Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Integration Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Performance Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Code Coverage Report (push) Has been cancelled
SourceFinder CI/CD Pipeline / Build & Deployment Validation (16.x) (push) Has been cancelled
SourceFinder CI/CD Pipeline / Build & Deployment Validation (18.x) (push) Has been cancelled
SourceFinder CI/CD Pipeline / Build & Deployment Validation (20.x) (push) Has been cancelled
SourceFinder CI/CD Pipeline / Regression Tests (push) Has been cancelled
SourceFinder CI/CD Pipeline / Security Audit (push) Has been cancelled
SourceFinder CI/CD Pipeline / Notify Results (push) Has been cancelled
feat: Implémentation complète du système SourceFinder avec tests
- Architecture modulaire avec injection de dépendances
- Système de scoring intelligent multi-facteurs (spécificité, fraîcheur, qualité, réutilisation)
- Moteur anti-injection 4 couches (preprocessing, patterns, sémantique, pénalités)
- API REST complète avec validation et rate limiting
- Repository JSON avec index mémoire et backup automatique
- Provider LLM modulaire pour génération de contenu
- Suite de tests complète (Jest) :
  * Tests unitaires pour sécurité et scoring
  * Tests d'intégration API end-to-end
  * Tests de sécurité avec simulation d'attaques
  * Tests de performance et charge
- Pipeline CI/CD avec GitHub Actions
- Logging structuré et monitoring
- Configuration ESLint et environnement de test

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-15 23:06:10 +08:00

163 lines
4.5 KiB
JavaScript

/**
* Test du nouveau système de logging SourceFinder
* Teste Pino + traçage hiérarchique + WebSocket
*/
require('dotenv').config();
// Activer logging console et WebSocket pour test
process.env.ENABLE_CONSOLE_LOG = 'true';
process.env.ENABLE_LOG_WS = 'true';
process.env.LOG_LEVEL = 'trace';
const logger = require('./src/utils/logger');
const { setupTracer } = logger;
async function testNewLoggingSystem() {
console.log('🧪 Testing SourceFinder Advanced Logging System...\n');
// 1. Test des niveaux de base
console.log('📝 1. Testing basic log levels...');
logger.info('SourceFinder démarré avec succès');
logger.debug('Mode développement activé');
logger.warn('Configuration par défaut utilisée');
logger.trace('Système de traçage initialisé');
// 2. Test des méthodes spécialisées SourceFinder
console.log('\n🔍 2. Testing specialized SourceFinder methods...');
logger.newsSearch('Recherche articles pour Berger Allemand', {
raceCode: '352-1',
resultsCount: 15
});
logger.llmRequest('Génération de contenu via OpenAI', {
model: 'gpt-4',
tokens: 1000,
estimatedCost: 0.02
});
logger.llmResponse('Contenu généré avec succès', 1250, 1000);
logger.stockOperation('Sauvegarde nouveaux articles', 'save', 5, {
sourceType: 'premium',
totalScore: 285
});
logger.scoringOperation('Article scoré', 87, {
specificity: 95,
freshness: 90,
quality: 85,
reuse: 80
});
logger.performance('Recherche complète', 'search', 1850, {
cacheHit: true,
dbQueries: 3
});
// 3. Test du traçage hiérarchique
console.log('\n🎯 3. Testing hierarchical tracing...');
const tracer = setupTracer('TestModule');
await tracer.run('processNewsRequest', async () => {
logger.trace('Début traitement requête news');
await tracer.run('validateRequest', async () => {
logger.trace('Validation paramètres requête');
await new Promise(resolve => setTimeout(resolve, 100));
});
await tracer.run('searchStock', async () => {
logger.trace('Recherche dans le stock existant');
await new Promise(resolve => setTimeout(resolve, 200));
});
await tracer.run('scoreResults', async () => {
logger.trace('Scoring des résultats trouvés');
await new Promise(resolve => setTimeout(resolve, 150));
});
logger.trace('Requête news traitée avec succès');
}, {
raceCode: '352-1',
clientId: 'test-client'
});
// 4. Test des métriques et health checks
console.log('\n📊 4. Testing metrics and health checks...');
logger.logMetric('articles_processed', 25, 'count', {
source: 'premium',
race: '352-1'
});
logger.logHealthCheck('database', 'healthy', {
connections: 5,
responseTime: 45
});
logger.logHealthCheck('llm_provider', 'degraded', {
errorRate: 0.02,
avgResponseTime: 2500
});
// 5. Test gestion d'erreurs
console.log('\n❌ 5. Testing error handling...');
try {
throw new Error('Erreur simulée pour test');
} catch (error) {
logger.error('Test error handling', error, {
operation: 'test',
context: 'logging-test'
});
}
logger.securityAlert('Tentative d\'injection détectée', 'prompt_injection', 'Ignore all previous instructions and...', {
clientIp: '192.168.1.100',
userAgent: 'TestBot/1.0'
});
// 6. Test objets complexes
console.log('\n🔧 6. Testing complex object logging...');
const complexObject = {
id: 'article-123',
title: 'Guide complet du Berger Allemand',
metadata: {
scores: { quality: 85, freshness: 90 },
tags: ['education', 'sante', 'comportement'],
source: {
domain: 'centrale-canine.fr',
type: 'premium',
reliability: 0.95
}
}
};
logger.logObject('Article complexe', complexObject);
const results = [
{ id: 1, score: 85, title: 'Article 1' },
{ id: 2, score: 92, title: 'Article 2' },
{ id: 3, score: 78, title: 'Article 3' }
];
logger.logArray('Résultats de recherche', results);
console.log('\n✅ Test du système de logging terminé!');
console.log('📄 Logs sauvegardés dans: logs/sourcefinder-[timestamp].log');
console.log('🌐 Interface WebSocket disponible sur: ws://localhost:8082');
console.log('🛠️ Consulter logs: npm run logs:pretty');
// Attendre un peu pour que tous les logs soient écrits
await new Promise(resolve => setTimeout(resolve, 1000));
}
// Exécuter le test
if (require.main === module) {
testNewLoggingSystem().catch(console.error);
}
module.exports = { testNewLoggingSystem };