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.
		
		
		
		
		
			
		
			
				
					
					
						
							95 lines
						
					
					
						
							2.7 KiB
						
					
					
				
			
		
		
	
	
							95 lines
						
					
					
						
							2.7 KiB
						
					
					
				<?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);
 | 
						|
 |