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:
parent
d0c20abb96
commit
1aff345768
3 changed files with 46 additions and 31 deletions
|
|
@ -1,5 +1,5 @@
|
|||
#commons
|
||||
APP_VERSION=1.7
|
||||
APP_VERSION=1.8
|
||||
REGISTRY_URL=rh8-vm3.nbki.msk:5000
|
||||
JMX_PORT=
|
||||
JMX_HOSTNAME=
|
||||
|
|
|
|||
2
pom.xml
2
pom.xml
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue