Author: jfthomps
Date: Wed Nov 10 19:27:01 2010
New Revision: 1033658

URL: http://svn.apache.org/viewvc?rev=1033658&view=rev
Log:
statistics.php:
-modified viewStatistics - added code to print graph of max concurrent vm 
reservations by day
-modified AJgetStatData - added code to handle max concurrent vm reservations 
by day
-modified getStatGraphConBladeUserData - modified code to include vm host 
computers that had at least one vm in use on them
-added getStatGraphConVMUserData

js/statistics.js:
-modified generateGraphs - added code to handle concurrent vm usage graph
-modified generateColGraphsCB - added checks for data.items.maxy being less 
than 50 and 200


Modified:
    incubator/vcl/trunk/web/.ht-inc/statistics.php
    incubator/vcl/trunk/web/js/statistics.js

Modified: incubator/vcl/trunk/web/.ht-inc/statistics.php
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/.ht-inc/statistics.php?rev=1033658&r1=1033657&r2=1033658&view=diff
==============================================================================
--- incubator/vcl/trunk/web/.ht-inc/statistics.php (original)
+++ incubator/vcl/trunk/web/.ht-inc/statistics.php Wed Nov 10 19:27:01 2010
@@ -96,7 +96,6 @@ function selectStatistics() {
                $daykey2 = array_search($day2, $days);
                $yearkey2 = array_search($year2, $years);
        }
-       print "<FORM action=\"" . BASEURL . SCRIPT . "\" method=post>\n";
        printSelectInput("month2", $months, $monthkey2);
        printSelectInput("day2", $days, $daykey2);
        printSelectInput("year2", $years, $yearkey2);
@@ -490,6 +489,16 @@ function viewStatistics() {
                print "<div id=\"maxconcurbladeday\" style=\"width: 400px; 
height: 310px;\">Loading graph data...</div>\n";
        }
 
+       print "<H2>Max Concurrent Virtual Machine Reservations By Day</H2>\n";
+       if($unixend - $unixstart > SECINMONTH)
+               print "(this graph only available for up to a month of 
data)<br>\n";
+       else {
+               $cdata['divid'] = 'maxconcurvmday';
+               $cont = addContinuationsEntry('AJgetStatData', $cdata);
+               print "<input type=hidden id=statconcurvmcont 
value=\"$cont\">\n";
+               print "<div id=\"maxconcurvmday\" style=\"width: 400px; height: 
310px;\">Loading graph data...</div>\n";
+       }
+
        print "<H2>Reservations by Hour</H2>\n";
        print "<small>(Active reservations during given hour averaged over 
selected dates)</small><br><br>\n";
        $cdata['divid'] = 'resbyhour';
@@ -520,6 +529,8 @@ function AJgetStatData() {
                $data = getStatGraphDayConUsersData($start, $end, $affilid);
        elseif($divid == 'maxconcurbladeday')
                $data = getStatGraphConBladeUserData($start, $end, $affilid);
+       elseif($divid == 'maxconcurvmday')
+               $data = getStatGraphConVMUserData($start, $end, $affilid);
        elseif($divid == 'resbyhour')
                $data = getStatGraphHourData($start, $end, $affilid);
        $data['id'] = $divid;
@@ -847,6 +858,121 @@ function getStatGraphConBladeUserData($s
                $startdt = unixToDatetime($daystart);
                $enddt = unixToDatetime($daystart + SECINDAY);
                if($affilid != 0) {
+                       $query = "SELECT s.hostcomputerid, "
+                              .        "l.start AS start, "
+                              .        "l.finalend AS end, "
+                              .        "c.type "
+                                        . "FROM log l, "
+                              .      "user u, "
+                              .      "sublog s "
+                              . "LEFT JOIN computer c ON (s.computerid = c.id) 
"
+                              . "LEFT JOIN computer c2 ON (s.hostcomputerid = 
c2.id) "
+                              . "WHERE l.userid = u.id AND "
+                              .       "l.start < '$enddt' AND "
+                              .       "l.finalend > '$startdt' AND "
+                              .       "s.logid = l.id AND "
+                              .       "l.wasavailable = 1 AND "
+                              .       "l.userid != $reloadid AND "
+                                        .       "(c.type = 'blade' OR "
+                              .       " (c.type = 'virtualmachine' AND c2.type 
= 'blade')) AND "
+                                        .       "u.affiliationid = $affilid";
+               }
+               else {
+                       $query = "SELECT s.hostcomputerid, "
+                              .        "l.start AS start, "
+                              .        "l.finalend AS end, "
+                              .        "c.type "
+                                        . "FROM log l, "
+                              .      "sublog s "
+                              . "LEFT JOIN computer c ON (s.computerid = c.id) 
"
+                              . "LEFT JOIN computer c2 ON (s.hostcomputerid = 
c2.id) "
+                              . "WHERE l.start < '$enddt' AND "
+                              .       "l.finalend > '$startdt' AND "
+                              .       "s.logid = l.id AND "
+                              .       "l.wasavailable = 1 AND "
+                              .       "l.userid != $reloadid AND "
+                                        .       "(c.type = 'blade' OR "
+                              .       " (c.type = 'virtualmachine' AND c2.type 
= 'blade'))";
+               }
+               $qh = doQuery($query, 101);
+               $comps = array();
+               while($row = mysql_fetch_assoc($qh)) {
+                       $unixstart = datetimeToUnix($row["start"]);
+                       $unixend = datetimeToUnix($row["end"]);
+                       for($binstart = $daystart, $binend = $daystart + 3600, 
$binindex = 0;
+                          $binstart <= $unixend && $binend <= ($daystart + 
SECINDAY);
+                          $binstart += 3600, $binend += 3600, $binindex++) {
+                               if($row['type'] == 'virtualmachine') {
+                                       if(array_key_exists($binindex, $comps) 
&&
+                                          
array_key_exists($row['hostcomputerid'], $comps[$binindex]))
+                                               continue;
+                                       
$comps[$binindex][$row['hostcomputerid']] = 1;
+                               }
+                               if($binend <= $unixstart) {
+                                       continue;
+                               }
+                               elseif($unixstart < $binend &&
+                                       $unixend > $binstart) {
+                                       $count[$binindex]++;
+                               }
+                               elseif($binstart >= $unixend) {
+                                       break;
+                               }
+                       }
+               }
+               rsort($count);
+               $label = date('m/d/Y', $daystart);
+               $data["points"][] = array('y' => $count[0], 'tooltip' => 
"$label: {$count[0]}");
+               if($count[0] > $data['maxy'])
+                       $data['maxy'] = $count[0];
+               $data['xlabels'][] = array('value' => $cnt, 'text' => $label);
+       }
+       return($data);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+///
+/// \fn getStatGraphConVMUserData($start, $end, $affilid)
+///
+/// \param $start - starting day in YYYY-MM-DD format
+/// \param $end - ending day in YYYY-MM-DD format
+/// \param $affilid - affiliationid of data to gather
+///
+/// \return an array with three keys:\n
+/// \b points - an array with y and tooltip keys that have the same value which
+///             is the y value at that point\n
+/// \b xlabels - an array with value and text keys, value's value is just an
+///              increasing integer starting from 1, text's value is the label
+///              to display on the x axis for the poing\n
+/// \b maxy - the max y value of the data
+///
+/// \brief queries the log table to get reservations between $start and $end
+/// and creates an array with the max concurrent users of vms per day
+///
+////////////////////////////////////////////////////////////////////////////////
+function getStatGraphConVMUserData($start, $end, $affilid) {
+       $startdt = $start . " 00:00:00";
+       $enddt = $end . " 23:59:59";
+       $startunix = datetimeToUnix($startdt);
+       $endunix = datetimeToUnix($enddt) + 1;
+       $days = ($endunix - $startunix) / SECINDAY;
+
+       $data = array();
+       $data["points"] = array();
+       $data["xlabels"] = array();
+       $data["maxy"] = 0;
+
+       $reloadid = getUserlistID('vclrel...@local');
+       $cnt = 0;
+       for($daystart = $startunix; $daystart < $endunix; $daystart += 
SECINDAY) {
+               $cnt++;
+               $count = array();
+               for($j = 0; $j < 24; $j++) {
+                       $count[$j] = 0;
+               }
+               $startdt = unixToDatetime($daystart);
+               $enddt = unixToDatetime($daystart + SECINDAY);
+               if($affilid != 0) {
                        $query = "SELECT l.start AS start, "
                               .        "l.finalend AS end "
                               . "FROM log l, "
@@ -859,9 +985,9 @@ function getStatGraphConBladeUserData($s
                               .       "s.logid = l.id AND "
                               .       "s.computerid = c.id AND "
                               .       "l.wasavailable = 1 AND "
-                              .       "c.type = 'blade' AND "
+                              .       "c.type = 'virtualmachine' AND "
                               .       "l.userid != $reloadid AND "
-                              .       "u.affiliationid = $affilid";
+                                        .       "u.affiliationid = $affilid";
                }
                else {
                        $query = "SELECT l.start AS start, "
@@ -874,8 +1000,8 @@ function getStatGraphConBladeUserData($s
                               .       "s.logid = l.id AND "
                               .       "s.computerid = c.id AND "
                               .       "l.wasavailable = 1 AND "
-                              .       "c.type = 'blade' AND "
-                              .       "l.userid != $reloadid";
+                              .       "c.type = 'virtualmachine' AND "
+                                        .       "l.userid != $reloadid";
                }
                $qh = doQuery($query, 101);
                while($row = mysql_fetch_assoc($qh)) {

Modified: incubator/vcl/trunk/web/js/statistics.js
URL: 
http://svn.apache.org/viewvc/incubator/vcl/trunk/web/js/statistics.js?rev=1033658&r1=1033657&r2=1033658&view=diff
==============================================================================
--- incubator/vcl/trunk/web/js/statistics.js (original)
+++ incubator/vcl/trunk/web/js/statistics.js Wed Nov 10 19:27:01 2010
@@ -55,12 +55,20 @@ function generateGraphs() {
                var cont = dojo.byId('statconcurbladecont').value;
                RPCwrapper({continuation: cont}, generateColGraphsCB, 1);
        }
+       if(dojo.byId('statconcurvmcont')) {
+               var cont = dojo.byId('statconcurvmcont').value;
+               RPCwrapper({continuation: cont}, generateColGraphsCB, 1);
+       }
 }
 
 function generateColGraphsCB(data, ioArgs) {
        dojo.byId(data.items.id).innerHTML = '';
        var graph = new dojox.charting.Chart2D(data.items.id);
-       if(data.items.maxy <= 400)
+       if(data.items.maxy <= 50)
+               var majortick = 10;
+       else if(data.items.maxy <= 200)
+               var majortick = 25;
+       else if(data.items.maxy <= 400)
                var majortick = 50;
        else if(data.items.maxy <= 600)
                var majortick = 100;


Reply via email to