diff --git a/pom.xml b/pom.xml
index 4aafb71..9ad72e1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -98,7 +98,7 @@
com.oracle.database.jdbc
ojdbc8
- 21.3.0.0
+ 21.9.0.0
diff --git a/src/main/java/fr/abes/logskbart/kafka/KbartListener.java b/src/main/java/fr/abes/logskbart/kafka/KbartListener.java
index c5f9bda..d645735 100644
--- a/src/main/java/fr/abes/logskbart/kafka/KbartListener.java
+++ b/src/main/java/fr/abes/logskbart/kafka/KbartListener.java
@@ -19,6 +19,9 @@
@Service
@Slf4j
public class KbartListener {
+
+ // TODO Supprimer ce listener
+
@Autowired
private ObjectMapper mapper;
diff --git a/src/main/java/fr/abes/logskbart/kafka/LogsListener.java b/src/main/java/fr/abes/logskbart/kafka/LogsListener.java
index f6f2726..ceb6f9c 100644
--- a/src/main/java/fr/abes/logskbart/kafka/LogsListener.java
+++ b/src/main/java/fr/abes/logskbart/kafka/LogsListener.java
@@ -1,19 +1,26 @@
package fr.abes.logskbart.kafka;
-import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import fr.abes.logskbart.dto.Kbart2KafkaDto;
import fr.abes.logskbart.entity.logs.LogKbart;
import fr.abes.logskbart.repository.logs.LogKbartRepository;
import fr.abes.logskbart.utils.UtilsMapper;
+import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.apache.kafka.common.header.Header;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;
+import java.io.IOException;
+import java.nio.file.*;
import java.sql.Date;
import java.sql.Timestamp;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+@Slf4j
@Service
public class LogsListener {
@@ -26,13 +33,70 @@ public class LogsListener {
@Autowired
private LogKbartRepository repository;
- @KafkaListener(topics = {"infokbart2kafka", "errorkbart2kafka"}, groupId = "logskbart", containerFactory = "kafkaLogsListenerContainerFactory")
- public void listenInfoKbart2KafkaAndErrorKbart2Kafka(ConsumerRecord message) throws JsonProcessingException {
- Kbart2KafkaDto dto = mapper.readValue(message.value(), Kbart2KafkaDto.class);
- LogKbart entity = logsMapper.map(dto, LogKbart.class);
- Timestamp timestamp = new Timestamp(message.timestamp());
- entity.setTimestamp(new Date(timestamp.getTime()));
- entity.setPackageName(message.key());
- repository.save(entity);
+ /**
+ * Ecoute les topic de log d'erreurs et de fin de traitement bestPpn et génère un fichier err pour chaque fichier kbart
+ * @param message le message kafka
+ * @throws IOException exception levée
+ */
+ @KafkaListener(topics = {"errorkbart2kafka", "bestppn.endoftraitment"}, groupId = "logskbart", containerFactory = "kafkaLogsListenerContainerFactory")
+ public void listenInfoKbart2KafkaAndErrorKbart2Kafka(ConsumerRecord message) throws IOException {
+
+ if (!message.value().equals("OK")) {
+ Kbart2KafkaDto dto = mapper.readValue(message.value(), Kbart2KafkaDto.class);
+ LogKbart entity = logsMapper.map(dto, LogKbart.class);
+ Timestamp timestamp = new Timestamp(message.timestamp());
+ entity.setTimestamp(new Date(timestamp.getTime()));
+ entity.setPackageName(message.key().replaceAll("\\[line\\s:\\s\\d+\\]", ""));
+
+ // Si la ligne de log sur le topic errorkbart2kafka est de type ERROR
+ if (entity.getLevel().toString().equals("ERROR")) {
+ String nbrLine = message.key().substring(message.key().indexOf(".tsv")+4).replaceAll("\\[line\\s:\\s", "").replaceAll("]", "");
+ String fileName = message.key().replaceAll(".tsv\\[line\\s:\\s\\d+\\]", ".err");
+ String line = "LINE : " + nbrLine + " - MESSAGE : " + dto.getMessage();
+
+ // Vérifie qu'un fichier portant le nom du kbart en cours existe
+ Path of = Path.of(fileName);
+ if (Files.exists(of)) {
+ // Inscrit la ligne dedans
+ Files.write(of, (line + System.lineSeparator()).getBytes(), StandardOpenOption.APPEND);
+ } else if (!Files.exists(of)) {
+ try {
+ // Créer le fichier et inscrit la ligne dedans
+ Files.createFile(of);
+ Files.write(of, (line + System.lineSeparator()).getBytes(), StandardOpenOption.APPEND);
+ log.info("Fichier temporaire créé.");
+ } catch (SecurityException | IOException e) {
+ log.error("Erreur lors de la création du fichier temporaire. " + e);
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ // Inscrit l'entity en BDD
+ repository.save(entity);
+
+ } else if (message.value().contains("OK")) { // Si la ligne sur le topic bestppn.endoftraitment contient OK
+
+ // Créer un nouveau Path avec le FileName (en remplaçant l'extension par .err)
+ Path source = null;
+ for (Header header : message.headers().toArray()) {
+ if (header.key().equals("FileName")) {
+ source = Path.of(new String(header.value()).replaceAll(".tsv", ".err"));
+ break;
+ }
+ }
+
+ // Copie le fichier existant vers le répertoire temporaire en ajoutant sa date de création
+ assert source != null;
+ if (Files.exists(source)) {
+ LocalDateTime time = LocalDateTime.now();
+ DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss", Locale.FRANCE);
+ String date = format.format(time);
+ Path target = Path.of("tempLog\\" + date + "_" + source);
+
+ Files.move(source, target, StandardCopyOption.REPLACE_EXISTING);
+ log.info("Fichier de log transféré dans le dossier temporaire.");
+ }
+ }
}
}
diff --git a/src/main/java/fr/abes/logskbart/service/KbartService.java b/src/main/java/fr/abes/logskbart/service/KbartService.java
index 1b9aa56..9b97aa8 100644
--- a/src/main/java/fr/abes/logskbart/service/KbartService.java
+++ b/src/main/java/fr/abes/logskbart/service/KbartService.java
@@ -7,6 +7,9 @@
@Service
public class KbartService {
+
+ // TODO Supprimer cette classe
+
private final KbartLoaderFactory factory;
private final Environment env;
diff --git a/src/main/java/fr/abes/logskbart/service/KbartToTsvService.java b/src/main/java/fr/abes/logskbart/service/KbartToTsvService.java
index 0ea2801..0d129a4 100644
--- a/src/main/java/fr/abes/logskbart/service/KbartToTsvService.java
+++ b/src/main/java/fr/abes/logskbart/service/KbartToTsvService.java
@@ -20,6 +20,9 @@
@Service
public class KbartToTsvService implements KbartLoader {
+
+ // TODO supprimer cette classe
+
@Value("${path.tsvFile}")
private String pathToFichier;