예제 #1
0
 /**
  * Search for item
  * Return all the items matching parameters if successful, false otherwise
  *
  * @param String $server Hostname
  * @param Integer $port Hostname Port
  * @param String $key Key to search
  * @param String $level Level of Detail
  * @param String $more More action
  *
  * @return array
  */
 function search($server, $port, $search, $level = false, $more = false)
 {
     $slabs = array();
     $items = false;
     # Executing command : stats
     if ($level == 'full' && ($result = $this->exec('stats', $server, $port))) {
         # Parsing result
         $result = $this->parse($result);
         $infinite = isset($result['time'], $result['uptime']) ? $result['time'] - $result['uptime'] : 0;
     }
     # Executing command : slabs stats
     if ($result = $this->exec('stats slabs', $server, $port)) {
         # Parsing result
         $result = $this->parse($result);
         unset($result['active_slabs']);
         unset($result['total_malloced']);
         # Indexing by slabs
         foreach ($result as $key => $value) {
             $key = preg_split('/:/', $key);
             $slabs[$key[0]] = true;
         }
     }
     # Exploring each slabs
     foreach ($slabs as $slab => $unused) {
         # Executing command : stats cachedump
         if ($result = $this->exec('stats cachedump ' . $slab . ' 0', $server, $port)) {
             # Parsing result
             preg_match_all('/^ITEM ((?:.*)' . preg_quote($search, '/') . '(?:.*)) \\[([0-9]*) b; ([0-9]*) s\\]\\r\\n/imU', $result, $matchs, PREG_SET_ORDER);
             foreach ($matchs as $item) {
                 # Search & Delete
                 if ($more == 'delete') {
                     $items[] = $item[1] . ' : ' . $this->delete($server, $port, $item[1]);
                     # Basic search
                 } else {
                     # Detail level
                     if ($level == 'full') {
                         $items[] = $item[1] . ' : [' . str_pad(Library_Data_Analysis::byteResize($item[2]), 7, ' ', STR_PAD_LEFT) . 'b, Expire : ' . ($item[3] == $infinite ? '∞' : Library_Data_Analysis::uptime($item[3] - time(), true)) . ']';
                     } else {
                         $items[] = $item[1];
                     }
                 }
             }
         }
         unset($slabs[$slab]);
     }
     if (is_array($items)) {
         sort($items);
     }
     return $items;
 }
예제 #2
0
         # Calculating query time length
         $actual[$name]['query_time'] = max((microtime(true) - $time) * 1000, 1);
     }
     # Analysing stats
     foreach ($_ini->cluster($cluster) as $name => $server) {
         # Making an alias @FIXME Used ?
         $server = $name;
         # Diff between old and new dump
         $stats[$server] = Library_Data_Analysis::diff($previous[$server], $actual[$server]);
     }
     # Making stats for each server
     foreach ($stats as $server => $array) {
         # Analysing request
         if (isset($stats[$server]['uptime']) && $stats[$server]['uptime'] > 0) {
             # Computing stats
             $stats[$server] = Library_Data_Analysis::stats($stats[$server]);
             # Because we make a diff on every key, we must reasign some values
             $stats[$server]['bytes_percent'] = sprintf('%.1f', $actual[$server]['bytes'] / $actual[$server]['limit_maxbytes'] * 100);
             $stats[$server]['bytes'] = $actual[$server]['bytes'];
             $stats[$server]['limit_maxbytes'] = $actual[$server]['limit_maxbytes'];
             $stats[$server]['curr_connections'] = $actual[$server]['curr_connections'];
             $stats[$server]['query_time'] = $actual[$server]['query_time'];
         }
     }
     # Saving new stats dump
     file_put_contents($file_path, serialize($actual));
     # Showing stats
     include 'View/LiveStats/Stats.phtml';
     break;
     # Default : No command
 # Default : No command
예제 #3
0
파일: index.php 프로젝트: nkeat12/dv
                $data = array();
                $data['stats'] = Library_Command_Factory::instance('stats_api')->stats($server['hostname'], $server['port']);
                $data['slabs'] = Library_Data_Analysis::slabs(Library_Command_Factory::instance('slabs_api')->slabs($server['hostname'], $server['port']));
                $stats = Library_Data_Analysis::merge($stats, $data['stats']);
                # Computing stats
                if (isset($data['slabs']['total_malloced'], $data['slabs']['total_wasted'])) {
                    $slabs['total_malloced'] += $data['slabs']['total_malloced'];
                    $slabs['total_wasted'] += $data['slabs']['total_wasted'];
                }
                $status[$name] = $data['stats'] != array() ? $data['stats']['version'] : '';
                $uptime[$name] = $data['stats'] != array() ? $data['stats']['uptime'] : '';
            }
        } elseif (isset($_GET['server']) && ($server = $_ini->server($_GET['server']))) {
            # Getting Stats & Slabs stats
            $stats = Library_Command_Factory::instance('stats_api')->stats($server['hostname'], $server['port']);
            $slabs = Library_Data_Analysis::slabs(Library_Command_Factory::instance('slabs_api')->slabs($server['hostname'], $server['port']));
            $settings = Library_Command_Factory::instance('stats_api')->settings($server['hostname'], $server['port']);
        }
        # Stats are well formed
        if ($stats !== false && $stats != array()) {
            # Analysis
            $stats = Library_Data_Analysis::stats($stats);
            include 'View/Stats/Stats.tpl';
        } else {
            include 'View/Stats/Error.tpl';
        }
        unset($stats);
        break;
}
# Showing footer
include 'View/Footer.tpl';