IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 31886


Ignore:
Timestamp:
Jul 15, 2011, 4:16:20 PM (15 years ago)
Author:
rhenders
Message:

all time-series plots now created at same time for speed

Location:
trunk/tools
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/czarplot.pl

    r30953 r31886  
    2626my $rateInterval = undef;
    2727my $deriv = undef;
    28 my $showCleanup = undef;
    2928my $nebulous = undef;
    3029my $savingToFile = undef;
     
    4645        "histogram|h" => \$histogram,
    4746        "nebulous|n" => \$nebulous,
    48         "cleanup|c" => \$showCleanup,
    4947        "rate|r" => \$rate,
    5048        "deriv|f" => \$deriv,
     
    8179    $analysis = 0;
    8280    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";}
    8681if (!$log) {
    8782    $log = 0;
     
    166161}
    167162
    168 if ($rate) {
     163if ($rate and !$timeSeries) {
    169164
    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
     169if (!$histogram && !$nebulous) {
     170    $plotter->createTimeSeries($label, $stage, $begin, $end, $timeSeries, $log, $rate);
    173171    exit;
    174172}
    175 if (!$nebulous && $timeSeries) {$plotter->createTimeSeries($label, $stage, $begin, $end, $log, $showCleanup, $deriv);}
     173
    176174if ($histogram) {$plotter->createHistogram($label, $begin, $end);}
    177175if ($nebulous && $timeSeries) {$plotter->plotStorageTimeSeries($begin, $end);}
  • trunk/tools/czarpoll.pl

    r31825 r31886  
    252252
    253253            chomp($label);
    254             $plotter->createLogAndLinearTimeSeries($label,  $stage, $begin, $end);
    255             $plotter->createRatePlot($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);
    256256        }
    257257    }
     
    263263        my ($label) = @{$row};
    264264
    265         $plotter->createLogAndLinearTimeSeries($label, undef, $begin, $end);
    266         $plotter->createRatePlot($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);
    267267        $plotter->createHistogram($label, $begin, $end);
    268268    }
     
    270270    $allServerLabels = "all_".$server."_labels";
    271271
    272     $plotter->createLogAndLinearTimeSeries($allServerLabels, undef, $begin, $end);
    273     $plotter->createRatePlot($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);
    274274    $plotter->createHistogram($allServerLabels, $begin, $end);
    275275    foreach $stage (@stages) {
    276276
    277         $plotter->createLogAndLinearTimeSeries($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);
    279279    }
    280280}
  • trunk/tools/czartool/CzarDb.pm

    r31875 r31886  
    590590###########################################################################
    591591#
    592 # Gets time series data and stores it to temp file
     592# Gets time series data and stores it to temp files
    593593#
    594594###########################################################################
    595595sub createTimeSeriesData {
    596     my ($self, $label, $stage, $fromTime, $toTime, $minX, $maxX, $timeDiff, $dataFile, $isLog, $showCleanup, $firstDeriv) = @_;
    597 
    598     my $query = $self->{_db}->prepare(<<SQL);
    599     SELECT
    600         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(*)
    601601        FROM $stage
    602602        WHERE label LIKE '$label'
     
    605605
    606606    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);
    610611    $self->getTimeMinMaxDiff($label, $stage, $fromTime, $toTime, $minX, $maxX, $timeDiff);
    611 
     612    # grab all the data for the provided time range
    612613    $query = $self->{_db}->prepare(<<SQL);
    613614    SELECT
     
    621622    $query->execute;
    622623
     624    # set up Gnuplot datafiles
    623625    my $tmpFile = File::Temp->new( TEMPLATE => "czarplot_gnuplot_".$label."_".$stage."_t.XXXXX", DIR => '/tmp', SUFFIX => 'dat');
    624626    $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";
    627639
    628640    my $lastProcessed = -1;
     
    633645    my ($logProcessed, $logPending, $logFaults);
    634646    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;
    636651    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;
    637658
    638659    $linearProcessed = 0;
    639660    my $someData = 0;
     661    my $timeSep;
    640662    while (my @row = $query->fetchrow_array()) {
     663
    641664        my ($thisTimestamp, $thisPending, $thisFaults, $thisProcessed) = @row;
    642665
    643 
    644         # get first derivative values
     666        $formattedTimestamp = $self->getFormattedDate($thisTimestamp);
     667
     668        # if not first time in....
    645669        if (defined $lastTimestamp) {
    646670
    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;
    651684            }
    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       
    653708            $derivPending = 0;
    654709            $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;
    663712        }
    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++;
    666737            }
     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";
    667745        }
    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
    684747        $linearPending = $thisPending;
    685748        $linearFaults = $thisFaults;
     
    694757
    695758        # 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";
    700761
    701762        if ($linearPending > 0 || $linearFaults > 0 || $linearProcessed > 0) {$someData = 1;}
     
    705766        $lastFaults = $thisFaults;
    706767        $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";
    712774}
    713775
     
    10171079#
    10181080# 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 elegant
     1081# TODO this is very clumsy, I just don't have time to think of something more elegant
    10201082#
    10211083###########################################################################
  • trunk/tools/czartool/Metrics.pm

    r30958 r31886  
    7777    print $htmlFile "<a name=\"summaryplot\"></a>\n";
    7878    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);
    8080    print $htmlFile "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_t.png\" alt=\"timeseries\" />\n";
    8181    $self->{plotter}->createHistogram("all_stdscience_labels", $self->{begin}, $self->{end}, 0, 0, 0);
    8282    print $htmlFile "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_h.png\" alt=\"histogram\" />\n";
    83     $self->{plotter}->createRatePlot("all_stdscience_labels", undef, $self->{begin}, $self->{end}, undef, 1, 1);
     83    $self->{plotter}->createRateHistogram("all_stdscience_labels", undef, $self->{begin}, $self->{end}, undef);
    8484    print $htmlFile "<img src=\"czarplot_linear_all_stdscience_labels_all_stages_rh.png\" alt=\"rate\" />\n";
    8585    $self->{plotter}->plotStorageTimeSeries($self->{begin}, $self->{end});
  • trunk/tools/czartool/Plotter.pm

    r30955 r31886  
    9797    my $type = $isLog ? "log" : "linear";
    9898    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 linear
    104 #
    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);
    11199}
    112100
     
    146134#
    147135###########################################################################
    148 sub createRatePlot {
    149     my ($self, $label, $selectedStage, $beginTime, $endTime, $interval, $histogram, $timeSeries) = @_;
     136sub createRateHistogram {
     137    my ($self, $label, $selectedStage, $beginTime, $endTime, $interval) = @_;
    150138
    151139    # stages
     
    184172    }
    185173
    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);
    196176
    197177    # now delete temp dat files
     
    250230###########################################################################
    251231sub createTimeSeries {
    252     my ($self, $label, $selectedStage, $beginTime, $endTime, $isLog, $showCleanup, $deriv) = @_;
     232    my ($self, $label, $selectedStage, $beginTime, $endTime, $linear, $log, $rate) = @_;
    253233
    254234    my $minX = 999999999;     
     
    261241    else {$stages = ["$selectedStage"]};       
    262242
    263     my %gnuplotFiles;
     243    my %linDataFiles;
     244    my %logDataFiles;
     245    my %ratDataFiles;
    264246    my $stage = undef;
    265     my $gnuplotFile = undef;
     247    my $linDataFile = undef;
     248    my $logDataFile = undef;
     249    my $ratDataFile = undef;
     250
    266251    foreach $stage (@{$stages}) {
    267252
     
    274259                    \$maxX,
    275260                    \$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;
    282268        }
    283269    }                                                           
    284270
    285     my $numOfPlots =  keys(%gnuplotFiles);
     271    my $numOfPlots =  keys(%linDataFiles);
    286272
    287273    if ($numOfPlots == 0 ) {
     
    297283    }
    298284
    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}                                               
    316336
    317337###########################################################################
     
    468488    my $timeFormat = undef;
    469489    my $divX = undef;
    470     #my $yTitle = undef;
    471     #if ($isLog) {$yTitle = "Log( Exposures )";}
    472     #elsif ($isDeriv) {$yTitle = "dExposures/dTime(secs)";}
    473     #else {$yTitle = "Exposures";}
    474490
    475491    $self->getTimeSpacing($timeDiff, \$divX, \$timeFormat);
     
    478494
    479495    # sort out plot title
    480     #my $title = "";
    481     #if ($isDeriv) {$title .= "First derivatives of "}
    482496    if ($numOfPlots == 1) {foreach my $stage (keys %$gnuplotFiles) {$title .= "'".$stage."'";}}
    483497    else {$title .= "'all stages'"}
Note: See TracChangeset for help on using the changeset viewer.