Rate this script:  I Love it  /   I Hate it

terminal *live* text graph in php, unix terminal


Code


+local mysql: 565 queries/sec 189----------------------+
 |                                                      |
 |                                       %              |
 |                                       %              |
 |                                       %              |
 |                                       %              |
 |                                       %              |
 |                   %                   %              |
 | %   %%   %% % %  %%%%%                % %%        %% |
 |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%% %%%%%%  %%%%%|
 |%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%|
+-------------------------------------high: 100, low: 1+

<?
// see *EDIT* below for one other change you will need to make
function DatabaseConnect() {
    if (!($mylink = mysql_connect("localhost", "root", ""))){
            print  "ERROR";
            exit;
        }//fi
        mysql_select_db("test") or die(mysql_error());
}// end function
DatabaseConnect();

/*
    remove flatspots in array..
    areas where the data does not change.
    this is good for data that only changes during certain times
    and the dead time has no bearing on the changes.
    -joeldg
*/

function remove_flatspots($arr, $pkey=true){
    while(list($key,$val) = each($arr)){
        if($val <> $oldval){
            if($pkey == true){
                $ret[$key] = $val;
            }else{
                $ret[] = $val;
            }
        }
        $oldval = $val;
    }
    return $ret;
}
/*
    take two arrays, remove the flatspots in the first.
    return an array containing the first with it's corresponding
    values in the second array..
    -joeldg
*/

function dual_remove_flatspots($arr1, $arr2, $pkey=true){
    while(list($key,$val) = each($arr1)){
        if($val <> $oldval){
            if($pkey == true){
                $ret[0][$key] = $val;
                $ret[1][$key] = $arr2[$key];
            }else{
                $ret[0][] = $val;
                $ret[1][] = $arr2[$key];
            }
        }
        $oldval = $val;
    }
    return $ret;
}

// return lowest val of array -joeldg
function least($inarr){
    $ret = $inarr[0];
    for($i=0;$i<count($inarr);$i++){
        if(intval($inarr[$i]) <= $ret){ $ret = $inarr[$i]; }
    }//rof
    return $ret;
}// end function
// return higest val of array -joeldg
function most($inarr){
    while(list($key,$val) = each($inarr)){
        if ($ret==""){$ret = $val;}
        if($ret <= intval($val)){ $ret = $val; }
    }//rof
    return $ret;
}// end function
/*
        array normalize function
        -joeldg
*/

function normalize($arr,$LO=0.01,$HI=0.99)
{
  $Min = +2147483647;
  $Max = -2147483647;
  for ($a=0; $a<count($arr); $a++) {
    $Min = min($Min, $arr[$a]);
    $Max = max($Max, $arr[$a]);
  }
  $Mean = 0;
  for ($a=0; $a<count($arr); $a++) {
    $div = $Max-$Min;
    if($div == 0){$div = 1;}
    $arr [$a] = (($arr[$a]-$Min) / ($div)) * ($HI-$LO) + $LO;
    $Mean += $arr[$a] / count($arr);
  }
  return $arr;
}
/*
        array normalize function, preserve key
        -joeldg
*/

function normalizekey($arr,$LO=0.01,$HI=0.99)
{
  $Min = +2147483647;
  $Max = -2147483647;
  while(list($key, $a)=each($arr)){
    $Min = min($Min, $arr[$key]);
    $Max = max($Max, $arr[$key]);
  }
  reset($arr);
  $Mean = 0;
  while(list($key,$a)=each($arr)){
    $div = $Max-$Min;
    if($div == 0){$div = 1;}
    $arr [$key] = (($arr[$key]-$Min) / ($div)) * ($HI-$LO) + $LO;
    $Mean += $arr[$key] / count($arr);
  }
  $retarr[0] = $arr;
  $retarr[1][0]=$Max;
  $retarr[1][1]=$Min;
 
  return $retarr;
}

/*
display a textual graph in an xterm.
written because I want to view timeseries data and not have to jump over to a browser.
*/

#
#    transform an array point to a position within the total
#
function point2arr($point, $total=20){
    $p = round($point);
    for($a=0;$a<$total;$a++){
        if($a <= $p){
            $ret[] = "%";#chr(127);
        }else{
            $ret[] = " ";
        }
    }
    return $ret;
}
// get the width and height of a unix terminal
function get_term_specs(){
    $b = `stty -a`;
    $c = explode("\n",$b);
    $d = explode(";", $c[0]);
    $f = explode(" ",$d[1]);
    $ret[h] = $f[2];
    $f = explode(" ",$d[2]);
    $ret[w] = intval($f[2]);   
    return $ret;
}

function genchars($char, $total, $title="", $echo=false, $way=STR_PAD_RIGHT){
    $ret .= "+";
    #if($echo){ echo termcolored("+", WHITE); }
    #if(!$echo){ $ret .= "+"; }
        #$back = termcolored($title, "YELLOW");
        $back = $title;
        $ret .= str_pad($back, $total+strlen($back)-strlen($title)-2, $char, $way);
    #if(!$echo){ $ret .= "+"; }
    #if($echo){ echo termcolored("+", WHITE); }
    $ret .= "+";
    return $ret;
}
// vertical graph
function print_vert_graph($arr, $total=20, $border="-"){
    $arr = normalize($arr, 0, $total);
    $out[] = genchars($border, $total);
    for($a=0;$a<count($arr);$a++){
        $out[] = point2arr($arr[$a], $total);
    }
    $out[] = genchars($border, $total);
    for($a=0;$a<count($out);$a++){
        for($b=0;$b<count($out[$a]);$b++){
            echo $out[$a][$b];
        }
        echo "\n";
    }
   
}
// transform matrix
function transformmat($arr,$total=20){
    $width = count($arr[0]);
    $c=$width-1;
    for($w=0;$w<$width;$w++){
        for($a=0;$a<count($arr);$a++){
            $ret[$c][$a] = $arr[$a][$w];
        }
        $c--;
    }
    return $ret;
}
// horizontal graphing
function print_horz_graph($arr, $total=20, $border="-", $title="", $w=""){
    if($w <> ""){
        array_reverse($arr);
        $end = count($arr)-1;
        reset($arr);
        while(list($key,$val)=each($arr)){
            $newarr[] = $arr[$key];
            $end--;
            if($end <= 0){break;}
        }
        #array_reverse($newarr);
        $arr=$newarr;
    }
    #print_R($arr);
    $bottom = "high: ".most($arr).", low: ".least($arr);
    $arr = normalize($arr, 0, $total-2);
    #$out[] = genchars($border, $total);
    for($a=0;$a<count($arr);$a++){
        $out[] = point2arr($arr[$a], $total);
    }
    $out = transformmat($out,$total);
    $ret .= genchars("-", count($out[0])+2, $title, false);
    #echo "\n";
    $ret .= "\n";
    for($a=0;$a<count($out);$a++){
        #echo termcolored("|", WHITE);
        $ret .=  " |";
        for($b=0;$b<count($out[$a]);$b++){
            $ret .= $out[$a][$b];
        }
        $ret .= "|";
        #echo termcolored("|", WHITE);
        $ret .= "\n";
    }
    $ret .= genchars("-", count($out[0])+2, $bottom, false, STR_PAD_LEFT);
    $ret .= "\n";
    return $ret;
   
}

// *EDIT* change mysql to whatever table you want to test
// this default should work for fun..
$db_list = mysql_list_tables("mysql");
while ($row = mysql_fetch_row($db_list)) {
   $tables[] = trim("{$row[0]}");
}
$testarr_z = array();
$testarr = array();
$qcount = 0;
$start = microtime(true);

while(1){
        $hw = get_term_specs();
        array_pad($testarr_z, ($hw['w'] - 6), 0);

        array_pad($testarr, ($hw['w'] - 6), 0);
        $time_start = microtime(true);
        $tab = $tables[rand(0,count($tables))];
       
        $amt = rand(500, 5000);
        $sql = "SELECT * FROM $tab LIMIT 0,$amt";
        $res = mysql_db_query("oracle", $sql);
        $qcount++;
       
        $time_end = microtime(true);
        $time = $time_end - $time_start;
        $testarr_z[] = $time;
        @mysql_free_result($res);
       
        if(count($testarr_z)> ($hw['w'] - 6)){
                array_shift($testarr_z);
        }
        $testarr = normalize($testarr_z, 1, 100);

        $testarr = remove_flatspots($testarr, false);
        $tottime = $time_end - $start;
        $qps = round($qcount/$tottime);
        echo print_horz_graph($testarr, $hw['h']-3, "-", "local mysql: $qcount queries/sec $qps", $hw['w']-1);

}

?>
 

 

 
terminal *live* text graph in php, unix terminal scripts | terminal *live* text graph in php, unix terminal snippet | terminal *live* text graph in php, unix terminal example | terminal *live* text graph in php, unix terminal tutorial | terminal *live* text graph in php, unix terminal code