Commit 21e27334 authored by Laurent Lécluse's avatar Laurent Lécluse
Browse files

Test d'accès à la BDD et arrêt du script de MAJ si la BDD n'est pas dispo

parent 26f55826
......@@ -18,9 +18,13 @@ author: Laurent Lécluse - DSI - Unicaen
## Corrections de bugs
* Les informations complémentaires de l'utilisateur (qui relevaient d'une liste spécifique à l'Université de Caen et qui pouvait amener un plantage de l'application)
ne sont plus affichées lorsqu'on clique sur l'utilisateur en haut à gauche.
ne sont plus affichées lorsqu'on clique sur l'utilisateur en haut à droite.
* Dans la fiche de service, les codes des éléments et des étapes s'affichent de nouveau (ils n'étaient plus visibles)
* Lorsqu'on crée un nouveau rôle et qu'on lui ajoute des privilèges, l'application ne plante plus (problème de cache de données réglé).
* Dans l'export Winpaye, le numéro INSEE est maintenant correctement formatté (il supprime les espaces en trop, et ajoute des zéros devant les clés si nécessaire)
## Nouveautés
* Nouveau script de test d'accès à la BDD depuis le script de mise à jour (./bin/ose test-bdd)
# OSE 8.1.2
......
......@@ -10,6 +10,7 @@ $actions = [
"changement-mot-de-passe" => "Changement de mot de passe (pour un utilisateur local uniquement)",
"maj-public-links" => "Mise à jour des liens vers les répertoires publics des dépendances",
"clear-cache" => "Vidage du cache de l'application",
"test-bdd" => "Test d'accès à la base de données",
];
$c->println('Actions possibles :');
......
<?php
$c->println('Test d\'accès à la base de données...', $c::COLOR_LIGHT_CYAN);
try {
$ok = $oa->bddIsOk();
}catch(\Exception $e){
$c->println($e->getMessage());
$ok = false;
}
if ($ok){
$c->println('La base de données est bien accessible!', $c::BG_GREEN);
}else{
$c->println('Impossible d\'accéder à la base de données!', $c::BG_RED);
}
\ No newline at end of file
<?php
$bdd = $oa->getBdd();
$schema = new \BddAdmin\Schema($bdd);
/* Récupération du schéma de référence */
$ref = $schema->loadFromFile($oa->getOseDir().'bdd/ddl.php');
/* Construction de la config de DDL pour filtrer */
$ddlConfig = [];
// On me met à jour que les objets présents dans le schéma par défaut
foreach( $ref as $ddlClass => $config ){
$ddlConfig[$ddlClass] = ['includes' => array_keys($config)];
}
$ddlConfig = [
'explicit' => true,
\BddAdmin\Ddl\DdlView::class => $ddlConfig[\BddAdmin\Ddl\DdlView::class],
\BddAdmin\Ddl\DdlPackage::class => $ddlConfig[\BddAdmin\Ddl\DdlPackage::class],
\BddAdmin\Ddl\DdlTrigger::class => $ddlConfig[\BddAdmin\Ddl\DdlTrigger::class],
];
$ddlConfig[\BddAdmin\Ddl\DdlView::class]['excludes'] = [
'V_FORMULE_LOCAL_VH_PARAMS'
];
/* Mise en place du logging en mode console */
$scl = new \BddAdmin\SchemaConsoleLogger();
$scl->console = $c;
$schema->setLogger($scl);
/* Mise à jour de la BDD */
$r = $schema->alter($ref, $ddlConfig, true);
......@@ -5,6 +5,10 @@ $c->println("Mise à jour de OSE");
$c->println("Assurez-vous bien d'avoir mis OSE en mode maintenance avant de démarrer\n(pressez Entrée pour continuer)...");
$c->getInput();
if (!$oa->bddIsOk()){
$c->printDie('La mise à jour ne peut pas se poursuivre : la base de données est inaccessible.');
}
$osedir = $oa->getOseDir();
$c->exec([
......
......@@ -284,6 +284,22 @@ class OseAdmin
/**
* @return bool
* @throws \BddAdmin\Exception\BddCompileException
* @throws \BddAdmin\Exception\BddException
* @throws \BddAdmin\Exception\BddIndexExistsException
*/
public function bddIsOk(): bool
{
$bdd = $this->getBdd();
$r = $bdd->select('SELECT 1 FROM dual');
return isset($r[0][1]) && $r[0][1] === '1';
}
private function loadBdd(): \BddAdmin\Bdd
{
$bdd = new \BddAdmin\Bdd(Config::getBdd());
......
......@@ -14,6 +14,6 @@ $oa->init();
$c->printMainTitle("OSE", 15);
$oa->run($c->getArg(1));
$oa->run($c->getArg(1) ?: 'help');
$c->println('Traitement terminé.', $c::BG_YELLOW);
\ No newline at end of file
Supports Markdown
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