http://jira.mfd.msk:8088/browse/BKI-3200 Fix MonitoringService to load all reports after last report (Not only latest); Updated version to 1.8

This commit is contained in:
Mikhail Trofimov 2025-09-10 14:45:21 +03:00
parent d0c20abb96
commit 1aff345768
3 changed files with 46 additions and 31 deletions

View file

@ -1,5 +1,5 @@
#commons
APP_VERSION=1.7
APP_VERSION=1.8
REGISTRY_URL=rh8-vm3.nbki.msk:5000
JMX_PORT=
JMX_HOSTNAME=

View file

@ -10,7 +10,7 @@
</parent>
<groupId>ru.nbch</groupId>
<artifactId>credit-tracker</artifactId>
<version>1.7</version>
<version>1.8</version>
<name>credit_tracker</name>
<description>Credit Tracker Application</description>

View file

@ -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<String> 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);
}