Skip to content

Commit

Permalink
Merge pull request #12 from jdev-org/1.5
Browse files Browse the repository at this point in the history
Set main branch to feet current used version
  • Loading branch information
pierrejego authored Sep 26, 2024
2 parents 1872880 + d5ce883 commit 46ef7fc
Show file tree
Hide file tree
Showing 78 changed files with 11,932 additions and 12,719 deletions.
3 changes: 1 addition & 2 deletions .github/workflows/deploy-release.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#
name: Create and publish a Docker image
name: Publish release

# Configures this workflow to run every time a change is pushed to the branch called `release`.
on:
Expand Down Expand Up @@ -60,5 +60,4 @@ jobs:
with:
subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME}}
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true

Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import fr.eaudeparis.syncremocra.mail.MailUtil;
import fr.eaudeparis.syncremocra.notification.NotificationSettings;
import fr.eaudeparis.syncremocra.repository.erreur.ErreurRepository;
import fr.eaudeparis.syncremocra.repository.message.model.MessageModel;
import fr.eaudeparis.syncremocra.util.JSONUtil;
import fr.eaudeparis.syncremocra.util.RequestManager;
import java.io.*;
Expand Down Expand Up @@ -245,32 +244,4 @@ private void checkDisponibiliteCoherence() {
}
}
}

public void sendNotifConnexionOk(MessageModel message) {

try {

TypeReference<Map<String, Object>> typeRef = new TypeReference<Map<String, Object>>() {};
String objet = "La synchro avec REMOCRA est à nouveau opérationnelle";

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
String msg =
"<p>"
+ "La synchronisation avec REMOCRA est à nouveau opérationnelle"
+ "<br />"
+ "Les messages en attente vont être mis à jour"
+ "</p>";

this.send(this.getListContextKeyEmail().get("REMOCRA_SYSTEME"), objet, msg);
logger.info("L'api est à nouveau joignable un mail pour prévenir va partir");
context
.update(MESSAGE)
.set(MESSAGE.STATUT, "TRAITE")
.where(MESSAGE.ID.eq(message.getId()))
.execute();

} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import java.net.HttpURLConnection;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
Expand Down Expand Up @@ -97,6 +96,7 @@ public void traiterMessages() {
for (int i = 0; i < messagesATraiter.size() && continuer; i++) {
MessageModel message = messagesATraiter.get(i);
logger.info("Traitement message " + message.getId());

ObjectMapper mapper = new ObjectMapper();

String reference =
Expand Down Expand Up @@ -154,11 +154,7 @@ public void traiterMessages() {
*/
if (methode != null && path != null && json != null) {
Integer codeRetour = this.requestManager.sendRequest(methode, path, json);
// si j'ai eu une réponse de l'api, c'est qu'elle fonctionne
if (codeRetour != null) {
// si le message était en erreur, on notifie que finalement le message est passé
notifRetourNormal(message);
}

if (codeRetour != null
&& (codeRetour == HttpURLConnection.HTTP_CREATED
|| codeRetour == HttpURLConnection.HTTP_OK)) { // Visite créée avec succès
Expand Down Expand Up @@ -247,45 +243,37 @@ public void traiterMessages() {

} catch (APIConnectionException
| APIAuthentException e) { // Erreur de connexion à l'API (connexion API ou authent)
boolean rejouer = false;

String typeErreur = null;
if (e instanceof APIConnectionException) {

rejouer = true; // Si erreur réseau alors on autorise de retenter la prochaine fois
typeErreur = "0003";

logger.info("Erreur de connexion à l'API détectée, fin du traitement des messages");
logger.info(
"Une nouvelle tentative de synchronisation sera effectuée lors du prochain"
+ " déclenchement du PushWorker");
} else if (e instanceof APIAuthentException) {

typeErreur = "0200";
logger.info("Erreur d'authentification à l'API détectée, fin du traitement des messages");
}

// Nombre de rejeu max pour une erreur de connexion à l'API
Integer nbSynchroMax =
context
.select(TYPE_ERREUR.ITERATIONS)
.from(TYPE_ERREUR)
.where(TYPE_ERREUR.CODE.eq(typeErreur))
.fetchOneInto(Integer.class);

String messageErreur =
context
.select(TYPE_ERREUR.MESSAGE_ERREUR)
.from(TYPE_ERREUR)
.where(TYPE_ERREUR.CODE.eq(typeErreur))
.fetchOneInto(String.class);
continuer = false;
// Nombre de rejeu max pour une erreur de connexion à l'API
Integer nbSynchroMax =
context
.select(TYPE_ERREUR.ITERATIONS)
.from(TYPE_ERREUR)
.where(TYPE_ERREUR.CODE.eq(typeErreur))
.fetchOneInto(Integer.class);

// Pour ce PEi et tous les PEI restants, on augmente le nombre de
// synchronisations, et on
// détermine si on peut les rejouer
for (int j = i; j < messagesATraiter.size(); j++) {
MessageModel m = messagesATraiter.get(j);

boolean rejouer = (m.getSynchronisations() + 1 < nbSynchroMax);
context
.update(MESSAGE)
.set(MESSAGE.STATUT, "EN ERREUR")
Expand All @@ -295,14 +283,14 @@ public void traiterMessages() {
.where(MESSAGE.ID.eq(m.getId()))
.execute();

// On informe que le pei n'a pas été mis a jour pendant X essais
// X étant le nombre d'itérations dans edp.type_erreur
if (m.getSynchronisations() == 0 || m.getSynchronisations() == nbSynchroMax) {
// Problème de connexion persitant : on informe que les changements n'ont pu
// être transmis
if (!rejouer) {
this.erreurRepository.addError("I1003", messageErreur, Long.valueOf(m.getId()));
}
}
logger.info(
"Traitement terminé, une erreur a été rencontrée; mise en erreur des messages"
"Traitement rerminé, une erreur a été rencontrée; mise en erreur des messages"
+ " restants");
}
}
Expand Down Expand Up @@ -380,61 +368,27 @@ private ObjectNode traiterMessageVisite(MessageModel message, String reference)

this.remonteeMotifsIndispo(message, reference);

notifRetourNormal(message);
context
.update(MESSAGE)
.set(MESSAGE.STATUT, "TRAITE")
.where(MESSAGE.ID.eq(message.getId()))
.execute();
}
} else if ("Disponible".equalsIgnoreCase(traca.getEtat())) {
// Si disponible, on vérifie s'il y a des IT "en cours"
} else if ("Disponible"
.equalsIgnoreCase(
traca
.getEtat())) { // Si disponible, on met fin à l'indispo temporaire active sur ce pei
if (indispoEnCours.length() <= 2) {
// s'il n'y en a pas on vérifie les "PLANIFIE"
params.put("organismeApi", "EAU_DE_PARIS");
params.put("numeroHydrant", reference);
params.put("statut", "PLANIFIE");
String indispoPlanifie =
this.requestManager.sendGetRequest("/api/deci/indispoTemporaire", params);

if (indispoPlanifie.length()
> 2) { // S'il existe une indispo planifie, on vérifie si elle aurait dû être en
// cours"

TypeReference<ArrayList<Map<String, Object>>> typeRef =
new TypeReference<ArrayList<Map<String, Object>>>() {};
ArrayList<Map<String, Object>> dataIndispoPlanifie =
mapper.readValue(indispoPlanifie, typeRef);

LocalDateTime dateDebut =
JSONUtil.getLocalDateTime(
dataIndispoPlanifie.get(0), "date_debut", "yyyy-MM-dd HH:mm");
if (dateDebut.isAfter(traca.getDateTraca())) {

// si la date de début n'a pas commencé, il est normal qu'on ai cette IT
// planifiée
// message traité

traiterIndispoTemporaire(message, reference);

} else {
// sinon on indique dans les logs qu'il faut laisser le temps au traitement
// REMOcRA de
// passer le PEI en indispo (IT) et on laisse le message a traiter pour la
// prochaine
// fois
logger.info(
"PEI "
+ reference
+ " : Une indisponibilité temporaire est présente mais n'a pas encore"
+ " commencée. Attente de la mise en indisponibilité côté Remocra avant de"
+ " réessayer de traiter ce message");
}
} else {

traiterIndispoTemporaire(message, reference);
}

logger.info(
"PEI "
+ reference
+ " disponible - Aucune indispo temporaire EDP active, fin du traitement du"
+ " message");
context
.update(MESSAGE)
.set(MESSAGE.STATUT, "TRAITE")
.where(MESSAGE.ID.eq(message.getId()))
.execute();
} else {
logger.info("PEI " + reference + " disponible - Fin de l'indispo temporaire EDP active");
TypeReference<ArrayList<Map<String, Object>>> typeRef =
Expand All @@ -460,33 +414,12 @@ private ObjectNode traiterMessageVisite(MessageModel message, String reference)

indispoTemp.set("data", data);
this.remonteeMotifsIndispo(message, reference);
notifRetourNormal(message);
return indispoTemp;
}
}
return null;
}

private void traiterIndispoTemporaire(MessageModel message, String reference) {
logger.info(
"PEI "
+ reference
+ " disponible - Aucune indispo temporaire EDP active, fin du traitement du message");
notifRetourNormal(message);
context
.update(MESSAGE)
.set(MESSAGE.STATUT, "TRAITE")
.where(MESSAGE.ID.eq(message.getId()))
.execute();
}

public void notifRetourNormal(MessageModel message) {
// si le message était en erreur, on notifie que finalement le message est passé
if ("EN ERREUR".equalsIgnoreCase(message.getStatut())) {
notificationJob.sendNotifConnexionOk(message);
}
}

/**
* En cas de création d'une indispo temporaire, remonte les éventuels motifs d'indispo renseignées
* dans Remocra via une visite Non Programmee
Expand Down Expand Up @@ -518,6 +451,7 @@ private ObjectNode remonteeMotifsIndispo(MessageModel message, String reference)
boolean updateMotifIndispo = false;
boolean deleteMotifIndispo = false;
boolean arretEauEnCours = false;
boolean ajoutSansEau = false;

try {
TracabilitePei traca =
Expand Down Expand Up @@ -559,13 +493,13 @@ private ObjectNode remonteeMotifsIndispo(MessageModel message, String reference)
logger.info(
"Mise en disponible avec D'AUTRE motif actif que ARRET EAU : : Création de visite");
/**
* On remplit le tableau anomaliesAControler pour confirmer dans la visite que les
* On remplit le tableau anomaliesAControler à pour confirmer dans la visite que les
* anomalies ont été controllées mais pas constantées
*/
for (String code : motifIndispo) {
anomaliesAControler.add(code);
}
// ici, on ne return pas le null pour continuer l'execution et descendre à la
// ici on ne return pas le null pour continuer l'execution et descendre a la
// création de
// la visite

Expand All @@ -580,7 +514,6 @@ private ObjectNode remonteeMotifsIndispo(MessageModel message, String reference)
.select(DSL.upper(TRACABILITE_INDISPO.MOTIF_INDISPO))
.from(TRACABILITE_INDISPO)
.where(TRACABILITE_INDISPO.ID_TRACA_PEI.eq(traca.getId().longValue()))
.and(TRACABILITE_INDISPO.STATUT_MOTIF_INDISPO.eq("EN COURS"))
.fetchInto(String.class);

// Récupération des motifs d'indispo actuellement actifs ajoutés via une
Expand Down Expand Up @@ -690,6 +623,15 @@ private ObjectNode remonteeMotifsIndispo(MessageModel message, String reference)
arrayAnomaliesConstatees.add(s);
}

if (ajoutSansEau) {
if (!codesBSPPControles.contains("BSPP_APSE")) {
arrayAnomaliesControlees.add("BSPP_APSE");
}
if (!codesBSPPConstates.contains("BSPP_APSE")) {
arrayAnomaliesConstatees.add("BSPP_APSE");
}
}

visite.put("contexte", "NP");
visite.put("date", formatter.format(dateChangement));
visite.set("anomaliesControlees", arrayAnomaliesControlees);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,9 @@
import java.nio.charset.StandardCharsets;
import java.util.Map;
import javax.inject.Inject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RequestManager {

private static Logger logger = LoggerFactory.getLogger(RequestManager.class);

private final ApiSettings settings;

@Inject private ErreurRepository erreurRepository;
Expand Down Expand Up @@ -50,16 +46,12 @@ private String authenticateToRemocra() throws APIConnectionException, APIAuthent

if (codeRetour != null && conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
return conn.getHeaderField("Authorization");
} else if (codeRetour != null
&& conn.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED) {
} else {
// Erreur authentification à l'API
this.erreurRepository.addError("0200", "Authentification refusée à l'API Remocra", null);
throw new APIAuthentException();
} else {
throw new IOException();
}
} catch (IOException e) {
logger.warn("Error : ", e);
// Impossible de contacter l'API
this.erreurRepository.addError(
"0003", "Impossible d'établir une connexion avec l'API Remocra", null);
Expand All @@ -84,8 +76,6 @@ private String authenticateToRemocra() throws APIConnectionException, APIAuthent
*/
public Integer sendRequest(String method, String path, String jsonData)
throws RequestException, APIConnectionException, APIAuthentException {

logger.debug("Send request to " + path + " with content " + jsonData);
String response = "";
URL url;
HttpURLConnection conn = null;
Expand All @@ -112,7 +102,6 @@ public Integer sendRequest(String method, String path, String jsonData)
}

int codeRetour = conn.getResponseCode();
logger.debug("Code return" + codeRetour);

if (codeRetour == HttpURLConnection.HTTP_OK || codeRetour == HttpURLConnection.HTTP_CREATED) {
return codeRetour;
Expand All @@ -132,7 +121,6 @@ public Integer sendRequest(String method, String path, String jsonData)
throw new RequestException(conn.getResponseCode(), errorCode, response);
}
} catch (IOException e) {
logger.warn("Error : ", e);
e.printStackTrace();
} finally {
if (conn != null) {
Expand Down Expand Up @@ -171,8 +159,6 @@ public String sendGetRequest(String path, Map<String, String> parameters)
}
}

logger.info("Send request to : " + path);

url = new URL(settings.host() + path);
conn = (HttpURLConnection) url.openConnection();

Expand All @@ -192,7 +178,6 @@ public String sendGetRequest(String path, Map<String, String> parameters)
content.append(inputLine);
}
in.close();
logger.debug("get response : " + content.toString());
return content.toString();
} else {
StringBuilder sb = new StringBuilder();
Expand All @@ -209,7 +194,6 @@ public String sendGetRequest(String path, Map<String, String> parameters)
throw new RequestException(conn.getResponseCode(), errorCode, response);
}
} catch (IOException e) {
logger.warn("Error : ", e);
e.printStackTrace();
} finally {
if (conn != null) {
Expand Down
Loading

0 comments on commit 46ef7fc

Please sign in to comment.