insertEvent method
Future<void>
insertEvent(
- Map<
String, dynamic> event, { - List<
EventModifier> defaultEventModifiers = const [ValidationModifier()], - dynamic context,
- 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));
}