batch/bin/sourceInsee.php
2016-11-03 09:54:51 +01:00

199 lines
6.9 KiB
PHP

<?php
/**
* Récupération des fichiers INSEE pour mise a disposition et suivi
*
*/
// --- Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(__DIR__ . '/../application'));
// --- Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// --- Composer autoload
require_once realpath(__DIR__ . '/../vendor/autoload.php');
// --- Create application, bootstrap, and run
$application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
// --- Options
$displayUsage = false;
try {
$opts = new Zend_Console_Getopt(array(
'help|?' => "Displays usage information.",
'file-w' => "Télécharger à nouveau le fichier en mode manuel pour écrasement de l'ancien",
'type=w' => "Only look for one type of file",
'cron' => "Mandatory option for launch the cli in cron",
'from=w' => "restricted not opendata"
));
$opts->parse();
} catch (Zend_Console_Getopt_Exception $e) {
$displayUsage = true;
}
// --- Aide / Options
if (count($opts->getOptions())==0 || isset($opts->help)) {
$displayUsage = true;
}
// --- Usage
if ($displayUsage) {
echo "Recuperation des fichiers INSEE.\n";
echo $opts->getUsageMessage();
exit;
}
$BASEPATH = realpath(APPLICATION_PATH . '/../');
$STORAGEBASE = "/home/scores/batch/shared/sources/insee";
$FTP_URL = "ftp://81.255.68.110:21/download/";
$FTP_OPTION = "-k --ssl --disable-epsv --user client_syracuse23:cLiEnT_SYRAcuse23*37654 --cacert $BASEPATH/certs/ca.pem --cert $BASEPATH/certs/client.pem --key $BASEPATH/certs/key.pem";
echo date('Y-m-d H:i:s') . " - Debut execution\n";
$c = new Zend_Config($application->getOptions());
$db = Zend_Db::factory($c->profil->db->metier);
Zend_Db_Table_Abstract::setDefaultAdapter($db);
// Database
$config = new \Doctrine\DBAL\Configuration();
$connectionParams = array(
'dbname' => $c->profil->db->metier->params->dbname,
'user' => $c->profil->db->metier->params->username,
'password' => $c->profil->db->metier->params->password,
'host' => $c->profil->db->metier->params->host,
'charset' => 'utf8',
'driver' => 'pdo_mysql',
);
try {
$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
Zend_Registry::set('doctrine', $conn);
} catch (\Doctrine\DBAL\DBALException $e) {
echo "Connection Database impossible.\n";
exit;
}
$storageDir = $STORAGEBASE . '/' . date('Y');
if (!file_exists($storageDir)) {
mkdir($storageDir, 0777, true);
}
$oneShot = false;
if ($opts->file) {
$oneShot = true;
}
if (file_exists('insee.lock')) {
echo date('Y-m-d H:i:s') . "Fichier lock.\n";
exit;
}
if ($opts->cron || $oneShot) {
$execRef = new Scores_Exec_Ref('INSEE');
$execId = $execRef->start();
file_put_contents('insee.lock', "");
/*
$command = "curl $FTP_OPTION $FTP_URL";
exec($command, $contents);
print_r($contents); exit;
*/
// --- Liste des fichiers
$command = "curl -s $FTP_OPTION $FTP_URL | grep -e '^-' | awk '{ print $9 }'";
exec($command, $contents);
if (count($contents) == 0) {
echo date('Y-m-d H:i:s') . " - Impossible de lister le répertoire.\n";
}
// --- Traitement pour chaque fichier
$unitTotal = count($contents);
$unitInc = $unitExec = 0;
if ($unitTotal > 0) {
foreach ($contents as $file) {
echo date('Y-m-d H:i:s') . " - Lecture $file\n";
$fileSql = "SELECT * FROM sdv1.flux_insee WHERE file=:file ORDER BY dateInsert DESC LIMIT 0,1";
$fileStmt = $conn->prepare($fileSql);
$fileStmt->bindValue('file', $file);
$fileStmt->execute();
$fileToDownload = false;
// -- Fichier non présent en base
if ($fileStmt->rowCount() == 0) {
$unitInc++;
$fileToDownload = true;
}
// --- Fichier déjà présent en base
else {
$fileRow = $fileStmt->fetch(\PDO::FETCH_OBJ);
echo date('Y-m-d H:i:s') . " - Fichier $file en base";
if (file_exists($fileRow->directory.'/'.$fileRow->file)) {
echo " exist\n";
} else {
$unitInc++;
$fileToDownload = true;
echo " non exist\n";
}
}
if ($fileToDownload) {
// --- Téléchargement du fichier
echo date('Y-m-d H:i:s') . " - Telechargement $file\n";
$command = "cd $storageDir; curl -s -S $FTP_OPTION -O " . $FTP_URL . $file;
exec($command);
// --- Test integrity
exec('unzip -t '.$storageDir.'/'.$file, $output, $integrity);
if ($integrity == 0 && file_exists($storageDir.'/'.$file)) {
$type = 'insee';
$ftpSize = filesize($storageDir.'/'.$file);
$ftpDate = date ("YmdHis", filemtime($storageDir.'/'.$file));
echo date('Y-m-d H:i:s') . " - Ecriture du fichier $storageDir/$file\n";
// --- Enregistrement dans la base de données
$data = array(
'type' => $type,
'file' => $file,
'directory' => $storageDir,
'ftpSize' => $ftpSize,
'ftpDate' => $ftpDate,
'dateInsert'=> date('YmdHis'),
);
if ($fileStmt->rowCount() == 0) {
try {
$conn->insert('sdv1.flux_insee', $data);
}
catch(\Doctrine\DBAL\DBALException $e) {
echo date('Y-m-d H:i:s') . " - Erreur insertion $file = ".$e->getMessage()."\n";
}
}
else {
try {
$conn->update('sdv1.flux_insee', $data, array('id' => $fileRow->id));
}
catch(\Doctrine\DBAL\DBALException $e) {
echo date('Y-m-d H:i:s') . " - Erreur update $file = ".$e->getMessage()."\n";
}
}
$unitExec++;
if ($execId !== null) {
$execRef->increment($execId, $unitExec);
}
}
else {
echo date('Y-m-d H:i:s') . " - Impossible de télécharger $file\n";
}
}
}
}
unlink('insee.lock');
if ($execId !== null) {
$execRef->total($execId, $unitInc);
$execRef->end($execId);
}
}
echo date('Y-m-d H:i:s') . " - Fin execution\n";