diff --git a/CHANGELOG.md b/CHANGELOG.md index da9cb47da6146e26cd69fa1dee58827361276ddc..39d4d36dbd99265ca1d05c911a97409df4ff98ad 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 86161507a2af9511744aedee0894c830e9dd0f3b..12431968ccd6082beba0972b4b787a8ab0e39cd7 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 77b917c42d66b969748b459f5589fc71b27357ab..6cb04ee885c72ec48ec59ef7485e15bf2ef48d5d 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 0a23a8d1d72256fb6312671b2ead4b4d6a1dd5bd..dcbf04d5b031c9f82b43c7cee8975f8af4ee2486 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 993a86630e22e07c0dbcb2fceec370c60c372a48..14a8b37581cc1078d6df149f5e37e0e4d2310926 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 327e85e39a178f701f61365807f64f39066a77ff..a78f0542b9c089b7339463e2ba183aa4ced12fcf 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 7bb761ea51fbf31dfe2f883406012a8dad1cf91c..23072224ad29420717bab48073453182841b1bdd 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 5c94e031a3332550f20b8645128daac1b20f8692..d3bb9f5faed1969308ed86fbadc5c4b97092d892 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 61b4e1c079b589448125f98653e40ab651990e3e..5c45f30f22a060e61cdf4a7fb35018409ed0bc1f 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 0000000000000000000000000000000000000000..9b3c0aa00ffd5ee361ec004f64c644fe56dac454 --- /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 0000000000000000000000000000000000000000..7329b5323bd670e442146ceae78e48e7163bdcb6 --- /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 070760f94f56997220ec35ebe289589391063e6a..ba3dfc42c1f6ca87a606fd8994091e6d6d823abd 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 fefa1b0ea742938483c8a4913b03cf418c609f01..d71dccbd4d2282ac9f166c7e6e6e87716decef87 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 {