syncNetworkAudit static method
Future<void>
syncNetworkAudit({
- required NetworkAuditDao networkAuditDao,
- DateTime? lastSync,
- required String deviceId,
- required HttpService httpService,
Implementation
static Future<void> syncNetworkAudit({
required NetworkAuditDao networkAuditDao,
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 networkAudits = await networkAuditDao.findManyBetween(
lastSync ?? endOfYesterday.subtract(const Duration(days: 60)),
endOfYesterday);
if (networkAudits.isEmpty) {
return;
}
Map<String, List<NetworkAuditData>> networkAuditsByDate = {};
for (final networkAudit in networkAudits) {
final key = networkAudit.createdAt.toDateString();
if (networkAuditsByDate[key] == null) {
networkAuditsByDate[key] = [];
}
networkAuditsByDate[key]!.add(networkAudit);
}
List<Map<String, dynamic>> uploadData = [];
for (final key in networkAuditsByDate.keys) {
if (networkAuditsByDate[key] == null ||
networkAuditsByDate[key]!.isEmpty == true) {
continue;
}
uploadData.add({
'date': key,
'deviceId': deviceId,
'data': networkAuditsByDate[key]!
.map<Map<String, dynamic>>((item) => {
'id': item.id,
'createdAt': item.createdAt.toIso8601StringWithTz(),
'totalDownload': item.totalDownload,
'totalUpload': item.totalUpload,
'downloadSpeed': item.downloadSpeed,
'uploadSpeed': item.uploadSpeed,
'isWifi': item.isWifi,
'isCellular': item.isCellular,
'isEthernet': item.isEthernet,
})
.toList(),
});
if (uploadData.length == 3) {
await httpService.post(NetworkAuditRoute.uploadPath, uploadData);
uploadData = [];
}
}
if (uploadData.isEmpty == false) {
await httpService.post(NetworkAuditRoute.uploadPath, uploadData);
}
}