From 034a9198134183a7a4145202401f9fd0b9a75f7a Mon Sep 17 00:00:00 2001 From: LEMERCIER Denis <denis.lemercier@soprasteria.com> Date: Mon, 7 Oct 2024 10:55:27 +0200 Subject: [PATCH] Creation du mode onlyapi pour api-event-calculs --- CHANGELOG.md | 1 + services/api-event-calculs/pom.xml | 6 +++ .../infrastructure/config/CacheConfig.java | 2 +- .../config/KafkaConfiguration.java | 2 + .../export/IndicateurController.java | 2 +- .../sync/calculs/SyncCalculsController.java | 2 + .../ListenEquipementPhysique.java | 2 + .../kafkalistener/ListenMessagerie.java | 2 + .../kafkalistener/ListenOperationNonIT.java | 2 + .../src/main/resources/application-full.yaml | 31 +++++++++++++ .../main/resources/application-onlyapi.yaml | 12 +++++ .../src/main/resources/application.yaml | 46 ++++++------------- .../ApiEventCalculsApplicationTests.java | 2 +- 13 files changed, 76 insertions(+), 36 deletions(-) create mode 100644 services/api-event-calculs/src/main/resources/application-full.yaml create mode 100644 services/api-event-calculs/src/main/resources/application-onlyapi.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index da9cb47d..39d4d36d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ Tous les changements de ce projet seront documentés dans ce document. ## [Non livré] +- Mode API : Ajout d'un mode API only dans le composant api-event-calculs permettant d'utiliser le composant sans base de données ou kafka. - Nettoyage : Suppression complète du calcul de l'impact du réseau à partir d'un équipement physique de type réseau (donc suppression des champs goTelecharge et nbJourUtiliseAn dans l'inventaire des équipements physiques). Désormais, l'impact du réseau se calcule grâce aux opérations non IT -> [Issue10](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/10) - Customisation des référentiels par organisation : les référentiels TypeItem, FacteurCaracterisation, CorrespondanceRefEquipement et Hypotheses peuvent être personnalisés par une organisation -> [Issue9](https://gitlab-forge.din.developpement-durable.gouv.fr/pub/numeco/m4g/numecoeval/-/issues/9) diff --git a/services/api-event-calculs/pom.xml b/services/api-event-calculs/pom.xml index 86161507..12431968 100644 --- a/services/api-event-calculs/pom.xml +++ b/services/api-event-calculs/pom.xml @@ -60,6 +60,12 @@ <scope>runtime</scope> </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + <scope>runtime</scope> + </dependency> + <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/CacheConfig.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/CacheConfig.java index 77b917c4..6cb04ee8 100644 --- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/CacheConfig.java +++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/CacheConfig.java @@ -14,7 +14,7 @@ import java.util.concurrent.TimeUnit; @EnableCaching @EnableScheduling @Configuration -@Profile("!test") +@Profile("!test & !onlyapi") public class CacheConfig { @CacheEvict(value = { diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/KafkaConfiguration.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/KafkaConfiguration.java index 0a23a8d1..dcbf04d5 100644 --- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/KafkaConfiguration.java +++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/config/KafkaConfiguration.java @@ -4,11 +4,13 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; import org.springframework.kafka.listener.DefaultErrorHandler; import org.springframework.util.backoff.FixedBackOff; @Configuration @Slf4j +@Profile("!onlyapi") public class KafkaConfiguration { @Value("${spring.kafka.back-off-sec}") diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/export/IndicateurController.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/export/IndicateurController.java index 993a8663..14a8b375 100644 --- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/export/IndicateurController.java +++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/export/IndicateurController.java @@ -21,7 +21,7 @@ import java.util.List; */ @RestController @Slf4j -@Profile("!prod & !test") +@Profile("!prod & !test & !onlyapi") @RequestMapping("indicateur") public class IndicateurController { diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/sync/calculs/SyncCalculsController.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/sync/calculs/SyncCalculsController.java index 327e85e3..a78f0542 100644 --- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/sync/calculs/SyncCalculsController.java +++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/controller/sync/calculs/SyncCalculsController.java @@ -5,11 +5,13 @@ import org.mte.numecoeval.calculs.infrastructure.service.sync.calculs.SyncCalcul import org.mte.numecoeval.calculs.sync.generated.api.model.ReponseCalculRest; import org.mte.numecoeval.calculs.sync.generated.api.model.SyncCalculRest; import org.mte.numecoeval.calculs.sync.generated.api.server.CalculsEquipementPhysiqueEtOperationNonItEtMessagerieApi; +import org.springframework.context.annotation.Profile; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RestController; @RestController @AllArgsConstructor +@Profile("!onlyapi") public class SyncCalculsController implements CalculsEquipementPhysiqueEtOperationNonItEtMessagerieApi { SyncCalculService syncCalculService; diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenEquipementPhysique.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenEquipementPhysique.java index 7bb761ea..23072224 100644 --- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenEquipementPhysique.java +++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenEquipementPhysique.java @@ -4,12 +4,14 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.mte.numecoeval.calculs.infrastructure.service.calcul.MainEquipementPhysiqueService; import org.mte.numecoeval.topic.data.EquipementPhysiqueDTO; +import org.springframework.context.annotation.Profile; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Component; @Component @Slf4j @AllArgsConstructor +@Profile("!onlyapi") public class ListenEquipementPhysique { private MainEquipementPhysiqueService mainEquipementPhysiqueService; diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenMessagerie.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenMessagerie.java index 5c94e031..d3bb9f5f 100644 --- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenMessagerie.java +++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenMessagerie.java @@ -4,12 +4,14 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.mte.numecoeval.calculs.infrastructure.service.calcul.MainMessagerieService; import org.mte.numecoeval.topic.data.MessagerieDTO; +import org.springframework.context.annotation.Profile; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Component; @Component @Slf4j @AllArgsConstructor +@Profile("!onlyapi") public class ListenMessagerie { private MainMessagerieService mainMessagerieService; diff --git a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenOperationNonIT.java b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenOperationNonIT.java index 61b4e1c0..5c45f30f 100644 --- a/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenOperationNonIT.java +++ b/services/api-event-calculs/src/main/java/org/mte/numecoeval/calculs/infrastructure/kafkalistener/ListenOperationNonIT.java @@ -4,12 +4,14 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.mte.numecoeval.calculs.infrastructure.service.calcul.MainOperationNonITService; import org.mte.numecoeval.topic.data.OperationNonITDTO; +import org.springframework.context.annotation.Profile; import org.springframework.kafka.annotation.KafkaListener; import org.springframework.stereotype.Component; @Component @Slf4j @AllArgsConstructor +@Profile("!onlyapi") public class ListenOperationNonIT { private MainOperationNonITService mainOperationNonITService; diff --git a/services/api-event-calculs/src/main/resources/application-full.yaml b/services/api-event-calculs/src/main/resources/application-full.yaml new file mode 100644 index 00000000..9b3c0aa0 --- /dev/null +++ b/services/api-event-calculs/src/main/resources/application-full.yaml @@ -0,0 +1,31 @@ +spring: + sql: + init: + mode: always + # Base de données + datasource: + generate-unique-name: true + url: "jdbc:postgresql://localhost:5432/postgres?reWriteBatchedInserts=true" + username: postgres + password: postgres + driver-class-name: org.postgresql.Driver + tomcat: + test-on-borrow: false + jmx-enabled: false + max-active: 100 + # Kafka + kafka: + bootstrap-servers: localhost:9092 + back-off-sec: 10 + consumer: + group-id: api-event-calculs + auto-offset-reset: earliest + enable-auto-commit: false + max-poll-records: 50 + isolation.level: read_committed + value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer + key-deserializer: org.apache.kafka.common.serialization.StringDeserializer + properties: + spring.json.trusted.packages: "org.mte.numecoeval.*" + + diff --git a/services/api-event-calculs/src/main/resources/application-onlyapi.yaml b/services/api-event-calculs/src/main/resources/application-onlyapi.yaml new file mode 100644 index 00000000..7329b532 --- /dev/null +++ b/services/api-event-calculs/src/main/resources/application-onlyapi.yaml @@ -0,0 +1,12 @@ +spring: + sql: + init: + mode: never + datasource: + generate-unique-name: true + url: "jdbc:h2:mem:notused" + username: sa + password: password + driver-class-name: org.h2.Driver + jpa: + database-platform: org.hibernate.dialect.H2Dialect diff --git a/services/api-event-calculs/src/main/resources/application.yaml b/services/api-event-calculs/src/main/resources/application.yaml index 070760f9..ba3dfc42 100644 --- a/services/api-event-calculs/src/main/resources/application.yaml +++ b/services/api-event-calculs/src/main/resources/application.yaml @@ -1,32 +1,16 @@ +server: + port: 18085 + shutdown: graceful + +# 3 profiles : +# full : read from kafka and save into ind_* database tables +# onlyapi : only uses APIs for calculations, not connected to kafka +# test : for test purposes spring: - sql: - init: - mode: always - # Base de données - datasource: - generate-unique-name: true - url: "jdbc:postgresql://localhost:5432/postgres?reWriteBatchedInserts=true" - username: postgres - password: postgres - driver-class-name: org.postgresql.Driver - tomcat: - test-on-borrow: false - jmx-enabled: false - max-active: 100 - # Kafka - kafka: - bootstrap-servers: localhost:9092 - back-off-sec: 10 - consumer: - group-id: api-event-calculs - auto-offset-reset: earliest - enable-auto-commit: false - max-poll-records: 50 - isolation.level: read_committed - value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer - key-deserializer: org.apache.kafka.common.serialization.StringDeserializer - properties: - spring.json.trusted.packages: "org.mte.numecoeval.*" + profiles: + active: + full + # onlyapi # Application numecoeval: @@ -44,10 +28,6 @@ numecoeval: ttl: "20" donnesfiltrees: "1" -server: - port: 18085 - shutdown: graceful - # Actuator management: server: @@ -61,4 +41,4 @@ management: web: base-path: / exposure: - include: health,prometheus,httptrace,info,metrics,mappings \ No newline at end of file + include: health,prometheus,httptrace,info,metrics,mappings diff --git a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java index fefa1b0e..d71dccbd 100644 --- a/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java +++ b/services/api-event-calculs/src/test/java/org/mte/numecoeval/calculs/ApiEventCalculsApplicationTests.java @@ -39,7 +39,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.times; @SpringBootTest -@ActiveProfiles(profiles = {"test"}) +@ActiveProfiles(profiles = {"test", "onlyapi"}) @Slf4j @EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, DataSourceAutoConfiguration.class, KafkaAutoConfiguration.class}) class ApiEventCalculsApplicationTests { -- GitLab