logDisconnectEvent static method

Future<void> logDisconnectEvent({
  1. required String meetingId,
  2. required Room room,
  3. required String? reason,
})

Implementation

static Future<void> logDisconnectEvent({
  required String meetingId,
  required Room room,
  required String? reason,
}) async {
  final local = room.localParticipant;

  Map<String, dynamic> metadataJson = {};
  try {
    if (local?.metadata != null) {
      metadataJson = Map<String, dynamic>.from(
        jsonDecode(local!.metadata!),
      );
    }
  } catch (_) {
    // Ignore metadata parsing errors
  }

  final attributes = <String, Object?>{
    'meetingId': meetingId,
    'disconnectReason': _formatDisconnectReason(reason),
    'participant': {
      'name': local?.name,
      'identity': local?.identity,
      'metadata': local?.metadata,
      'role': metadataJson['role_name'],
      'meetingAttendanceId': metadataJson['meeting_attendance_id'],
      'connectionQuality': local?.connectionQuality.name,
      'isSpeaking': local?.isSpeaking,
      'platform': defaultTargetPlatform.name,
      'userAgent': await DeviceNetworkInfo.getDeviceDetails(),
      'network': await DeviceNetworkInfo.getNetworkType()
    }
  };

  DaakiaVcDatadogService.logInfo(
    'DISCONNECT REASON: ${_formatDisconnectReason(reason)}',
    attributes: attributes,
  );
}