<?php
/* 
 * Surveillance des actions du webservice
 * Auteur : Romain Rebotier
 * Date : 27/07/2011
 */

require 'monitoring.class.php';

define("PATH_CONFIG", './config.ini');

//Gestion des paramètres en cas d'appel CLI
if (count($_GET) == 0 && $_SERVER['argc'] > 1) {
    $_GET['client'] = $_SERVER['argv'][1];
}

$clients = explode(",", $_GET['client']);

foreach ($clients as $client) {
    $globalError = false;
    $content = '<html><body><h3 style="padding:10px;background-color:#CDECE7;border:1px solid #9BD8D3;color:#999581;"><span style="color:#8ABCB8;">['.$client.']</span> Monitoring Agent SIGB ('.date("d/m/Y - H:i:s").')</h3><p><ul>';
    $monitoring = new monitoringWS(PATH_CONFIG);
    $configuration = $monitoring->tabConfig;

    if (!$configuration) exit('Configuration introuvable');
    $export_path = $_SERVER['CONTEXT_DOCUMENT_ROOT'].'/client/exportISO/';
    die($export_path);
    if (!file_exists($export_path.$client)) exit('Dossier '.$export_path.$client.' introuvable');
    if ($configuration['server']['active'] == 'T' && !file_exists($configuration['exports']['storage'])) exit('Dossier '.$configuration['exports']['storage'].' introuvable');

    //Vérification d'un lock dans les exports
    $returnLock = $monitoring->verifyLock($export_path.$client);
    if ($returnLock) {
        $globalError = true;
        $content .= '<li>Un problème avec les exports a été détecté : un fichier lock était présent depuis plus de 2 jours dans le dossier '.$export_path.' et a été supprimé</li>';
    }

    //Vérification des exports
    $returnExports = $monitoring->verifyExports($export_path.$client, 5, array('iso', 'xml', 'zip'));
    if ($returnExports) {
        $globalError = true;
        $content .= '<li>Un problème avec les exports a été détecté : il y a plus de 5 exports dans le dossier '.$export_path.' alors qu\'ils devraient être dans le DO</li>';
    }

    //Vérification des notices erronées à l'export
    $errorNotices = $monitoring->verifyErrorsNotices($export_path.$client.'/exports_failed.log');
    if ($errorNotices) {
        $globalError = true;
        $content .= '<li>Les notices suivantes n\'ont pas été exportées : '.$errorNotices.'--> Vérifier dans le SIGB l\'origine du problème et supprimer le fichier de log '.$export_path.'exports_failed.log</li>';
    }

    if ($configuration['server']['active'] == 'T') {
        //Vérification des fichiers dans le DO
        $returnExportsDo = $monitoring->verifyExports($configuration['exports']['storage'].'do', 5, array('data', 'info'));
        if ($returnExportsDo) {
            $globalError = true;
            $content .= '<li>Un problème dans le DO a été détecté : il y a plus de 5 exports en attente dans '.$configuration['exports']['storage'].'do</li>';
        }

        //Vérification des fichiers dans le QUEUE
        $returnExportsQueue = $monitoring->verifyExports($configuration['exports']['storage'].'queue', 5, array('xml', 'control'));
        if ($returnExportsQueue) {
            $globalError = true;
            $content .= '<li>Un problème dans le QUEUE a été détecté : il y a plus de 5 exports en attente dans '.$configuration['exports']['storage'].'queue</li>';
        }

        //Vérification des fichiers dans le QUEUE
        $returnExportsProgress = $monitoring->verifyExports($configuration['exports']['storage'].'in_progress', 5, array('xml', 'control'));
        if ($returnExportsProgress) {
            $globalError = true;
            $content .= '<li>Un problème dans le IN_PROGRESS a été détecté : il y a plus de 5 exports en attente dans '.$configuration['exports']['storage'].'in_progress</li>';
        }
    }

    //Vérification des tailles de log et création de nouveau si nécessaire
    $client_path = $_SERVER['CONTEXT_DOCUMENT_ROOT'].'/client/';
    $tabLogFiles = array($client_path.'logs/errors.log', $client_path.'logs/access.log', $export_path.$client.'/exports_full.log', $export_path.$client.'/exports_diff.log');
    if ($configuration['server']['active'] == 'T') $tabLogFiles = array_merge($tabLogFiles, array($configuration['server']['path'].'logs/errors.log', $configuration['server']['path'].'logs/access.log'));
    $returnLogs = $monitoring->rotateLog($tabLogFiles, $configuration['files']['max_filesize']);
    if ($returnLogs) {
        //Pas besoin de globalError car pas critique, le rotate log se fait tout seul
        $content .= '<li>Des logs ont été archivés car leur taille maximale ('.$configuration['files']['max_filesize'].') a été atteinte</li>';
    }

    $content .= '</ul></p><h5>Infos client</h5><p style="background-color:#F2F2F2;width:60%;border:1px solid black">'.$monitoring->infosClient().'</p></body></html>';

    if ($globalError) echo $monitoring->sendMail($client, $configuration['mail']['dest'], $content);
    else echo 'OK';
}

?>
