- Timestamp:
- Nov 26, 2010, 10:33:29 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/ipp-20101103/tools/czartool/CzarDb.pm
r29582 r29834 6 6 use strict; 7 7 8 use File::Temp; 9 8 10 my @stages = ("burntool", "chip", "cam", "fake", "warp", "stack", "diff", "magic", "magicDS", "dist"); # TODO put elsewhere 9 11 10 12 use base 'czartool::MySQLDb'; 11 13 our @ISA = qw(czartool::MySQLDb); # inherits from MySQLDb 14 15 use czartool::StageMetrics; 12 16 13 17 ########################################################################### … … 49 53 return 1; 50 54 } 55 56 ########################################################################### 57 # 58 # Gets stdscience lables active in the provided time period 59 # TODO ugly hack to avoind getting update labels 60 # 61 ########################################################################### 62 sub getStdscienceLabelsInTimePeriod { 63 my ($self, $begin, $end, $labels) = @_; 64 65 my $query = $self->{_db}->prepare(<<SQL); 66 67 SELECT DISTINCT label 68 FROM chip 69 WHERE timestamp >= '$begin' 70 AND timestamp <= '$end' 71 AND label NOT LIKE '%_ud%' 72 AND label NOT LIKE 'update%' 73 AND label NOT LIKE 'all_%_labels' 74 SQL 75 76 if (!$query->execute) {return 0;} 77 78 ${$labels} = $query->fetchall_arrayref(); 79 80 return 1; 81 } 82 83 51 84 52 85 ########################################################################### … … 264 297 } 265 298 299 ########################################################################### 300 # 301 # Returns the start and end times during one day for the provided label and start/end stages 302 # 303 ########################################################################### 304 sub getDayTimings { 305 my ($self, $label, $startStage, $endStage, $begin, $started, $finished, $timeTaken) = @_; 306 307 my $end = $self->addInterval($begin, "1 DAY"); 308 309 my $startStageMetrics = new czartool::StageMetrics($startStage, $label, $begin, $end); 310 my $endStageMetrics = new czartool::StageMetrics($endStage, $label, $begin, $end); 311 312 if (!$self->runAnalysis($startStageMetrics)) {return 0;} 313 if (!$self->runAnalysis($endStageMetrics)) {return 0;} 314 315 ${$started} = $startStageMetrics->getStarted(); 316 ${$finished} = $endStageMetrics->getFinished100(); 317 318 if (!${$started} || !${$finished}) {${$timeTaken} = undef;} 319 else {${$timeTaken} = $self->diffTimes(${$finished}, ${$started});} 320 321 return 1; 322 } 266 323 267 324 ########################################################################### … … 271 328 ########################################################################### 272 329 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) = @_; 330 my ($self, $stageMetrics) = @_; 331 332 if (!$stageMetrics) {return 0;} 333 334 my $stage = $stageMetrics->getStage(); 335 my $label = $stageMetrics->getLabel(); 336 my $fromTime = $stageMetrics->getStartTime(); 337 my $toTime = $stageMetrics->getEndTime(); 338 339 $toTime = $self->addInterval($toTime, "20 MINUTE"); # TODO dodgy 285 340 286 341 my $query = $self->{_db}->prepare(<<SQL); … … 293 348 SQL 294 349 295 $query->execute;296 297 350 my $lastProcessed = -1; 298 351 my $lastPending = -1; … … 300 353 my $lastTimestamp = undef; 301 354 my ($linearProcessed, $linearPending, $linearFaults); 355 356 # first, count toatl processed in time window so that we can find time of 50%, 75%, 90% etc 357 $query->execute; 358 my $totalProcessed = 0; 359 my $firstRow = 1; 360 while (my @row = $query->fetchrow_array()) { 361 my ($thisTimestamp, $thisPending, $thisFaults, $thisProcessed) = @row; 362 363 # get linear values 364 if($lastProcessed != -1 && $thisProcessed > $lastProcessed) { 365 366 $totalProcessed = $totalProcessed + ($thisProcessed - $lastProcessed); 367 } 368 369 $lastProcessed = $thisProcessed; 370 if ($firstRow) {$stageMetrics->setInitialPending($thisPending); $firstRow = 0;} 371 } 372 373 # nothing to do here 374 if (!$totalProcessed) {return 1;} 375 376 my $percent25 = $totalProcessed * 0.25; 377 my $percent50 = $totalProcessed * 0.5; 378 my $percent75 = $totalProcessed * 0.75; 379 my $percent90 = $totalProcessed * 0.9; 380 my $percent95 = $totalProcessed * 0.95; 381 302 382 my ($derivProcessed, $derivPending, $derivFaults); 303 my $started = undef;304 my $finished = undef;305 306 383 my $notProcessing = undef; 307 384 my $howLongNotProcessing = undef; 308 385 my $notProcessingLongerThanInterval = 0; 309 310 386 my $stuck = undef; 311 387 my $howLongStuck = undef; 312 388 my $stuckLongerThanInterval = 0; 313 314 389 my $stuffToDo = undef; 315 my $interval = "00:20:00"; 316 390 my $interval = "00:20:00"; # TODO dodgy - see above 391 my $started = undef; 392 my $finished = undef; 393 394 my ($have25, $have50, $have75, $have90, $have95, $have100) = 0; 395 396 # now, loop again, this time recording more data 397 $query->execute; 317 398 $linearProcessed = 0; 399 $lastProcessed = -1; 318 400 while (my @row = $query->fetchrow_array()) { 319 401 my ($thisTimestamp, $thisPending, $thisFaults, $thisProcessed) = @row; … … 326 408 $linearPending = $thisPending; 327 409 $linearFaults = $thisFaults; 410 411 if (!$have25 && $linearProcessed >= $percent25) {$stageMetrics->setFinished25($thisTimestamp); $have25 = 1;} 412 if (!$have50 && $linearProcessed >= $percent50) {$stageMetrics->setFinished50($thisTimestamp); $have50 = 1;} 413 if (!$have75 && $linearProcessed >= $percent75) {$stageMetrics->setFinished75($thisTimestamp); $have75 = 1;} 414 if (!$have90 && $linearProcessed >= $percent90) {$stageMetrics->setFinished90($thisTimestamp); $have90 = 1;} 415 if (!$have95 && $linearProcessed >= $percent95) {$stageMetrics->setFinished95($thisTimestamp); $have95 = 1;} 328 416 329 417 # get first derivative values … … 363 451 if (defined $notProcessing) { 364 452 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 453 $notProcessing = undef; 374 454 $stuck = undef; 375 455 } 376 456 if (!defined $started) { 457 377 458 $started = $lastTimestamp; 378 459 $finished = undef; 379 # print "* $stage processing started at $started\n";380 460 } 381 461 } … … 418 498 } 419 499 420 ${$_processed} = $linearProcessed; 421 ${$_pending} = $stuffToDo; 422 ${$_faults} = $lastFaults; 500 $stageMetrics->setProcessed($linearProcessed); 501 $stageMetrics->setFinalPending($stuffToDo); 502 $stageMetrics->setFaults($lastFaults); 503 504 505 if (!defined $finished) { 506 507 $stageMetrics->setFinished25(undef); 508 $stageMetrics->setFinished50(undef); 509 $stageMetrics->setFinished75(undef); 510 $stageMetrics->setFinished90(undef); 511 $stageMetrics->setFinished95(undef); 512 $stageMetrics->setFinished100(undef); 513 $stageMetrics->setTotalTime($self->diffTimes($lastTimestamp, $started)); 514 } 423 515 424 516 if (defined $finished) { 425 ${$_finished} = $finished; 426 ${$_totalTime} = $self->diffTimes($finished, $started); 427 } 428 429 elsif(defined $started) { 430 431 ${$_finished} = undef; 432 } 433 517 518 $stageMetrics->setFinished100($finished); 519 $stageMetrics->setTotalTime($self->diffTimes($finished, $started)); 520 } 521 522 434 523 if (!defined $started){ 435 524 436 $ {$_started} = undef;525 $stageMetrics->setStarted(undef); 437 526 } 438 527 else { 439 528 440 ${$_started} = $started; 529 my $rate = ($stageMetrics->getProcessed()/$self->getTimeInSecs($stageMetrics->getTotalTime) ) * 3600.0; 530 $stageMetrics->setRate($rate); 531 $stageMetrics->setStarted($started); 441 532 } 442 533 if ($stuck && $stuckLongerThanInterval && !defined $finished) { 443 534 444 $ {$_stuck} = $stuck;535 $stageMetrics->setStuck($stuck); 445 536 } 446 537 else { 447 538 448 $ {$_stuck} = undef;539 $stageMetrics->setStuck(undef); 449 540 } 450 541 … … 484 575 $query->execute; 485 576 486 ${$dataFile} = "/tmp/czarplot_gnuplot_".$label."_".$stage."_t.dat"; 577 my $tmpFile = File::Temp->new( TEMPLATE => "czarplot_gnuplot_".$label."_".$stage."_t.XXXXX", DIR => '/tmp', SUFFIX => 'dat'); 578 $tmpFile->unlink_on_destroy( 0 ); 579 ${$dataFile} = $tmpFile->filename; 487 580 open (GNUDAT, ">${$dataFile}") or print "* Problem opening gnuplot data file for plot for '$label' '$stage'\n"; 488 581 … … 497 590 498 591 $linearProcessed = 0; 592 my $someData = 0; 499 593 while (my @row = $query->fetchrow_array()) { 500 594 my ($thisTimestamp, $thisPending, $thisFaults, $thisProcessed) = @row; … … 517 611 my $timeDiff = $self->diffTimesInSecs($thisTimestamp, $lastTimestamp); 518 612 519 if ($thisProcessed >= $lastProcessed ){613 if ($thisProcessed >= $lastProcessed && $timeDiff){ 520 614 $derivProcessed = abs($thisProcessed - $lastProcessed)/$timeDiff; 521 615 } … … 547 641 else {print GNUDAT "$timestamp $linearPending $linearFaults $linearProcessed\n";} 548 642 643 if ($linearPending > 0 || $linearFaults > 0 || $linearProcessed > 0) {$someData = 1;} 644 549 645 $lastProcessed = $thisProcessed; 550 646 $lastPending = $thisPending; … … 555 651 close(GNUDAT) or print "* Problem closing gnuplot data file for plot for '$label' '$stage'\n"; 556 652 557 return 1;653 #return $someData; 558 654 } 559 655 … … 637 733 ########################################################################### 638 734 sub createHostsData { 639 my ($self, $limit) = @_; 640 641 my $dataFile = "/tmp/czarplot_hosts_space.dat"; 642 open (GNUDAT, ">$dataFile"); 735 my ($self, $limit, $tmpFile) = @_; 736 737 open (GNUDAT, ">".$tmpFile->filename); 643 738 644 739 my $query = $self->{_db}->prepare(<<SQL); … … 686 781 print GNUDAT "\n"; 687 782 } 783 688 784 close(GNUDAT); 689 690 return $dataFile;691 785 } 692 786 … … 714 808 ########################################################################### 715 809 sub createStorageTimeSeriesData { 716 my ($self, $fromTime, $toTime, $minX, $maxX, $minY, $maxY, $timeDiff) = @_; 717 718 my $dataFile = "/tmp/czarplot_gnuplot_storage_timeseries.dat"; 719 open (GNUDAT, ">$dataFile"); 810 my ($self, $tmpFile, $fromTime, $toTime, $minX, $maxX, $minY, $maxY, $timeDiff) = @_; 811 812 open (GNUDAT, ">".$tmpFile->filename); 720 813 721 814 my $query = $self->{_db}->prepare(<<SQL); … … 753 846 754 847 close(GNUDAT); 755 756 return $dataFile;757 848 } 758 849 … … 763 854 ########################################################################### 764 855 sub createProcessingRateData { 765 my ($self, $stage, $label, $ startDay, $endDay, $interval, $dataFile, $isLog) = @_;766 767 my $startTime = $ startDay;856 my ($self, $stage, $label, $begin, $end, $interval, $dataFile, $isLog) = @_; 857 858 my $startTime = $begin; 768 859 my $endTime; 769 860 my $quit = 0; … … 772 863 my $faults; 773 864 my $timestamp; 774 ${$dataFile} = "/tmp/czarplot_gnuplot_".$label."_".$stage."_r.dat"; 865 866 my $tmpFile = File::Temp->new( TEMPLATE => "czarplot_gnuplot_".$label."_".$stage."_r.XXXXX", DIR => '/tmp', SUFFIX => 'dat'); 867 $tmpFile->unlink_on_destroy( 0 ); 868 ${$dataFile} = $tmpFile->filename; 869 775 870 open (GNUDAT, ">${$dataFile}") or print "* Problem opening gnuplot data file for plot for '$label' '$stage'\n"; 776 871 my $cleanupCarry = 0; 872 my $someData = 0; 777 873 while(1) { 778 874 779 if (!$self->isBefore($startTime, $endDay)) {last;} 875 876 #print "NNN $startTime, $end\n"; 877 if (!$self->isBefore($startTime, $end)) {last;} 780 878 $endTime = $self->addInterval($startTime, $interval); 781 879 $self->countProcessedPendingAndFaults($label, $stage, $startTime, $endTime, \$processed, \$pending, \$faults); … … 783 881 print GNUDAT "$timestamp $processed 0 0\n"; 784 882 883 if ($processed > 0 ) {$someData = 1;} 884 785 885 $startTime = $endTime; 786 886 } 787 887 788 close(GNUDAT) or print "* Problem closing gnuplot data file for rate plot for '$label' '$stage'\n" 888 close(GNUDAT) or print "* Problem closing gnuplot data file for rate plot for '$label' '$stage'\n"; 889 890 #return $someData; 789 891 } 790 892 … … 1512 1614 $self->setRevision(12); 1513 1615 } 1514 1515 1616 1; 1516 1617
Note:
See TracChangeset
for help on using the changeset viewer.
