A super easy PHP Framework for web development!
https://github.com/exacti/phacil-framework
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
2.7 KiB
96 lines
2.7 KiB
11 months ago
|
<?php
|
||
|
|
||
|
require __DIR__.'/vendor/autoload.php';
|
||
|
|
||
|
$server = 'tcp://127.0.0.1:6379';
|
||
|
$db = 0;
|
||
|
$limit = 20;
|
||
|
array_shift($argv);
|
||
|
while ($arg = array_shift($argv)) {
|
||
|
switch($arg) {
|
||
|
case '--db': $db = intval(array_shift($argv));
|
||
|
break;
|
||
|
case '--server': $server = array_shift($argv);
|
||
|
break;
|
||
|
case '--limit': $limit = array_shift($argv);
|
||
|
break;
|
||
|
default: die("Unrecognized argument '$arg'.\nUsage: path/to/stats.php [--server tcp://127.0.0.1:6378] [--db 0] [--limit 20]\n");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$client = new Credis_Client($server);
|
||
|
$client->select($db);
|
||
|
|
||
|
$tagStats = array();
|
||
|
foreach ($client->sMembers(Cm_Cache_Backend_Redis::SET_TAGS) as $tag) {
|
||
|
if (preg_match('/^\w{3}_MAGE$/', $tag)) {
|
||
|
continue;
|
||
|
}
|
||
|
$ids = $client->sMembers(Cm_Cache_Backend_Redis::PREFIX_TAG_IDS . $tag);
|
||
|
$tagSizes = array();
|
||
|
$missing = 0;
|
||
|
foreach ($ids as $id) {
|
||
|
$data = $client->hGet(Cm_Cache_Backend_Redis::PREFIX_KEY.$id, Cm_Cache_Backend_Redis::FIELD_DATA);
|
||
|
$size = strlen($data);
|
||
|
if ($size) {
|
||
|
$tagSizes[] = $size;
|
||
|
} else {
|
||
|
$missing++;
|
||
|
}
|
||
|
}
|
||
|
if ($tagSizes) {
|
||
|
$tagStats[$tag] = array(
|
||
|
'count' => count($tagSizes),
|
||
|
'min' => min($tagSizes),
|
||
|
'max' => max($tagSizes),
|
||
|
'avg size' => array_sum($tagSizes) / count($tagSizes),
|
||
|
'total size' => array_sum($tagSizes),
|
||
|
'missing' => $missing,
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function _format_bytes($a_bytes)
|
||
|
{
|
||
|
if ($a_bytes < 1024) {
|
||
|
return $a_bytes .' B';
|
||
|
} elseif ($a_bytes < 1048576) {
|
||
|
return round($a_bytes / 1024, 4) .' KB';
|
||
|
} else {
|
||
|
return round($a_bytes / 1048576, 4) . ' MB';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function printStats($data, $key, $limit)
|
||
|
{
|
||
|
echo "Top $limit tags by ".ucwords($key)."\n";
|
||
|
echo "------------------------------------------------------------------------------------\n";
|
||
|
$sort = array();
|
||
|
foreach ($data as $tag => $stats) {
|
||
|
$sort[$tag] = $stats[$key];
|
||
|
}
|
||
|
array_multisort($sort, SORT_DESC, $data);
|
||
|
$i = 0;
|
||
|
$fmt = "%-40s| %-8s| %-15s| %-15s\n";
|
||
|
printf($fmt, 'Tag', 'Count', 'Avg Size', 'Total Size');
|
||
|
foreach ($data as $tag => $stats) {
|
||
|
$tag = substr($tag, 4);
|
||
|
if (++$i > $limit) {
|
||
|
break;
|
||
|
}
|
||
|
$avg = _format_bytes($stats['avg size']);
|
||
|
$total = _format_bytes($stats['total size']);
|
||
|
printf($fmt, $tag, $stats['count'], $avg, $total);
|
||
|
}
|
||
|
echo "\n";
|
||
|
}
|
||
|
|
||
|
// Top 20 by total size
|
||
|
printStats($tagStats, 'total size', $limit);
|
||
|
|
||
|
// Top 20 by average size
|
||
|
printStats($tagStats, 'avg size', $limit);
|
||
|
|
||
|
// Top 20 by count
|
||
|
printStats($tagStats, 'count', $limit);
|