syncDeviceResourceAudit static method
Future<void>
syncDeviceResourceAudit({
- required DeviceResourceAuditDao deviceResourceAuditDao,
- DateTime? lastSync,
- required String deviceId,
- 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);
}
}