Skip to content

Commit

Permalink
ApiInitialisation refactor for readability
Browse files Browse the repository at this point in the history
  • Loading branch information
Nolife999 committed Sep 22, 2023
1 parent dabc55a commit f0b7ed7
Show file tree
Hide file tree
Showing 27 changed files with 367 additions and 240 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package fr.insee.arc.core.model;

public enum TraitementOperationFichier {
D("1", "Delete file")
, R("R", "Replay file")
, RA("RA", "Replay archive")
;

private String dbValue;
private String comment;

private TraitementOperationFichier(String dbValue, String comment)
{
this.dbValue=dbValue;
this.comment=comment;
}

public String getDbValue() {
return dbValue;
}

public String getComment() {
return comment;
}

}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@
import fr.insee.arc.core.dataobjects.ViewEnum;
import fr.insee.arc.core.model.TraitementEtat;
import fr.insee.arc.core.model.TraitementPhase;
import fr.insee.arc.core.model.TraitementTableExecution;
import fr.insee.arc.core.model.TraitementTableParametre;
import fr.insee.arc.core.service.global.bo.Sandbox;
import fr.insee.arc.core.service.global.dao.DatabaseConnexionConfiguration;
Expand Down Expand Up @@ -112,9 +111,10 @@ protected ApiService(String aCurrentPhase, String aEnvExecution, String aDirecto
this.setTablePrevious((TableNaming.dbEnv(aEnvExecution) + this.getPreviousPhase() + "_" + TraitementEtat.OK).toLowerCase());

// Tables de pilotage et pilotage temporaire
this.setTablePil(TableNaming.dbEnv(aEnvExecution) + TraitementTableExecution.PILOTAGE_FICHIER);
this.tablePilTemp = TableNaming.temporaryTableName(aEnvExecution, aCurrentPhase,
TraitementTableExecution.PILOTAGE_FICHIER.toString(), "0");
this.setTablePil(ViewEnum.PILOTAGE_FICHIER.getFullName(aEnvExecution));
this.tablePilTemp = TableNaming.temporaryTableName(aEnvExecution, aCurrentPhase,
ViewEnum.PILOTAGE_FICHIER.getTableName(), "0");

this.setTableNorme(TableNaming.dbEnv(aEnvExecution) + TraitementTableParametre.NORME);
this.tableCalendrier = TableNaming.dbEnv(aEnvExecution) + TraitementTableParametre.CALENDRIER;
// Tables venant de l'initialisation globale
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,18 @@
package fr.insee.arc.core.service.global.bo;

import java.sql.Connection;
import java.util.HashSet;
import java.util.Set;

import org.json.JSONArray;

import fr.insee.arc.core.dataobjects.ArcDatabase;
import fr.insee.arc.core.util.BDParameters;

public class Sandbox {

private static final String DEFAULT_PRODUCTION_ENVIRONMENTS="[\"arc_prod\"]";

private Connection connection;

private String schema;
Expand All @@ -27,5 +36,25 @@ public Connection getConnection() {
public String getSchema() {
return schema;
}


public boolean isEnvSetForProduction() {
return isEnvSetForProduction(this.schema);
}

/** Return true if the environment is defined as a production environment.*/
public static boolean isEnvSetForProduction(String env) {
JSONArray j=new JSONArray(new BDParameters(ArcDatabase.COORDINATOR).getString(null, "ArcAction.productionEnvironments",DEFAULT_PRODUCTION_ENVIRONMENTS));
Set<String> found=new HashSet<>();

j.forEach(item -> {
if (item.toString().equals(env))
{
found.add(item.toString());
}
});
return !found.isEmpty();
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -58,17 +58,17 @@ public static void execQueryRegisterFilesInDatabase(Connection connection, List<
* pilotage_archive table
*
* @param connection
* @param sanbox
* @param schema
* @return
* @throws ArcException
*/
public static List<String> execQuerySelectFilesNotInRegisteredArchives(Connection connection, String sanbox)
public static List<String> execQuerySelectFilesNotInRegisteredArchives(Connection connection, String schema)
throws ArcException {
ArcPreparedStatementBuilder query = new ArcPreparedStatementBuilder();
query.build(SQL.SELECT, ColumnEnum.FILE_NAME, SQL.FROM, ViewEnum.TMP_FILES, SQL.AS, ViewEnum.ALIAS_A);
query.build(SQL.WHERE, SQL.NOT, SQL.EXISTS);
query.build("(");
query.build(SQL.SELECT, SQL.FROM, ViewEnum.PILOTAGE_ARCHIVE.getFullName(sanbox), SQL.AS, ViewEnum.ALIAS_B);
query.build(SQL.SELECT, SQL.FROM, ViewEnum.PILOTAGE_ARCHIVE.getFullName(schema), SQL.AS, ViewEnum.ALIAS_B);
query.build(SQL.WHERE, ColumnEnum.NOM_ARCHIVE.alias(ViewEnum.ALIAS_B), "=",
ColumnEnum.FILE_NAME.alias(ViewEnum.ALIAS_A));
query.build(")");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import fr.insee.arc.core.dataobjects.ArcPreparedStatementBuilder;
import fr.insee.arc.core.dataobjects.ColumnEnum;
import fr.insee.arc.core.model.TraitementTableExecution;
import fr.insee.arc.core.dataobjects.ViewEnum;
import fr.insee.arc.core.util.StaticLoggerDispatcher;
import fr.insee.arc.utils.dao.UtilitaireDao;
import fr.insee.arc.utils.exception.ArcException;
Expand All @@ -29,7 +28,7 @@ private DatabaseMaintenance() {
* @param type
*/
private static void maintenancePilotage(Integer poolIndex, Connection connexion, String envExecution, String type) {
String tablePil = TableNaming.dbEnv(envExecution) + TraitementTableExecution.PILOTAGE_FICHIER;
String tablePil = ViewEnum.PILOTAGE_FICHIER.getFullName(envExecution);
StaticLoggerDispatcher.info(LOGGER, "** Maintenance Pilotage **");

try {
Expand Down Expand Up @@ -86,24 +85,4 @@ private static void maintenanceDatabase(Integer poolIndex, Connection connexion,
StaticLoggerDispatcher.info(LOGGER, "** Fin de maintenance **");
}


/**
* trigger a fast maintenance on a working table
*
* @param nomTable
* @return
* @throws ArcException
*/
public static void maintenanceAndStatisticsOnWorkTable(Connection connexion, String nomTable) throws ArcException {
StringBuilder requete = new StringBuilder();
requete.append("SET default_statistics_target=1;");
requete.append("COMMIT;");
requete.append("VACUUM ANALYZE ").append(nomTable).append("(").append(ColumnEnum.ID_SOURCE.getColumnName())
.append(");");
requete.append("COMMIT;");
requete.append("SET default_statistics_target=100;");
UtilitaireDao.get(0).executeImmediate(connexion, requete);
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import fr.insee.arc.core.dataobjects.ArcPreparedStatementBuilder;
import fr.insee.arc.core.model.TraitementEtat;
import fr.insee.arc.core.model.TraitementPhase;
import fr.insee.arc.core.service.global.ApiService;
import fr.insee.arc.core.service.p0initialisation.ApiInitialisationService;
import fr.insee.arc.core.util.StaticLoggerDispatcher;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,10 @@
import fr.insee.arc.core.service.global.dao.FileSystemManagement;
import fr.insee.arc.core.service.global.dao.TableNaming;
import fr.insee.arc.core.service.p0initialisation.filesystem.RestoreFileSystem;
import fr.insee.arc.core.service.p0initialisation.metadata.SynchronizeUserRulesAndMetadata;
import fr.insee.arc.core.service.p0initialisation.pilotage.CleanPilotage;
import fr.insee.arc.core.service.p0initialisation.pilotage.SynchronizeDataByPilotage;
import fr.insee.arc.core.service.p0initialisation.userdata.SynchronizeUserRulesAndMetadata;
import fr.insee.arc.core.service.p0initialisation.useroperation.ReplayOrDeleteFiles;
import fr.insee.arc.core.service.p1reception.ApiReceptionService;
import fr.insee.arc.utils.dao.UtilitaireDao;
import fr.insee.arc.utils.exception.ArcException;
Expand Down Expand Up @@ -63,92 +64,27 @@ public void executer() throws ArcException {
// Supprime les lignes devenues inutiles récupérées par le webservice de la
// table pilotage_fichier
// Déplace les archives dans OLD
new CleanPilotage(this.coordinatorSandbox).execute();
new CleanPilotage(this.coordinatorSandbox).removeDeprecatedFiles();

// Recopie/remplace les règles définie par l'utilisateur (table de ihm_) dans
// l'environnement d'excécution courant
// mettre à jour les tables métier avec les paramêtres de la famille de norme
SynchronizeUserRulesAndMetadata.synchroniserSchemaExecutionAllNods(connexion.getCoordinatorConnection(),
envExecution);
new SynchronizeUserRulesAndMetadata(this.coordinatorSandbox).synchroniserSchemaExecutionAllNods();

// marque les fichiers ou les archives à rejouer
reinstate(this.connexion.getCoordinatorConnection());

// efface des fichiers de la table de pilotage
cleanToDelete(this.connexion.getCoordinatorConnection(), this.tablePil);
// efface des fichiers de la table de pilotage marqués par l'utilisateur comme étant à effacer
new ReplayOrDeleteFiles(this.coordinatorSandbox).replay();

// Met en cohérence les table de données avec la table de pilotage de
// l'environnement
// La table de pilotage fait foi
new SynchronizeDataByPilotage(this.coordinatorSandbox).execute();
new SynchronizeDataByPilotage(this.coordinatorSandbox).synchronizeDataByPilotage();

// remettre les archives ou elle doivent etre en cas de restauration de la base
new RestoreFileSystem(this.connexion.getCoordinatorConnection(), envExecution).execute();

}

/**
* Méthode pour rejouer des fichiers
*
* @param connexion
* @param tablePil
* @throws ArcException
*/
private void reinstate(Connection connexion) throws ArcException {
LoggerHelper.info(LOGGER, "reinstateWithRename");

// on cherche tous les containers contenant un fichier à rejouer
// on remet l'archive à la racine

ArrayList<String> containerList = new GenericBean(UtilitaireDao.get(0).executeRequest(null,
new ArcPreparedStatementBuilder(
"select distinct container from " + tablePil + " where to_delete in ('R','RA')")))
.mapContent().get("container");

if (containerList != null) {
PropertiesHandler properties = PropertiesHandler.getInstance();
String repertoire = properties.getBatchParametersDirectory();
String envDir = this.envExecution.replace(".", "_").toUpperCase();

for (String s : containerList) {

String entrepot = ManipString.substringBeforeFirst(s, "_");
String archive = ManipString.substringAfterFirst(s, "_");

String dirIn = ApiReceptionService.directoryReceptionEntrepotArchive(repertoire, envDir, entrepot);
String dirOut = ApiReceptionService.directoryReceptionEntrepot(repertoire, envDir, entrepot);

ApiReceptionService.deplacerFichier(dirIn, dirOut, archive, archive);

}

}

// effacer les archives marquées en RA
UtilitaireDao.get(0).executeImmediate(connexion,
"DELETE FROM " + this.tablePil + " a where exists (select 1 from " + this.tablePil
+ " b where a.container=b.container and b.to_delete='RA')");

}

/**
* Suppression dans la table de pilotage des fichiers qui ont été marqué par la
* MOA (via la colonne to_delete de la table de pilotage);
*
* @param connexion
* @param tablePil
* @throws ArcException
*/
private void cleanToDelete(Connection connexion, String tablePil) throws ArcException {
LoggerHelper.info(LOGGER, "cleanToDelete");

StringBuilder requete = new StringBuilder();
requete.append("DELETE FROM " + tablePil + " a WHERE exists (select 1 from " + tablePil
+ " b where b.to_delete='1' and a." + ColumnEnum.ID_SOURCE.getColumnName() + "=b."
+ ColumnEnum.ID_SOURCE.getColumnName() + " and a.container=b.container); ");
UtilitaireDao.get(0).executeBlock(connexion, requete);
}

/**
* Méthode pour remettre le système d'information dans la phase précédente
* Nettoyage des tables _ok et _ko ainsi que mise à jour de la table de pilotage
Expand Down Expand Up @@ -208,7 +144,7 @@ public void retourPhasePrecedente(TraitementPhase phase, ArcPreparedStatementBui
}

try {
reinstate(this.connexion.getCoordinatorConnection());
new ReplayOrDeleteFiles(this.coordinatorSandbox).reinstate();
} catch (Exception e) {
LoggerHelper.error(LOGGER, e);
}
Expand All @@ -231,7 +167,7 @@ public void retourPhasePrecedente(TraitementPhase phase, ArcPreparedStatementBui

// Run a database synchronization with the pilotage table
try {
new SynchronizeDataByPilotage(this.coordinatorSandbox).execute();
new SynchronizeDataByPilotage(this.coordinatorSandbox).synchronizeDataByPilotage();
} catch (Exception e) {
LoggerHelper.error(LOGGER, e);
}
Expand All @@ -243,9 +179,11 @@ public void retourPhasePrecedente(TraitementPhase phase, ArcPreparedStatementBui
// Penser à tuer la connexion
}



public void resetEnvironnement() {
try {
new SynchronizeDataByPilotage(this.coordinatorSandbox).execute();
new SynchronizeDataByPilotage(this.coordinatorSandbox).synchronizeDataByPilotage();
DatabaseMaintenance.maintenanceDatabaseClassic(connexion.getCoordinatorConnection(), envExecution);
} catch (Exception e) {
LoggerHelper.error(LOGGER, e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public RestoreFileSystem(Connection connection, String envExecution) {
* @throws ArcException
*/
public void execute() throws ArcException {
LoggerHelper.info(LOGGER, RestoreFileSystem.class.getName());
LoggerHelper.info(LOGGER, "Reconstruction du filesystem");

// parcourir toutes les archives dans le répertoire d'archive
String rootDirectory = PropertiesHandler.getInstance().getBatchParametersDirectory();
Expand Down
Loading

0 comments on commit f0b7ed7

Please sign in to comment.