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
- 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>
163 lines
4.5 KiB
JavaScript
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 }; |