Commit 296b7e83 authored by Laurent Lécluse's avatar Laurent Lécluse
Browse files

Finalisation de la suppression des jobs

parent 00fd2a74
......@@ -66,5 +66,7 @@ Le fichier n'est donc plus placé dans le répertoire `config`, mais à la **rac
* notifier-indicateurs
* synchronisation
* chargens-calcul-effectifs
* calcul-tableaux-bord
* formule-calcul
Pour cela, se référer à la procédure d'installation de OSE.
\ No newline at end of file
......@@ -27,6 +27,12 @@ switch ($action) {
case 'chargens-calcul-effectifs':
$oa->exec('chargens-calcul-effectifs');
break;
case 'calcul-tableaux-bord':
$oa->exec('calcul-tableaux-bord');
break;
case 'formule-calcul':
$oa->exec('formule-calcul');
break;
default:
help($c, $oa);
break;
......@@ -109,6 +115,9 @@ function help(Console $c, OseAdmin $oa)
$c->println(" - notifier-indicateurs : Envoi des mails relatifs aux indicateurs");
$c->println(" - synchronisation <job> : Effectue la synchronisation des données pour le <job> transmis");
$c->println(" - chargens-calcul-effectifs : Calcul des effectifs du module Charges");
$c->println(" - calcul-tableaux-bord : Recalcule tous les tableaux de bord de calculs itermédiaires");
$c->println(" - formule-calcul : Calcul de toutes les heures complémentaires à l'aide de la formule");
}
......
......@@ -108,41 +108,6 @@ class DdlGen
}
}
}
$this->ddl[self::JOBS] = [];
$this->ddl[self::JOBS]['OSE_FORMULE_REFRESH'] = "BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'OSE_FORMULE_REFRESH',
job_type => 'STORED_PROCEDURE',
job_action => 'OSE_FORMULE.CALCULER_TOUT',
number_of_arguments => 1,
start_date => TO_TIMESTAMP_TZ('2014-12-09 10:25:17.032495000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'),
repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI,SAT,SUN;BYHOUR=5;BYMINUTE=0;BYSECOND=0',
end_date => NULL,
enabled => TRUE,
auto_drop => FALSE,
comments => 'Recalcul général de la formule de calcul'
);
END;
/";
$this->ddl[self::JOBS]['MAJ_ALL_TBL'] = "BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'MAJ_ALL_TBL',
job_type => 'STORED_PROCEDURE',
job_action => 'OSE_DIVERS.CALCULER_TABLEAUX_BORD',
number_of_arguments => 0,
start_date => TO_TIMESTAMP_TZ('2017-11-06 16:03:22.734108000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'),
repeat_interval => 'FREQ=DAILY;BYHOUR=2,14;BYMINUTE=0;BYSECOND=0',
end_date => NULL,
enabled => TRUE,
auto_drop => FALSE,
comments => 'Mise à jour de tous les tableaux de bord (hors formule de calcul)'
);
END;
/";
}
......
......@@ -128,48 +128,6 @@ Un script d'initialisation vous est fourni (répertoire data/Déploiement/ose-dd
Attention à bien veiller à ce que les accents soient correctement traités.
Les caractères du fichier sont en **UTF8**.
En plus de cale, des Jobs Oracle sont à créer pour effectuer une série de tâches.
Certaines données ont en effet besoin d'être mis à jour périodiquement.
A vous d'adapter les périodicités à vos besoins.
```sql
/
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'OSE_FORMULE_REFRESH',
job_type => 'STORED_PROCEDURE',
job_action => 'OSE_FORMULE.CALCULER_TOUT',
number_of_arguments => 1,
start_date => TO_TIMESTAMP_TZ('2014-12-09 10:25:17.032495000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'),
repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI,SAT,SUN;BYHOUR=5;BYMINUTE=0;BYSECOND=0',
end_date => NULL,
enabled => TRUE,
auto_drop => FALSE,
comments => 'Recalcul général de la formule de calcul'
);
END;
/
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'MAJ_ALL_TBL',
job_type => 'STORED_PROCEDURE',
job_action => 'OSE_DIVERS.CALCULER_TABLEAUX_BORD',
number_of_arguments => 0,
start_date => TO_TIMESTAMP_TZ('2017-11-06 16:03:22.734108000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'),
repeat_interval => 'FREQ=DAILY;BYHOUR=2,14;BYMINUTE=0;BYSECOND=0',
end_date => NULL,
enabled => TRUE,
auto_drop => FALSE,
comments => 'Mise à jour de tous les tableaux de bord (hors formule de calcul)'
);
END;
/
```
# Configuration technique
Personnalisez le fichier `config.local.php` pour adapter OSE à votre établissement.
......@@ -185,12 +143,14 @@ Ce mode vous permettra de :
Une fois cette étape terminée, il convient de passer OSE en mode production. Cela se fait dans le fichier de configuration `config.local.php`, en positionnant à `false` `global/modeInstallation`.
# Mise en place des tâches CRON
Des tâches CRON doivent être lancée sur votre serveur régulièrement.
Elle sert à envoyer les notifications par mail pour les indicateurs à ceux qui se sont abonnés.
Des tâches CRON doivent être lancée sur votre serveur régulièrement pour mettre à jour certaines données
ou réaliser des actions.
Ces tâches n'ont pas besoin d'être lancées régulièrement sur un serveur de pré-production.
Dans tous les cas, c'est le script de OSE qui sera appelé.
Le script est situé dans le répertoire de OSE, `bin/ose`.
Il est suivi de l'action à exécuter, puis éventuellement de paramètres.
Il est suivi de l'action à exécuter, puis éventuellement de paramètres à préciser.
Exemple d'utilisation pour lancer une tâche de synchronisation appelée `principal`:
```bash
......@@ -202,6 +162,8 @@ Exemple d'utilisation pour lancer une tâche de synchronisation appelée `princi
| Indicateurs : envoi des notifications par mail | Les jours de semaine entre 5h et 17h | notifier-indicateurs |
| Synchronisation : Mise en place d'un job pour l'import des données. Plusieurs jobs pourront être créés au besoin | Tous les quarts d'heures entre 7h et 21h sauf le dimanche | synchronisation `<Nom du job>` |
| Calcul des effectifs du module Charges | une fois par jour, à 20h tous les jours sauf le dimanche. | chargens-calcul-effectifs |
| Calcul des tableaux de bord | Deux fois par jour sauf le dimanche (Calcul LONG) | calcul-tableaux-bord |
| Calcul des heures complémentaires à l'aide de la formule (calcul LONG) | Les lundi et jeudi à 3h | formule-calcul |
Après la commande, on ajoute `1> /tmp/oselog 2>&1` pour loguer le résultat dans le fichier`/tmp/oselog`.
A adapter le cas échéant.
......@@ -210,9 +172,11 @@ Voici un exemple de crontab :
```cron
# m h dom mon dow command
0 5-17 * * 1-5 /usr/bin/php /var/www/ose/bin/ose notifier-indicateurs 1> /tmp/oselog 2>&1
*/15 7-21 * * 1-6 /usr/bin/php /var/www/ose/bin/ose synchronisation job1 1> /tmp/oselog 2>&1
0 5-17 * * 1-5 /usr/bin/php /var/www/ose/bin/ose notifier-indicateurs 1> /tmp/oselog 2>&1
*/15 7-21 * * 1-6 /usr/bin/php /var/www/ose/bin/ose synchronisation job1 1> /tmp/oselog 2>&1
0 20 * * 1-6 /usr/bin/php /var/www/ose/bin/ose chargens-calcul-effectifs 1> /tmp/oselog 2>&1
0 6,14 * * 1-6 /usr/bin/php /var/www/ose/bin/ose calcul-tableaux-bord 1> /tmp/oselog 2>&1
0 3 * * 1,4 /usr/bin/php /var/www/ose/bin/ose formule-calcul 1> /tmp/oselog 2>&1
```
OSE est maintenant installé.
......
......@@ -18686,44 +18686,6 @@ END;
/
ALTER TRIGGER "WF_ETAPE_DEP_CK" ENABLE;
 
--------------------------------------------------
-- Jobs
--------------------------------------------------
-- OSE_FORMULE_REFRESH
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'OSE_FORMULE_REFRESH',
job_type => 'STORED_PROCEDURE',
job_action => 'OSE_FORMULE.CALCULER_TOUT',
number_of_arguments => 1,
start_date => TO_TIMESTAMP_TZ('2014-12-09 10:25:17.032495000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'),
repeat_interval => 'FREQ=DAILY;BYDAY=MON,TUE,WED,THU,FRI,SAT,SUN;BYHOUR=5;BYMINUTE=0;BYSECOND=0',
end_date => NULL,
enabled => TRUE,
auto_drop => FALSE,
comments => 'Recalcul général de la formule de calcul'
);
END;
/
-- MAJ_ALL_TBL
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'MAJ_ALL_TBL',
job_type => 'STORED_PROCEDURE',
job_action => 'OSE_DIVERS.CALCULER_TABLEAUX_BORD',
number_of_arguments => 0,
start_date => TO_TIMESTAMP_TZ('2017-11-06 16:03:22.734108000 EUROPE/PARIS','YYYY-MM-DD HH24:MI:SS.FF TZR'),
repeat_interval => 'FREQ=DAILY;BYHOUR=2,14;BYMINUTE=0;BYSECOND=0',
end_date => NULL,
enabled => TRUE,
auto_drop => FALSE,
comments => 'Mise à jour de tous les tableaux de bord (hors formule de calcul)'
);
END;
/
 
 
-- Table SOURCE
......@@ -90,6 +90,21 @@ BEGIN
force => true);
END;
/
-- Suppression du JOB OSE_FORMULE_REFRESH
BEGIN
DBMS_SCHEDULER.DROP_JOB(job_name => '"OSE"."OSE_FORMULE_REFRESH"',
defer => false,
force => true);
END;
/
-- Suppression du JOB OSE_WF_REFRESH
BEGIN
DBMS_SCHEDULER.DROP_JOB(job_name => '"OSE"."OSE_WF_REFRESH"',
defer => false,
force => true);
END;
/
drop package "OSE"."OSE_IMPORT";
drop package "OSE"."OSE_IMPORT";
\ No newline at end of file
/
\ No newline at end of file
......@@ -163,6 +163,10 @@ class Module implements ConsoleUsageProviderInterface, ConsoleBannerProviderInte
['--force', "Facultatif", "Envoie les mails sytématiquement, sans tenir compte de la fréquence de notification."],
"Charges d'enseignement",
'chargens-calc-effectifs' => "Calcul des effectifs du module Charges",
"Tableaux de bord",
'calcul-tableaux-bord' => "Calcul de tous les tableaux de bord (sauf la formule qui est à part)",
"Formule de calcul",
'formule-calcul' => "Calcul de toutes les heures complémentaires à l'aide de la formule",
];
}
......
......@@ -3,6 +3,30 @@
namespace Application;
return [
/* Déclaration du contrôleur */
'controllers' => [
'factories' => [
'Application\Controller\Formule' => Controller\Factory\FormuleControllerFactory::class,
],
],
'console' => [
'router' => [
'routes' => [
'formule-calcul' => [
'options' => [
'route' => 'formule-calcul',
'defaults' => [
'controller' => 'Application\Controller\Formule',
'action' => 'calculer-tout',
],
],
],
],
],
],
'service_manager' => [
'invokables' => [
Service\FormuleIntervenantService::class => Service\FormuleIntervenantService::class,
......
......@@ -90,6 +90,23 @@ return [
],
],
],
'console' => [
'router' => [
'routes' => [
'workflow-calcul-tbls' => [
'options' => [
'route' => 'calcul-tableaux-bord',
'defaults' => [
'controller' => 'Application\Controller\Workflow',
'action' => 'calcul-tableaux-bord',
],
],
],
],
],
],
'navigation' => [
'default' => [
'home' => [
......
<?php
namespace Application\Controller\Factory;
use Zend\Mvc\Controller\ControllerManager as ContainerInterface;
use Application\Controller\FormuleController;
/**
* Description of FormuleControllerFactory
*
* @author LECLUSE Laurent <laurent.lecluse at unicaen.fr>
*/
class FormuleControllerFactory
{
/**
* @param ContainerInterface $container
* @param string $requestedName
* @param array|null $options
*
* @return FormuleController
*/
public function __invoke(ContainerInterface $container, $requestedName, $options = null)
{
/* On quitte le ControllerManager */
$container = $container->getServiceLocator();
$controller = new FormuleController;
/* Injectez vos dépendances ICI */
return $controller;
}
}
\ No newline at end of file
<?php
namespace Application\Controller;
/**
* Description of FormuleController
*
* @author LECLUSE Laurent <laurent.lecluse at unicaen.fr>
*/
class FormuleController extends AbstractController
{
public function calculerToutAction()
{
$this->em()->getConnection()->exec('BEGIN OSE_FORMULE.CALCULER_TOUT; END;');
}
}
\ No newline at end of file
......@@ -143,6 +143,11 @@ class WorkflowController extends AbstractController
}
public function calculTableauxBordAction()
{
$this->getServiceWorkflow()->calculerTousTableauxBord();
}
public function feuilleDeRouteRefreshAction()
{
......
......@@ -5,6 +5,7 @@ namespace Application\Service\Factory;
use Application\Service\ContextService;
use Application\Service\WorkflowService;
use UnicaenTbl\Service\TableauBordService;
use Zend\Console\Console;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
......@@ -22,9 +23,11 @@ class WorkflowServiceFactory implements FactoryInterface
$serviceLocator->get(ContextService::class)
);
$service->setServiceAuthorize(
$serviceLocator->get('BjyAuthorize\Service\Authorize')
);
if (!Console::isConsole()) {
$service->setServiceAuthorize(
$serviceLocator->get('BjyAuthorize\Service\Authorize')
);
}
return $service;
}
......
......@@ -283,6 +283,17 @@ class WorkflowService extends AbstractService
/**
* @return int
* @throws \Doctrine\DBAL\DBALException
*/
public function calculerTousTableauxBord()
{
return $this->getEntityManager()->getConnection()->exec('BEGIN OSE_DIVERS.CALCULER_TABLEAUX_BORD; END;');
}
/**
* @param array $tableauxBords
* @param Intervenant|Intervenant[]|string $intervenant
......
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