Changeset 29686
- Timestamp:
- Nov 5, 2010, 3:54:50 PM (16 years ago)
- Location:
- trunk/tools
- Files:
-
- 2 added
- 5 edited
-
czarmetrics.pl (added)
-
czarplot.pl (modified) (5 diffs)
-
czartool/CzarDb.pm (modified) (11 diffs)
-
czartool/Gpc1Db.pm (modified) (2 diffs)
-
czartool/MySQLDb.pm (modified) (4 diffs)
-
czartool/Plotter.pm (modified) (3 diffs)
-
czartool/StageMetrics.pm (added)
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/czarplot.pl
r29580 r29686 9 9 use czartool::CzarDb; 10 10 use czartool::Plotter; 11 use czartool::StageMetrics; 11 12 12 13 my $czarDbName = "czardb"; … … 57 58 print "* UNKNKOWN: option @ARGV\n"; 58 59 } 60 if ($analysis && !$stage) { 61 $quit = 1; 62 print "* REQUIRED: choose a stage for analsis -s <chip|cam|warp|etc> (default=none)\n";} 59 63 if (!$histogram) { 60 64 print "* OPTIONAL: plot histogram -h (default=off)\n";} … … 98 102 99 103 # default values 100 if (!$nebulous && !$histogram && !$ timeSeries) {$timeSeries = 1; $histogram = 0;}104 if (!$nebulous && !$histogram && !$analysis && !$timeSeries) {$timeSeries = 1; $histogram = 0;} 101 105 if (!$verbose) {$verbose = 0;} 102 106 if (!$save_temps) {$save_temps = 0;} … … 121 125 $begin = "$day 06:35"; 122 126 $end = "$day 23:59"; 127 print "JKJKJK '$begin' '$end' \n"; 128 123 129 } 124 130 else { … … 147 153 if($analysis) { 148 154 149 my ($started, $finished, $stuck, $processed, $pending, $faults, $totalTime); 150 $czarDb->runAnalysis($label, $stage, $begin, $end, \$started, \$finished, \$stuck, \$processed, \$pending, \$faults, \$totalTime); 151 152 if (defined $started) {print "* Processing started at $started\n";} 153 if (defined $finished) {print "* Processing finished at $finished and took $totalTime\n";} 154 else {print "* Processing has not finished\n";} 155 if (defined $stuck) {print "* Processing has been stuck since $stuck\n";} 156 print "* $processed exposures have been processed, with $pending pending and $faults faults\n"; 157 158 print "*******************************************************************************\n"; 155 my $stageMetrics = new czartool::StageMetrics($stage, $label, $begin, $end); 156 if ($czarDb->runAnalysis($stageMetrics)) {$stageMetrics->printMe();} 159 157 } -
trunk/tools/czartool/CzarDb.pm
r29582 r29686 10 10 use base 'czartool::MySQLDb'; 11 11 our @ISA = qw(czartool::MySQLDb); # inherits from MySQLDb 12 13 use czartool::StageMetrics; 12 14 13 15 ########################################################################### … … 49 51 return 1; 50 52 } 53 54 ########################################################################### 55 # 56 # Gets stdscience lables active in the provided time period 57 # TODO ugly hack to avoind getting update labels 58 # 59 ########################################################################### 60 sub getStdscienceLabelsInTimePeriod { 61 my ($self, $begin, $end, $labels) = @_; 62 63 my $query = $self->{_db}->prepare(<<SQL); 64 65 SELECT DISTINCT label 66 FROM chip 67 WHERE timestamp >= '$begin' 68 AND timestamp <= '$end' 69 AND label NOT LIKE '%_ud%' 70 AND label NOT LIKE 'update%' 71 AND label NOT LIKE 'all_%_labels' 72 SQL 73 74 if (!$query->execute) {return 0;} 75 76 ${$labels} = $query->fetchall_arrayref(); 77 78 return 1; 79 } 80 81 51 82 52 83 ########################################################################### … … 264 295 } 265 296 297 ########################################################################### 298 # 299 # Returns the start and end times during one day for the provided label and start/end stages 300 # 301 ########################################################################### 302 sub getDayTimings { 303 my ($self, $label, $startStage, $endStage, $begin, $started, $finished, $timeTaken) = @_; 304 305 my $end = $self->addInterval($begin, "1 DAY"); 306 307 my $startStageMetrics = new czartool::StageMetrics($startStage, $label, $begin, $end); 308 my $endStageMetrics = new czartool::StageMetrics($endStage, $label, $begin, $end); 309 310 if (!$self->runAnalysis($startStageMetrics)) {return 0;} 311 if (!$self->runAnalysis($endStageMetrics)) {return 0;} 312 313 ${$started} = $startStageMetrics->getStarted(); 314 ${$finished} = $endStageMetrics->getFinished100(); 315 316 if (!${$started} || !${$finished}) {${$timeTaken} = undef;} 317 else {${$timeTaken} = $self->diffTimes(${$finished}, ${$started});} 318 319 return 1; 320 } 266 321 267 322 ########################################################################### … … 271 326 ########################################################################### 272 327 sub runAnalysis { 273 my ($self, 274 $label, 275 $stage, 276 $fromTime, 277 $toTime, 278 $_started, 279 $_finished, 280 $_stuck, 281 $_processed, 282 $_pending, 283 $_faults, 284 $_totalTime) = @_; 328 my ($self, $stageMetrics) = @_; 329 330 if (!$stageMetrics) {return 0;} 331 332 my $stage = $stageMetrics->getStage(); 333 my $label = $stageMetrics->getLabel(); 334 my $fromTime = $stageMetrics->getStartTime(); 335 my $toTime = $stageMetrics->getEndTime(); 336 337 $toTime = $self->addInterval($toTime, "20 MINUTE"); # TODO dodgy 285 338 286 339 my $query = $self->{_db}->prepare(<<SQL); … … 293 346 SQL 294 347 295 $query->execute;296 297 348 my $lastProcessed = -1; 298 349 my $lastPending = -1; … … 300 351 my $lastTimestamp = undef; 301 352 my ($linearProcessed, $linearPending, $linearFaults); 353 354 # first, count toatl processed in time window so that we can find time of 50%, 75%, 90% etc 355 $query->execute; 356 my $totalProcessed = 0; 357 my $firstRow = 1; 358 while (my @row = $query->fetchrow_array()) { 359 my ($thisTimestamp, $thisPending, $thisFaults, $thisProcessed) = @row; 360 361 # get linear values 362 if($lastProcessed != -1 && $thisProcessed > $lastProcessed) { 363 364 $totalProcessed = $totalProcessed + ($thisProcessed - $lastProcessed); 365 } 366 367 $lastProcessed = $thisProcessed; 368 if ($firstRow) {$stageMetrics->setInitialPending($thisPending); $firstRow = 0;} 369 } 370 371 # nothing to do here 372 if (!$totalProcessed) {return 1;} 373 374 my $percent25 = $totalProcessed * 0.25; 375 my $percent50 = $totalProcessed * 0.5; 376 my $percent75 = $totalProcessed * 0.75; 377 my $percent90 = $totalProcessed * 0.9; 378 my $percent95 = $totalProcessed * 0.95; 379 302 380 my ($derivProcessed, $derivPending, $derivFaults); 303 my $started = undef;304 my $finished = undef;305 306 381 my $notProcessing = undef; 307 382 my $howLongNotProcessing = undef; 308 383 my $notProcessingLongerThanInterval = 0; 309 310 384 my $stuck = undef; 311 385 my $howLongStuck = undef; 312 386 my $stuckLongerThanInterval = 0; 313 314 387 my $stuffToDo = undef; 315 my $interval = "00:20:00"; 316 388 my $interval = "00:20:00"; # TODO dodgy - see above 389 my $started = undef; 390 my $finished = undef; 391 392 my ($have25, $have50, $have75, $have90, $have95, $have100) = 0; 393 394 # now, loop again, this time recording more data 395 $query->execute; 317 396 $linearProcessed = 0; 397 $lastProcessed = -1; 318 398 while (my @row = $query->fetchrow_array()) { 319 399 my ($thisTimestamp, $thisPending, $thisFaults, $thisProcessed) = @row; … … 326 406 $linearPending = $thisPending; 327 407 $linearFaults = $thisFaults; 408 409 if (!$have25 && $linearProcessed >= $percent25) {$stageMetrics->setFinished25($thisTimestamp); $have25 = 1;} 410 if (!$have50 && $linearProcessed >= $percent50) {$stageMetrics->setFinished50($thisTimestamp); $have50 = 1;} 411 if (!$have75 && $linearProcessed >= $percent75) {$stageMetrics->setFinished75($thisTimestamp); $have75 = 1;} 412 if (!$have90 && $linearProcessed >= $percent90) {$stageMetrics->setFinished90($thisTimestamp); $have90 = 1;} 413 if (!$have95 && $linearProcessed >= $percent95) {$stageMetrics->setFinished95($thisTimestamp); $have95 = 1;} 328 414 329 415 # get first derivative values … … 363 449 if (defined $notProcessing) { 364 450 365 if ($stuckLongerThanInterval) {366 367 # print "* $stage procesing was stuck for $howLongStuck, from $stuck until $lastTimestamp\n";368 }369 if ($notProcessingLongerThanInterval) {370 371 # print " * $stage not procesing for $howLongNotProcessing, from $notProcessing until $thisTimestamp\n";372 }373 451 $notProcessing = undef; 374 452 $stuck = undef; 375 453 } 376 454 if (!defined $started) { 455 377 456 $started = $lastTimestamp; 378 457 $finished = undef; 379 # print "* $stage processing started at $started\n";380 458 } 381 459 } … … 418 496 } 419 497 420 ${$_processed} = $linearProcessed; 421 ${$_pending} = $stuffToDo; 422 ${$_faults} = $lastFaults; 498 $stageMetrics->setProcessed($linearProcessed); 499 $stageMetrics->setFinalPending($stuffToDo); 500 $stageMetrics->setFaults($lastFaults); 501 502 503 if (!defined $finished) { 504 505 $stageMetrics->setFinished25(undef); 506 $stageMetrics->setFinished50(undef); 507 $stageMetrics->setFinished75(undef); 508 $stageMetrics->setFinished90(undef); 509 $stageMetrics->setFinished95(undef); 510 $stageMetrics->setFinished100(undef); 511 $stageMetrics->setTotalTime($self->diffTimes($lastTimestamp, $started)); 512 } 423 513 424 514 if (defined $finished) { 425 ${$_finished} = $finished; 426 ${$_totalTime} = $self->diffTimes($finished, $started); 427 } 428 429 elsif(defined $started) { 430 431 ${$_finished} = undef; 432 } 433 515 516 $stageMetrics->setFinished100($finished); 517 $stageMetrics->setTotalTime($self->diffTimes($finished, $started)); 518 } 519 520 434 521 if (!defined $started){ 435 522 436 $ {$_started} = undef;523 $stageMetrics->setStarted(undef); 437 524 } 438 525 else { 439 526 440 ${$_started} = $started; 527 my $rate = ($stageMetrics->getProcessed()/$self->getTimeInSecs($stageMetrics->getTotalTime) ) * 3600.0; 528 $stageMetrics->setRate($rate); 529 $stageMetrics->setStarted($started); 441 530 } 442 531 if ($stuck && $stuckLongerThanInterval && !defined $finished) { 443 532 444 $ {$_stuck} = $stuck;533 $stageMetrics->setStuck($stuck); 445 534 } 446 535 else { 447 536 448 $ {$_stuck} = undef;537 $stageMetrics->setStuck(undef); 449 538 } 450 539 … … 517 606 my $timeDiff = $self->diffTimesInSecs($thisTimestamp, $lastTimestamp); 518 607 519 if ($thisProcessed >= $lastProcessed ){608 if ($thisProcessed >= $lastProcessed && $timeDiff){ 520 609 $derivProcessed = abs($thisProcessed - $lastProcessed)/$timeDiff; 521 610 } … … 1512 1601 $self->setRevision(12); 1513 1602 } 1514 1515 1603 1; 1516 1604 -
trunk/tools/czartool/Gpc1Db.pm
r28924 r29686 56 56 57 57 return "ERROR"; 58 } 59 60 ########################################################################### 61 # 62 # Returns the number of science exposures taken 'last night' for a given day 63 # 64 # Notes: 65 # 66 # - 03:00 HST = 17:00 last night UTC 67 # - 17:00 HST = 07:00 this morning UTC 68 # - 'OBJECT' = science exposures 69 # 70 ########################################################################### 71 sub countScienceExposuresFromLastNight { 72 my ($self, $day) = @_; 73 74 my $begin = "$day 03"; 75 my $end = "$day 17"; 76 77 my $query = $self->{_db}->prepare(<<SQL); 78 SELECT COUNT(*) 79 FROM summitExp 80 WHERE dateobs > '$begin' 81 AND dateobs < '$end' AND 82 exp_type = 'OBJECT'; 83 SQL 84 85 $query->execute; 86 return scalar $query->fetchrow_array(); 58 87 } 59 88 … … 158 187 } 159 188 160 161 189 $query->execute; 162 190 return scalar $query->fetchrow_array(); -
trunk/tools/czartool/MySQLDb.pm
r29436 r29686 98 98 ########################################################################### 99 99 # 100 # Subtracts the provided interval from the provided time 101 # 102 ########################################################################### 103 sub subtractInterval { 104 my ($self, $time, $interval) = @_; 105 106 my $query = $self->{_db}->prepare(<<SQL); 107 SELECT '$time' - INTERVAL $interval; 108 SQL 109 $query->execute; 110 111 return scalar $query->fetchrow_array(); 112 } 113 114 ########################################################################### 115 # 100 116 # Finds the difference of two times 101 117 # … … 104 120 my ($self, $time1, $time2) = @_; 105 121 106 my $query = $self->{_db}->prepare(<<SQL); 122 if (!$time1 || !$time2) {return 0;} 123 124 my $query = $self->{_db}->prepare(<<SQL); 107 125 SELECT TIMEDIFF('$time1','$time2'); 126 SQL 127 128 $query->execute; 129 return scalar $query->fetchrow_array(); 130 } 131 132 ########################################################################### 133 # 134 # Returns the provided time in seconds 135 # 136 ########################################################################### 137 sub getTimeInSecs { 138 my ($self, $time) = @_; 139 140 if (!$time) {return 0;} 141 142 my $query = $self->{_db}->prepare(<<SQL); 143 SELECT TIME_TO_SEC('$time'); 108 144 SQL 109 145 … … 120 156 my ($self, $time1, $time2) = @_; 121 157 122 my $query = $self->{_db}->prepare(<<SQL); 158 if (!$time1 || !$time2) {return 0;} 159 160 my $query = $self->{_db}->prepare(<<SQL); 123 161 SELECT TIME_TO_SEC(TIMEDIFF('$time1','$time2')); 124 162 SQL … … 138 176 my $query = $self->{_db}->prepare(<<SQL); 139 177 SELECT INTERVAL('$interval1', '$interval2'); 140 SQL141 $query->execute;142 143 return scalar $query->fetchrow_array();144 }145 146 ###########################################################################147 #148 # Subtracts the provided interval from the provided time149 #150 ###########################################################################151 sub subtractInterval {152 my ($self, $time, $interval) = @_;153 154 my $query = $self->{_db}->prepare(<<SQL);155 SELECT '$time' - INTERVAL $interval;156 178 SQL 157 179 $query->execute; -
trunk/tools/czartool/Plotter.pm
r29618 r29686 67 67 my $stages = undef; 68 68 69 if (!$selectedStage) {$stages = \@allStages;} 69 if (!$selectedStage) { 70 $stages = \@allStages; 71 $selectedStage = 'all_stages'; 72 } 70 73 else {$stages = ["$selectedStage"]}; 71 74 72 $self->{_czarDb}->getTimeMinMaxDiff($label, $selectedStage, $beginTime, $endTime, \$minX, \$maxX, \$timeDiff);75 $self->{_czarDb}->getTimeMinMaxDiff($label, "chip", $beginTime, $endTime, \$minX, \$maxX, \$timeDiff); 73 76 74 77 my $divX; … … 95 98 # "set xrange [\"$minX\":\"$maxX\"];" . 96 99 "set boxwidth;" . 100 "set xtic rotate by -90 scale 0;" . 97 101 "set style data histogram;" . 98 102 "set style histogram rowstacked;" . … … 124 128 print GP ";\n"; 125 129 close GP; 126 } 130 } 131 127 132 ########################################################################### 128 133 #
Note:
See TracChangeset
for help on using the changeset viewer.
