Changeset 29729
- Timestamp:
- Nov 9, 2010, 3:34:13 PM (16 years ago)
- File:
-
- 1 edited
-
trunk/tools/czarmetrics.pl (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/czarmetrics.pl
r29687 r29729 8 8 use CGI::Pretty qw[:standard]; 9 9 10 use czartool::DayMetrics; 10 11 use czartool::CzarDb; 11 12 use czartool::Gpc1Db; 12 use czartool::Plotter;13 use czartool::StageMetrics;14 13 15 14 my $czarDbName = "czardb"; 16 my $save_temps = undef; 17 my $interval = undef; 15 my $day = undef; 18 16 my $begin = undef; 19 17 my $end = undef; 20 my $burntoolEnd = undef;21 my $day = undef;22 18 my $verbose = undef; 19 my $save_temps = undef; 23 20 24 21 GetOptions ( 25 22 "dbname=s" => \$czarDbName, 23 "begin|b=s" => \$begin, 24 "end|e=s" => \$end, 26 25 "day|y=s" => \$day, 27 26 "verbose|v" => \$verbose, 28 27 ); 29 30 28 31 29 print "\n*******************************************************************************\n"; … … 37 35 } 38 36 if (!$day) { 39 print "* OPTIONAL: choose a single day to plot -y <date> (default=today)\n";37 print "* OPTIONAL: choose a single day to plot -y <date> (default=today)\n"; 40 38 } 39 if (!$begin) { 40 print "* OPTIONAL: choose a begin date -b <date> (default=today)\n";} 41 if (!$end) 42 { 43 print "* OPTIONAL: choose an end date -e <date> (default=today)\n"; 44 } 45 41 46 print "*\n*******************************************************************************\n"; 42 47 43 48 if ($quit) {exit;} 44 my @stages = ("burntool", "chip", "cam", "fake", "warp", "stack", "diff", "magic", "magicDS", "dist");45 49 46 50 my $gpc1Db = new czartool::Gpc1Db("gpc1", "ippdb01", "ippuser", "ippuser"); … … 48 52 $czarDb->setDateFormat("%Y%m%d-%H%i%s"); 49 53 50 # sort out times 51 if (!$day) {$day = strftime('%Y-%m-%d', localtime);} 52 $begin = "$day 06:00"; 53 $end = $czarDb->addInterval($begin, "1 DAY"); 54 $burntoolEnd = $czarDb->addInterval($begin, "12 HOUR"); 54 55 if (!$day && !$begin && !$end) { 56 57 $day = strftime('%Y-%m-%d', localtime); 58 } 59 if ($day) {($begin, $end) = $day;} 55 60 56 61 57 # create path, dir and html file 58 my $path = "./$day"; 59 mkdir($path, 0777); 60 my $plotter = new czartool::Plotter( 61 $czarDb, 62 "%Y%m%d-%H%M%S", 63 "png font \"/usr/share/fonts/corefonts/arial.ttf\" 8", 64 $path, 65 $save_temps); 62 my $thisDay = $begin; 63 while (1) { 66 64 67 # create HTML file and write header stuff 68 open (HTMLDOC, ">$day/index.html"); 69 print HTMLDOC "<html>\n"; 70 print HTMLDOC "<head>\n"; 71 print HTMLDOC "<title>IPP Metrics for $day</title>\n"; 72 print HTMLDOC "<a name=\"top\"></a>\n"; 73 print HTMLDOC "<h1 align=\"middle\">IPP Metrics for $day</h1>\n"; 65 my $dayMetrics = new czartool::DayMetrics($gpc1Db, $czarDb, "./ippMetrics", 1, 0, $thisDay); 66 $dayMetrics->writeHTML(); 74 67 75 # summit and burntool exposures 76 my $summitExposures = $gpc1Db->countScienceExposuresFromLastNight($day); 77 my $burntoolMetrics = new czartool::StageMetrics("burntool", "all_stdscience_labels", $begin, $burntoolEnd); 78 $czarDb->runAnalysis($burntoolMetrics); 79 80 81 my $previousDay = $czarDb->subtractInterval($day, "1 DAY"); 82 my $nextDay = $czarDb->addInterval($day, "1 DAY"); 83 84 85 86 print HTMLDOC "<h5 align=\"middle\">"; 87 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"; 88 print HTMLDOC "Measured from $begin to $end HST<br>\n"; 89 printf (HTMLDOC "%d exposures taken on summit last night, %d through burntool today</h5>\n", 90 $summitExposures, $burntoolMetrics->getProcessed() ? $burntoolMetrics->getProcessed() : 0 ); 91 print HTMLDOC "</head>\n"; 92 print HTMLDOC "<body>\n"; 93 94 95 96 97 98 my $labels = undef; 99 my $label; 100 if (!$czarDb->getStdscienceLabelsInTimePeriod($begin, $end, \$labels)) {next;} 101 102 my $size = @{$labels}; 103 my $table; 104 my $haveLabelData; 105 my %initialPendingTotals; 106 my %processedTotals; 107 my %finalPendingTotals; 108 my %faultTotals; 109 my %labelTables; 110 111 112 113 # loop through all labels and create tables for each that have content 114 foreach my $row ( @{$labels} ) { 115 my ($label) = @{$row}; 116 117 118 $table = "<table border='1'>"; 119 $table .= " <tr>\n"; 120 $table .= " <th>Stage</th>\n"; 121 $table .= " <th>Initial Pending</th>\n"; 122 $table .= " <th>Started</th>\n"; 123 $table .= " <th>25% complete</th>\n"; 124 $table .= " <th>50% complete</th>\n"; 125 $table .= " <th>75% complete</th>\n"; 126 $table .= " <th>90% complete</th>\n"; 127 $table .= " <th>95% complete</th>\n"; 128 $table .= " <th>Finished</th>\n"; 129 $table .= " <th>Time taken</th>\n"; 130 $table .= " <th>Processed</th>\n"; 131 $table .= " <th>Exp per hour</th>\n"; 132 $table .= " <th>Final Pending</th>\n"; 133 $table .= " </tr>\n"; 134 135 $haveLabelData = 0; 136 #while ( my ($stage, $value) = each(%processedTotals) ) { 137 138 foreach my $stage ( @stages ){ 139 140 my $stageMetrics = new czartool::StageMetrics($stage, $label, $begin, ($stage eq "burntool") ? $burntoolEnd : $end); 141 if (!$czarDb->runAnalysis($stageMetrics)) {next;} 142 143 if (!$stageMetrics->anythingProcessed()) {next;} 144 145 if ($stageMetrics->getProcessed() > 0) {$haveLabelData = 1;}; 146 147 $table .= " <tr>\n"; 148 $table .= sprintf( " <td>%s</td>\n", $stageMetrics->getStage() ); 149 $table .= sprintf( " <td>%d</td>\n", $stageMetrics->getInitialPending() ? $stageMetrics->getInitialPending() : "0" ); 150 $table .= sprintf( " <td>%s</td>\n", $stageMetrics->getStarted() ? $stageMetrics->getStarted() : ""); 151 $table .= sprintf( " <td>%s</td>\n", $stageMetrics->getFinished25() ? $stageMetrics->getFinished25() : "-" ); 152 $table .= sprintf( " <td>%s</td>\n", $stageMetrics->getFinished50() ? $stageMetrics->getFinished50() : "-" ); 153 $table .= sprintf( " <td>%s</td>\n", $stageMetrics->getFinished75() ? $stageMetrics->getFinished75() : "-" ); 154 $table .= sprintf( " <td>%s</td>\n", $stageMetrics->getFinished90() ? $stageMetrics->getFinished90() : "-" ); 155 $table .= sprintf( " <td>%s</td>\n", $stageMetrics->getFinished95() ? $stageMetrics->getFinished95() : "-" ); 156 $table .= sprintf( " <td>%s</td>\n", $stageMetrics->getFinished100() ? $stageMetrics->getFinished100() : "-" ); 157 $table .= sprintf( " <td>%s</td>\n", $stageMetrics->getTotalTime() ? $stageMetrics->getTotalTime() : "-" ); 158 $table .= sprintf( " <td>%d</td>\n", $stageMetrics->getProcessed() ? $stageMetrics->getProcessed() : "0" ); 159 $table .= sprintf( " <td>%.2f</td>\n", $stageMetrics->getRate() ? $stageMetrics->getRate() : "0" ); 160 $table .= sprintf( " <td>"); 161 if ($stageMetrics->getFinalPending() > 0) {$table .= "<font color=\"red\">";} 162 $table .= sprintf( "%d\n", $stageMetrics->getFinalPending() ); 163 if ($stageMetrics->getFinalPending() > 0) {$table .= "</font>\n";} 164 $table .= sprintf( "</td>"); 165 $table .= " </tr>\n"; 166 167 if (!$initialPendingTotals{$stage}) {$initialPendingTotals{$stage} = 0;} 168 $initialPendingTotals{$stage} = $initialPendingTotals{$stage} + $stageMetrics->getInitialPending(); 169 if (!$processedTotals{$stage}) {$processedTotals{$stage} = 0;} 170 $processedTotals{$stage} = $processedTotals{$stage} + $stageMetrics->getProcessed(); 171 if (!$finalPendingTotals{$stage}) {$finalPendingTotals{$stage} = 0;} 172 $finalPendingTotals{$stage} = $finalPendingTotals{$stage} + $stageMetrics->getFinalPending(); 173 if (!$faultTotals{$stage}) {$faultTotals{$stage} = 0;} 174 $faultTotals{$stage} = $faultTotals{$stage} + $stageMetrics->getFaults(); 175 } 176 177 $table .= "</table>"; 178 $table .= "<br>\n"; 179 180 if ($haveLabelData) { $labelTables{$label} = $table; print "- $label\n" } 68 $thisDay = $czarDb->addInterval($thisDay, "1 DAY"); 69 if ($czarDb->isBefore($end, $thisDay)) {last;} 181 70 } 182 183 184 185 186 # create hyperlink list of list of active labels187 print HTMLDOC "<h2>Active labels for this day</h1>\n";188 foreach my $label (keys (%labelTables)) {189 190 print HTMLDOC "<a href=\"#$label\">$label</a><br>\n";191 }192 193 # some plots194 print HTMLDOC "<h1 align=\"middle\">Summary plots</h1>\n";195 $plotter->createTimeSeries("all_stdscience_labels", undef, $begin, $end, 0, 0, 0);196 print HTMLDOC "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_t.png\" alt=\"All labels and all stages for $day\" />\n";197 $plotter->createHistogram("all_stdscience_labels", $begin, $end, 0, 0, 0);198 print HTMLDOC "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_h.png\" alt=\"All stages for all_stdscience_labels for $day\" />\n";199 $plotter->createRateTimeSeries("all_stdscience_labels", undef, $begin, $end, "1 HOUR", 0);200 print HTMLDOC "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_r.png\" alt=\"All stages for all_stdscience_labels for $day\" />\n";201 $plotter->plotStorageTimeSeries($begin, $end);202 print HTMLDOC "<img src=\"czarplot_cluster.png\" alt=\"All stages for all_stdscience_labels for $day\" />\n";203 204 205 # survey table206 printSurveyTable();207 208 # table for stage totals209 $table = "<h2 align=\"middle\">Totals for all labels</h1>\n";210 $table .= "<table border='1'>";211 $table .= " <tr>\n";212 $table .= " <th>Stage</th>\n";213 $table .= " <th>Initial Pending</th>\n";214 $table .= " <th>Processed</th>\n";215 $table .= " <th>Final Pending</th>\n";216 $table .= " <th>Remaining Faults</th>\n";217 $table .= " </tr>\n";218 foreach my $stage ( @stages ){219 220 $table .= " <tr>\n";221 $table .= sprintf( " <td>%s</td>\n", $stage );222 $table .= sprintf( " <td>%d</td>\n", $initialPendingTotals{$stage} );223 $table .= sprintf( " <td>%d</td>\n", $processedTotals{$stage} );224 $table .= sprintf( " <td>%d</td>\n", $finalPendingTotals{$stage} );225 $table .= sprintf( " <td>%d</td>\n", $faultTotals{$stage} );226 $table .= " </tr>\n";227 }228 $table .= "</table>";229 $table .= "<br>\n";230 231 print HTMLDOC $table;232 233 # print all label tables to page234 foreach my $label (keys (%labelTables)) {235 236 print HTMLDOC "<a name=\"$label\"></a>\n";237 print HTMLDOC "<h2 align=\"middle\">$label <a href=\"#top\">(top)</a></h1>\n";238 $plotter->createTimeSeries($label, undef, $begin, $end, 0, 0, 0);239 print HTMLDOC "<img src=\"czarplot_linear_".$label."_all_stages_t.png\" alt=\"All stages for $label for $day\" />\n";240 $plotter->createHistogram($label, $begin, $end, 0, 0, 0);241 print HTMLDOC "<img src=\"czarplot_linear_".$label."_all_stages_h.png\" alt=\"All stages for $label for $day\" />\n";242 243 print HTMLDOC $labelTables{$label};244 }245 246 247 print HTMLDOC "<br>\n";248 print HTMLDOC "</body>\n";249 print HTMLDOC "</html>\n";250 close(HTMLDOC);251 252 253 ###########################################################################254 #255 # Creates a survey table256 #257 ###########################################################################258 259 sub printSurveyTable() {260 261 print HTMLDOC "<h2 align=\"middle\">Survey statistics</h1>\n";262 print HTMLDOC "<table border='1'>";263 print HTMLDOC " <tr>\n";264 print HTMLDOC " <th>Survey</th>\n";265 print HTMLDOC " <th>Started burntool</th>\n";266 print HTMLDOC " <th>Finished distribution</th>\n";267 print HTMLDOC " <th>Time taken</th>\n";268 print HTMLDOC " </tr>\n";269 270 # OSS survey271 my ($started, $finished, $timeTaken) = undef;272 $czarDb->getDayTimings("OSS.nightlyscience", "burntool", "diff", $begin, \$started, \$finished, \$timeTaken);273 printSurveyDetails("OSS", $started, $finished, $timeTaken);274 275 # MDF surveys276 my @mdfs = ("M31.nightlyscience",277 "MD01.nightlyscience",278 "MD02.nightlyscience",279 "MD03.nightlyscience",280 "MD04.nightlyscience",281 "MD05.nightlyscience",282 "MD06.nightlyscience",283 "MD07.nightlyscience",284 "MD08.nightlyscience",285 "MD09.nightlyscience",286 "MD10.nightlyscience",287 "MD11.nightlyscience");288 289 my $earliest = "2099-01-01";290 my $latest = "2001-01-01";291 292 my $mdf;293 my $haveStart = 0;294 my $haveEnd = 0;295 foreach $mdf (@mdfs) {296 297 if ($czarDb->getDayTimings($mdf, "burntool", "dist", $begin, \$started, \$finished, \$timeTaken)) {298 299 if ($started && $czarDb->isBefore($started, $earliest)) {$earliest = $started; $haveStart = 1;}300 if ($finished && $czarDb->isBefore($latest, $finished)) {$latest = $finished; $haveEnd = 1;}301 }302 }303 304 if (!$haveStart) {$earliest = undef;}305 if (!$haveEnd) {$latest = undef;}306 if (!$haveStart || !$haveEnd) {$timeTaken = undef;}307 308 else {$timeTaken = $czarDb->diffTimes($latest, $earliest);}309 printSurveyDetails("MDF", $earliest, $latest, $timeTaken);310 311 $czarDb->getDayTimings("all_stdscience_labels", "burntool", "dist", $begin, \$started, \$finished, \$timeTaken);312 printSurveyDetails("All", $started, $finished, $timeTaken);313 314 print HTMLDOC "</table>\n";315 }316 ###########################################################################317 #318 # Creates a row in the survey table319 #320 ###########################################################################321 sub printSurveyDetails() {322 my ($survey, $started, $finished, $timeTaken, $processed, $pending) = @_;323 324 print HTMLDOC " <tr>\n";325 print HTMLDOC " <td>$survey</td>\n";326 printf (HTMLDOC " <td>%s</td>\n", $started ? $started : "no");327 printf (HTMLDOC " <td>%s</td>\n", $finished ? $finished : "no");328 printf (HTMLDOC " <td>%s</td>\n", $timeTaken ? $timeTaken : "na");329 print HTMLDOC " </tr>\n";330 }331
Note:
See TracChangeset
for help on using the changeset viewer.
