Changeset 31886
- Timestamp:
- Jul 15, 2011, 4:16:20 PM (15 years ago)
- Location:
- trunk/tools
- Files:
-
- 5 edited
-
czarplot.pl (modified) (4 diffs)
-
czarpoll.pl (modified) (3 diffs)
-
czartool/CzarDb.pm (modified) (7 diffs)
-
czartool/Metrics.pm (modified) (1 diff)
-
czartool/Plotter.pm (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/tools/czarplot.pl
r30953 r31886 26 26 my $rateInterval = undef; 27 27 my $deriv = undef; 28 my $showCleanup = undef;29 28 my $nebulous = undef; 30 29 my $savingToFile = undef; … … 46 45 "histogram|h" => \$histogram, 47 46 "nebulous|n" => \$nebulous, 48 "cleanup|c" => \$showCleanup,49 47 "rate|r" => \$rate, 50 48 "deriv|f" => \$deriv, … … 81 79 $analysis = 0; 82 80 print "* OPTIONAL: include analysis -a (default=$analysis)\n";} 83 if (!$showCleanup) {84 $showCleanup = 0;85 print "* OPTIONAL: include cleanup in timeseries -c (default=$showCleanup)\n";}86 81 if (!$log) { 87 82 $log = 0; … … 166 161 } 167 162 168 if ($rate ) {163 if ($rate and !$timeSeries) { 169 164 170 # default to a rate histogram if time series not selected 171 if (!$timeSeries) {$histogram = 1;} 172 $plotter->createRatePlot($label, $stage, $begin, $end, $rateInterval, $histogram, $timeSeries); 165 $plotter->createRateHistogram($label, $stage, $begin, $end, $rateInterval); 166 exit; 167 } 168 169 if (!$histogram && !$nebulous) { 170 $plotter->createTimeSeries($label, $stage, $begin, $end, $timeSeries, $log, $rate); 173 171 exit; 174 172 } 175 if (!$nebulous && $timeSeries) {$plotter->createTimeSeries($label, $stage, $begin, $end, $log, $showCleanup, $deriv);} 173 176 174 if ($histogram) {$plotter->createHistogram($label, $begin, $end);} 177 175 if ($nebulous && $timeSeries) {$plotter->plotStorageTimeSeries($begin, $end);} -
trunk/tools/czarpoll.pl
r31825 r31886 252 252 253 253 chomp($label); 254 $plotter->create LogAndLinearTimeSeries($label, $stage, $begin, $end);255 $plotter->createRate Plot($label, $stage, $begin, $end, undef, 1, 1);254 $plotter->createTimeSeries($label, $stage, $begin, $end, 1, 1, 1); 255 $plotter->createRateHistogram($label, $stage, $begin, $end, undef); 256 256 } 257 257 } … … 263 263 my ($label) = @{$row}; 264 264 265 $plotter->create LogAndLinearTimeSeries($label, undef, $begin, $end);266 $plotter->createRate Plot($label, undef, $begin, $end, undef, 1, 1);265 $plotter->createTimeSeries($label, undef, $begin, $end, 1, 1, 1); 266 $plotter->createRateHistogram($label, undef, $begin, $end, undef); 267 267 $plotter->createHistogram($label, $begin, $end); 268 268 } … … 270 270 $allServerLabels = "all_".$server."_labels"; 271 271 272 $plotter->create LogAndLinearTimeSeries($allServerLabels, undef, $begin, $end);273 $plotter->createRate Plot($allServerLabels, undef, $begin, $end, undef, 1, 1);272 $plotter->createTimeSeries($allServerLabels, undef, $begin, $end, 1, 1, 1); 273 $plotter->createRateHistogram($allServerLabels, undef, $begin, $end, undef); 274 274 $plotter->createHistogram($allServerLabels, $begin, $end); 275 275 foreach $stage (@stages) { 276 276 277 $plotter->create LogAndLinearTimeSeries($allServerLabels, $stage, $begin, $end); # TODO must be a neater way...278 $plotter->createRatePlot($allServerLabels, $stage, $begin, $end, undef, 1, 1);277 $plotter->createTimeSeries($allServerLabels, $stage, $begin, $end, 1, 1, 1); # TODO must be a neater way... 278 $plotter->createRateHistogram($allServerLabels, $stage, $begin, $end, undef); 279 279 } 280 280 } -
trunk/tools/czartool/CzarDb.pm
r31875 r31886 590 590 ########################################################################### 591 591 # 592 # Gets time series data and stores it to temp file 592 # Gets time series data and stores it to temp files 593 593 # 594 594 ########################################################################### 595 595 sub createTimeSeriesData { 596 my ($self, $label, $stage, $fromTime, $toTime, $minX, $maxX, $timeDiff, $ dataFile, $isLog, $showCleanup, $firstDeriv) = @_;597 598 my $query = $self->{_db}->prepare(<<SQL);599 SELECT600 MIN(processed)596 my ($self, $label, $stage, $fromTime, $toTime, $minX, $maxX, $timeDiff, $linDataFile, $logDataFile, $ratDataFile) = @_; 597 598 # get total number of data points 599 my $query = $self->{_db}->prepare(<<SQL); 600 SELECT COUNT(*) 601 601 FROM $stage 602 602 WHERE label LIKE '$label' … … 605 605 606 606 if (!$query->execute) {return 0;} 607 my $minProcessed = scalar $query->fetchrow_array(); 608 if (!defined $minProcessed) {return 0;} 609 607 my ($count) = $query->fetchrow_array(); 608 609 # decide on a number for the running mean for rate plots - use 10% of total data points 610 my $range = int($count/10); 610 611 $self->getTimeMinMaxDiff($label, $stage, $fromTime, $toTime, $minX, $maxX, $timeDiff); 611 612 # grab all the data for the provided time range 612 613 $query = $self->{_db}->prepare(<<SQL); 613 614 SELECT … … 621 622 $query->execute; 622 623 624 # set up Gnuplot datafiles 623 625 my $tmpFile = File::Temp->new( TEMPLATE => "czarplot_gnuplot_".$label."_".$stage."_t.XXXXX", DIR => '/tmp', SUFFIX => 'dat'); 624 626 $tmpFile->unlink_on_destroy( 0 ); 625 ${$dataFile} = $tmpFile->filename; 626 open (GNUDAT, ">${$dataFile}") or print "* Problem opening gnuplot data file for plot for '$label' '$stage'\n"; 627 ${$linDataFile} = $tmpFile->filename; 628 open (LINDAT, ">${$linDataFile}") or print "* Problem opening gnuplot data file for plot for '$label' '$stage'\n"; 629 630 $tmpFile = File::Temp->new( TEMPLATE => "czarplot_gnuplot_".$label."_".$stage."_t.XXXXX", DIR => '/tmp', SUFFIX => 'dat'); 631 $tmpFile->unlink_on_destroy( 0 ); 632 ${$logDataFile} = $tmpFile->filename; 633 open (LOGDAT, ">${$logDataFile}") or print "* Problem opening gnuplot data file for plot for '$label' '$stage'\n"; 634 635 $tmpFile = File::Temp->new( TEMPLATE => "czarplot_gnuplot_".$label."_".$stage."_t.XXXXX", DIR => '/tmp', SUFFIX => 'dat'); 636 $tmpFile->unlink_on_destroy( 0 ); 637 ${$ratDataFile} = $tmpFile->filename; 638 open (RATDAT, ">${$ratDataFile}") or print "* Problem opening gnuplot data file for plot for '$label' '$stage'\n"; 627 639 628 640 my $lastProcessed = -1; … … 633 645 my ($logProcessed, $logPending, $logFaults); 634 646 my ($derivProcessed, $derivPending, $derivFaults); 635 my $timestamp = undef; 647 my (@rateProcessed, @ratePending, @rateFaults); 648 my $formattedTimestamp = undef; 649 my $middleTime = undef; 650 my $formattedMiddleTimestamp = undef; 636 651 my $positiveJump = 0; 652 my @rateTimes; 653 my $diffPending = 0; 654 my $diffProcessed = 0; 655 my $diffFaults = 0; 656 my $lastDiffProcessed = 0; 657 $derivProcessed = 0; 637 658 638 659 $linearProcessed = 0; 639 660 my $someData = 0; 661 my $timeSep; 640 662 while (my @row = $query->fetchrow_array()) { 663 641 664 my ($thisTimestamp, $thisPending, $thisFaults, $thisProcessed) = @row; 642 665 643 644 # get first derivative values 666 $formattedTimestamp = $self->getFormattedDate($thisTimestamp); 667 668 # if not first time in.... 645 669 if (defined $lastTimestamp) { 646 670 647 my $timeDiff = $self->diffTimesInSecs($thisTimestamp, $lastTimestamp); 648 649 if ($thisProcessed >= $lastProcessed && $timeDiff){ 650 $derivProcessed = abs($thisProcessed - $lastProcessed)/$timeDiff; 671 # times 672 $timeSep = $self->diffTimesInSecs($thisTimestamp, $lastTimestamp); 673 $middleTime = $self->getMiddleTime($lastTimestamp, $thisTimestamp); 674 $formattedMiddleTimestamp = $self->getFormattedDate($middleTime); 675 676 $diffPending = $thisPending - $lastPending; 677 $diffFaults = $thisFaults - $lastFaults; 678 679 # we only count increases in processing - drops are due to cleanup etc 680 if ($thisProcessed > $lastProcessed) { 681 682 $diffProcessed = ($thisProcessed - $lastProcessed) - $positiveJump; 683 $linearProcessed = $linearProcessed + $diffProcessed; 651 684 } 652 else {$derivProcessed = 0;} 685 else { 686 687 $diffProcessed = 0; 688 $linearProcessed = $linearProcessed; 689 } 690 691 # calculate first derivative in units of images per hour 692 $derivPending = $diffPending/($timeSep/3600); 693 $derivFaults = $diffFaults/($timeSep/3600); 694 $derivProcessed = $diffProcessed/($timeSep/3600); 695 696 # look for large positive jumps in processed, most likely a label added, and store value to subtract from linear value below 697 if ($derivProcessed > 1000) { 698 $positiveJump = $thisProcessed - $lastProcessed; 699 } 700 else { 701 702 $positiveJump = 0; 703 } 704 } 705 # first time in 706 else { 707 653 708 $derivPending = 0; 654 709 $derivFaults = 0; 655 # $derivPending = abs($thisPending - $lastPending)/$timeDiff; 656 # $derivFaults = abs($thisFaults - $lastFaults)/$timeDiff; 657 658 # look for large positive jumps in processed, most likely a label added, and store value to subtract from linear value below 659 if ($derivProcessed > 0.3) { 660 661 $positiveJump = $thisProcessed - $lastProcessed; 662 #print "$derivProcessed at $thisTimestamp $positiveJump\n"; 710 $derivProcessed = 0; 711 $formattedMiddleTimestamp = $formattedTimestamp; 663 712 } 664 else { 665 $positiveJump = 0; 713 714 # deal with rate plot 715 push(@ratePending, $derivPending); 716 push(@rateFaults, $derivFaults); 717 push(@rateProcessed, $derivProcessed); 718 push(@rateTimes, $middleTime); 719 720 # get last few values 721 my $size = scalar (@rateProcessed); 722 if ($size > $range) { 723 724 my $counter = 0; 725 my $oldTime; 726 my $newTime = $rateTimes[$size-1]; 727 my $totalProcessed = 0; 728 my $totalPending = 0; 729 my $totalFaults = 0; 730 for (my $i=$size-1; $i>=($size - $range); $i--) { 731 732 $totalPending = $totalPending + $ratePending[$i]; 733 $totalFaults = $totalFaults + $rateFaults[$i]; 734 $totalProcessed = $totalProcessed + $rateProcessed[$i]; 735 $oldTime = $rateTimes[$i]; 736 $counter++; 666 737 } 738 739 my $meanPending = $totalPending / $counter; 740 my $meanFaults = $totalFaults / $counter; 741 my $meanProcessed = $totalProcessed / $counter; 742 743 my $formattedTimestamp = $self->getFormattedDate($self->getMiddleTime($oldTime, $newTime)); 744 print RATDAT "$formattedTimestamp $meanPending $meanFaults $meanProcessed\n"; 667 745 } 668 else { 669 670 $derivProcessed = 0; 671 $derivPending = 0; 672 $derivFaults = 0; 673 } 674 675 # get linear values 676 if ($showCleanup) { 677 678 $linearProcessed = $thisProcessed - $minProcessed; 679 } 680 elsif($lastProcessed != -1 && $thisProcessed > $lastProcessed) { 681 682 $linearProcessed = $linearProcessed + ($thisProcessed - $lastProcessed) - $positiveJump; 683 } 746 684 747 $linearPending = $thisPending; 685 748 $linearFaults = $thisFaults; … … 694 757 695 758 # print to data file 696 $timestamp = $self->getFormattedDate($thisTimestamp); 697 if ($firstDeriv) {print GNUDAT "$timestamp $derivPending $derivFaults $derivProcessed\n";} 698 elsif($isLog) {print GNUDAT "$timestamp $logPending $logFaults $logProcessed\n";} 699 else {print GNUDAT "$timestamp $linearPending $linearFaults $linearProcessed\n";} 759 print LOGDAT "$formattedTimestamp $logPending $logFaults $logProcessed\n"; 760 print LINDAT "$formattedTimestamp $linearPending $linearFaults $linearProcessed\n"; 700 761 701 762 if ($linearPending > 0 || $linearFaults > 0 || $linearProcessed > 0) {$someData = 1;} … … 705 766 $lastFaults = $thisFaults; 706 767 $lastTimestamp = $thisTimestamp; 707 } 708 709 close(GNUDAT) or print "* Problem closing gnuplot data file for plot for '$label' '$stage'\n"; 710 711 #return $someData; 768 $lastDiffProcessed = $diffProcessed; 769 } 770 771 close(LINDAT) or print "* Problem closing linear gnuplot data file for plot for '$label' '$stage'\n"; 772 close(LOGDAT) or print "* Problem closing log gnuplot data file for plot for '$label' '$stage'\n"; 773 close(RATDAT) or print "* Problem closing rate gnuplot data file for plot for '$label' '$stage'\n"; 712 774 } 713 775 … … 1017 1079 # 1018 1080 # Deletes all but one row per interval from all tables for the provided date range 1019 # TODO this is very clumsy, I just have time to thinmk of something more elegant1081 # TODO this is very clumsy, I just don't have time to think of something more elegant 1020 1082 # 1021 1083 ########################################################################### -
trunk/tools/czartool/Metrics.pm
r30958 r31886 77 77 print $htmlFile "<a name=\"summaryplot\"></a>\n"; 78 78 print $htmlFile "<h2 align=\"middle\">Summary plots <a href=\"#top\">(top)</a></h1>\n"; 79 $self->{plotter}->createTimeSeries("all_stdscience_labels", undef, $self->{begin}, $self->{end}, 0, 0, 0);79 $self->{plotter}->createTimeSeries("all_stdscience_labels", undef, $self->{begin}, $self->{end}, 1, 1, 1); 80 80 print $htmlFile "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_t.png\" alt=\"timeseries\" />\n"; 81 81 $self->{plotter}->createHistogram("all_stdscience_labels", $self->{begin}, $self->{end}, 0, 0, 0); 82 82 print $htmlFile "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_h.png\" alt=\"histogram\" />\n"; 83 $self->{plotter}->createRate Plot("all_stdscience_labels", undef, $self->{begin}, $self->{end}, undef, 1, 1);83 $self->{plotter}->createRateHistogram("all_stdscience_labels", undef, $self->{begin}, $self->{end}, undef); 84 84 print $htmlFile "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_rh.png\" alt=\"rate\" />\n"; 85 85 $self->{plotter}->plotStorageTimeSeries($self->{begin}, $self->{end}); -
trunk/tools/czartool/Plotter.pm
r30955 r31886 97 97 my $type = $isLog ? "log" : "linear"; 98 98 return $prefix . "/czarplot_" . $type . "_" . $label . "_" . $stagePart . "_$suffix.png"; 99 }100 101 ###########################################################################102 #103 # Plots a time series for all stages for this label, both log and linear104 #105 ###########################################################################106 sub createLogAndLinearTimeSeries {107 my ($self, $label, $selectedStage, $beginTime, $endTime) = @_;108 109 $self->createTimeSeries($label, $selectedStage, $beginTime, $endTime, 1);110 $self->createTimeSeries($label, $selectedStage, $beginTime, $endTime, 0);111 99 } 112 100 … … 146 134 # 147 135 ########################################################################### 148 sub createRate Plot{149 my ($self, $label, $selectedStage, $beginTime, $endTime, $interval , $histogram, $timeSeries) = @_;136 sub createRateHistogram { 137 my ($self, $label, $selectedStage, $beginTime, $endTime, $interval) = @_; 150 138 151 139 # stages … … 184 172 } 185 173 186 if ($histogram) { 187 188 my $outputFile = createImageFileName($self, $label, $selectedStage, "rh", 0); 189 $self->plotRateStackedHistogram(\%gnuplotFiles, $outputFile, $label, $selectedStage, $beginTime, $endTime, $interval); 190 } 191 if ($timeSeries) { 192 193 my $outputFile = createImageFileName($self, $label, $selectedStage, "rt", 0); 194 $self->plotTimeSeries(\%gnuplotFiles, $outputFile, $label, $beginTime, $endTime, $maxX, $minX, $timeDiff, "", "Exposures processed per $interval"); 195 } 174 my $outputFile = createImageFileName($self, $label, $selectedStage, "rh", 0); 175 $self->plotRateStackedHistogram(\%gnuplotFiles, $outputFile, $label, $selectedStage, $beginTime, $endTime, $interval); 196 176 197 177 # now delete temp dat files … … 250 230 ########################################################################### 251 231 sub createTimeSeries { 252 my ($self, $label, $selectedStage, $beginTime, $endTime, $ isLog, $showCleanup, $deriv) = @_;232 my ($self, $label, $selectedStage, $beginTime, $endTime, $linear, $log, $rate) = @_; 253 233 254 234 my $minX = 999999999; … … 261 241 else {$stages = ["$selectedStage"]}; 262 242 263 my %gnuplotFiles; 243 my %linDataFiles; 244 my %logDataFiles; 245 my %ratDataFiles; 264 246 my $stage = undef; 265 my $gnuplotFile = undef; 247 my $linDataFile = undef; 248 my $logDataFile = undef; 249 my $ratDataFile = undef; 250 266 251 foreach $stage (@{$stages}) { 267 252 … … 274 259 \$maxX, 275 260 \$timeDiff, 276 \$gnuplotFile, 277 $isLog, 278 $showCleanup, 279 $deriv)) { 280 281 $gnuplotFiles{$stage} = $gnuplotFile; 261 \$linDataFile, 262 \$logDataFile, 263 \$ratDataFile)) { 264 265 $linDataFiles{$stage} = $linDataFile; 266 $logDataFiles{$stage} = $logDataFile; 267 $ratDataFiles{$stage} = $ratDataFile; 282 268 } 283 269 } 284 270 285 my $numOfPlots = keys(% gnuplotFiles);271 my $numOfPlots = keys(%linDataFiles); 286 272 287 273 if ($numOfPlots == 0 ) { … … 297 283 } 298 284 299 my $outputFile = createImageFileName($self, $label, $selectedStage, "t", $isLog); 300 my $yTitle; 301 if ($isLog) {$yTitle = "Log(Exposures)";} 302 elsif ($deriv) {$yTitle = "dExposures/dTime(secs)";} 303 else {$yTitle = "Exposures";} 304 $self->plotTimeSeries( 305 \%gnuplotFiles, 306 $outputFile, 307 $label, 308 $beginTime, 309 $endTime, 310 $maxX, 311 $minX, 312 $timeDiff, 313 "", 314 $yTitle); 315 } 285 if ($linear) { 286 287 my $outputFile = createImageFileName($self, $label, $selectedStage, "t", 0); 288 289 $self->plotTimeSeries( 290 \%linDataFiles, 291 $outputFile, 292 $label, 293 $beginTime, 294 $endTime, 295 $maxX, 296 $minX, 297 $timeDiff, 298 "", 299 "Exposures"); 300 } 301 302 if ($log) { 303 304 my $outputFile = createImageFileName($self, $label, $selectedStage, "t", 1); 305 306 $self->plotTimeSeries( 307 \%logDataFiles, 308 $outputFile, 309 $label, 310 $beginTime, 311 $endTime, 312 $maxX, 313 $minX, 314 $timeDiff, 315 "", 316 "Log(Exposures)"); 317 } 318 319 if ($rate) { 320 321 my $outputFile = createImageFileName($self, $label, $selectedStage, "rt", 0); 322 323 $self->plotTimeSeries( 324 \%ratDataFiles, 325 $outputFile, 326 $label, 327 $beginTime, 328 $endTime, 329 $maxX, 330 $minX, 331 $timeDiff, 332 "", 333 "Exposures processed per hour"); 334 } 335 } 316 336 317 337 ########################################################################### … … 468 488 my $timeFormat = undef; 469 489 my $divX = undef; 470 #my $yTitle = undef;471 #if ($isLog) {$yTitle = "Log( Exposures )";}472 #elsif ($isDeriv) {$yTitle = "dExposures/dTime(secs)";}473 #else {$yTitle = "Exposures";}474 490 475 491 $self->getTimeSpacing($timeDiff, \$divX, \$timeFormat); … … 478 494 479 495 # sort out plot title 480 #my $title = "";481 #if ($isDeriv) {$title .= "First derivatives of "}482 496 if ($numOfPlots == 1) {foreach my $stage (keys %$gnuplotFiles) {$title .= "'".$stage."'";}} 483 497 else {$title .= "'all stages'"}
Note:
See TracChangeset
for help on using the changeset viewer.
