onRulesExecutionError method

  1. @override
void onRulesExecutionError(
  1. String error,
  2. Map<String, dynamic> context
)
override

Called when rules processing fails

Implementation

@override
void onRulesExecutionError(String error, Map<String, dynamic> context) {
  if (!_isCapturing) return;

  final eventId = _generateEventId(context);
  final ruleKey = context['ruleKey']?.toString() ?? 'unknown';
  final now = DateTime.now();

  // Buscar o crear evento agrupado
  RulesEventExecution eventExecution;
  if (_activeEvents.containsKey(eventId)) {
    eventExecution = _activeEvents[eventId]!;
  } else {
    final eventType = _extractEventType(context);
    eventExecution = RulesEventExecution(
      eventId: eventId,
      timestamp: now,
      eventType: eventType,
      eventDescription: _generateEventDescription(context, eventType),
      eventContext: Map<String, dynamic>.from(context),
      ruleExecutions: [],
      startTime: now,
    );
    _activeEvents[eventId] = eventExecution;
  }

  // Agregar regla con error al evento
  final ruleExecution = RuleExecution(
    ruleKey: ruleKey,
    ruleName: context['ruleName']?.toString() ?? ruleKey,
    status: RulesExecutionStatus.error,
    startTime: now,
    endTime: now,
    error: error,
  );

  eventExecution.addRuleExecution(ruleExecution);

  // Finalizar evento y mover a historial
  final finalEvent = RulesEventExecution(
    eventId: eventExecution.eventId,
    timestamp: eventExecution.timestamp,
    eventType: eventExecution.eventType,
    eventDescription: eventExecution.eventDescription,
    eventContext: eventExecution.eventContext,
    ruleExecutions: List.from(eventExecution.ruleExecutions),
    startTime: eventExecution.startTime,
    endTime: now,
  );

  _addEventToHistory(finalEvent);
  _activeEvents.remove(eventId);
  _updateMetrics(finalEvent);
  _eventExecutionStreamController.add(finalEvent);
  _broadcastMetrics();

  ObslyLogger.debug(
      '❌ Rules Monitor: Rule execution error - $ruleKey for event $eventId: $error');
}