v1.6.28 : drill-down IP par AS dans stats pays, suppression Répartition par réseau
- Admin stats : clic sur un réseau AS affiche les IPs avec mini sparkline 14 jours + articles/livres consultés - AccessLogParser : calcul ip_data (daily + top paths) inclus dans le cache stats - Suppression du tableau statique "Répartition par réseau" (fusionné dans accordéon pays) - PHP-CS-Fixer appliqué sur l'ensemble des fichiers modifiés Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2738,11 +2738,25 @@ switch ($action) {
|
||||
$topIps = array_slice($accessStats['ips'], 0, 200, true);
|
||||
$asnMap = (new AsnLookup())->batchLookup(array_keys($topIps));
|
||||
|
||||
$ipData = [];
|
||||
foreach ($accessStats['ips_by_day'] ?? [] as $ip => $daily) {
|
||||
$info = $asnMap[$ip] ?? ['asn' => '', 'name' => '?', 'country' => ''];
|
||||
$ipData[$ip] = [
|
||||
'hits' => $topIps[$ip] ?? (int) array_sum($daily),
|
||||
'asn' => $info['asn'],
|
||||
'name' => $info['name'],
|
||||
'country' => $info['country'],
|
||||
'daily' => $daily,
|
||||
'paths' => $accessStats['ip_top_paths'][$ip] ?? [],
|
||||
];
|
||||
}
|
||||
|
||||
$statsRaw = [
|
||||
'readable' => $accessParser->isReadable(),
|
||||
'books' => $tParser->top($cutoff14, 20, ['/book/']),
|
||||
'as' => AsnLookup::aggregateByAs($topIps, $asnMap),
|
||||
'pages_by_day' => $accessStats['pages_by_day'] ?? [],
|
||||
'ip_data' => $ipData,
|
||||
];
|
||||
@file_put_contents($statsCacheFile, json_encode($statsRaw));
|
||||
}
|
||||
@@ -2752,6 +2766,7 @@ switch ($action) {
|
||||
$adminData['stats_as_groups'] = AsnLookup::applyGroups($statsRaw['as'], asGroups());
|
||||
$adminData['as_groups'] = asGroups();
|
||||
$adminData['stats_pages_by_day'] = $statsRaw['pages_by_day'] ?? [];
|
||||
$adminData['stats_ip_data'] = $statsRaw['ip_data'] ?? [];
|
||||
}
|
||||
|
||||
if ($tab === 'categories') {
|
||||
|
||||
Reference in New Issue
Block a user