release 1.6.3 : UpdateChecker sudo + cache stats 60 s #73

Merged
cedricAbonnel merged 4 commits from dev into main 2026-05-15 14:12:29 +00:00
Showing only changes of commit ea950f2c25 - Show all commits
+24 -11
View File
@@ -2551,17 +2551,30 @@ switch ($action) {
} }
require_once BASE_PATH . '/src/AccessLogParser.php'; require_once BASE_PATH . '/src/AccessLogParser.php';
require_once BASE_PATH . '/src/AsnLookup.php'; require_once BASE_PATH . '/src/AsnLookup.php';
$accessParser = new AccessLogParser('/var/log/apache2', apacheAccessLog());
$accessStats = $accessParser->stats(); $statsCacheFile = DATA_PATH . '/.stats_cache.json';
$adminData['stats_readable'] = $accessParser->isReadable(); $statsRaw = null;
$adminData['stats_pages'] = array_slice($accessStats['pages'], 0, 30, true); if (file_exists($statsCacheFile) && (time() - filemtime($statsCacheFile)) < 60) {
$adminData['stats_books'] = array_slice($accessStats['books'], 0, 20, true); $statsRaw = json_decode((string) file_get_contents($statsCacheFile), true) ?: null;
// Lookup AS pour les top 200 IPs }
$topIps = array_slice($accessStats['ips'], 0, 200, true); if ($statsRaw === null) {
$asnMap = (new AsnLookup())->batchLookup(array_keys($topIps)); $accessParser = new AccessLogParser('/var/log/apache2', apacheAccessLog());
$asList = AsnLookup::aggregateByAs($topIps, $asnMap); $accessStats = $accessParser->stats();
$adminData['stats_as'] = $asList; $topIps = array_slice($accessStats['ips'], 0, 200, true);
$adminData['stats_as_groups'] = AsnLookup::applyGroups($asList, asGroups()); $asnMap = (new AsnLookup())->batchLookup(array_keys($topIps));
$statsRaw = [
'readable' => $accessParser->isReadable(),
'pages' => array_slice($accessStats['pages'], 0, 30, true),
'books' => array_slice($accessStats['books'], 0, 20, true),
'as' => AsnLookup::aggregateByAs($topIps, $asnMap),
];
@file_put_contents($statsCacheFile, json_encode($statsRaw));
}
$adminData['stats_readable'] = $statsRaw['readable'];
$adminData['stats_pages'] = $statsRaw['pages'];
$adminData['stats_books'] = $statsRaw['books'];
$adminData['stats_as'] = $statsRaw['as'];
$adminData['stats_as_groups'] = AsnLookup::applyGroups($statsRaw['as'], asGroups());
$adminData['as_groups'] = asGroups(); $adminData['as_groups'] = asGroups();
} }