Index: openacs-4/packages/xotcl-request-monitor/www/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xotcl-request-monitor/www/index.tcl,v diff -u -N -r1.24 -r1.25 --- openacs-4/packages/xotcl-request-monitor/www/index.tcl 15 Jun 2015 20:27:47 -0000 1.24 +++ openacs-4/packages/xotcl-request-monitor/www/index.tcl 7 Aug 2017 23:48:30 -0000 1.25 @@ -4,7 +4,7 @@ @author Gustaf Neumann @cvs-id $Id$ } -query { - {jsGraph 1} + {jsGraph:boolean 1} } -properties { title:onevalue context:onevalue @@ -45,7 +45,13 @@ if {![catch {exec sysctl vm.loadavg kern.boottime} result]} { return $result } - return [exec /usr/bin/uptime] + if {[set uptime [util::which uptime]] ne ""} { + return [exec $uptime] + } else { + set msg "'uptime' command not found on the system" + ad_log error $msg + return "" + } } # collect current response time (per minute and hour) @@ -92,87 +98,129 @@ set um [throttle trend user_count_minutes] if { $vm eq "" || $um eq ""} { return "NO DATA" } set views_per_sec [expr {[lindex $vm end]/60.0}] - #ns_log notice "um='$um' vm='$vm' expr {60.0*$views_per_sec/[lindex $um end]}" - set views_per_min_per_user [expr {60.0*$views_per_sec/[lindex $um end]}] + set currentUsers [lindex $um end] + if {$currentUsers > 0} { + #ns_log notice "um='$um' vm='$vm' expr {60.0*$views_per_sec/[lindex $um end]}" + set views_per_min_per_user [expr {60.0 * $views_per_sec / $currentUsers}] + } else { + set views_per_min_per_user "0" + } set view_time [expr {$views_per_min_per_user>0 ? " avg. view time: [format %4.1f [expr {60.0/$views_per_min_per_user}]]" : ""}] return "[format %4.1f $views_per_sec] views/sec, [format %4.3f $views_per_min_per_user] views/min/user, $view_time" } if {$jsGraph} { - # use javascript graphics - template::head::add_script -type text/javascript -src /resources/xotcl-request-monitor/diagram/diagram.js + set nonce [::security::nonce_token] - # draw a graph in form of an html table of with 500 pixels + template::add_body_script -src "//ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js" + template::add_body_script -src "//code.highcharts.com/highcharts.js" + template::add_body_script -src "//code.highcharts.com/modules/exporting.js" + + proc js_time {clock} { + set year [clock format $clock -format %Y] + set month [expr {[string trimleft [clock format $clock -format %N]] - 1}] + return "Date.UTC($year, $month, [clock format $clock -format {%d, %H, %M, %S}], 0)" + } + + set ::graphCount 0 proc graph {values label type} { + #ns_log notice "values=$values label=$label, type=$type" - switch $type { - "Second" { set delta "D.XGridDelta=10000;\n" } - "Minute" { set delta "D.XGridDelta=600000;\n" } - default { set delta ""} - } - - set max 1 - foreach v $values {if {$v>$max} {set max $v}} - set size [llength $values] if {$size<12} { set values [concat [split [string repeat 0 [expr {12-$size}]] ""] $values] set size [llength $values] } - set end [clock format [clock seconds] -format "%Y,%m,%d,%H,%M,%S"] - set begin [clock format [clock scan "-$size $type"] -format "%Y,%m,%d,%H,%M,%S"] - regsub -all {,0} $begin , begin - regsub -all {,0} $end , end - #ns_log Notice "begin: $begin, end: $end, $size $type" + set begin [clock scan "-$size $type"] + set interval [clock scan "1 $type" -base 0] + set graphID "graph[incr ::graphCount]" - set diagram [subst {\n" - return "
\n$diagram\n
" + template::add_body_script -script [subst { + \$('#$graphID').highcharts({ + chart: { + type: 'line' + }, + title: { + text: '' + }, + xAxis: { + type: 'datetime', + title: { text: 'Date'}, + }, + yAxis: \[{ + min: 0, + title: { + text: '$label', + align: 'high', + offset: 60 + }, + labels: { overflow: 'justify'} + }\], + plotOptions: { + bar: { + dataLabels: { + enabled: true + } + } + }, + credits: { + enabled: false + }, + series: \[$series\] + }); + }] + + #ns_log notice diagram=$diagram + return [subst { +
+ }] } proc counterTable {label objlist} { foreach {t l} $objlist { set trend [throttle trend $t] - append text [subst { + append text [subst { [graph $trend "$label per $l" $l] @@ -193,6 +241,7 @@ } append text "
Max
\n\n" } + #ns_log notice "counterTable $label $objlist ->\n$text" return $text } @@ -306,3 +355,9 @@ set param_url "" } + +# Local variables: +# mode: tcl +# tcl-indent-level: 2 +# indent-tabs-mode: nil +# End: