Attention ! Gitlab fournissant maintenant nativement des certificats Let’s Encrypt aux domaines personnalisés des Gitlab Pages, nous avons coupé notre service qui le faisait automatiquement pour vous.

Il est impératif, pour que votre domaine personnalisé continue à avoir un certificat Let’s Encrypt à jour, d’activer la fonctionnalité native dans les paramètres de votre projet. Cette activation remplacera votre certificat actuel par un nouveau certificat Let’s Encrypt géré par Gitlab.

Voir les détails sur https://docs.framasoft.org/fr/gitlab/gitlab-pages-le.html

Commit 001550ae authored by Parcoursup's avatar Parcoursup

Merge branch 'java-util-logging' into 'master'

Fix #10 : System.out -> JUL

Closes #10

See merge request !18
parents 7febb178 1fbf5356
......@@ -19,18 +19,21 @@
*/
package parcoursup.ordreappel.donnees;
import static java.util.stream.Collectors.joining;
import parcoursup.ordreappel.algo.AlgoOrdreAppelEntree;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import oracle.jdbc.OracleDriver;
import oracle.jdbc.pool.OracleDataSource;
import parcoursup.ordreappel.algo.AlgoOrdreAppelSortie;
......@@ -40,8 +43,10 @@ import parcoursup.ordreappel.algo.VoeuClasse;
public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
private static final Logger LOGGER = Logger.getLogger(ConnecteurDonneesAppelOracle.class.getName());
/* connexion à la base de données */
Connection conn = null;
private final Connection conn;
public ConnecteurDonneesAppelOracle(String url, String user, String password) throws SQLException {
if (url == null || url.isEmpty()) {
......@@ -67,7 +72,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
/* récupère la liste des groupes et les taux minimum de boursiers
et de résidents depuis la base de données */
log("Récupération des groupes");
LOGGER.info("Récupération des groupes");
stmt.setFetchSize(1000000);
String sql
......@@ -99,7 +104,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
+ " AND ti.g_ti_eta_cla=2 "
+ " AND NVL(g.c_gp_flg_pas_cla, 0)!=1";
log(sql);
LOGGER.info(sql);
try (ResultSet result = stmt.executeQuery(sql)) {
......@@ -140,7 +145,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
Set<Integer> groupesManquants = new HashSet<>();
/* récupère la liste des voeux depuis la base de données */
log("Récupération des voeux");
LOGGER.info("Récupération des voeux");
stmt.setFetchSize(1000000);
String sql = "SELECT "
//id du groupe de classement
......@@ -176,7 +181,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
//seulement les formations qui classent
+ " AND NVL(gp.c_gp_flg_pas_cla, 0)!=1";
log(sql);
LOGGER.info(sql);
try (ResultSet result = stmt.executeQuery(sql)) {
......@@ -215,12 +220,11 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
stmt.close();
if (!groupesManquants.isEmpty()) {
log(groupesManquants.size() + " groupes manquants.");
System.out.print("(");
for (int c_gp_cod : groupesManquants) {
System.out.print(c_gp_cod + ",");
}
System.out.println(")");
LOGGER.log(Level.SEVERE, "{0} groupes manquants.", groupesManquants.size());
String list = groupesManquants.stream()
.map(String::valueOf)
.collect(joining(",", "(", ")"));
LOGGER.severe(list);
//throw new RuntimeException(groupesManquants.size() + " groupes manquants.");
}
......@@ -241,7 +245,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
try {
log("Début de l'exportation");
LOGGER.info("Début de l'exportation");
preparerExport();
......@@ -264,10 +268,10 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
ps.setInt(3, rang++);
ps.addBatch();
if (++count % 500000 == 0) {
log("Exportation des ordres d'appel des voeux " + (count - 499999) + " a " + count);
LOGGER.log(Level.INFO, "Exportation des ordres d''appel des voeux {0} a {1}", new Object[]{count - 499999, count});
ps.executeBatch();
ps.clearBatch();
log("Fait");
LOGGER.info("Fait");
}
}
......@@ -276,7 +280,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
}
conn.commit();
log("Mise à jour de la table C_CAN_GRP");
LOGGER.info("Mise à jour de la table C_CAN_GRP");
conn.createStatement().execute("UPDATE "
+ "(SELECT a.C_CG_ORD_APP cible, b.C_CG_ORD_APP source FROM C_CAN_GRP a,"
+ "J_ORD_APPEL_TMP b WHERE a.G_CN_COD=b.G_CN_COD AND a.C_GP_COD=b.C_GP_COD)"
......@@ -285,7 +289,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
/* exportation des statistiques mesurant l'écart entre l'ordre d'appel
et le classement initial.
*/
log("Exportation des coefficients de divergence");
LOGGER.info("Exportation des coefficients de divergence");
try (PreparedStatement ps = conn.prepareStatement(
"INSERT INTO C_CAN_ORD_APPEL_DIV (C_GP_COD,COEF_DIV) VALUES (?,?)")) {
for (Entry<Integer, OrdreAppel> paire
......@@ -298,13 +302,13 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
ps.executeBatch();
}
log("Application des changements");
LOGGER.info("Application des changements");
conn.commit();
log("Fin de l'exportation");
LOGGER.info("Fin de l'exportation");
} catch (SQLException ex) {
log("Erreur d'exportation des données");
LOGGER.severe("Erreur d'exportation des données");
throw new RuntimeException("Erreur d'exportation des données", ex);
}
}
......@@ -321,7 +325,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
conn.createStatement().execute("DROP TABLE J_ORD_APPEL_TMP");
} catch (SQLException e) {
/* peut arriver si la table n'existait pas */
};
}
conn.createStatement().execute(
"CREATE GLOBAL TEMPORARY TABLE J_ORD_APPEL_TMP ("
......@@ -337,7 +341,7 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
conn.createStatement().execute("DROP TABLE C_CAN_ORD_APPEL_DIV");
} catch (SQLException e) {
/* peut arriver si la table n'existait pas */
};
}
conn.createStatement().execute(
"CREATE TABLE C_CAN_ORD_APPEL_DIV ("
......@@ -349,8 +353,4 @@ public class ConnecteurDonneesAppelOracle implements ConnecteurDonneesAppel {
}
private void log(String message) {
System.out.println(LocalDateTime.now().toLocalTime() + ": " + message);
}
}
......@@ -18,7 +18,7 @@
*/
package parcoursup.propositions;
import java.time.LocalDateTime;
import java.util.logging.Logger;
import parcoursup.propositions.algo.AlgoPropositions;
import parcoursup.propositions.algo.AlgoPropositionsEntree;
......@@ -30,6 +30,8 @@ Ce code est exécuté de manière quotidienne.
*/
public class EnvoiPropositions {
private static final Logger LOGGER = Logger.getLogger(EnvoiPropositions.class.getName());
private final ConnecteurDonneesPropositions acces;
public EnvoiPropositions(ConnecteurDonneesPropositions acces) {
......@@ -38,24 +40,20 @@ public class EnvoiPropositions {
public void execute() throws Exception {
log("Récupération des données");
LOGGER.info("Récupération des données");
AlgoPropositionsEntree entree = acces.recupererDonnees();
log("Sauvegarde locale de l'entrée");
LOGGER.info("Sauvegarde locale de l'entrée");
entree.serialiser(null);
log("Calcul des propositions");
LOGGER.info("Calcul des propositions");
AlgoPropositionsSortie sortie = AlgoPropositions.calculePropositions(entree);
log("Sauvegarde locale de la sortie");
LOGGER.info("Sauvegarde locale de la sortie");
sortie.serialiser(null);
log("Export des données");
LOGGER.info("Export des données");
acces.exporterDonnees(sortie);
}
static void log(String msg) {
System.out.println(LocalDateTime.now().toLocalTime() + ": " + msg);
}
}
......@@ -19,21 +19,24 @@
*/
package parcoursup.propositions.algo;
import java.time.LocalDateTime;
import java.util.HashMap;
import parcoursup.propositions.test.VerificationsResultats;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
public class AlgoPropositions {
private static final Logger LOGGER = Logger.getLogger(AlgoPropositions.class.getName());
/* la boucle principale du calcul des propositions à envoyer */
public static AlgoPropositionsSortie calculePropositions(AlgoPropositionsEntree entree) {
entree.verifierIntegrite();
log("Début calcul propositions");
LOGGER.info("Début calcul propositions");
/* groupes à mettre à jour */
Set<GroupeAffectation> groupesAMettreAJour
......@@ -95,11 +98,10 @@ public class AlgoPropositions {
compteurBoucle++;
}
log("Calcul terminé après " + compteurBoucle + " itération(s).");
LOGGER.log(Level.INFO, "Calcul terminé après {0} itération(s).", compteurBoucle);
log("Vérification des propriétés attendues des propositions pour un des "
+ entree.groupesAffectations.size()
+ " groupes d'affectation");
LOGGER.log(Level.INFO, "Vérification des propriétés attendues des propositions pour un des {0} groupes d''affectation",
entree.groupesAffectations.size());
int step = Integer.max(1, entree.groupesAffectations.size() / 100);
int count = 0;
......@@ -119,8 +121,8 @@ public class AlgoPropositions {
}
System.out.println();
log("Vérification des propriétés attendues des propositions d'un des "
+ entree.internats.size() + " internats");
LOGGER.log(Level.INFO, "Vérification des propriétés attendues des propositions d''un des {0} internats",
entree.internats.size());
step = Integer.max(1, entree.internats.size() / 100);
count = 0;
......@@ -153,9 +155,9 @@ public class AlgoPropositions {
}
System.out.println();
log("Vérification ok");
LOGGER.info("Vérification ok");
log("Préparation données de sortie");
LOGGER.info("Préparation données de sortie");
AlgoPropositionsSortie sortie = new AlgoPropositionsSortie();
......@@ -175,10 +177,6 @@ public class AlgoPropositions {
}
private static void log(String msg) {
System.out.println(LocalDateTime.now().toLocalTime() + ": " + msg);
}
private static void afficherJauge() {
for (int i = 0; i < 100; i++) {
System.out.print("-");
......
......@@ -23,11 +23,12 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import oracle.jdbc.OracleDriver;
import oracle.jdbc.pool.OracleDataSource;
import parcoursup.propositions.algo.AlgoPropositionsEntree;
......@@ -55,8 +56,10 @@ import parcoursup.propositions.algo.VoeuUID;
*/
public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPropositions {
private static final Logger LOGGER = Logger.getLogger(ConnecteurDonneesPropositionsOracle.class.getName());
/* connexion a la base de données */
Connection conn = null;
private final Connection conn;
public ConnecteurDonneesPropositionsOracle(String url, String user, String password) throws SQLException {
if (url == null || url.isEmpty()) {
......@@ -74,7 +77,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
@Override
public AlgoPropositionsEntree recupererDonnees() throws SQLException {
log("Vérification de l'interruption du flux de données entrantes.");
LOGGER.info("Vérification de l'interruption du flux de données entrantes.");
/*Si = 1 indique si le programme d'admission est en train de tourner
pour faire des propositions. Si c'est le cas, tout est bloqué*/
try (ResultSet result
......@@ -101,14 +104,14 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
recupererVoeuxSansInternatAClassementPropre();
if (!groupesManquants.isEmpty()) {
System.out.println(groupesManquants.size() + " groupes manquants.");
LOGGER.log(Level.SEVERE, "{0} groupes manquants.", groupesManquants.size());
}
if (!internatsManquants.isEmpty()) {
System.out.println(internatsManquants.size() + " internats manquants.");
LOGGER.log(Level.SEVERE, "{0} internats manquants.", internatsManquants.size());
}
log("Fin de la récupération des données depuis la base Oracle");
LOGGER.info("Fin de la récupération des données depuis la base Oracle");
AlgoPropositionsEntree entree = new AlgoPropositionsEntree();
......@@ -125,13 +128,13 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
conn.setAutoCommit(false);
log("Préparation des tables avant export");
LOGGER.info("Préparation des tables avant export");
conn.createStatement().executeQuery(
"DELETE FROM A_ADM_PROP WHERE NB_JRS=" + GroupeInternat.nbJoursCampagne);
conn.createStatement().executeQuery(
"DELETE FROM A_ADM_POSITIONS_INT WHERE NB_JRS=" + GroupeInternat.nbJoursCampagne);
log("Exportation des propositions d'admission");
LOGGER.info("Exportation des propositions d'admission");
try (PreparedStatement ps = conn.prepareStatement(
"INSERT INTO A_ADM_PROP "
......@@ -158,21 +161,21 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
ps.addBatch();
if (++count % 500000 == 0) {
log("Exportation des propositions " + (count - 499999) + " a " + count);
LOGGER.log(Level.INFO, "Exportation des propositions {0} a {1}", new Object[]{count - 499999, count});
ps.executeBatch();
ps.clearBatch();
log("Fait");
LOGGER.info("Fait");
}
}
ps.executeBatch();
log(count + " propositions exportées.");
LOGGER.log(Level.INFO, "{0} propositions exportées.", count);
}
conn.commit();
log("Exportation des positions d'admission aux internats");
LOGGER.info("Exportation des positions d'admission aux internats");
try (PreparedStatement ps = conn.prepareStatement(
"INSERT INTO A_ADM_POSITIONS_INT "
......@@ -206,14 +209,13 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
= new HashSet<>();
/* permet de comptabiliser les groupes manquants, avant le début de campagne */
Set<GroupeAffectationUID> groupesManquants
= new HashSet<>();
private final Set<GroupeAffectationUID> groupesManquants = new HashSet<>();
private void recupererGroupesEtInternats() throws SQLException {
internats.clear();
groupesAffectations.clear();
log("Récupération des groupes d'affectation");
LOGGER.info("Récupération des groupes d'affectation");
try (Statement stmt = conn.createStatement()) {
stmt.setFetchSize(1000000);
try (ResultSet result = stmt.executeQuery(
......@@ -243,7 +245,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
}
}
log("Récupération des internats");
LOGGER.info("Récupération des internats");
try (Statement stmt = conn.createStatement()) {
stmt.setFetchSize(1000000);
......@@ -274,7 +276,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
}
}
log("Récupération du nombre de jours écoulés depuis l'ouverture de la campagne");
LOGGER.info("Récupération du nombre de jours écoulés depuis l'ouverture de la campagne");
try (ResultSet result
= conn.createStatement().executeQuery(
"SELECT TRUNC(SYSDATE) - TRUNC(TO_DATE(g_pr_val, 'DD/MM/YYYY:HH24'))+1"
......@@ -293,7 +295,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
int compteur = 0;
log("Récupération des voeux avec demande internat dans un internat à classement propre");
LOGGER.info("Récupération des voeux avec demande internat dans un internat à classement propre");
try (Statement stmt = conn.createStatement()) {
stmt.setFetchSize(1000000);
String requete
......@@ -342,7 +344,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
+ "AND ti.g_ti_cla_int_uni IN (0,1)" //restriction aux internats à classement propre
;
log(requete);
LOGGER.info(requete);
try (ResultSet result = stmt.executeQuery(requete)) {
while (result.next()) {
......@@ -412,12 +414,12 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
}
}
}
log(compteur + " voeux en attente avec internat à classement propre");
LOGGER.log(Level.INFO, "{0} voeux en attente avec internat à classement propre", compteur);
}
private void recupererVoeuxSansInternatAClassementPropre() throws SQLException {
int compteur = 0;
log("Récupération des voeux sans internat, ou dans un internat sans classement propre");
LOGGER.info("Récupération des voeux sans internat, ou dans un internat sans classement propre");
try (Statement stmt = conn.createStatement()) {
stmt.setFetchSize(1000000);
String requete
......@@ -452,7 +454,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
//exclut les formations d'inscriptions avec internat à classement propre
+ " AND (v.i_rh_cod =0 or ti.g_ti_cla_int_uni NOT IN (0,1))";
log(requete);
LOGGER.info(requete);
try (ResultSet result = stmt.executeQuery(requete)) {
while (result.next()) {
......@@ -491,11 +493,7 @@ public class ConnecteurDonneesPropositionsOracle implements ConnecteurDonneesPro
}
}
}
log(compteur + " voeux en attente sans internat a classement propre");
}
private void log(String message) {
System.out.println(LocalDateTime.now().toLocalTime() + ": " + message);
LOGGER.log(Level.INFO, "{0} voeux en attente sans internat a classement propre", compteur);
}
}
......@@ -28,6 +28,8 @@ import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import parcoursup.propositions.algo.AlgoPropositionsEntree;
......@@ -39,6 +41,8 @@ import parcoursup.propositions.algo.VoeuEnAttente;
public class ExempleAleatoire extends ExemplePropositions {
private static final Logger LOGGER = Logger.getLogger(ExempleAleatoire.class.getName());
@Override
String nom() {
return "ExempleAleatoire";// + dateCreation;
......@@ -64,7 +68,7 @@ public class ExempleAleatoire extends ExemplePropositions {
final int maxNbGroupesParFormation = 5;
List<Etablissement> etablissements = new LinkedList<>();
private final List<Etablissement> etablissements = new LinkedList<>();
int last_G_TI_COD = 1;
int last_G_TA_COD = 1;
......@@ -329,9 +333,7 @@ public class ExempleAleatoire extends ExemplePropositions {
public ExempleAleatoire(int nbEtudiants) {
if(nbEtudiants < 100)
nbEtudiants = 100;
this.nbEtudiants = nbEtudiants;
this.nbEtudiants = Math.max(100, nbEtudiants);
}
......@@ -341,16 +343,16 @@ public class ExempleAleatoire extends ExemplePropositions {
int capacite_totale = 0;
GroupeInternat.nbJoursCampagne = 1 + random.nextInt(70);
log("Jours de campagne: " + GroupeInternat.nbJoursCampagne);
LOGGER.log(Level.INFO, "Jours de campagne: {0}", GroupeInternat.nbJoursCampagne);
log("Génération aléatoire des établissements et formations");
LOGGER.info("Génération aléatoire des établissements et formations");
while (capacite_totale < nbEtudiants) {
Etablissement e = new Etablissement();
etablissements.add(e);
capacite_totale += e.capacite();
}
log("Génération aléatoire des voeux et classements");
LOGGER.info("Génération aléatoire des voeux et classements");
for (int i = 0; i < nbEtudiants; i++) {
Candidat c = new Candidat();
int nbVoeux = (int) (Math.random() * maxNbVoeuxParCandidat);
......@@ -360,11 +362,11 @@ public class ExempleAleatoire extends ExemplePropositions {
nbVoeux -= e.ajouterVoeux(c);
}
if ((i + 1) % 100000 == 0) {
log((1 + i) + " étudiants générés ...");
LOGGER.log(Level.INFO, "{0}{1} étudiants générés ...", new Object[]{1, i});
}
}
log("Génération données entrée algorithme");
LOGGER.info("Génération données entrée algorithme");
AlgoPropositionsEntree entree = new AlgoPropositionsEntree();
......@@ -390,8 +392,4 @@ public class ExempleAleatoire extends ExemplePropositions {
return entree;
}
void log(String msg) {
System.out.println(LocalDateTime.now().toLocalTime() + ": " + msg);
}
}
......@@ -22,6 +22,8 @@ package parcoursup.propositions.test;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import parcoursup.propositions.algo.GroupeAffectation;
import parcoursup.propositions.algo.GroupeInternat;
import parcoursup.propositions.algo.VoeuEnAttente;
......@@ -35,6 +37,8 @@ Des tests complémentaires sont effectués en base par des scripts PL/SQL.
*/
public class VerificationsResultats {
private static final Logger LOGGER = Logger.getLogger(VerificationsResultats.class.getName());
/*
P1 (respect ordre appel pour les voeux sans internat)
......@@ -245,7 +249,7 @@ public class VerificationsResultats {
private static void prevenirSi(boolean prop, String message) {
if (prop) {
System.out.println("Attention: " + message);
LOGGER.log(Level.WARNING, "Attention: {0}", message);
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment