syncDeviceResourceAudit static method

Future<void> syncDeviceResourceAudit({
  1. required DeviceResourceAuditDao deviceResourceAuditDao,
  2. DateTime? lastSync,
  3. required String deviceId,
  4. required HttpService httpService,
})

Implementation

static Future<void> syncDeviceResourceAudit({
  required DeviceResourceAuditDao deviceResourceAuditDao,
  DateTime? lastSync,
  required String deviceId,
  required HttpService httpService,
}) async {
  final yesterday = DateTime.now().subtract(const Duration(days: 1));
  final endOfYesterday =
      DateTime(yesterday.year, yesterday.month, yesterday.day, 23, 59, 59);
  final deviceResourceAudits = await deviceResourceAuditDao.findManyBetween(
      lastSync ?? endOfYesterday.subtract(const Duration(days: 60)),
      endOfYesterday);
  if (deviceResourceAudits.isEmpty) {
    return;
  }

  Map<String, List<DeviceResourceAuditData>> deviceResourceAuditsByDate = {};
  for (final deviceResource in deviceResourceAudits) {
    final key = deviceResource.createdAt.toDateString();
    if (deviceResourceAuditsByDate[key] == null) {
      deviceResourceAuditsByDate[key] = [];
    }

    deviceResourceAuditsByDate[key]!.add(deviceResource);
  }

  List<Map<String, dynamic>> uploadData = [];
  for (final key in deviceResourceAuditsByDate.keys) {
    if (deviceResourceAuditsByDate[key] == null ||
        deviceResourceAuditsByDate[key]!.isEmpty == true) {
      continue;
    }

    uploadData.add({
      'date': key,
      'deviceId': deviceId,
      'data': deviceResourceAuditsByDate[key]!
          .map<Map<String, dynamic>>((item) => {
                'id': item.id,
                'status': 'ACTIVE',
                'createdAt': item.createdAt.toIso8601StringWithTz(),
                'storageInMB': item.storageInMB,
                'freeStorageInMB': item.freeStorageInMB,
                'cpuUsage': item.cpuUsage,
                'ramInMB': item.ramInMB,
                'freeRamInMB': item.freeRamInMB,
              })
          .toList(),
    });
    if (uploadData.length == 3) {
      await httpService.post(DeviceResourceAuditRoute.uploadPath, uploadData);
      uploadData = [];
    }
  }

  if (uploadData.isEmpty == false) {
    await httpService.post(DeviceResourceAuditRoute.uploadPath, uploadData);
  }
}