insertEvent method

Future<void> insertEvent(
  1. Map<String, dynamic> event, {
  2. List<EventModifier> defaultEventModifiers = const [ValidationModifier()],
  3. dynamic context,
  4. ReportEventOverride? reportEventOverride,
})

Inserts event into processor, filters event through the chain of modifiers

Implementation

Future<void> insertEvent(
  Map<String, dynamic> event, {
  List<EventModifier> defaultEventModifiers = const [ValidationModifier()],
  dynamic context,
  ReportEventOverride? reportEventOverride,
}) async {
  if (!isEnabled) {
    Logger().i(_tag, 'RUM on Grail is disabled, dropping event.', logType: LogType.Warning);
    return;
  }

  final cachedDuration = event[BasicKeys.duration] ?? 0;
  event.remove(BasicKeys.duration);

  final startTime = Clock.agentClock().nowMillis();

  final originalEvent = BasicEvent(
    duration: cachedDuration,
    startTime: startTime - (cachedDuration as num).toInt(),
  ).toMap()
    ..addAll(event);

  var eventToSend = Map<String, dynamic>.from(originalEvent);
  for (final modifier in _customEventModifiers) {
    try {
      eventToSend = modifier.modifyEvent(eventToSend, context) ?? {};
      _writeOverriddenKeys(originalEvent, eventToSend);
    } catch (_) {
      // In case of error during modification add field to the event
      eventToSend[DtRumKeys.hasEnrichException] = true;
    }
  }
  eventToSend = _restoreCachedEvent(eventToSend, originalEvent);
  // Overridden keys are written to event
  if (_overriddenKeys.isNotEmpty) {
    eventToSend[DtRumKeys.overriddenFields] = _overriddenKeys.toList();
  }
  for (final modifier in defaultEventModifiers) {
    eventToSend = modifier.modifyEvent(eventToSend, context) ?? {};
  }
  eventToSend = _trimMap(eventToSend);
  final hasEventProperties = eventToSend.keys.any(
    (element) => element.startsWith(eventProperties),
  );
  if (hasEventProperties) {
    eventToSend[CharacteristicsKeys.hasEventProperties] = true;
  }
  final effectiveReporter = reportEventOverride ?? _thirdGenApi.reportThirdGenEvent;
  await effectiveReporter(jsonEncode(eventToSend));
}