130 lines
4.0 KiB
PHP
130 lines
4.0 KiB
PHP
<?php
|
|
namespace nulib\tools;
|
|
|
|
use Exception;
|
|
use nulib\app\cli\Application;
|
|
use nulib\ext\yaml;
|
|
use nulib\cache\CacheFile;
|
|
use nulib\os\path;
|
|
use nulib\output\msg;
|
|
|
|
class NucacheApp extends Application {
|
|
const ACTION_READ = 10, ACTION_INFOS = 20, ACTION_CLEAN = 30;
|
|
const ACTION_UPDATE = 40, ACTION_UPDATE_ADD = 41, ACTION_UPDATE_SUB = 42, ACTION_UPDATE_SET = 43;
|
|
|
|
const ARGS = [
|
|
"merge" => parent::ARGS,
|
|
"purpose" => "gestion de fichiers cache",
|
|
["-r", "--read", "name" => "action", "value" => self::ACTION_READ,
|
|
"help" => "Afficher le contenu d'un fichier cache",
|
|
],
|
|
["-i", "--infos", "name" => "action", "value" => self::ACTION_INFOS,
|
|
"help" => "Afficher des informations sur le fichier cache",
|
|
],
|
|
["-k", "--clean", "name" => "action", "value" => self::ACTION_CLEAN,
|
|
"help" => "Supprimer le fichier cache s'il a expiré",
|
|
],
|
|
["-a", "--add-duration", "args" => 1,
|
|
"action" => [null, "->setActionUpdate", self::ACTION_UPDATE_ADD],
|
|
"help" => "Ajouter le nombre de secondes spécifié à la durée du cache",
|
|
],
|
|
["-b", "--sub-duration", "args" => 1,
|
|
"action" => [null, "->setActionUpdate", self::ACTION_UPDATE_SUB],
|
|
"help" => "Enlever le nombre de secondes spécifié à la durée du cache",
|
|
],
|
|
#XXX pas encore implémenté
|
|
//["-s", "--set-duration", "args" => 1,
|
|
// "action" => [null, "->setActionUpdate", self::ACTION_UPDATE_SET],
|
|
// "help" => "Mettre à jour la durée du cache à la valeur spécifiée",
|
|
//],
|
|
];
|
|
|
|
protected $action = self::ACTION_READ;
|
|
|
|
protected $updateAction, $updateDuration;
|
|
|
|
protected $args;
|
|
|
|
function setActionUpdate(int $action, $updateDuration): void {
|
|
$this->action = self::ACTION_UPDATE;
|
|
switch ($action) {
|
|
case self::ACTION_UPDATE_SUB:
|
|
$this->updateAction = CacheFile::UPDATE_SUB;
|
|
break;
|
|
case self::ACTION_UPDATE_SET:
|
|
$this->updateAction = CacheFile::UPDATE_SET;
|
|
break;
|
|
case self::ACTION_UPDATE_ADD:
|
|
$this->updateAction = CacheFile::UPDATE_ADD;
|
|
break;
|
|
}
|
|
$this->updateDuration = $updateDuration;
|
|
}
|
|
|
|
protected function findCaches(string $dir, ?array &$files): void {
|
|
foreach (glob("$dir/*") as $file) {
|
|
if (is_dir($file)) {
|
|
$this->findCaches($file, $files);
|
|
} elseif (is_file($file) && fnmatch("*.cache", $file)) {
|
|
$files[] = $file;
|
|
}
|
|
}
|
|
}
|
|
|
|
function main() {
|
|
$files = [];
|
|
foreach ($this->args as $arg) {
|
|
if (is_dir($arg)) {
|
|
$this->findCaches($arg, $files);
|
|
} elseif (is_file($arg)) {
|
|
$files[] = $arg;
|
|
} else {
|
|
msg::warning("$arg: fichier introuvable");
|
|
}
|
|
}
|
|
$showSection = count($files) > 1;
|
|
foreach ($files as $file) {
|
|
switch ($this->action) {
|
|
case self::ACTION_READ:
|
|
if ($showSection) msg::section($file);
|
|
$cache = new CacheFile($file, [
|
|
"readonly" => true,
|
|
"duration" => "INF",
|
|
"override_duration" => true,
|
|
]);
|
|
yaml::dump($cache->get());
|
|
break;
|
|
case self::ACTION_INFOS:
|
|
if ($showSection) msg::section($file);
|
|
$cache = new CacheFile($file, [
|
|
"readonly" => true,
|
|
]);
|
|
yaml::dump($cache->getInfos());
|
|
break;
|
|
case self::ACTION_CLEAN:
|
|
msg::action(path::ppath($file));
|
|
$cache = new CacheFile($file);
|
|
try {
|
|
if ($cache->deleteExpired()) msg::asuccess("fichier supprimé");
|
|
else msg::adone("fichier non expiré");
|
|
} catch (Exception $e) {
|
|
msg::afailure($e);
|
|
}
|
|
break;
|
|
case self::ACTION_UPDATE:
|
|
msg::action(path::ppath($file));
|
|
$cache = new CacheFile($file);
|
|
try {
|
|
$cache->updateDuration($this->updateDuration, $this->updateAction);
|
|
msg::asuccess("fichier mis à jour");
|
|
} catch (Exception $e) {
|
|
msg::afailure($e);
|
|
}
|
|
break;
|
|
default:
|
|
self::die("$this->action: action non implémentée");
|
|
}
|
|
}
|
|
}
|
|
}
|