logEvents static method

Future<void> logEvents()

Implementation

static Future<void> logEvents() async {
  String? payloadString =
      await SensfrxFlutter.getRawDeviceFingerprintsPayload();

  if (payloadString == null || payloadString.isEmpty) {
    debugPrint('Error: Payload string is null or empty');
    return;
  }

  Map<String, dynamic> devicePayload = json.decode(payloadString);
  EventManager eventManager = EventManager(
    location: TrackLocationEvent.toJson(),
    deviceLogs: devicePayload,
    events: currentBatch,
  );

  debugPrint("Events Batch : ${eventManager.toJson()}");

  String baseUrl =
      Constants.sandbox ? Constants.baseUrlSandbox : Constants.baseUrlDev;

  String timestamp = DateTime.now().millisecondsSinceEpoch.toString();
  String signature = AppSignature.generateSignature("event");
  try {
    String? package = await getPackageName();
    String? token = await SensfrxFlutter.getRequestToken();
    final response = await http.post(
      Uri.parse("$baseUrl/user_events"),
      body: jsonEncode(eventManager.toJson()),
      headers: {
        'Content-Type': 'application/json',
        'package': package,
        'authorization': Utils.encodeSecret(SensfrxFlutter.getSecretKey()),
        'token': token!,
        'timestamp': timestamp,
        'sign': signature,
      },
    );

    debugPrint("baseUrl : $baseUrl /ser_events");
    debugPrint("package : $package");
    debugPrint("authorization : ${ Utils.encodeSecret(SensfrxFlutter.getSecretKey())}");
    debugPrint("token : $token");
    debugPrint("timestamp : $timestamp");
    debugPrint('Signature: $signature');


    final jsonData = jsonDecode(response.body);
    final status = jsonData['status'];
    final message = jsonData['message'];

    debugPrint("EventQueueManager Response :> $jsonData");

    if (status == 200) {
      Fluttertoast.showToast(
        msg: message,
        toastLength: Toast.LENGTH_SHORT,
        gravity: ToastGravity.BOTTOM,
        backgroundColor: Colors.black54,
        textColor: Colors.white,
      );

      resetRetryCount();
      flushQueue();
    } else {
      currentRetryCount++;
      if (currentRetryCount <= maxRetryAttempts) {
        increaseQueueSize();
        if (currentBatch.length >= maxQueueSize) {
          await logEvents();
        }
      } else if (currentBatch.length >= 100) {
        flushQueue();
      } else {
        resetRetryCount();
      }
    }
  } catch (error) {
    debugPrint('Error: $error');
  } finally {
    loggingInProgress = false;
  }
}