Index: trunk/tools/czarmetrics.pl
===================================================================
--- trunk/tools/czarmetrics.pl	(revision 29687)
+++ trunk/tools/czarmetrics.pl	(revision 29729)
@@ -8,24 +8,22 @@
 use CGI::Pretty qw[:standard];
 
+use czartool::DayMetrics;
 use czartool::CzarDb;
 use czartool::Gpc1Db;
-use czartool::Plotter;
-use czartool::StageMetrics;
 
 my $czarDbName = "czardb";
-my $save_temps = undef;
-my $interval = undef;
+my $day = undef;
 my $begin = undef;
 my $end = undef;
-my $burntoolEnd = undef;
-my $day = undef;
 my $verbose = undef;
+my $save_temps = undef;
 
 GetOptions (
         "dbname=s" => \$czarDbName,
+        "begin|b=s" => \$begin,
+        "end|e=s" => \$end,
         "day|y=s" => \$day,
         "verbose|v" => \$verbose,
         );
-
 
 print "\n*******************************************************************************\n";
@@ -37,10 +35,16 @@
 }
 if (!$day) {
-    print "* OPTIONAL: choose a single day to plot     -y <date>                   (default=today)\n";
+    print "* OPTIONAL: choose a single day to plot     -y <date>               (default=today)\n";
 }
+if (!$begin) {
+    print "* OPTIONAL: choose a begin date             -b <date>               (default=today)\n";}
+if (!$end) 
+{
+    print "* OPTIONAL: choose an end date              -e <date>               (default=today)\n";
+}
+
 print "*\n*******************************************************************************\n";
 
 if ($quit) {exit;}
-my @stages = ("burntool", "chip", "cam", "fake", "warp", "stack", "diff", "magic", "magicDS", "dist");
 
 my $gpc1Db = new czartool::Gpc1Db("gpc1", "ippdb01", "ippuser", "ippuser");
@@ -48,284 +52,19 @@
 $czarDb->setDateFormat("%Y%m%d-%H%i%s");
 
-# sort out times
-if (!$day) {$day = strftime('%Y-%m-%d', localtime);}
-$begin =  "$day 06:00";
-$end = $czarDb->addInterval($begin, "1 DAY");
-$burntoolEnd = $czarDb->addInterval($begin, "12 HOUR");
+
+if (!$day && !$begin && !$end) {
+    
+    $day = strftime('%Y-%m-%d', localtime);
+}
+if ($day) {($begin, $end) = $day;}
 
 
-# create path, dir and html file
-my $path = "./$day";
-mkdir($path, 0777);
-my $plotter = new czartool::Plotter(
-        $czarDb,
-        "%Y%m%d-%H%M%S",
-        "png font \"/usr/share/fonts/corefonts/arial.ttf\" 8",
-        $path,
-        $save_temps);
+my $thisDay = $begin;
+while (1) {
 
-# create HTML file and write header stuff
-open (HTMLDOC, ">$day/index.html");
-print HTMLDOC "<html>\n";
-print HTMLDOC "<head>\n";
-print HTMLDOC "<title>IPP Metrics for $day</title>\n";
-print HTMLDOC "<a name=\"top\"></a>\n";
-print HTMLDOC "<h1 align=\"middle\">IPP Metrics for $day</h1>\n";
+    my $dayMetrics = new czartool::DayMetrics($gpc1Db, $czarDb, "./ippMetrics", 1, 0, $thisDay);
+    $dayMetrics->writeHTML();
 
-# summit and burntool exposures
-my $summitExposures = $gpc1Db->countScienceExposuresFromLastNight($day);
-my $burntoolMetrics = new czartool::StageMetrics("burntool", "all_stdscience_labels", $begin, $burntoolEnd);
-$czarDb->runAnalysis($burntoolMetrics);
-
-
-my $previousDay = $czarDb->subtractInterval($day, "1 DAY");
-my $nextDay = $czarDb->addInterval($day, "1 DAY");
-
-
-
-print HTMLDOC "<h5  align=\"middle\">";
-print HTMLDOC "<a href=\"file:///home/rhenders/$previousDay/index.html\"> \< previous day</a> | <a href=\"file:///home/rhenders/$nextDay/index.html\">next day \></a><br>\n";
-print HTMLDOC "Measured from $begin to $end HST<br>\n";
-printf (HTMLDOC "%d exposures taken on summit last night, %d through burntool today</h5>\n", 
-        $summitExposures, $burntoolMetrics->getProcessed() ? $burntoolMetrics->getProcessed() : 0 );
-print HTMLDOC "</head>\n";
-print HTMLDOC "<body>\n";
-
-
-
-
-
-my $labels = undef;
-my $label;
-if (!$czarDb->getStdscienceLabelsInTimePeriod($begin, $end, \$labels)) {next;}
-
-my $size = @{$labels};
-my $table;
-my $haveLabelData;
-my %initialPendingTotals;
-my %processedTotals;
-my %finalPendingTotals;
-my %faultTotals;
-my %labelTables;
-
-
-
-# loop through all labels and create tables for each that have content
-foreach my $row ( @{$labels} ) {
-    my ($label) = @{$row};
-
-
-    $table = "<table border='1'>";
-    $table .= "  <tr>\n";
-    $table .= "    <th>Stage</th>\n";
-    $table .= "    <th>Initial Pending</th>\n";
-    $table .= "    <th>Started</th>\n";
-    $table .= "    <th>25% complete</th>\n";
-    $table .= "    <th>50% complete</th>\n";
-    $table .= "    <th>75% complete</th>\n";
-    $table .= "    <th>90% complete</th>\n";
-    $table .= "    <th>95% complete</th>\n";
-    $table .= "    <th>Finished</th>\n";
-    $table .= "    <th>Time taken</th>\n";
-    $table .= "    <th>Processed</th>\n";
-    $table .= "    <th>Exp per hour</th>\n";
-    $table .= "    <th>Final Pending</th>\n";
-    $table .= "  </tr>\n";
-
-    $haveLabelData = 0;
-    #while ( my ($stage, $value) = each(%processedTotals) ) {
-
-    foreach my $stage ( @stages ){
-
-        my $stageMetrics = new czartool::StageMetrics($stage, $label, $begin, ($stage eq "burntool") ? $burntoolEnd : $end);
-        if (!$czarDb->runAnalysis($stageMetrics)) {next;}
-
-        if (!$stageMetrics->anythingProcessed()) {next;}
-
-        if ($stageMetrics->getProcessed() > 0) {$haveLabelData = 1;};
-
-        $table .= "  <tr>\n";
-        $table .= sprintf( "    <td>%s</td>\n", $stageMetrics->getStage() );
-        $table .= sprintf( "    <td>%d</td>\n", $stageMetrics->getInitialPending() ? $stageMetrics->getInitialPending() : "0" );
-        $table .= sprintf( "    <td>%s</td>\n", $stageMetrics->getStarted() ? $stageMetrics->getStarted() : "");
-        $table .= sprintf( "    <td>%s</td>\n", $stageMetrics->getFinished25() ? $stageMetrics->getFinished25() : "-" );
-        $table .= sprintf( "    <td>%s</td>\n", $stageMetrics->getFinished50() ? $stageMetrics->getFinished50() : "-" );
-        $table .= sprintf( "    <td>%s</td>\n", $stageMetrics->getFinished75() ? $stageMetrics->getFinished75() : "-" );
-        $table .= sprintf( "    <td>%s</td>\n", $stageMetrics->getFinished90() ? $stageMetrics->getFinished90() : "-" );
-        $table .= sprintf( "    <td>%s</td>\n", $stageMetrics->getFinished95() ? $stageMetrics->getFinished95() : "-" );
-        $table .= sprintf( "    <td>%s</td>\n", $stageMetrics->getFinished100() ? $stageMetrics->getFinished100() : "-" );
-        $table .= sprintf( "    <td>%s</td>\n", $stageMetrics->getTotalTime() ? $stageMetrics->getTotalTime() : "-" );
-        $table .= sprintf( "    <td>%d</td>\n", $stageMetrics->getProcessed() ? $stageMetrics->getProcessed() : "0" );
-        $table .= sprintf( "    <td>%.2f</td>\n", $stageMetrics->getRate() ? $stageMetrics->getRate() : "0" );
-        $table .= sprintf( "    <td>");
-        if ($stageMetrics->getFinalPending() > 0) {$table .= "<font color=\"red\">";}
-        $table .= sprintf( "%d\n", $stageMetrics->getFinalPending() );
-        if ($stageMetrics->getFinalPending() > 0) {$table .= "</font>\n";}
-        $table .= sprintf( "</td>");
-        $table .= "  </tr>\n";
-
-        if (!$initialPendingTotals{$stage}) {$initialPendingTotals{$stage} = 0;}
-        $initialPendingTotals{$stage} = $initialPendingTotals{$stage} + $stageMetrics->getInitialPending();
-        if (!$processedTotals{$stage}) {$processedTotals{$stage} = 0;}
-        $processedTotals{$stage} = $processedTotals{$stage} + $stageMetrics->getProcessed();
-        if (!$finalPendingTotals{$stage}) {$finalPendingTotals{$stage} = 0;}
-        $finalPendingTotals{$stage} = $finalPendingTotals{$stage} + $stageMetrics->getFinalPending();
-        if (!$faultTotals{$stage}) {$faultTotals{$stage} = 0;}
-        $faultTotals{$stage} = $faultTotals{$stage} + $stageMetrics->getFaults();
-    }
-
-    $table .= "</table>";
-    $table .= "<br>\n";
-
-    if ($haveLabelData) { $labelTables{$label} = $table; print "- $label\n" }
+    $thisDay = $czarDb->addInterval($thisDay, "1 DAY");
+    if ($czarDb->isBefore($end, $thisDay)) {last;}
 }
-
-
-
-
-# create hyperlink list of list of active labels
-print HTMLDOC "<h2>Active labels for this day</h1>\n";
-foreach my $label (keys (%labelTables)) {
-
-    print HTMLDOC "<a href=\"#$label\">$label</a><br>\n";
-}
-
-# some plots
-print HTMLDOC "<h1 align=\"middle\">Summary plots</h1>\n";
-$plotter->createTimeSeries("all_stdscience_labels", undef, $begin, $end, 0, 0, 0);
-print HTMLDOC "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_t.png\" alt=\"All labels and all stages for $day\" />\n";
-$plotter->createHistogram("all_stdscience_labels", $begin, $end, 0, 0, 0);
-print HTMLDOC "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_h.png\" alt=\"All stages for all_stdscience_labels for $day\" />\n";
-$plotter->createRateTimeSeries("all_stdscience_labels", undef, $begin, $end, "1 HOUR", 0);
-print HTMLDOC "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_r.png\" alt=\"All stages for all_stdscience_labels for $day\" />\n";
-$plotter->plotStorageTimeSeries($begin, $end);
-print HTMLDOC "<img src=\"czarplot_cluster.png\" alt=\"All stages for all_stdscience_labels for $day\" />\n";
-
-
-# survey table
-printSurveyTable();
-
-# table for stage totals
-$table =  "<h2  align=\"middle\">Totals for all labels</h1>\n";
-$table .= "<table border='1'>";
-$table .= "  <tr>\n";
-$table .= "    <th>Stage</th>\n";
-$table .= "    <th>Initial Pending</th>\n";
-$table .= "    <th>Processed</th>\n";
-$table .= "    <th>Final Pending</th>\n";
-$table .= "    <th>Remaining Faults</th>\n";
-$table .= "  </tr>\n";
-foreach my $stage ( @stages ){
-
-    $table .= "  <tr>\n";
-    $table .= sprintf( "    <td>%s</td>\n", $stage );
-    $table .= sprintf( "    <td>%d</td>\n", $initialPendingTotals{$stage} );
-    $table .= sprintf( "    <td>%d</td>\n", $processedTotals{$stage} );
-    $table .= sprintf( "    <td>%d</td>\n", $finalPendingTotals{$stage} );
-    $table .= sprintf( "    <td>%d</td>\n", $faultTotals{$stage} );
-    $table .= "  </tr>\n";
-}
-$table .= "</table>";
-$table .= "<br>\n";
-
-print HTMLDOC $table;
-
-# print all label tables to page
-foreach my $label (keys (%labelTables)) {
-     
-    print HTMLDOC "<a name=\"$label\"></a>\n";
-    print HTMLDOC "<h2  align=\"middle\">$label <a href=\"#top\">(top)</a></h1>\n";
-    $plotter->createTimeSeries($label, undef, $begin, $end, 0, 0, 0);
-    print HTMLDOC "<img src=\"czarplot_linear_".$label."_all_stages_t.png\" alt=\"All stages for $label for $day\" />\n";
-    $plotter->createHistogram($label, $begin, $end, 0, 0, 0);
-    print HTMLDOC "<img src=\"czarplot_linear_".$label."_all_stages_h.png\" alt=\"All stages for $label for $day\" />\n";
-
-    print HTMLDOC $labelTables{$label};
-}
-
-
-print HTMLDOC "<br>\n";
-print HTMLDOC "</body>\n";
-print HTMLDOC "</html>\n";
-close(HTMLDOC);
-
-
-###########################################################################
-#
-# Creates a survey table
-#
-###########################################################################
-
-sub printSurveyTable() {
-
-    print HTMLDOC "<h2  align=\"middle\">Survey statistics</h1>\n";
-    print HTMLDOC "<table border='1'>";
-    print HTMLDOC "  <tr>\n";
-    print HTMLDOC "    <th>Survey</th>\n";
-    print HTMLDOC "    <th>Started burntool</th>\n";
-    print HTMLDOC "    <th>Finished distribution</th>\n";
-    print HTMLDOC "    <th>Time taken</th>\n";
-    print HTMLDOC "  </tr>\n";
-
-# OSS survey
-    my ($started, $finished, $timeTaken) = undef;
-    $czarDb->getDayTimings("OSS.nightlyscience", "burntool", "diff", $begin, \$started, \$finished, \$timeTaken);
-    printSurveyDetails("OSS", $started, $finished, $timeTaken);
-
-# MDF surveys
-    my @mdfs = ("M31.nightlyscience",
-            "MD01.nightlyscience", 
-            "MD02.nightlyscience", 
-            "MD03.nightlyscience", 
-            "MD04.nightlyscience", 
-            "MD05.nightlyscience", 
-            "MD06.nightlyscience", 
-            "MD07.nightlyscience", 
-            "MD08.nightlyscience", 
-            "MD09.nightlyscience", 
-            "MD10.nightlyscience",
-            "MD11.nightlyscience");
-
-    my $earliest = "2099-01-01";
-    my $latest = "2001-01-01";
-
-    my $mdf;
-    my $haveStart = 0;
-    my $haveEnd = 0;
-    foreach $mdf (@mdfs) {
-
-        if ($czarDb->getDayTimings($mdf, "burntool", "dist", $begin, \$started, \$finished, \$timeTaken)) {
-
-            if ($started && $czarDb->isBefore($started, $earliest)) {$earliest = $started; $haveStart = 1;}
-            if ($finished && $czarDb->isBefore($latest, $finished)) {$latest = $finished; $haveEnd = 1;}
-        }
-    }
-
-    if (!$haveStart) {$earliest = undef;}
-    if (!$haveEnd) {$latest = undef;}
-    if (!$haveStart || !$haveEnd) {$timeTaken = undef;}
-
-    else {$timeTaken = $czarDb->diffTimes($latest, $earliest);}
-    printSurveyDetails("MDF", $earliest, $latest, $timeTaken);
-
-    $czarDb->getDayTimings("all_stdscience_labels", "burntool", "dist", $begin, \$started, \$finished, \$timeTaken);
-    printSurveyDetails("All", $started, $finished, $timeTaken);
-
-    print HTMLDOC "</table>\n";
-}
-###########################################################################
-#
-# Creates a row in the survey table
-#
-###########################################################################
-sub printSurveyDetails() {
-    my ($survey, $started, $finished, $timeTaken, $processed, $pending) = @_;
-
-    print HTMLDOC "  <tr>\n";
-    print HTMLDOC "    <td>$survey</td>\n";
-    printf (HTMLDOC "    <td>%s</td>\n", $started ? $started : "no");
-    printf (HTMLDOC "    <td>%s</td>\n", $finished ? $finished : "no");
-    printf (HTMLDOC "    <td>%s</td>\n", $timeTaken ? $timeTaken : "na");
-    print HTMLDOC "  </tr>\n";
-}
-
