Changeset 490 in genapp


Ignore:
Timestamp:
May 21, 2015, 12:57:52 PM (7 years ago)
Author:
ehb
Message:
 
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • bin/image2img.pl

    r472 r490  
    22
    33$notes = "usage: $0 width files
    4 output img src= for base64 encoded images
     4output base64 encoded images suitable for css or html img src=
    55";
    66
     
    2626    $b64 = `$cmd`;
    2727
    28     print "$f: \"data:image/png;base64,$b64\"\n";
     28    print "$f: \"data:image/$t;base64,$b64\"\n";
    2929}
    3030
  • languages/html5/add/js/ga.min.js

    r486 r490  
    4646ga.value.set.plot2d.zoom=function(a,b,c){tagxy=a+"_xy";ga.value.settings[a]=ga.value.settings[a]||{};ga.value.settings[a].zoom=b?!0:!1;b&&(ga.value.settings[a].pkg=c,$(a+"_title,"+a+"_xlabel,"+a+"_ylabel,"+a+"_xy").on("click",ga.value.set.plot2d.zoom.click))};ga.value.set.plot2d.pkg=function(a,b){ga.value.settings[b]=ga.value.settings[b]||{};ga.value.settings[b].pkg=a;$(b+"_title,"+b+"_xlabel,"+b+"_ylabel,"+b+"_xy").on("click",ga.value.set.plot2d.reset)};
    4747ga.value.set.plot2d.reset=function(a){var b="#"+a.target.id.replace(/(_title|_xlabel|_ylabel|_xy)$/,"");a.preventDefault();ga.value.setLastValue(ga.value.settings[b].pkg,b)};ga.value.set.plot2d.hover=function(a,b){ga.value.settings[a]=ga.value.settings[a]||{};ga.value.settings[a].hover=b?!0:!1};ga.value.get.plot2d={};
    48 ga.value.get.plot2d.plot_options=function(a,b){var c=ga.plot_options();c.pan.interactive=ga.value.settings[a].pan?!0:!1;c.zoom.interactive=ga.value.settings[a].zoom?!0:!1;c.grid.hoverable=ga.value.settings[a].hover?!0:!1;if(b){b.xmin&&(c.xaxis.min=b.xmin);b.xmax&&(c.xaxis.max=b.xmax);if(b.xscale)switch(b.xscale){case "log":c.xaxis.transform=function(a){return 0<a?Math.log(a):1E-99};c.xaxis.inverseTransform=function(a){return Math.exp(a)};c.xaxis.tickFormatter=ga.value.plot2d.ticformatter;break;default:console.log("ga.value.get.plot2d.plot_options( "+
    49 a+" , options ) has unsupported xscale of "+b.xscale)}b.xtics&&(c.xaxis.ticks=b.xtics);b.ymin&&(c.yaxis.min=b.ymin,console.log("ga.value.get.plot2d.plot_options( "+a+" , options ) has ymin of "+b.ymin));b.ymax&&(c.yaxis.max=b.ymax,console.log("ga.value.get.plot2d.plot_options( "+a+" , options ) has ymax of "+b.ymax));if(b.yscale)switch(b.yscale){case "log":c.yaxis.transform=function(a){return 0<a?Math.log(a):1E-99};c.yaxis.inverseTransform=function(a){return Math.exp(a)};c.yaxis.tickFormatter=ga.value.plot2d.ticformatter;
    50 break;default:console.log("ga.value.get.plot2d.plot_options( "+a+" , options ) has unsupported yscale of "+b.yscale)}b.ytics&&(c.yaxis.ticks=b.ytics)}return c};ga.value.plot2d={};ga.value.plot2d.toFP=function(a,b){return 0<b?a.toFixed(b):6<a.toString().length?a.toExponential(3).replace(/0+e/,"e").replace(/\.e/,"e"):a.toFixed(0)};
     48ga.value.get.plot2d.plot_options=function(a,b){var c=ga.plot_options();c.pan.interactive=ga.value.settings[a].pan?!0:!1;c.zoom.interactive=ga.value.settings[a].zoom?!0:!1;c.grid.hoverable=ga.value.settings[a].hover?!0:!1;if(b){b.legend&&(c.legend=b.legend,b.legend.container&&(c.legend.container=$(a+"_legend")));b.xmin&&(c.xaxis.min=b.xmin);b.xmax&&(c.xaxis.max=b.xmax);if(b.xscale)switch(b.xscale){case "log":c.xaxis.transform=function(a){return 0<a?Math.log(a):1E-99};c.xaxis.inverseTransform=function(a){return Math.exp(a)};
     49c.xaxis.tickFormatter=ga.value.plot2d.ticformatter;break;default:console.log("ga.value.get.plot2d.plot_options( "+a+" , options ) has unsupported xscale of "+b.xscale)}b.xtics&&(c.xaxis.ticks=b.xtics);b.ymin&&(c.yaxis.min=b.ymin);b.ymax&&(c.yaxis.max=b.ymax);if(b.yscale)switch(b.yscale){case "log":c.yaxis.transform=function(a){return 0<a?Math.log(a):1E-99};c.yaxis.inverseTransform=function(a){return Math.exp(a)};c.yaxis.tickFormatter=ga.value.plot2d.ticformatter;break;default:console.log("ga.value.get.plot2d.plot_options( "+
     50a+" , options ) has unsupported yscale of "+b.yscale)}b.ytics&&(c.yaxis.ticks=b.ytics)}return c};ga.value.plot2d={};ga.value.plot2d.toFP=function(a,b){return 0<b?a.toFixed(b):6<a.toString().length?a.toExponential(3).replace(/0+e/,"e").replace(/\.e/,"e"):a.toFixed(0)};
    5151ga.value.plot2d.ticformatter=function(a,b){var c;if(!b._ehb||a<=b.min)return b._ehb={},b._ehb.pv=a,b._ehb.min=Math.min(b.min,b.max),b._ehb.max=Math.max(b.min,b.max),b._ehb.tmin=b.options.transform(b._ehb.min),b._ehb.tmax=b.options.transform(b._ehb.max),b._ehb.tmaxr=1/b._ehb.tmax,b._ehb.rnge=b._ehb.max-b._ehb.min,ga.value.plot2d.toFP(a,b.tickDecimals);if(!b._ehb.snd)return b._ehb.snd=!0,b._ehb.sndv=a,b._ehb.ptd=(b.options.transform(a)-b._ehb.tmin)*b._ehb.tmaxr,ga.value.plot2d.toFP(a,b.tickDecimals);
    5252if(!b._ehb.tr)return b._ehb.tr=2*Math.abs(a-b._ehb.sndv)/b._ehb.rnge,b._ehb.ptd=Math.abs(b.options.transform(a)-b._ehb.tmin)*b._ehb.tmaxr,ga.value.plot2d.toFP(a,b.tickDecimals);c=(b.options.transform(a)-b._ehb.tmin)*b._ehb.tmaxr;return Math.min(Math.abs(c-b._ehb.ptd),1-c)>=b._ehb.tr?(b._ehb.ptd=c,ga.value.plot2d.toFP(a,b.tickDecimals)):""};ga.pull={};
  • languages/html5/base_header.html

    r486 r490  
    481481<link rel="shortcut icon" href="favicon.ico" type="image/x-icon"/>
    482482<script src="js/genapp.js"></script>
     483<style>
     484.legendLabel {
     485   color: rgb( __text_color_rgb__ );
     486}
     487</style>
    483488</head>
    484489<header>
  • languages/html5/js/value.js

    r420 r490  
    328328
    329329    if ( options ) {
     330        if ( options.legend ) {
     331            plot_options.legend           = options.legend;
     332            __~debug:plottwod{console.log( "ga.value.get.plot2d.plot_options( " + tag + " , options ) has legend" );}
     333            if ( options.legend.container ) {
     334                plot_options.legend.container = $( tag + "_legend" );
     335            }
     336        }
    330337        if ( options.xmin ) {
    331                 plot_options.xaxis.min        = options.xmin;
     338            plot_options.xaxis.min        = options.xmin;
    332339        }
    333340        if ( options.xmax ) {
    334                 plot_options.xaxis.max        = options.xmax;
     341            plot_options.xaxis.max        = options.xmax;
    335342        }
    336343        if ( options.xscale ) {
     
    350357        }
    351358        if ( options.ymin ) {
    352                 plot_options.yaxis.min        = options.ymin;
    353                 console.log( "ga.value.get.plot2d.plot_options( " + tag + " , options ) has ymin of " + options.ymin );
     359            plot_options.yaxis.min        = options.ymin;
     360            __~debug:plottwod{console.log( "ga.value.get.plot2d.plot_options( " + tag + " , options ) has ymin of " + options.ymin );}
    354361        }
    355362        if ( options.ymax ) {
    356                 plot_options.yaxis.max        = options.ymax;
    357                 console.log( "ga.value.get.plot2d.plot_options( " + tag + " , options ) has ymax of " + options.ymax );
     363            plot_options.yaxis.max        = options.ymax;
     364            __~debug:plottwod{console.log( "ga.value.get.plot2d.plot_options( " + tag + " , options ) has ymax of " + options.ymax );}
    358365        }
    359366        if ( options.yscale ) {
  • languages/html5/sys/sys_jobmonitor.php

    r487 r490  
    44$_REQUEST = json_decode( $argv[ 1 ], true );
    55
    6 __~debug:filemanager{error_log( print_r( $_REQUEST, true ) , 3, "/tmp/mylog" );}
    76
    87$results = [];
     
    7776}
    7877
     78function ProcStats( $sys ) {
     79    global $appconfig;
     80
     81    $result = array();
     82
     83    $cmd = $appconfig->resources->{ $sys };
     84    $ucmd = "head -1 /proc/stat; cat /proc/meminfo; echo cut_here; cat /proc/net/dev";
     85
     86    if ( strlen( $cmd ) ) {
     87        $cmd .= " \"$ucmd\"";
     88    } else {
     89        $cmd = $ucmd;
     90    }
     91    exec( $cmd, $res );
     92
     93    $a = explode( ' ', array_shift( $res ) );
     94    array_shift( $a );
     95    while( !$a[ 0 ] ) {
     96        array_shift( $a );
     97    }
     98    $result[ "cpu" ] = $a;
     99
     100    $res2 = [];
     101    $restmp = [];
     102    foreach ( $res as $v ) {
     103        if ( $v == "cut_here" ) {
     104            $res2[] = $restmp;
     105            $restmp = [];
     106        } else {
     107            $restmp[] = $v;
     108        }
     109    }
     110    if ( count( $restmp ) ) {
     111        $res2[] = $restmp;
     112    }
     113
     114    // compute mem info
     115    $tmpmem = array();
     116    $meminterest = preg_grep( "/^(Mem|Swap)(Free|Total):/", $res2[0] );
     117    foreach ( $meminterest as $v ) {
     118        preg_match( "/^(\S+):\s+(\d+)\s+/", $v, $matches );
     119        if ( count( $matches ) == 3 ) {
     120            $tmpmem[ $matches[ 1 ] ] = $matches[ 2 ];
     121        }
     122    }
     123
     124    // compute useful bits
     125    $result[ "mem" ] = array();
     126    $result[ "mem" ][ "memused" ] =
     127        (
     128          isset( $tmpmem[ "MemTotal" ] ) &&
     129          isset( $tmpmem[ "MemFree" ] ) &&
     130          $tmpmem[ "MemTotal" ] > 0
     131        )
     132        ?
     133        round( 100.0 * ( $tmpmem[ "MemTotal" ] - $tmpmem[ "MemFree" ] ) / $tmpmem[ "MemTotal" ], 1 )
     134        :
     135        100.0
     136        ;
     137         
     138    $result[ "mem" ][ "swapused" ] =
     139        (
     140          isset( $tmpmem[ "SwapTotal" ] ) &&
     141          isset( $tmpmem[ "SwapFree" ] ) &&
     142          $tmpmem[ "SwapTotal" ] > 0
     143        )
     144        ?
     145        round( 100.0 * ( $tmpmem[ "SwapTotal" ] - $tmpmem[ "SwapFree" ] ) / $tmpmem[ "SwapTotal" ], 1 )
     146        :
     147        0.0
     148        ;
     149       
     150    // network
     151
     152    $net = array_slice( $res2[ 1 ], 2 );   
     153
     154    $result[ "net" ] = array();
     155
     156    foreach ( $net as $v ) {
     157        $thisnet = preg_split( "/\s+/", $v );
     158        $if = rtrim( $thisnet[ 1 ], ":" );
     159        // for sep tx,rx $result[ "net" ][ $if ] = array( $thisnet[ 2 ], $thisnet[ 10 ] );
     160        $totuse = $thisnet[ 2 ] + $thisnet[ 10 ];
     161        // skip lo for now
     162        if ( $totuse > 0 && $if != "lo" ) {
     163            $result[ "net" ][ $if ] = $totuse;
     164        }
     165    }       
     166
     167    return $result;
     168}
     169
     170function UpdateStats( $sys, $init = false ) {
     171    global $load;
     172    $load[ $sys ][ "prev" ] = $load[ $sys ][ "this" ];
     173    $load[ $sys ][ "this" ][ "stats"   ] = ProcStats( $sys );
     174    $load[ $sys ][ "this" ][ "sum"     ] = array_sum( $load[ $sys ][ "this" ][ "stats" ][ "cpu" ] );
     175    $load[ $sys ][ "this" ][ "sum012"  ] = array_sum( array_slice( $load[ $sys ][ "this" ][ "stats" ][ "cpu" ], 0, 3  ) );
     176
     177    if ( !$init ) {
     178        $total = $load[ $sys ][ "this" ][ "sum" ] - $load[ $sys ][ "prev" ][ "sum" ];
     179
     180        $load[ $sys ][ "this" ][ "load" ] = round( 100 *
     181                                                      ( $load[ $sys ][ "this" ][ "sum012" ] -
     182                                                        $load[ $sys ][ "prev" ][ "sum012" ] )
     183                                                      / $total, 2 );
     184
     185        $load[ $sys ][ "this" ][ "iowait"  ] = round( 100 *
     186                                                      ( $load[ $sys ][ "this" ][ "stats" ][ "cpu" ][ 4 ] -
     187                                                        $load[ $sys ][ "prev" ][ "stats" ][ "cpu" ][ 4 ] )
     188                                                      / $total, 2 );
     189
     190        foreach ( $load[ $sys ][ "this" ][ "stats" ][ "net" ] as $k => $v ) {
     191            $load[ $sys ][ "this" ][ "net" ][ $k ] = ( $v - $load[ $sys ][ "prev" ][ "stats" ][ "net" ][ $k ] ) * 1e-6;
     192        }
     193    }
     194
     195    $load[ $sys ][ "this" ][ "memused" ] = $load[ $sys ][ "this" ][ "stats" ][ "mem" ][ "memused" ];
     196    $load[ $sys ][ "this" ][ "swapused" ] = $load[ $sys ][ "this" ][ "stats" ][ "mem" ][ "swapused" ];
     197
     198//    echo "prev: " . print_r( $load[ $sys ][ "prev" ], true ) . "\n";
     199//    echo "this: " . print_r( $load[ $sys ][ "this" ], true ) . "\n";
     200   
     201}
     202
     203$allresources = array_keys( (array) $appconfig->resources );
     204
     205$plotdata =
     206    array(
     207        "jobhistory" =>
     208        array( "options" =>
     209               array(
     210                   "xtics" => array()
     211               )
     212               ,"data" =>
     213               array(
     214                   array(
     215                       "lines" => array( "show" => "true", "fill" => "true", "zero" => "true" )
     216                       ,"data"  => array()
     217                   )
     218               )
     219        )
     220        ,"load" =>
     221        array( "options" =>
     222               array(
     223                   "xtics" => array()
     224                   ,"ymax" => 100
     225                   ,"legend" =>
     226                   array(
     227                       "container" => "true"
     228                       ,"backgroundOpacity" => 0.95
     229                   )
     230               )
     231               ,"data" => array()
     232        )
     233        ,"iowait" =>
     234        array( "options" =>
     235               array(
     236                   "xtics" => array()
     237                   ,"ymax" => 100
     238                   ,"legend" =>
     239                   array(
     240                       "container" => "true"
     241                       ,"backgroundOpacity" => 0.95
     242                   )
     243               )
     244               ,"data" => array()
     245        )
     246        ,"memused" =>
     247        array( "options" =>
     248               array(
     249                   "xtics" => array()
     250                   ,"ymax" => 100
     251                   ,"legend" =>
     252                   array(
     253                       "container" => "true"
     254                       ,"backgroundOpacity" => 0.95
     255                   )
     256               )
     257               ,"data" => array()
     258        )
     259        ,"swapused" =>
     260        array( "options" =>
     261               array(
     262                   "xtics" => array()
     263                   ,"ymax" => 100
     264                   ,"legend" =>
     265                   array(
     266                       "container" => "true"
     267                       ,"backgroundOpacity" => 0.95
     268                   )
     269               )
     270               ,"data" => array()
     271        )
     272        ,"net" =>
     273        array( "options" =>
     274               array(
     275                   "xtics" => array()
     276                   ,"legend" =>
     277                   array(
     278                       "container" => "true"
     279                       ,"noColumns" => 3
     280                       ,"backgroundOpacity" => 0.95
     281                   )
     282               )
     283               ,"data" => array()
     284        )
     285    );
     286
     287
     288// init load data
     289foreach ( $allresources as $v ) {
     290    foreach ( array( "load", "iowait", "memused", "swapused" ) as $v2 ) {
     291        $plotdata[ $v2 ][ "data" ][] =
     292            array(
     293                "lines" => array( "show" => "true", "fill" => "true", "zero" => "true" )
     294                ,"label" => $v
     295                ,"data"  => array()
     296            );
     297    }
     298}
     299
     300// need special init for "net" as each has its own set of if
     301
     302function get_procstats( $init = false ) {
     303    global $load;
     304    global $allresources;
     305    global $plotdata;
     306
     307    if ( $init ) {
     308        $load = [];
     309        foreach ( $allresources as $v ) {
     310            $load[ $v ] = array( "this" => array() );
     311        }
     312    }
     313
     314    foreach ( $allresources as $v ) {
     315        UpdateStats( $v, $init );
     316    }
     317
     318
     319    if ( $init ) {
     320        foreach ( $allresources as $v ) {
     321            foreach ( $load[ $v ][ "this" ][ "stats" ][ "net" ] as $k2 => $v2 ) {
     322                $plotdata[ "net" ][ "data" ][] =
     323                    array(
     324                        "lines" => array( "show" => "true", "fill" => "true", "zero" => "true" )
     325                        ,"label" => "$v-$k2"
     326                        ,"data"  => array()
     327                        ,"sys"   => $v
     328                        ,"if"    => $k2
     329                    );
     330            }
     331        }
     332    }
     333
     334    // __~debug:jobmonitor{error_log( "get_procstats load[]:\n" . print_r( $load, true ) , 3, "/tmp/mylog" );}
     335    // __~debug:jobmonitor{error_log( "get_procstats plotdata[]:\n" . print_r( $plotdata, true ) , 3, "/tmp/mylog" );}
     336}   
     337
    79338// get_runinfo populates runinfo array with job info
    80339// to get more data => add it to the runinfo
     
    85344   global $appconfig;
    86345   global $runinfo;
     346   global $nowsecs;
     347   global $startsecs;
     348   global $plotdata;
     349   global $load;
     350   global $allresources;
     351   global $interval;
    87352
    88353   $runinfo = [];
     
    94359
    95360   $runs = $use_db->__application__->running->find();
     361
     362   $nowsecs = microtime( true );
     363
     364   get_procstats();
    96365
    97366   foreach ( $runs as $v ) {
     
    110379       }
    111380
     381       
     382       if ( isset( $job["start"] ) ) {
     383           $duration = floatval( $nowsecs - $job["start"]->sec );
     384           $duration_s = sprintf( $duration > 1 * 60 ? "%.0f" : "%.1f", $duration - 60 * intval( $duration / 60 ) );
     385           $duration_m = intval( $duration / 60 ) % 60;
     386           $duration_h = intval( $duration /(60 * 60 ) ) % 24;
     387           $duration_d = intval( $duration /(24 * 60 * 60 ) );
     388           
     389           $duration = "start";
     390
     391           $duration = ( $duration_d > 0 ? $duration_d . "d" : "" ) .
     392               ( $duration_h > 0 ? $duration_h . "h" : "" ) .
     393               ( $duration_m > 0 ? $duration_m . "m" : "" ) .
     394               ( $duration_s > 0 ? $duration_s . "s" : "" );
     395       } else {
     396           $duration = "active";
     397       }
     398
     399
    112400       $runinfo[] =
    113401           array(
     
    116404#               "pids"      => $v  [ 'pid' ]
    117405               ,"started"   => date( "Y M d H:i:s T",$job["start"]->sec )
     406               ,"duration"  => $duration
    118407               ,"resources" => implode( ",", array_keys( $resources ) )
    119408               ,"id"        => $uuid
    120409           );
    121410   }
     411   $thissecs = round( $nowsecs - $startsecs, 3 );
     412
     413   $plotdata[ "jobhistory" ][ "data" ][0][ "data" ][] = array( $thissecs, count( $runinfo ) );
     414   $plotdata[ "jobhistory" ][ "data" ][0][ "data" ] =
     415       array_slice(
     416           $plotdata[ "jobhistory" ][ "data" ][0][ "data" ],
     417           -$GLOBALS[ 'maxplottimes' ] );
     418
     419   foreach ( $plotdata[ "load" ][ "data" ] as $k => $v ) {
     420       // __~debug:jobmonitor{error_log( "load key\n" . $plotdata[ "load" ][ "data" ][ $k ][ "label" ] . "\n", 3, "/tmp/mylog" );}
     421       // __~debug:jobmonitor{error_log( "load value\n" . $load[ $plotdata[ "load" ][ "data" ][ $k ][ "label" ]][ "this" ][ "load" ] . "\n", 3, "/tmp/mylog" );}
     422       
     423       $sys = $plotdata[ $v2 ][ "data" ][ $k ][ "label" ];
     424       foreach ( array( "load", "iowait", "memused", "swapused" ) as $v2 ) {
     425           $plotdata[ $v2 ][ "data" ][ $k ][ "data" ][] =
     426               array( $thissecs, $load[ $sys ][ "this" ][ $v2 ] );
     427           $plotdata[ $v2 ][ "data" ][ $k ][ "data" ] =
     428               array_slice(
     429                   $plotdata[ $v2 ][ "data" ][ $k ][ "data" ],
     430                   -$GLOBALS[ 'maxplottimes' ] );
     431
     432       }
     433       // __~debug:jobmonitor{error_log( "load data k $k\n" . print_r( $plotdata[ "load" ][ "data" ][ $k ][ "data" ], true )  . "\n", 3, "/tmp/mylog" );}
     434
     435   }
     436
     437   foreach ( $plotdata[ "net" ][ "data" ] as $k => $v ) {
     438       $sys = $plotdata[ "net" ][ "data" ][ $k ][ "sys" ];
     439       $if  = $plotdata[ "net" ][ "data" ][ $k ][ "if" ];
     440
     441       $plotdata[ "net" ][ "data" ][ $k ][ "data" ][] =
     442           array( $thissecs, $load[ $sys ][ "this" ][ "net" ][ $if ] / $interval );
     443       $plotdata[ "net" ][ "data" ][ $k ][ "data" ] =
     444           array_slice(
     445               $plotdata[ "net" ][ "data" ][ $k ][ "data" ],
     446               -$GLOBALS[ 'maxplottimes' ] );
     447   }
     448
     449   $ymaxa = [];
     450   $xticsfull = [];
     451   foreach ( $plotdata[ "jobhistory" ][ "data" ][0][ "data" ] as $k => $v ) {
     452       $ymaxa[] = $v[ 1 ];
     453       $xticsfull[] = array( $v[ 0 ], date( "H:i:s", $v[ 0 ] + $startsecs ) );
     454   }
     455
     456   // __~debug:jobmonitor{error_log( "xticsfull[]:\n" . print_r( $xticsfull, true ) , 3, "/tmp/mylog" );}
     457
     458//   $xtics = [];
     459   $xticsc = count( $xticsfull );
     460   if ( $xticsc > $GLOBALS[ 'maxxticsvis' ] ) {
     461       $addtics = 0;
     462       if ( $xticsc > $GLOBALS[ 'xminplottime' ] ) {
     463           $addtics = ( $xticsc - $GLOBALS[ 'xminplottime' ] ) * $GLOBALS[ 'maxxticsvis' ] / $GLOBALS[ 'xminplottime' ];
     464       }
     465       $each = round( $xticsc / ( $addtics + $GLOBALS[ 'maxxticsvis' ] ) );
     466       for ( $i = 0; $i < $xticsc; ++$i ) {
     467           if ( $i % $each ) {
     468               $xticsfull[ $i ][ 1 ] = "";
     469           }
     470       }
     471   }
     472   
     473//   __~debug:jobmonitor{error_log( "xtics[]:\n" . print_r( $xtics, true ) , 3, "/tmp/mylog" );}
     474
     475 //   __~debug:jobmonitor{error_log( "xticsfull[] after trim:\n" . print_r( $xticsfull, true ) , 3, "/tmp/mylog" );}
     476
     477   $plotdata[ "jobhistory" ][ "options" ][ "ymax" ] = max( $ymaxa ) + 1;
     478
     479   $useminplottime = 0;
     480   if ( $xticsc > $GLOBALS[ 'xminplottime' ] ) {
     481       $useminplottime = $plotdata[ "jobhistory" ][ "data" ][0][ "data" ][ $xticsc - $GLOBALS[ 'xminplottime' ] ][ 0 ];
     482   }
     483
     484   foreach ( $plotdata as $k => $v ) {
     485       $plotdata[ $k ][ "options" ][ "xtics" ] = $xticsfull;
     486       $plotdata[ $k ][ "options" ][ "xmin"  ] = $useminplottime;
     487   }
     488
    122489   return true;
    123490}
     
    148515$results = [];
    149516$results[ '_uuid' ] = $_REQUEST[ '_uuid' ];
     517$startsecs = microtime( true );
     518
     519$GLOBALS[ 'maxplottimes' ] = 240;
     520$GLOBALS[ 'xminplottime' ] = intval( $GLOBALS[ 'maxplottimes' ] / 3 );
     521$GLOBALS[ 'maxxticsvis' ] = 4;
     522
     523get_procstats( true );
     524sleep( 1 );
    150525
    151526// run until cancelled
     527
     528$interval = $_REQUEST[ 'interval' ];
     529
     530// for ( $i = 0; $i < 3; ++$i ) {
    152531do {
     532    $nowsecs = microtime( true );
    153533    get_html_runinfo( true );
    154534
    155     $results[ "monitordata" ] = "<p>Last refreshed " . date( "Y M d H:i:s T", time() ) . "</p>" .  $html_runinfo;
    156 
     535    $results[ "monitordata" ] = "<p>Last refreshed " . date( "Y M d H:i:s T", $nowsecs ) . "</p>" .  $html_runinfo;
     536
     537    foreach ( $plotdata as $k => $v ) {
     538        $results[ $k ] = $v;
     539    }
     540    // __~debug:jobmonitor{error_log( print_r( $results, true ) , 3, "/tmp/mylog" );}
     541    // __~debug:jobmonitor{error_log( json_encode( $results ) . "\n", 3, "/tmp/mylog" );}
    157542    $zmq_socket->send( json_encode( $results ) );
    158     sleep( $_REQUEST[ 'interval' ] );
     543    sleep( $interval );
    159544} while(1);
    160545
     546
     547echo '{"_none":"1"}';
     548
    161549?>
  • languages/html5/types/plot2d.output

    r403 r490  
    1212   <td id="__fields:id___ylabel" style="text-align:center"></td>
    1313   <td id="__fields:id__" type="plot2d" class="plot2ddef" style="__~fields:width{width:__fields:width__;}__~fields:height{height:__fields:height__}"></td>
    14    <td></td>
     14   <td id="__fields:id___legend"></td>
    1515</tr>
    1616<tr>
  • modules/jobmonitor.json

    r488 r490  
    1010    ,"uniquedir" : "on"
    1111    ,"fields"   : [
    12                   {
    13                    "role"    : "input"
    14                    ,"id"      : "interval"
    15                    ,"label"   : "Update frequency in seconds"
    16                    ,"type"    : "integer"
    17                    ,"min"     : 0
    18                    ,"default" : 15
    19                    }
    20                   ,{
    21                    "role"    : "output"
    22                    ,"id"     : "monitordata"
    23                    ,"label"  : ""
    24                    ,"type"   : "html"
    25                   }
    26                   ]
     12        {
     13            "role"    : "input"
     14            ,"id"      : "interval"
     15            ,"label"   : "Update frequency in seconds"
     16            ,"type"    : "integer"
     17            ,"min"     : 2
     18            ,"default" : 2
     19        }
     20        ,{
     21            "role"           : "output"
     22            ,"id"             : "jobhistory"
     23            ,"label"          : "Active job count"
     24            ,"type"           : "plot2d"
     25#            ,"titlefontclass" : "header3"
     26            ,"height"         : "150px"
     27            ,"width"          : "600px"
     28            ,"pan"            : "true"
     29            ,"zoom"           : "true"
     30            ,"hover"          : "true"
     31            ,"help"           : "drag to pan, double click to zoom, to reset zoom and pan: click on live coordinates box"
     32        }
     33        ,{
     34            "role"           : "output"
     35            ,"id"             : "load"
     36            ,"label"          : "Load %"
     37            ,"type"           : "plot2d"
     38#            ,"titlefontclass" : "header3"
     39            ,"height"         : "150px"
     40            ,"width"          : "600px"
     41            ,"pan"            : "true"
     42            ,"zoom"           : "true"
     43            ,"hover"          : "true"
     44            ,"help"           : "drag to pan, double click to zoom, to reset zoom and pan: click on live coordinates box"
     45        }
     46        ,{
     47            "role"           : "output"
     48            ,"id"             : "iowait"
     49            ,"label"          : "IO wait %"
     50            ,"type"           : "plot2d"
     51#            ,"titlefontclass" : "header3"
     52            ,"height"         : "150px"
     53            ,"width"          : "600px"
     54            ,"pan"            : "true"
     55            ,"zoom"           : "true"
     56            ,"hover"          : "true"
     57            ,"help"           : "drag to pan, double click to zoom, to reset zoom and pan: click on live coordinates box"
     58        }
     59        ,{
     60            "role"           : "output"
     61            ,"id"             : "memused"
     62            ,"label"          : "Memory used %"
     63            ,"type"           : "plot2d"
     64#            ,"titlefontclass" : "header3"
     65            ,"height"         : "150px"
     66            ,"width"          : "600px"
     67            ,"pan"            : "true"
     68            ,"zoom"           : "true"
     69            ,"hover"          : "true"
     70            ,"help"           : "drag to pan, double click to zoom, to reset zoom and pan: click on live coordinates box"
     71        }
     72        ,{
     73            "role"           : "output"
     74            ,"id"             : "swapused"
     75            ,"label"          : "Swap used %"
     76            ,"type"           : "plot2d"
     77#            ,"titlefontclass" : "header3"
     78            ,"height"         : "150px"
     79            ,"width"          : "600px"
     80            ,"pan"            : "true"
     81            ,"zoom"           : "true"
     82            ,"hover"          : "true"
     83            ,"help"           : "drag to pan, double click to zoom, to reset zoom and pan: click on live coordinates box"
     84        }
     85        ,{
     86            "role"           : "output"
     87            ,"id"             : "net"
     88            ,"label"          : "Network MB/s"
     89            ,"type"           : "plot2d"
     90#            ,"titlefontclass" : "header3"
     91            ,"height"         : "150px"
     92            ,"width"          : "600px"
     93            ,"pan"            : "true"
     94            ,"zoom"           : "true"
     95            ,"hover"          : "true"
     96            ,"help"           : "drag to pan, double click to zoom, to reset zoom and pan: click on live coordinates box"
     97        }
     98        ,{
     99            "role"    : "output"
     100            ,"id"     : "monitordata"
     101            ,"label"  : ""
     102            ,"type"   : "html"
     103        }
     104    ]
    27105}
Note: See TracChangeset for help on using the changeset viewer.