From f34a7be0a1b4dd4e44b7d5f4506daeda8cb2ad63 Mon Sep 17 00:00:00 2001 From: Mikhail Trofimov Date: Mon, 15 Sep 2025 15:18:39 +0300 Subject: [PATCH] http://jira.mfd.msk:8088/browse/BKI-3207 Get rid of tmp folders --- .../credit_tracker/facade/SignalFacade.java | 1 + .../MonitoringErrorProcesingService.java | 5 +- .../service/MonitoringService.java | 48 +++++++------------ .../credit_tracker/service/SignalService.java | 3 +- .../service/signal/SignalRestService.java | 21 ++++---- 5 files changed, 32 insertions(+), 46 deletions(-) diff --git a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java index 575662b..f08f7e3 100644 --- a/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java +++ b/src/main/java/ru/nbch/credit_tracker/facade/SignalFacade.java @@ -157,6 +157,7 @@ public class SignalFacade { packageId = signalService.registerPackage(monitoringRequest); log.info("Package registered. PackageId {}. Status: {}", packageId, Status.PROCESSING.name()); } catch (Exception e) { + CTUtil.removeFile(filePath); if (e instanceof SignalClientException) { throw (SignalClientException) e; } diff --git a/src/main/java/ru/nbch/credit_tracker/service/MonitoringErrorProcesingService.java b/src/main/java/ru/nbch/credit_tracker/service/MonitoringErrorProcesingService.java index 68dbe66..1d68f97 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/MonitoringErrorProcesingService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/MonitoringErrorProcesingService.java @@ -30,11 +30,10 @@ public class MonitoringErrorProcesingService { if (StringUtils.isNotBlank(filePath)) { try { signalService.updateSubjectsErrors(filePath, packageId); - CTUtil.removeFile(filePath); } catch (Exception e) { - log.error("Ошибка при записи сообщений об ошибках в сформированных субъектах для мониторинга. Файл ошибок не будет удален. filePath = {}, Package_id = {}", - fileName, packageId, e); + log.error("Ошибка при записи сообщений об ошибках в сформированных субъектах для мониторинга. Package_id = {}", packageId, e); } + CTUtil.removeFile(filePath); } } } 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 059d3f2..1f30550 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/MonitoringService.java @@ -112,21 +112,21 @@ public class MonitoringService { for (String newReport : fileNames) { try { - String reportPath = null; + String loadedReportPath = null; if (StringUtils.isBlank(userPackage.getLastDownloadedReport())) { - reportPath = loadReport(userPackage.getId(), newReport); // по этому пакету еще не было загруженных отчетов, продолжаем работу с полученным + loadedReportPath = loadReport(userPackage.getId(), newReport); // по этому пакету еще не было загруженных отчетов, продолжаем работу с полученным } else if (lastDownloadedReportDate != null) { LocalDateTime newReportDate = CTUtil.parseDateFromReportFileName(newReport); if (newReportDate.isAfter(lastDownloadedReportDate)) { - reportPath = loadReport(userPackage.getId(), newReport); // полученный отчет новее записанного в базу + loadedReportPath = loadReport(userPackage.getId(), newReport); // полученный отчет новее записанного в базу } } - if (reportPath == null) { + if (loadedReportPath == null) { log.info("Report was not loaded for package {}", userPackage.getPackageName()); continue; } - String responsePath = generateResponse(userPackage, reportPath); + String responsePath = generateResponse(userPackage, loadedReportPath); String fileName = null; if (responsePath != null) { fileName = createResponseFile(userPackage, responsePath); @@ -150,11 +150,12 @@ public class MonitoringService { * Формирует результирующий xml файл для конечного пользователя на основе файла из официального сервиса сигналов * @return Путь к временному рещультирующему файлу */ - private String generateResponse(UserPackage userPackage, String reportPath) { + private String generateResponse(UserPackage userPackage, String loadedReportPath) { AtomicBoolean generateResponse = new AtomicBoolean(false); // Выставляется в true, если хотя бы один субъект с мониторинга подошел под условие срабатывания сигнала. В этом случае отчет сохраняется - String folderPath = config.getLoadDir() + File.separator + "tmp_folder" + File.separator + userPackage.getId() + File.separator; + String folderPath = config.getLoadDir() + File.separator + "tmp_folder" + File.separator; String responsePath = folderPath + UUID.randomUUID() + "_response_output.xml"; + CTUtil.createFolder(folderPath); MonitoringSignalResponse response = new MonitoringSignalResponse(); response.setPackageName(userPackage.getPackageName()); // Имя пакета, переданного при установке @@ -163,7 +164,7 @@ public class MonitoringService { MonitoringSignalResponseStaxXmlWriter staxXmlWriter = new MonitoringSignalResponseStaxXmlWriter(config.getEncoding()); staxXmlWriter.writeWithStax(responsePath, response, writer -> { - try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(Path.of(reportPath)), 8 * 1024 * 1024)) { + try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(Path.of(loadedReportPath)), 8 * 1024 * 1024)) { staxXmlProcessor.read(in, Persons.class, personsData -> { // как только считали пачку Persons сразу записали ее в результирующий файл List subjectsBatch = processPersons(personsData.getPersons()); @@ -182,18 +183,11 @@ public class MonitoringService { } }); - try { - Files.delete(Path.of(reportPath)); - } catch (IOException e) { - log.warn("File {} hasn't been deleted", reportPath); - } + + CTUtil.removeFile(loadedReportPath); if (!generateResponse.get()) { // ни один субъект не подошел под условие, удаляем временный отчет - try { - Files.delete(Path.of(responsePath)); - } catch (IOException e) { - log.warn("File {} hasn't been deleted", responsePath); - } + CTUtil.removeFile(responsePath); return null; } @@ -241,15 +235,15 @@ public class MonitoringService { 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; + String folderPath = config.getLoadDir() + File.separator + userPackage.getUserId().substring(0, 6) + File.separator; - File folder = new File(filePath); + File folder = new File(folderPath); if (!folder.exists()) { folder.mkdir(); } try (BufferedInputStream in = new BufferedInputStream(Files.newInputStream(Path.of(responsePath)), 8 * 1024 * 1024); - BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath + fileName + ".zip")); + BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(folderPath + fileName + ".zip")); ZipOutputStream zos = new ZipOutputStream(bos)) { ZipEntry zipEntry = new ZipEntry(fileName + ".xml"); @@ -269,11 +263,7 @@ public class MonitoringService { log.error("Ошибка при записи отчета пользователя в файл: ", e); } - try { - Files.delete(Path.of(responsePath)); - } catch (IOException e) { - log.warn("File {} hasn't been deleted", responsePath); - } + CTUtil.removeFile(responsePath); return null; } @@ -310,11 +300,7 @@ public class MonitoringService { throw new RuntimeException("Error while and updating hits", e); } - try { - Files.delete(Path.of(responsePath)); // удалям результирующий xml файл с диска (Он уже заархивирован к этому моменту) - } catch (IOException e) { - log.warn("File {} hasn't been deleted", responsePath); - } + CTUtil.removeFile(responsePath); // удалям результирующий xml файл с диска (Он уже заархивирован к этому моменту) log.info("Signal hits updated for package {}", userPackage.getPackageName()); } diff --git a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java index d685077..6e86803 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/SignalService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/SignalService.java @@ -207,9 +207,8 @@ public class SignalService { * @return Путь к файлу запроса к официальному сервису сигналов на постановку на мониторинг */ public String writeSignals(Integer packageId) { - String folderPath = config.getLoadDir() + File.separator + "tmp_folder" + File.separator + packageId + File.separator; + String folderPath = config.getLoadDir() + File.separator + "tmp_folder" + File.separator; String filePath = folderPath + UUID.randomUUID() + "_output.xml"; - CTUtil.createFolder(folderPath); Signals signals = buildSignals(packageId); diff --git a/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java b/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java index b6bf98c..9bf608d 100644 --- a/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java +++ b/src/main/java/ru/nbch/credit_tracker/service/signal/SignalRestService.java @@ -19,12 +19,16 @@ import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor; import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor; import ru.nbch.credit_tracker.utils.CTUtil; -import java.io.*; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.security.MessageDigest; import java.util.Base64; +import java.util.UUID; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream; @@ -81,12 +85,8 @@ public class SignalRestService { if (response.getStatusCode().value() == 302) { // good response - try { - Files.delete(Path.of(path)); - Files.delete(Path.of(path + ".gz")); - } catch (IOException e) { - log.warn("File {} hasn't been deleted", path); - } + CTUtil.removeFile(path); + CTUtil.removeFile(path + ".gz"); return true; } else if (response.getStatusCode().value() == 200 && response.getBody() != null) { SgnlReport error = staxProcessor.read(response.getBody(), SgnlReport.class); @@ -95,7 +95,8 @@ public class SignalRestService { } else { log.error("неизвестная ошибка при постановке пакета на мониторинг в официальный сервис сигналов: {}", response.getBody()); } - log.info("Files will not be deleted: {}, {}", path, path + ".gz"); + CTUtil.removeFile(path); + CTUtil.removeFile(path + ".gz"); return false; } return false; @@ -259,8 +260,8 @@ public class SignalRestService { log.error("Неизвестная ошибка при скачивание отчета. fNameReport={}", reportName); return null; } else { - String folderPath = config.getLoadDir() + File.separator + "tmp_folder" + File.separator + packageId + File.separator; - String filePath = folderPath + reportName + ".xml"; + String folderPath = config.getLoadDir() + File.separator + "tmp_folder" + File.separator; + String filePath = folderPath + UUID.randomUUID() + reportName + ".xml"; CTUtil.createFolder(folderPath); try (InputStream in = new GZIPInputStream(new ByteArrayInputStream(response.getBody()));