@arela/uploader 1.0.23 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/docs/AUTO_PROCESSING_PIPELINE.md +258 -0
  2. package/docs/COMPLETE_USAGE_GUIDE.md +1363 -0
  3. package/docs/DATABASESERVICE_IMPROVEMENTS.md +546 -0
  4. package/docs/PASO_2_TEST_RESULTS.md +298 -0
  5. package/docs/PASO_3_PLAN.md +385 -0
  6. package/docs/PHASE_1_FILE_DETECTION.md +366 -0
  7. package/docs/PHASE_2_API_INTEGRATION.md +426 -0
  8. package/docs/PHASE_3_DATABASE_MANAGEMENT.md +480 -0
  9. package/docs/PHASE_4_FILE_OPERATIONS.md +448 -0
  10. package/docs/PHASE_5_WATCH_MODE.md +450 -0
  11. package/docs/PHASE_6_SIGNAL_HANDLING.md +472 -0
  12. package/docs/PHASE_7_ADVANCED_FEATURES.md +560 -0
  13. package/docs/PLAN_WATCH_FEATURE.md +417 -0
  14. package/docs/README.md +480 -0
  15. package/docs/SCHEMA_ALIGNMENT_SUMMARY.md +301 -0
  16. package/docs/SMARTWATCH_DATABASE_REFACTORING.md +181 -0
  17. package/docs/SMART_WATCH_DATABASE_CHANGES.md +502 -0
  18. package/docs/TESTING_WATCH_MODE.md +212 -0
  19. package/docs/WATCHER_API_IMPLEMENTATION.md +520 -0
  20. package/docs/WATCHER_API_INTEGRATION.md +562 -0
  21. package/docs/WATCHER_SETUP_GUIDE.md +614 -0
  22. package/docs/WATCH_ARCHITECTURE.md +395 -0
  23. package/docs/WATCH_AUTO_PIPELINE.md +334 -0
  24. package/docs/WATCH_CONFIGURATION.md +267 -0
  25. package/docs/WATCH_USAGE_GUIDE.md +567 -0
  26. package/docs/commands.md +14 -0
  27. package/package.json +1 -1
  28. package/scripts/scoring-compare.js +243 -0
  29. package/scripts/scoring-phase4-check.js +96 -0
  30. package/src/commands/IdentifyCommand.js +36 -0
  31. package/src/config/config.js +2 -2
  32. package/src/file-detection.js +71 -4
  33. package/src/scoring/db-matcher-adapter.js +98 -0
  34. package/src/scoring/matchers-seed.js +386 -0
  35. package/src/scoring/scoring-engine.js +246 -0
  36. package/src/services/ScanApiService.js +14 -0
  37. package/tests/unit/scoring-engine.test.js +221 -0
  38. package/.vscode/settings.json +0 -1
  39. package/coverage/IdentifyCommand.js.html +0 -1462
  40. package/coverage/PropagateCommand.js.html +0 -1507
  41. package/coverage/PushCommand.js.html +0 -1504
  42. package/coverage/ScanCommand.js.html +0 -1654
  43. package/coverage/UploadCommand.js.html +0 -1846
  44. package/coverage/WatchCommand.js.html +0 -4111
  45. package/coverage/base.css +0 -224
  46. package/coverage/block-navigation.js +0 -87
  47. package/coverage/favicon.png +0 -0
  48. package/coverage/index.html +0 -191
  49. package/coverage/lcov-report/IdentifyCommand.js.html +0 -1462
  50. package/coverage/lcov-report/PropagateCommand.js.html +0 -1507
  51. package/coverage/lcov-report/PushCommand.js.html +0 -1504
  52. package/coverage/lcov-report/ScanCommand.js.html +0 -1654
  53. package/coverage/lcov-report/UploadCommand.js.html +0 -1846
  54. package/coverage/lcov-report/WatchCommand.js.html +0 -4111
  55. package/coverage/lcov-report/base.css +0 -224
  56. package/coverage/lcov-report/block-navigation.js +0 -87
  57. package/coverage/lcov-report/favicon.png +0 -0
  58. package/coverage/lcov-report/index.html +0 -191
  59. package/coverage/lcov-report/prettify.css +0 -1
  60. package/coverage/lcov-report/prettify.js +0 -2
  61. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  62. package/coverage/lcov-report/sorter.js +0 -210
  63. package/coverage/lcov.info +0 -1937
  64. package/coverage/prettify.css +0 -1
  65. package/coverage/prettify.js +0 -2
  66. package/coverage/sort-arrow-sprite.png +0 -0
  67. package/coverage/sorter.js +0 -210
  68. package/docs/API_ENDPOINTS_FOR_DETECTION.md +0 -647
  69. package/docs/API_RETRY_MECHANISM.md +0 -338
  70. package/docs/ARELA_IDENTIFY_IMPLEMENTATION.md +0 -489
  71. package/docs/ARELA_IDENTIFY_QUICKREF.md +0 -186
  72. package/docs/ARELA_PROPAGATE_IMPLEMENTATION.md +0 -581
  73. package/docs/ARELA_PROPAGATE_QUICKREF.md +0 -272
  74. package/docs/ARELA_PUSH_IMPLEMENTATION.md +0 -577
  75. package/docs/ARELA_PUSH_QUICKREF.md +0 -322
  76. package/docs/ARELA_SCAN_IMPLEMENTATION.md +0 -373
  77. package/docs/ARELA_SCAN_QUICKREF.md +0 -139
  78. package/docs/CROSS_PLATFORM_PATH_HANDLING.md +0 -597
  79. package/docs/DETECTION_ATTEMPT_TRACKING.md +0 -414
  80. package/docs/MIGRATION_UPLOADER_TO_FILE_STATS.md +0 -1020
  81. package/docs/MULTI_LEVEL_DIRECTORY_SCANNING.md +0 -494
  82. package/docs/QUICK_REFERENCE_API_DETECTION.md +0 -264
  83. package/docs/REFACTORING_SUMMARY_DETECT_PEDIMENTOS.md +0 -200
  84. package/docs/STATS_COMMAND_SEQUENCE_DIAGRAM.md +0 -287
  85. package/docs/STATS_COMMAND_SIMPLE.md +0 -93
@@ -0,0 +1,560 @@
1
+ # Phase 7: Advanced Features & Integration 🚀
2
+
3
+ ## Overview
4
+
5
+ Phase 7 implementa características avanzadas incluyendo filtrado avanzado, reportes, benchmarking y monitoreo. Este componente proporciona análisis profundo, optimización de rendimiento y monitoreo en tiempo real.
6
+
7
+ **Objetivos Principales:**
8
+ - Filtrado avanzado de archivos
9
+ - Generación de reportes y análisis
10
+ - Benchmarking de rendimiento
11
+ - Monitoreo y alertas en tiempo real
12
+ - Integración de todas las características
13
+
14
+ ## Componentes Principales
15
+
16
+ ### 1. AdvancedFilterService.js
17
+ Servicio de filtrado avanzado con validaciones complejas.
18
+
19
+ ```javascript
20
+ const AdvancedFilterService = require('./services/AdvancedFilterService');
21
+
22
+ const filterService = new AdvancedFilterService();
23
+
24
+ // Filtrar por múltiples criterios
25
+ const filtered = filterService.filterFiles(
26
+ ['/file1.pdf', '/file2.doc', '/file3.pdf'],
27
+ {
28
+ extensions: ['.pdf'],
29
+ minSize: 1024, // 1KB
30
+ maxSize: 50 * 1024 * 1024, // 50MB
31
+ dateRange: {
32
+ from: '2025-11-01',
33
+ to: '2025-11-14'
34
+ },
35
+ customRules: ['pdf-only']
36
+ }
37
+ );
38
+
39
+ // Usar presets
40
+ const pdfsOnly = filterService.applyPreset(files, 'pdfOnly');
41
+ const largeFiles = filterService.applyPreset(files, 'largeFiles');
42
+ const recentFiles = filterService.applyPreset(files, 'recentFiles');
43
+
44
+ // Obtener estadísticas
45
+ const stats = filterService.getStatistics();
46
+ // { filtered: 10, total: 20, excluded: 10 }
47
+ ```
48
+
49
+ **Métodos Disponibles:**
50
+ - `filterFiles(files, config)` - Filtrar múltiples archivos
51
+ - `applyPreset(files, presetName)` - Usar filtro predefinido
52
+ - `getFilterPresets()` - Obtener presets disponibles
53
+ - `validateFile(filePath, ruleName)` - Validar archivo individual
54
+ - `getValidationRules()` - Obtener reglas de validación
55
+ - `getStatistics()` - Obtener estadísticas de filtrado
56
+
57
+ ### 2. ReportingService.js
58
+ Servicio de reportes y análisis.
59
+
60
+ ```javascript
61
+ const ReportingService = require('./services/ReportingService');
62
+
63
+ const reportingService = new ReportingService();
64
+
65
+ // Generar reporte de sesión
66
+ const sessionReport = reportingService.generateSessionReport(session);
67
+ // { summary, metrics, details, errors }
68
+
69
+ // Generar reporte de lote
70
+ const batchReport = reportingService.generateBatchReport(sessions);
71
+ // { totalSessions, totalUploads, successRate, ... }
72
+
73
+ // Análisis de errores
74
+ const errorReport = reportingService.generateErrorAnalysisReport(sessions);
75
+ // { patterns, categories, recovery }
76
+
77
+ // Exportar a JSON
78
+ await reportingService.exportReportJson(report, '/path/to/report.json');
79
+
80
+ // Exportar a CSV
81
+ await reportingService.exportReportCsv(report, '/path/to/report.csv');
82
+
83
+ // Obtener historial de reportes
84
+ const history = await reportingService.getReportHistory(limit);
85
+ ```
86
+
87
+ **Métodos Disponibles:**
88
+ - `generateSessionReport(session)` - Reporte de sesión individual
89
+ - `generateBatchReport(sessions)` - Reporte agregado
90
+ - `generateErrorAnalysisReport(sessions)` - Análisis de errores
91
+ - `generateSummaryStatistics(sessions)` - Estadísticas resumidas
92
+ - `exportReportJson(report, path)` - Exportar a JSON
93
+ - `exportReportCsv(report, path)` - Exportar a CSV
94
+ - `getReportHistory(limit)` - Obtener reportes anteriores
95
+ - `clearOldReports(days)` - Limpiar reportes antiguos
96
+
97
+ ### 3. BenchmarkingService.js
98
+ Servicio de benchmarking y análisis de rendimiento.
99
+
100
+ ```javascript
101
+ const BenchmarkingService = require('./services/BenchmarkingService');
102
+
103
+ const benchmark = new BenchmarkingService();
104
+
105
+ // Iniciar benchmark
106
+ const bench = benchmark.startBenchmark('upload-test');
107
+
108
+ // Marcar puntos de progreso
109
+ benchmark.mark(bench, 'validation-complete');
110
+ benchmark.mark(bench, 'upload-complete');
111
+
112
+ // Completar y obtener resultados
113
+ const result = benchmark.completeBenchmark(bench);
114
+ // { duration: 2300, marks: [...], memory: {...} }
115
+
116
+ // Comparar benchmarks
117
+ const comparison = benchmark.compareBenchmarks(baseline, current);
118
+ // { faster: true, improvement: '15%', ... }
119
+
120
+ // Detectar regresión
121
+ const regression = benchmark.detectRegression(baselineIdx, currentIdx, 0.1);
122
+ // { hasRegression: false, difference: '5%' }
123
+
124
+ // Generar reporte
125
+ const report = benchmark.generateBenchmarkReport();
126
+ ```
127
+
128
+ **Métodos Disponibles:**
129
+ - `startBenchmark(name)` - Iniciar medición
130
+ - `mark(benchmark, name)` - Marcar punto de progreso
131
+ - `completeBenchmark(bench)` - Finalizar y calcular
132
+ - `profileMemory(testFn, duration)` - Perfilar memoria
133
+ - `compareBenchmarks(b1, b2)` - Comparar dos benchmarks
134
+ - `detectRegression(baseline, current, threshold)` - Detectar regresión
135
+ - `getBenchmarkStatistics(benchmarkId)` - Obtener estadísticas
136
+ - `generateBenchmarkReport()` - Generar reporte formateado
137
+
138
+ ### 4. MonitoringService.js
139
+ Servicio de monitoreo en tiempo real con alertas.
140
+
141
+ ```javascript
142
+ const MonitoringService = require('./services/MonitoringService');
143
+
144
+ const monitor = new MonitoringService();
145
+
146
+ // Agregar regla de alerta
147
+ monitor.addAlertRule({
148
+ name: 'high-memory',
149
+ type: 'memory',
150
+ operator: 'greaterThan',
151
+ threshold: 500, // MB
152
+ severity: 'warning'
153
+ });
154
+
155
+ // Suscribirse a alertas
156
+ monitor.subscribe('critical', (alert) => {
157
+ console.error('🔴 ALERTA CRÍTICA:', alert.message);
158
+ });
159
+
160
+ // Actualizar métricas
161
+ monitor.updateMetrics({
162
+ cpu: 45,
163
+ memory: 256,
164
+ disk: 75,
165
+ connections: 10,
166
+ errorRate: 0.02
167
+ });
168
+
169
+ // Obtener alertas activas
170
+ const alerts = monitor.getActiveAlerts('critical');
171
+
172
+ // Obtener estado de salud
173
+ const health = monitor.getHealthStatus();
174
+
175
+ // Generar reporte de salud
176
+ const report = monitor.generateHealthReport();
177
+ ```
178
+
179
+ **Métodos Disponibles:**
180
+ - `addAlertRule(rule)` - Agregar regla de alerta
181
+ - `subscribe(severity, callback)` - Suscribirse a alertas
182
+ - `unsubscribe(severity, callback)` - Cancelar suscripción
183
+ - `updateMetrics(metrics)` - Actualizar métricas
184
+ - `getActiveAlerts(severity)` - Obtener alertas activas
185
+ - `acknowledgeAlert(alertId)` - Reconocer alerta
186
+ - `getHealthStatus()` - Obtener estado general
187
+ - `generateHealthReport()` - Generar reporte de salud
188
+
189
+ ## Casos de Uso
190
+
191
+ ### Caso 1: Filtrado Avanzado
192
+ ```javascript
193
+ const AdvancedFilterService = require('./services/AdvancedFilterService');
194
+ const LoggingService = require('./services/LoggingService');
195
+
196
+ const logger = LoggingService.getInstance();
197
+ const filterService = new AdvancedFilterService();
198
+
199
+ async function filterDocuments(files) {
200
+ try {
201
+ logger.info('Iniciando filtrado avanzado', { fileCount: files.length });
202
+
203
+ // Filtrar PDFs grandes modificados recientemente
204
+ const filtered = filterService.filterFiles(files, {
205
+ extensions: ['.pdf'],
206
+ minSize: 1024 * 1024, // > 1MB
207
+ maxSize: 50 * 1024 * 1024, // < 50MB
208
+ dateRange: {
209
+ from: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000), // Últimos 7 días
210
+ to: new Date()
211
+ }
212
+ });
213
+
214
+ const stats = filterService.getStatistics();
215
+ logger.info('Filtrado completado', {
216
+ original: files.length,
217
+ filtered: filtered.length,
218
+ excluded: stats.excluded
219
+ });
220
+
221
+ return filtered;
222
+ } catch (error) {
223
+ logger.error('Error en filtrado', error);
224
+ throw error;
225
+ }
226
+ }
227
+
228
+ await filterDocuments(filesList);
229
+ ```
230
+
231
+ ### Caso 2: Generación de Reportes
232
+ ```javascript
233
+ const ReportingService = require('./services/ReportingService');
234
+ const DatabaseService = require('./services/DatabaseService');
235
+ const LoggingService = require('./services/LoggingService');
236
+
237
+ const logger = LoggingService.getInstance();
238
+
239
+ async function generateCompleteReport(sessionId) {
240
+ try {
241
+ const db = new DatabaseService();
242
+ const reportingService = new ReportingService();
243
+
244
+ await db.connect();
245
+
246
+ // Obtener sesión
247
+ const session = await db.getSession(sessionId);
248
+
249
+ logger.info('Generando reporte de sesión', { sessionId });
250
+
251
+ // Generar reportes
252
+ const sessionReport = reportingService.generateSessionReport(session);
253
+ const errorAnalysis = reportingService.generateErrorAnalysisReport([session]);
254
+
255
+ // Exportar
256
+ await reportingService.exportReportJson(sessionReport, `./reports/session-${sessionId}.json`);
257
+ await reportingService.exportReportCsv(sessionReport, `./reports/session-${sessionId}.csv`);
258
+
259
+ logger.info('Reportes generados', {
260
+ json: `./reports/session-${sessionId}.json`,
261
+ csv: `./reports/session-${sessionId}.csv`
262
+ });
263
+
264
+ await db.disconnect();
265
+ return { sessionReport, errorAnalysis };
266
+ } catch (error) {
267
+ logger.error('Error generando reportes', error);
268
+ throw error;
269
+ }
270
+ }
271
+
272
+ await generateCompleteReport('session-id');
273
+ ```
274
+
275
+ ### Caso 3: Benchmarking de Rendimiento
276
+ ```javascript
277
+ const BenchmarkingService = require('./services/BenchmarkingService');
278
+ const UploadServiceFactory = require('./services/upload/UploadServiceFactory');
279
+ const LoggingService = require('./services/LoggingService');
280
+
281
+ const logger = LoggingService.getInstance();
282
+
283
+ async function benchmarkUpload(filePath) {
284
+ try {
285
+ const benchmark = new BenchmarkingService();
286
+ const uploader = UploadServiceFactory.createUploadService('supabase');
287
+
288
+ logger.info('Iniciando benchmark de upload', { filePath });
289
+
290
+ // Iniciar benchmark
291
+ const bench = benchmark.startBenchmark('upload-performance');
292
+
293
+ // Autenticar
294
+ await uploader.authenticate();
295
+ benchmark.mark(bench, 'authenticated');
296
+
297
+ // Upload
298
+ const result = await uploader.uploadFile(filePath);
299
+ benchmark.mark(bench, 'upload-complete');
300
+
301
+ // Completar
302
+ const benchResult = benchmark.completeBenchmark(bench);
303
+
304
+ logger.info('Benchmark completado', {
305
+ duration: benchResult.duration,
306
+ memory: benchResult.memory,
307
+ marks: benchResult.marks
308
+ });
309
+
310
+ // Generar reporte
311
+ const report = benchmark.generateBenchmarkReport();
312
+
313
+ return { benchResult, report };
314
+ } catch (error) {
315
+ logger.error('Error en benchmark', error);
316
+ throw error;
317
+ }
318
+ }
319
+
320
+ await benchmarkUpload('/path/to/file.pdf');
321
+ ```
322
+
323
+ ### Caso 4: Monitoreo en Tiempo Real
324
+ ```javascript
325
+ const MonitoringService = require('./services/MonitoringService');
326
+ const LoggingService = require('./services/LoggingService');
327
+
328
+ const logger = LoggingService.getInstance();
329
+
330
+ async function setupRealTimeMonitoring() {
331
+ try {
332
+ const monitor = new MonitoringService();
333
+
334
+ logger.info('Configurando monitoreo en tiempo real');
335
+
336
+ // Configurar reglas de alerta
337
+ monitor.addAlertRule({
338
+ name: 'high-memory',
339
+ type: 'memory',
340
+ operator: 'greaterThan',
341
+ threshold: 500,
342
+ severity: 'warning'
343
+ });
344
+
345
+ monitor.addAlertRule({
346
+ name: 'critical-error-rate',
347
+ type: 'errorRate',
348
+ operator: 'greaterThan',
349
+ threshold: 0.1,
350
+ severity: 'critical'
351
+ });
352
+
353
+ // Suscribirse a alertas críticas
354
+ monitor.subscribe('critical', (alert) => {
355
+ logger.error('🔴 ALERTA CRÍTICA', {
356
+ name: alert.name,
357
+ message: alert.message,
358
+ value: alert.value,
359
+ threshold: alert.threshold
360
+ });
361
+ });
362
+
363
+ // Suscribirse a advertencias
364
+ monitor.subscribe('warning', (alert) => {
365
+ logger.warn('🟡 ADVERTENCIA', {
366
+ name: alert.name,
367
+ message: alert.message,
368
+ value: alert.value
369
+ });
370
+ });
371
+
372
+ // Iniciar monitoreo simulado
373
+ setInterval(() => {
374
+ const metrics = {
375
+ cpu: Math.random() * 100,
376
+ memory: Math.random() * 600,
377
+ disk: Math.random() * 100,
378
+ connections: Math.floor(Math.random() * 50),
379
+ errorRate: Math.random() * 0.15
380
+ };
381
+
382
+ monitor.updateMetrics(metrics);
383
+ }, 5000);
384
+
385
+ logger.info('Monitoreo configurado');
386
+
387
+ return monitor;
388
+ } catch (error) {
389
+ logger.error('Error configurando monitoreo', error);
390
+ throw error;
391
+ }
392
+ }
393
+
394
+ const monitor = await setupRealTimeMonitoring();
395
+ ```
396
+
397
+ ### Caso 5: Integración Completa
398
+ ```javascript
399
+ const AdvancedFilterService = require('./services/AdvancedFilterService');
400
+ const ReportingService = require('./services/ReportingService');
401
+ const BenchmarkingService = require('./services/BenchmarkingService');
402
+ const MonitoringService = require('./services/MonitoringService');
403
+ const DatabaseService = require('./services/DatabaseService');
404
+ const LoggingService = require('./services/LoggingService');
405
+
406
+ const logger = LoggingService.getInstance();
407
+
408
+ async function integratedWorkflow(sessionId, filePath) {
409
+ try {
410
+ // Inicializar servicios
411
+ const filterService = new AdvancedFilterService();
412
+ const reportingService = new ReportingService();
413
+ const benchmark = new BenchmarkingService();
414
+ const monitor = new MonitoringService();
415
+ const db = new DatabaseService();
416
+
417
+ await db.connect();
418
+
419
+ logger.info('Iniciando workflow integrado', { sessionId, filePath });
420
+
421
+ // 1. Benchmark
422
+ const bench = benchmark.startBenchmark('complete-workflow');
423
+
424
+ // 2. Obtener archivos de sesión
425
+ const uploads = await db.getUploads(sessionId);
426
+ benchmark.mark(bench, 'data-fetched');
427
+
428
+ // 3. Filtrar archivos
429
+ const filtered = filterService.filterFiles(
430
+ uploads.map(u => u.filePath),
431
+ { extensions: ['.pdf', '.doc', '.docx'] }
432
+ );
433
+ benchmark.mark(bench, 'filtered');
434
+
435
+ logger.info('Filtrado completado', {
436
+ original: uploads.length,
437
+ filtered: filtered.length
438
+ });
439
+
440
+ // 4. Generar reporte
441
+ const session = await db.getSession(sessionId);
442
+ const report = reportingService.generateSessionReport(session);
443
+ benchmark.mark(bench, 'report-generated');
444
+
445
+ // 5. Completar benchmark
446
+ const benchResult = benchmark.completeBenchmark(bench);
447
+
448
+ // 6. Monitoreo
449
+ monitor.updateMetrics({
450
+ cpu: 35,
451
+ memory: 256,
452
+ disk: 65,
453
+ connections: 5,
454
+ errorRate: 0.01
455
+ });
456
+
457
+ const health = monitor.getHealthStatus();
458
+
459
+ logger.info('Workflow completado', {
460
+ duration: benchResult.duration,
461
+ health: health.status,
462
+ filesProcessed: filtered.length
463
+ });
464
+
465
+ await db.disconnect();
466
+
467
+ return { filtered, report, benchmark: benchResult, health };
468
+ } catch (error) {
469
+ logger.error('Error en workflow integrado', error);
470
+ throw error;
471
+ }
472
+ }
473
+
474
+ await integratedWorkflow('session-id', '/path/to/file.pdf');
475
+ ```
476
+
477
+ ## Configuración
478
+
479
+ ### Archivo: src/config/config.js
480
+
481
+ ```javascript
482
+ {
483
+ advanced: {
484
+ // Filtrado
485
+ filtering: {
486
+ maxSize: 50 * 1024 * 1024, // 50MB
487
+ minSize: 0,
488
+ supportedExtensions: ['.pdf', '.doc', '.docx', ...]
489
+ },
490
+
491
+ // Reportes
492
+ reporting: {
493
+ exportFormats: ['json', 'csv'],
494
+ retentionDays: 90,
495
+ compressionEnabled: true
496
+ },
497
+
498
+ // Benchmarking
499
+ benchmarking: {
500
+ enabled: true,
501
+ samplingInterval: 100, // ms
502
+ memoryProfilingEnabled: true
503
+ },
504
+
505
+ // Monitoreo
506
+ monitoring: {
507
+ enabled: true,
508
+ updateInterval: 5000, // ms
509
+ alertsEnabled: true,
510
+ severityLevels: ['info', 'warning', 'critical']
511
+ }
512
+ }
513
+ }
514
+ ```
515
+
516
+ ## Arquitectura
517
+
518
+ ```
519
+ Phase 7: Advanced Features & Integration
520
+ ├── services/
521
+ │ ├── AdvancedFilterService.js (Filtrado avanzado)
522
+ │ ├── ReportingService.js (Reportes)
523
+ │ ├── BenchmarkingService.js (Benchmarking)
524
+ │ └── MonitoringService.js (Monitoreo)
525
+ └── config/
526
+ └── config.js (Configuración)
527
+ ```
528
+
529
+ ## Rendimiento
530
+
531
+ - ✅ Filtrado: < 1000ms para 1000 archivos
532
+ - ✅ Generación de reportes: < 2000ms
533
+ - ✅ Benchmark: < 100ms overhead
534
+ - ✅ Monitoreo: < 5ms por actualización
535
+
536
+ ## Testing
537
+
538
+ ```bash
539
+ npm test -- tests/phase-7-advanced-features.test.js
540
+ ```
541
+
542
+ **Cobertura:**
543
+ - ✅ Filtrado avanzado
544
+ - ✅ Generación de reportes
545
+ - ✅ Benchmarking
546
+ - ✅ Monitoreo y alertas
547
+ - ✅ Integración de servicios
548
+
549
+ ## Resumen
550
+
551
+ | Aspecto | Detalle |
552
+ |---------|---------|
553
+ | **Componentes** | AdvancedFilterService, ReportingService, BenchmarkingService, MonitoringService |
554
+ | **Métodos** | 30+ métodos |
555
+ | **Filtros Disponibles** | 5+ tipos |
556
+ | **Formatos Exportación** | JSON, CSV |
557
+ | **Niveles de Alerta** | 3 niveles |
558
+ | **Test Coverage** | 90%+ |
559
+ | **Estado** | ✅ Completo |
560
+