insertEvent method
Future<void>
insertEvent(
- Map<
String, dynamic> event, { - List<
EventModifier> defaultEventModifiers = const [ValidationModifier()], - 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()],
ReportEventOverride? reportEventOverride,
}) async {
if (!isEnabled) {
Logger().i(_tag, 'RUM on Grail is disabled, dropping event.', logType: LogType.Warning);
return;
}
// Normalize and cast duration to an int
var cachedDuration = event[BasicKeys.duration] ?? 0;
final hasNfnDuration = cachedDuration is double && (cachedDuration.isNaN || cachedDuration.isInfinite);
if (hasNfnDuration) {
cachedDuration = 0;
_overriddenKeys.add(BasicKeys.duration);
}
final cachedDurationInt = (cachedDuration is num) ? cachedDuration.toInt() : 0;
event.remove(BasicKeys.duration);
final startTime = Clock.agentClock().nowMillis();
final originalEvent = BasicEvent(
duration: cachedDurationInt,
startTime: startTime - cachedDurationInt,
).toMap()
..addAll(event);
var eventToSend = Map<String, dynamic>.from(originalEvent);
if (hasNfnDuration) {
eventToSend[DtRumKeys.hasNfnValues] = true;
}
// Apply event enrichments
for (final enrichment in _eventEnrichments) {
try {
eventToSend = await enrichment.enrichEvent(eventToSend);
} catch (_) {
// In case of error during modification add field to the event
eventToSend[DtRumKeys.hasEnrichException] = true;
}
}
// Apply custom event modifiers
for (final modifier in _customEventModifiers) {
try {
eventToSend = modifier.modifyEvent(eventToSend) ?? {};
_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();
}
// Apply default event modifiers
for (final modifier in defaultEventModifiers) {
eventToSend = modifier.modifyEvent(eventToSend) ?? {};
}
eventToSend = _trimMap(eventToSend);
final hasEventProperties = eventToSend.keys.any(
(element) => element.startsWith(eventProperties),
);
if (hasEventProperties) {
eventToSend[CharacteristicsKeys.hasEventProperties] = true;
}
final effectiveReporter = reportEventOverride ?? _thirdGenApi.reportThirdGenEvent;
final json = jsonEncode(eventToSend);
Logger().d(_tag, 'Reporting event: $json');
await effectiveReporter(json);
}