diff --git a/docker_compose/credit_tracker_config.env b/docker_compose/credit_tracker_config.env
index b553e30..d684e15 100644
--- a/docker_compose/credit_tracker_config.env
+++ b/docker_compose/credit_tracker_config.env
@@ -1,5 +1,5 @@
#commons
-APP_VERSION=1.7
+APP_VERSION=1.8
REGISTRY_URL=rh8-vm3.nbki.msk:5000
JMX_PORT=
JMX_HOSTNAME=
diff --git a/pom.xml b/pom.xml
index 98d1fe5..5d022df 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
ru.nbch
credit-tracker
- 1.7
+ 1.8
credit_tracker
Credit Tracker Application
diff --git a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java
index 763f4b2..13e649d 100644
--- a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java
+++ b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java
@@ -26,7 +26,10 @@ import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+import java.util.UUID;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
@@ -86,45 +89,54 @@ public class MonitoringService {
continue;
}
- // Находим самый последний отчет по дате
- Optional newReport = Optional.of(fileNames)
- .orElseGet(Collections::emptyList)
- .stream().max(Comparator.comparing(CTUtil::parseDateFromReportFileName)); // отфильтровали только те имена, которые парсятся в дату, так что null тут не придет
-
LocalDateTime lastDownloadedReportDate = CTUtil.parseDateFromReportFileName(userPackage.getLastDownloadedReport());
+ if (lastDownloadedReportDate != null) {
+ // Отбираем только те отчеты, дата которых позже даты последнего загруженного отчета
+ fileNames = fileNames.stream()
+ .filter(fileName -> CTUtil.parseDateFromReportFileName(fileName).isAfter(lastDownloadedReportDate)) // отфильтровали только те имена, которые парсятся в дату, так что null тут не придет
+ .sorted(Comparator.comparing(CTUtil::parseDateFromReportFileName)) // Сортируем по дате
+ .toList();
+ } else {
+ fileNames = fileNames.stream()
+ .sorted(Comparator.comparing(CTUtil::parseDateFromReportFileName)) // Сортируем по дате
+ .toList();
+ }
+
if (StringUtils.isNotBlank(userPackage.getLastDownloadedReport())) {
log.info("Last downloaded report found for package {}. Last Downloaded Report Name: {}", userPackage.getPackageName(), userPackage.getLastDownloadedReport());
} else {
log.info("Last Downloaded Report Name is empty");
}
- try {
- String reportPath = null;
- if (StringUtils.isBlank(userPackage.getLastDownloadedReport()) && newReport.isPresent()) {
- reportPath = loadReport(userPackage.getId(), newReport.get()); // по этому пакету еще не было загруженных отчетов, продолжаем работу с полученным
- } else if (lastDownloadedReportDate != null && newReport.isPresent()) {
- LocalDateTime newReportDate = CTUtil.parseDateFromReportFileName(newReport.get());
- if (newReportDate.isAfter(lastDownloadedReportDate)) {
- reportPath = loadReport(userPackage.getId(), newReport.get()); // полученный отчет новее записанного в базу
+ for (String newReport : fileNames) {
+ try {
+ String reportPath = null;
+ if (StringUtils.isBlank(userPackage.getLastDownloadedReport())) {
+ reportPath = loadReport(userPackage.getId(), newReport); // по этому пакету еще не было загруженных отчетов, продолжаем работу с полученным
+ } else if (lastDownloadedReportDate != null) {
+ LocalDateTime newReportDate = CTUtil.parseDateFromReportFileName(newReport);
+ if (newReportDate.isAfter(lastDownloadedReportDate)) {
+ reportPath = loadReport(userPackage.getId(), newReport); // полученный отчет новее записанного в базу
+ }
+ }
+ if (reportPath == null) {
+ log.info("Report was not loaded for package {}", userPackage.getPackageName());
+ continue;
}
- }
- if (reportPath == null) {
- log.info("Report was not loaded for package {}", userPackage.getPackageName());
- continue;
- }
- String responsePath = generateResponse(userPackage, reportPath);
- String fileName = createResponseFile(userPackage, responsePath);
- if (fileName != null) {
- log.info("New report fileName: {}", fileName);
- updateSignalHits(userPackage, responsePath, fileName);
- signalService.updateLastDownloadedReport(userPackage.getId(), newReport.get());
- } else {
- log.info("Report was not created for package {}", userPackage.getPackageName());
+ String responsePath = generateResponse(userPackage, reportPath);
+ String fileName = createResponseFile(userPackage, responsePath);
+ if (fileName != null) {
+ log.info("New report fileName: {}", fileName);
+ updateSignalHits(userPackage, responsePath, fileName);
+ signalService.updateLastDownloadedReport(userPackage.getId(), newReport);
+ } else {
+ log.info("Report was not created for package {}", userPackage.getPackageName());
+ }
+ } catch (Exception e) {
+ log.error(e.getMessage(), e);
}
- } catch (Exception e) {
- log.error(e.getMessage(), e);
}
}
log.info("Finish monitoring");
@@ -210,6 +222,7 @@ public class MonitoringService {
private String createResponseFile(UserPackage userPackage, String responsePath) {
try {
String fileName = CTUtil.generateResponseReportFileName(userPackage.getUserId(), userPackage.getPackageName());
+ Thread.sleep(1000); // Если отчеты формируются слишком быстро, нужно подождать секунду, тк в имени отчета LocalDateTime до секунд
String filePath = config.getLoadDir() + File.separator + userPackage.getUserId().substring(0, 6) + File.separator;
File folder = new File(filePath);
@@ -232,6 +245,8 @@ public class MonitoringService {
zos.closeEntry();
}
return fileName;
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
} catch (Exception e) {
log.error("Ошибка при записи отчета пользователя в файл: ", e);
}