13.6.00 nettoyage de constantes inutiles liées à jsondb

Un quart de secondes entre deux tentatives
This commit is contained in:
Fred Tempez 2025-01-18 22:53:43 +01:00
parent 72a27d3ca7
commit 97fc8d13f0
2 changed files with 175 additions and 138 deletions

View File

@ -18,8 +18,6 @@ class JsonDb extends \Prowebcraft\Dot
protected $db = '';
protected $data = null;
protected $config = [];
// Tentative d'encodage après échec
const MAX_JSON_ENCODE_ATTEMPTS = 5;
// Tentative d'écriture après échec
const MAX_FILE_WRITE_ATTEMPTS = 5;
// Délais entre deux tentaives
@ -136,8 +134,8 @@ class JsonDb extends \Prowebcraft\Dot
}
$this->data = json_decode(file_get_contents($this->db), true);
if (!$this->data === null) {
throw new \InvalidArgumentException('Database file ' . $this->db
. ' contains invalid json object. Please validate or remove file');
throw new \InvalidArgumentException('Le fichier ' . $this->db
. ' contient des données invalides.');
}
}
return $this->data;
@ -175,8 +173,8 @@ class JsonDb extends \Prowebcraft\Dot
// Incrémente le compteur de tentatives
$attempt++;
// Attente
sleep(1);
// Attente 1/4 de seconde
usleep(0.25);
}
// Vérifie si l'écriture a échoué même après plusieurs tentatives

View File

@ -67,18 +67,9 @@ class common
// Valeurs possibles multiple de 10, 10 autorise 9 profils, 100 autorise 99 profils
const MAX_PROFILS = 10;
const MAX_FILE_WRITE_ATTEMPTS = 5;
/**
* Nombre maximal de tentatives d'encodage JSON
*/
const MAX_JSON_ENCODE_ATTEMPTS = 3;
/**
* Temps d'attente entre les tentatives en secondes
*/
const RETRY_DELAY_SECONDS = 1;
// Taille et rotation des journaux
const LOG_MAXSIZE = 4 * 1024 * 1024;
const LOG_MAXARCHIVE = 5;
public static $actions = [];
public static $coreModuleIds = [
@ -1249,7 +1240,6 @@ class common
}
return (file_exists('sitemap.xml') && file_exists('robots.txt'));
}
@ -1505,18 +1495,67 @@ class common
/**
* Journalisation
* Journalisation avec gestion de la taille maximale et compression
*/
public function saveLog($message = '')
{
// Journalisation
$dataLog = helper::dateUTF8('%Y%m%d', time(), self::$i18nUI) . ';' . helper::dateUTF8('%H:%M', time(), self::$i18nUI) . ';';
// Chemin du fichier journal
$logFile = self::DATA_DIR . 'journal.log';
// Vérifier la taille du fichier
if (file_exists($logFile) && filesize($logFile) > self::LOG_MAXSIZE) {
$this->rotateLogFile();
}
// Création de l'entrée de journal
$dataLog = helper::dateUTF8('%Y%m%d', time(), self::$i18nUI) . ';' .
helper::dateUTF8('%H:%M', time(), self::$i18nUI) . ';';
$dataLog .= helper::getIp($this->getData(['config', 'connect', 'anonymousIp'])) . ';';
$dataLog .= empty($this->getUser('id')) ? 'visitor;' : $this->getUser('id') . ';';
$dataLog .= $message ? $this->getUrl() . ';' . $message : $this->getUrl();
$dataLog .= PHP_EOL;
// Écriture dans le fichier si la journalisation est activée
if ($this->getData(['config', 'connect', 'log'])) {
$this->secure_file_put_contents(self::DATA_DIR . 'journal.log', $dataLog, FILE_APPEND);
file_put_contents($logFile, $dataLog, FILE_APPEND);
}
}
/**
* Gère la rotation et la compression des fichiers journaux
*/
private function rotateLogFile()
{
$logFile = self::DATA_DIR . 'journal.log';
// Décaler tous les fichiers d'archive existants
for ($i = self::LOG_MAXARCHIVE - 1; $i > 0; $i--) {
$oldFile = self::DATA_DIR . 'journal-' . $i . '.log.gz';
$newFile = self::DATA_DIR . 'journal-' . ($i + 1) . '.log.gz';
if (file_exists($oldFile)) {
if ($i == self::LOG_MAXARCHIVE - 1) {
unlink($oldFile); // Supprimer le plus ancien
} else {
rename($oldFile, $newFile);
}
}
}
// Compresser le fichier journal actuel
if (file_exists($logFile)) {
$gz = gzopen(self::DATA_DIR . 'journal-1.log.gz', 'w9');
$handle = fopen($logFile, 'r');
while (!feof($handle)) {
gzwrite($gz, fread($handle, 8192));
}
fclose($handle);
gzclose($gz);
// Créer un nouveau fichier journal vide
file_put_contents($logFile, '');
}
}