HEX
Server: Apache
System: Linux msm5694.mjhst.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: camjab_ssh (1000)
PHP: 5.3.29
Disabled: NONE
Upload Files
File: /home/httpd/html/xdudes.com/admin/memcache.functions.php
<?php

/*
  +----------------------------------------------------------------------+
  | PHP Version 5                                                        |
  +----------------------------------------------------------------------+
  | Copyright (c) 1997-2012 The PHP Group                                |
  +----------------------------------------------------------------------+
  | This source file is subject to version 3.0 of the PHP license,       |
  | that is bundled with this package in the file LICENSE, and is        |
  | available through the world-wide-web at the following url:           |
  | http://www.php.net/license/3_0.txt.                                  |
  | If you did not receive a copy of the PHP license and are unable to   |
  | obtain it through the world-wide-web, please send a note to          |
  | license@php.net so we can mail you a copy immediately.               |
  +----------------------------------------------------------------------+
  | Initial author:   Harun Yayli <harunyayli at gmail.com>              |
  | Modifications by: Artur Ejsmont http://artur.ejsmont.org             |
  |                   Till Klampaeckel <till@php.net>                    |
  +----------------------------------------------------------------------+
 */

if (!isset($VERSION)) {
    echo "Not allowed.";
    exit(1);
}

// create graphics
//
function graphics_avail() {
    return extension_loaded('gd');
}

function bsize($s) {
    foreach (array('', 'K', 'M', 'G') as $i => $k) {
        if ($s < 1024)
            break;
        $s/=1024;
    }
    return sprintf("%5.1f %sBytes", $s, $k);
}

/**
 * create menu entry
 *
 * @return string
 */
function menu_entry($ob, $title) {
    $PHP_SELF = getUrl();
    if ($ob == $_GET['op']) {
        return "<li class=\"active\"><a href=\"{$PHP_SELF}&op={$ob}\">{$title}</a></li>";
    }
    return "<li><a href=\"{$PHP_SELF}&op={$ob}\">{$title}</a></li>";
}

/**
 * Print the header when we run stand-alone.
 *
 * @return void
 */
function getHeader() {

    $jq_core = JQ_CORE;
    $jq_ts = JQ_TABLESORT;
    $base_url = BASE_URL;
    $PHP_SELF = getUrl();

    $header = <<<EOT
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us">
<head><title>MEMCACHE INFO</title>

<link rel="stylesheet" href="{$base_url}js/style.css" type="text/css" />
<link rel="stylesheet" href="{$base_url}js/vtip/css/vtip.css" type="text/css" />

<script type="text/javascript" src="{$jq_core}"></script>
<script type="text/javascript" src="{$jq_ts}"></script>
<script type="text/javascript" src="{$base_url}js/vtip/vtip-min.js"></script>

<script type="text/javascript">
    function must_confirm(txt, link){
        if( confirm(txt) == true ){
            document.location.href = link;
            return true;
        }else{
            return false;
        }
    }
    $(document).ready(function(){
        $.tablesorter.defaults.widgets = ['zebra'];
        $('#slabStats').tablesorter( {sortList: [[0,0], [1,0]]} );
    });

/* console.debug(123); */
</script>

</head>
<body>
<div class="container">
    <div class="navbar navbar-fixed-top">
        <div class="navbar-inner">
            <div class="container">
                <a class="brand" href="{$PHP_SELF}">Memcache stats v0.X</a>
                <ul class="nav pull-right">
                    <li><a href="http://github.com/lagged/memcache.php">Github</a></li>
                    <li><a href="http://artur.ejsmont.org">Arthur Ejsmont</a></li>
                    <li><a href="http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/">Original memcache.php website</a></li>
                </ul>
            </div>
        </div>
    </div>
EOT;

    return $header;
}

function getFooter() {
    $footer = '</div>
    </body>
</html>
';

    return $footer;
}

function getMenu() {
    $PHP_SELF = getUrl();
    echo '<ul class="navMemcached tabs custom">';
    if ($_GET['op'] != 4) {
        echo <<<EOB
<li><a href="$PHP_SELF&op={$_GET['op']}" class="tab">Refresh Stats</a></li>
EOB;
    } else {
        echo <<<EOB
    <li><a href="$PHP_SELF&op=2}" class="tab">Back</a></li>
EOB;
    }
    echo menu_entry(1, 'View Host Stats'),
    menu_entry(2, 'Variables'),
    menu_entry(8, 'Slabs');

    echo <<<EOB
	</ul>
EOB;
}

if (!isset($VERSION)) {
    echo "Not allowed.";
    exit(1);
}

///////////MEMCACHE FUNCTIONS /////////////////////////////////////////////////////////////////////

/**
 * Return the URL to this script so we can
 * adjust it via configuration.
 *
 * @return string
 */
function getUrl() {
    $url = MEMCACHE_SCRIPT;
    if (substr($url, -1) != '?') {
        $url .= '?';
    }
    return $url;
}

function sendMemcacheCommands($command) {
    $result = array();

    foreach ($GLOBALS['MEMCACHE_SERVERS'] as $server) {
        list($host, $port) = explode(':', $server);
        $result[$server] = sendMemcacheCommand($host, $port, $command);
    }
    return $result;
}

function sendMemcacheCommand($server, $port, $command) {

    $s = @fsockopen($server, $port);
    if (!$s) {
        die("Cant connect to:" . $server . ':' . $port);
    }

    fwrite($s, $command . "\r\n");

    $buf = '';
    while ((!feof($s))) {
        $buf .= fgets($s, 256);
        if (strpos($buf, "END\r\n") !== false) { // stat says end
            break;
        }
        if (strpos($buf, "DELETED\r\n") !== false || strpos($buf, "NOT_FOUND\r\n") !== false) { // delete says these
            break;
        }
        if (strpos($buf, "OK\r\n") !== false) { // flush_all says ok
            break;
        }
        if (strpos($buf, "RESET\r\n") !== false) { // reset stats ok
            break;
        }
        if (strpos($buf, "VERSION ") !== false) { // version answer
            break;
        }
    }
    fclose($s);
    return parseMemcacheResults($buf);
}

function parseMemcacheResults($str) {
    $res = array();
    $lines = explode("\r\n", $str);
    $cnt = count($lines);
    for ($i = 0; $i < $cnt; $i++) {
        $line = $lines[$i];
        $l = explode(' ', $line, 3);
        if (count($l) == 3) {
            $res[$l[0]][$l[1]] = $l[2];
            if ($l[0] == 'VALUE') { // next line is the value
                $res[$l[0]][$l[1]] = array();
                list ($flag, $size) = explode(' ', $l[2]);
                $res[$l[0]][$l[1]]['stat'] = array('flag' => $flag, 'size' => $size);
                $res[$l[0]][$l[1]]['value'] = $lines[++$i];
            }
        } elseif ($l[0] == 'VERSION') {
            return $l[1];
        } elseif ($line == 'DELETED' || $line == 'NOT_FOUND' || $line == 'OK' || $line == 'RESET') {
            return $line;
        }
    }
    return $res;
}

function dumpCacheSlab($server, $slabId, $limit) {
    list($host, $port) = explode(':', $server);
    $resp = sendMemcacheCommand($host, $port, 'stats cachedump ' . $slabId . ' ' . $limit);
    return $resp;
}

function getAllSlabStats() {
    $entries = sendMemcacheCommands('stats slabs');
    $slabs = array();
    foreach ($entries as $server => $stats) {
        $slabs[$server] = array();
        if (isset($stats['STAT'])) {
            foreach ($stats['STAT'] as $keyinfo => $value) {
                if (preg_match('/(\d+?)\:(.+?)$/', $keyinfo, $matches)) {
                    $slabs[$server][$matches[1]][$matches[2]] = $value;
                }
            }
        }
    }
    return $slabs;
}

function flushStats($server) {
    list($host, $port) = explode(':', $server);
    $resp = sendMemcacheCommand($host, $port, 'stats reset');
    return $resp;
}

function getMemcacheVersion() {
    $entries = sendMemcacheCommands('version');
    return $entries;
}

function flushServer($server) {
    return;

    list($host, $port) = explode(':', $server);
    $resp = sendMemcacheCommand($host, $port, 'flush_all');
    return $resp;
}

function getCacheItems() {
    $items = sendMemcacheCommands('stats items');
    $serverItems = array();
    $totalItems = array();
    foreach ($items as $server => $itemlist) {
        $serverItems[$server] = array();
        $totalItems[$server] = 0;
        if (!isset($itemlist['STAT'])) {
            continue;
        }

        $iteminfo = $itemlist['STAT'];

        foreach ($iteminfo as $keyinfo => $value) {
            if (preg_match('/items\:(\d+?)\:(.+?)$/', $keyinfo, $matches)) {
                $serverItems[$server][$matches[1]][$matches[2]] = $value;
                if ($matches[2] == 'number') {
                    $totalItems[$server] +=$value;
                }
            }
        }
    }
    return array('items' => $serverItems, 'counts' => $totalItems);
}

function getMemcacheStats($total = true) {
    $resp = sendMemcacheCommands('stats');
    if ($total) {
        $res = array();
        foreach ($resp as $server => $r) {
            foreach ($r['STAT'] as $key => $row) {
                if (!isset($res[$key])) {
                    $res[$key] = null;
                }
                switch ($key) {
                    case 'pid':
                        $res['pid'][$server] = $row;
                        break;
                    case 'uptime':
                        $res['uptime'][$server] = $row;
                        break;
                    case 'time':
                        $res['time'][$server] = $row;
                        break;
                    case 'version':
                        $res['version'][$server] = $row;
                        break;
                    case 'pointer_size':
                        $res['pointer_size'][$server] = $row;
                        break;
                    case 'rusage_user':
                        $res['rusage_user'][$server] = $row;
                        break;
                    case 'rusage_system':
                        $res['rusage_system'][$server] = $row;
                        break;
                    case 'curr_items':
                        $res['curr_items']+=$row;
                        break;
                    case 'total_items':
                        $res['total_items']+=$row;
                        break;
                    case 'bytes':
                        $res['bytes']+=$row;
                        break;
                    case 'curr_connections':
                        $res['curr_connections']+=$row;
                        break;
                    case 'total_connections':
                        $res['total_connections']+=$row;
                        break;
                    case 'connection_structures':
                        $res['connection_structures']+=$row;
                        break;
                    case 'cmd_get':
                        $res['cmd_get']+=$row;
                        break;
                    case 'cmd_set':
                        $res['cmd_set']+=$row;
                        break;
                    case 'get_hits':
                        $res['get_hits']+=$row;
                        break;
                    case 'get_misses':
                        $res['get_misses']+=$row;
                        break;
                    case 'evictions':
                        $res['evictions']+=$row;
                        break;
                    case 'bytes_read':
                        $res['bytes_read']+=$row;
                        break;
                    case 'bytes_written':
                        $res['bytes_written']+=$row;
                        break;
                    case 'limit_maxbytes':
                        $res['limit_maxbytes']+=$row;
                        break;
                    case 'threads':
                        $res['rusage_system'][$server] = $row;
                        break;
                }
            }
        }
        return $res;
    }
    return $resp;
}

function fill_box($im, $x, $y, $w, $h, $color1, $color2, $text = '', $placeindex = '') {
    global $col_black;
    $x1 = $x + $w - 1;
    $y1 = $y + $h - 1;

    imagerectangle($im, $x, $y1, $x1 + 1, $y + 1, $col_black);
    if ($y1 > $y)
        imagefilledrectangle($im, $x, $y, $x1, $y1, $color2);
    else
        imagefilledrectangle($im, $x, $y1, $x1, $y, $color2);
    imagerectangle($im, $x, $y1, $x1, $y, $color1);
    if ($text) {
        if ($placeindex > 0) {

            if ($placeindex < 16) {
                $px = 5;
                $py = $placeindex * 12 + 6;
                imagefilledrectangle($im, $px + 90, $py + 3, $px + 90 - 4, $py - 3, $color2);
                imageline($im, $x, $y + $h / 2, $px + 90, $py, $color2);
                imagestring($im, 2, $px, $py - 6, $text, $color1);
            } else {
                if ($placeindex < 31) {
                    $px = $x + 40 * 2;
                    $py = ($placeindex - 15) * 12 + 6;
                } else {
                    $px = $x + 40 * 2 + 100 * intval(($placeindex - 15) / 15);
                    $py = ($placeindex % 15) * 12 + 6;
                }
                imagefilledrectangle($im, $px, $py + 3, $px - 4, $py - 3, $color2);
                imageline($im, $x + $w, $y + $h / 2, $px, $py, $color2);
                imagestring($im, 2, $px + 2, $py - 6, $text, $color1);
            }
        } else {
            imagestring($im, 4, $x + 5, $y1 - 16, $text, $color1);
        }
    }
}

function fill_arc($im, $centerX, $centerY, $diameter, $start, $end, $color1, $color2, $text = '', $placeindex = 0) {
    $r = $diameter / 2;
    $w = deg2rad((360 + $start + ($end - $start) / 2) % 360);


    if (function_exists("imagefilledarc")) {
        // exists only if GD 2.0.1 is avaliable
        imagefilledarc($im, $centerX + 1, $centerY + 1, $diameter, $diameter, $start, $end, $color1, IMG_ARC_PIE);
        imagefilledarc($im, $centerX, $centerY, $diameter, $diameter, $start, $end, $color2, IMG_ARC_PIE);
        imagefilledarc($im, $centerX, $centerY, $diameter, $diameter, $start, $end, $color1, IMG_ARC_NOFILL | IMG_ARC_EDGED);
    } else {
        imagearc($im, $centerX, $centerY, $diameter, $diameter, $start, $end, $color2);
        imageline($im, $centerX, $centerY, $centerX + cos(deg2rad($start)) * $r, $centerY + sin(deg2rad($start)) * $r, $color2);
        imageline($im, $centerX, $centerY, $centerX + cos(deg2rad($start + 1)) * $r, $centerY + sin(deg2rad($start)) * $r, $color2);
        imageline($im, $centerX, $centerY, $centerX + cos(deg2rad($end - 1)) * $r, $centerY + sin(deg2rad($end)) * $r, $color2);
        imageline($im, $centerX, $centerY, $centerX + cos(deg2rad($end)) * $r, $centerY + sin(deg2rad($end)) * $r, $color2);
        imagefill($im, $centerX + $r * cos($w) / 2, $centerY + $r * sin($w) / 2, $color2);
    }
    if ($text) {
        if ($placeindex > 0) {
            imageline($im, $centerX + $r * cos($w) / 2, $centerY + $r * sin($w) / 2, $diameter, $placeindex * 12, $color1);
            imagestring($im, 4, $diameter, $placeindex * 12, $text, $color1);
        } else {
            imagestring($im, 4, $centerX + $r * cos($w) / 2, $centerY + $r * sin($w) / 2, $text, $color1);
        }
    }
}

?>