getPerformanceStats method
Obtener estadísticas de rendimiento
Implementation
Map<String, dynamic> getPerformanceStats() {
if (_eventHistory.isEmpty) return {};
// Estadísticas a nivel de evento
final eventDurations = _eventHistory
.where((e) => e.totalDurationMs != null)
.map((e) => e.totalDurationMs!)
.toList();
// Estadísticas a nivel de regla
final ruleDurations = <int>[];
for (final event in _eventHistory) {
for (final rule in event.ruleExecutions) {
if (rule.durationMs != null) {
ruleDurations.add(rule.durationMs!);
}
}
}
final stats = <String, dynamic>{};
if (eventDurations.isNotEmpty) {
eventDurations.sort();
final avgEvent =
eventDurations.reduce((a, b) => a + b) / eventDurations.length;
final medianEvent = eventDurations[eventDurations.length ~/ 2];
final p95Event =
eventDurations[(eventDurations.length * 0.95).round() - 1];
stats['event_stats'] = {
'average_duration_ms': avgEvent,
'median_duration_ms': medianEvent,
'p95_duration_ms': p95Event,
'min_duration_ms': eventDurations.first,
'max_duration_ms': eventDurations.last,
};
}
if (ruleDurations.isNotEmpty) {
ruleDurations.sort();
final avgRule =
ruleDurations.reduce((a, b) => a + b) / ruleDurations.length;
final medianRule = ruleDurations[ruleDurations.length ~/ 2];
final p95Rule = ruleDurations[(ruleDurations.length * 0.95).round() - 1];
stats['rule_stats'] = {
'average_duration_ms': avgRule,
'median_duration_ms': medianRule,
'p95_duration_ms': p95Rule,
'min_duration_ms': ruleDurations.first,
'max_duration_ms': ruleDurations.last,
};
}
return stats;
}