Changeset 29686 for trunk/tools/czartool/CzarDb.pm
- Timestamp:
- Nov 5, 2010, 3:54:50 PM (16 years ago)
- File:
-
- 1 edited
-
trunk/tools/czartool/CzarDb.pm (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
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
Note:
See TracChangeset
for help on using the changeset viewer.
