From a826d34f9d00b01dca8954c4a583ed677d83c2c6 Mon Sep 17 00:00:00 2001 From: fengyarnom Date: Wed, 30 Oct 2024 18:22:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20=E7=89=B9=E5=AE=9A?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=87=BA=E7=8E=B0=E5=91=8A=E8=AD=A6=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E7=BB=9F=E8=AE=A1=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E4=BA=8E=20Warning=20=E6=96=87=E4=BB=B6=20-=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=BD=93=E6=A3=80=E6=B5=8B=E5=88=B0=E7=89=B9=E5=AE=9A?= =?UTF-8?q?=E7=AB=99=E7=82=B9=E5=87=BA=E7=8E=B0=E8=AD=A6=E5=91=8A=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E7=BB=9F=E8=AE=A1=E6=AD=A4=E7=AB=99=E7=82=B9=E7=9A=84?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sideslope/bd/WarningLogExecutor.java | 67 +++++++++++++++++++ .../sideslope/service/WarningServiceImpl.java | 10 +++ 2 files changed, 77 insertions(+) create mode 100644 sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/WarningLogExecutor.java diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/WarningLogExecutor.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/WarningLogExecutor.java new file mode 100644 index 00000000..71de8c3b --- /dev/null +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/bd/WarningLogExecutor.java @@ -0,0 +1,67 @@ +package com.imdroid.sideslope.bd; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.env.Environment; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.*; +import java.nio.file.*; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.*; +import java.util.stream.Collectors; + +@Component +public class WarningLogExecutor { + + // 警告日志生成 + @Value("${log.directory}") + private String logDirectory; + private final ExecutorService executor; + + public WarningLogExecutor() { + this.executor = Executors.newFixedThreadPool(4); + } + + public void generateWarningLogs(String keyword) { + try { + List logFiles = Files.list(Paths.get(logDirectory)) + .filter(Files::isRegularFile) + .filter(path -> path.getFileName().toString().matches("sideslopertcm(\\.\\d{4}-\\d{2}-\\d{2}\\.\\d+)?\\.log")) + .collect(Collectors.toList()); + + for (Path logFile : logFiles) { + executor.submit(() -> processFile(logFile, keyword)); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + executor.shutdown(); + } + } + + private void processFile(Path logFile, String keyword) { + String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")); + String warningFileName = "Warning-" + keyword + "-" + date + ".log"; + Path warningFile = Paths.get(logDirectory, warningFileName); + + try (BufferedReader reader = Files.newBufferedReader(logFile); + BufferedWriter writer = Files.newBufferedWriter(warningFile, StandardOpenOption.CREATE, StandardOpenOption.APPEND)) { + + String line; + while ((line = reader.readLine()) != null) { + // 行如果包含了特定的关键词,比如站点的编号,则记录这一行 + if (line.contains(keyword)) { + writer.write(line); + writer.newLine(); + } + } + } catch (IOException e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java index 555b48c7..fd7a0a08 100644 --- a/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java +++ b/sec-beidou-rtcm/src/main/java/com/imdroid/sideslope/service/WarningServiceImpl.java @@ -3,6 +3,7 @@ package com.imdroid.sideslope.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.imdroid.common.util.NumberUtils; import com.imdroid.secapi.dto.*; +import com.imdroid.sideslope.bd.WarningLogExecutor; import com.imdroid.sideslope.sal.Device; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -21,6 +22,8 @@ public class WarningServiceImpl implements WarningService { WarningMsgMapper warningMsgMapper; @Autowired GnssStatusMapper gnssStatusMapper; + @Autowired + private WarningLogExecutor warningLogExecutor; // warning type <-> level & value Map cfgMap = new ConcurrentHashMap<>(); @@ -174,6 +177,9 @@ public class WarningServiceImpl implements WarningService { warningMsgMapper.insert(warningMsg); //告警级别 curStatus.setWarningcode(curStatus.getWarningcode() | warningType); + + // 新告警出现后,生成对于设备的 warning 日志文件 + generate_warning_logs(curStatus.getDeviceid()); } isUpdated = true; } @@ -219,4 +225,8 @@ public class WarningServiceImpl implements WarningService { } } } + + public void generate_warning_logs(String device_id){ + warningLogExecutor.generateWarningLogs(device_id); + } }