IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 26, 2010, 10:33:29 AM (16 years ago)
Author:
eugene
Message:

merge updates from trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20101103/tools/czartool/CzarDb.pm

    r29582 r29834  
    66use strict;
    77
     8use File::Temp;
     9
    810my @stages = ("burntool", "chip", "cam", "fake", "warp", "stack", "diff", "magic", "magicDS", "dist"); # TODO put elsewhere
    911
    1012use base 'czartool::MySQLDb';
    1113our @ISA = qw(czartool::MySQLDb);    # inherits from MySQLDb
     14
     15use czartool::StageMetrics;
    1216
    1317###########################################################################
     
    4953    return 1;
    5054}
     55
     56###########################################################################
     57#
     58# Gets stdscience lables active in the provided time period
     59# TODO ugly hack to avoind getting update labels
     60#
     61###########################################################################
     62sub 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'
     74SQL
     75
     76    if (!$query->execute) {return 0;}
     77
     78    ${$labels} = $query->fetchall_arrayref();
     79
     80    return 1;
     81}
     82
     83
    5184
    5285###########################################################################
     
    264297}
    265298
     299###########################################################################
     300#
     301# Returns the start and end times during one day for the provided label and start/end stages
     302#
     303###########################################################################
     304sub 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}
    266323
    267324###########################################################################
     
    271328###########################################################################
    272329sub 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
    285340
    286341    my $query = $self->{_db}->prepare(<<SQL);
     
    293348SQL
    294349
    295     $query->execute;
    296 
    297350    my $lastProcessed = -1;
    298351    my $lastPending = -1;
     
    300353    my $lastTimestamp = undef;
    301354    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
    302382    my ($derivProcessed, $derivPending, $derivFaults);
    303     my $started = undef;
    304     my $finished = undef;
    305    
    306383    my $notProcessing = undef;
    307384    my $howLongNotProcessing = undef;
    308385    my $notProcessingLongerThanInterval = 0;
    309 
    310386    my $stuck = undef;
    311387    my $howLongStuck = undef;
    312388    my $stuckLongerThanInterval = 0;
    313 
    314389    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;
    317398    $linearProcessed = 0;
     399    $lastProcessed = -1;
    318400    while (my @row = $query->fetchrow_array()) {
    319401        my ($thisTimestamp, $thisPending, $thisFaults, $thisProcessed) = @row;
     
    326408        $linearPending = $thisPending;
    327409        $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;}
    328416
    329417        # get first derivative values
     
    363451                if (defined $notProcessing) {
    364452                   
    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                     }
    373453                    $notProcessing = undef;
    374454                    $stuck = undef;
    375455                }
    376456                if (!defined $started) {
     457
    377458                    $started = $lastTimestamp;
    378459                    $finished = undef;
    379 #                    print "* $stage processing started at $started\n";
    380460                }
    381461            }
     
    418498    }
    419499
    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    }
    423515
    424516    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
    434523    if (!defined $started){
    435524   
    436         ${$_started} = undef;
     525        $stageMetrics->setStarted(undef);
    437526    }
    438527    else {
    439528   
    440         ${$_started} = $started;
     529        my $rate = ($stageMetrics->getProcessed()/$self->getTimeInSecs($stageMetrics->getTotalTime) ) * 3600.0;
     530        $stageMetrics->setRate($rate);
     531        $stageMetrics->setStarted($started);
    441532    }
    442533    if ($stuck && $stuckLongerThanInterval && !defined $finished) {
    443534
    444         ${$_stuck} = $stuck;
     535        $stageMetrics->setStuck($stuck);
    445536    }
    446537    else {
    447538   
    448         ${$_stuck} = undef;
     539        $stageMetrics->setStuck(undef);
    449540    }
    450541
     
    484575    $query->execute;
    485576
    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;
    487580    open (GNUDAT, ">${$dataFile}") or print "* Problem opening gnuplot data file for plot for '$label' '$stage'\n";
    488581
     
    497590   
    498591    $linearProcessed = 0;
     592    my $someData = 0;
    499593    while (my @row = $query->fetchrow_array()) {
    500594        my ($thisTimestamp, $thisPending, $thisFaults, $thisProcessed) = @row;
     
    517611            my $timeDiff = $self->diffTimesInSecs($thisTimestamp, $lastTimestamp);
    518612               
    519             if ($thisProcessed >= $lastProcessed){
     613            if ($thisProcessed >= $lastProcessed && $timeDiff){
    520614                $derivProcessed = abs($thisProcessed - $lastProcessed)/$timeDiff;
    521615            }
     
    547641        else {print GNUDAT "$timestamp $linearPending $linearFaults $linearProcessed\n";}
    548642
     643        if ($linearPending > 0 || $linearFaults > 0 || $linearProcessed > 0) {$someData = 1;}
     644
    549645        $lastProcessed = $thisProcessed;
    550646        $lastPending = $thisPending;
     
    555651    close(GNUDAT) or print "* Problem closing gnuplot data file for plot for '$label' '$stage'\n";
    556652
    557     return 1;
     653    #return $someData;
    558654}
    559655
     
    637733###########################################################################
    638734sub 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);
    643738
    644739    my $query = $self->{_db}->prepare(<<SQL);
     
    686781        print GNUDAT "\n";
    687782    }
     783
    688784    close(GNUDAT);
    689 
    690     return $dataFile;
    691785}
    692786
     
    714808###########################################################################
    715809sub 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);
    720813
    721814    my $query = $self->{_db}->prepare(<<SQL);
     
    753846
    754847    close(GNUDAT);
    755 
    756     return $dataFile;
    757848}
    758849
     
    763854###########################################################################
    764855sub 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;
    768859    my $endTime;
    769860    my $quit = 0;
     
    772863    my $faults;
    773864    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
    775870    open (GNUDAT, ">${$dataFile}") or print "* Problem opening gnuplot data file for plot for '$label' '$stage'\n";
    776871    my $cleanupCarry = 0;
     872    my $someData = 0;
    777873    while(1) {
    778874
    779         if (!$self->isBefore($startTime, $endDay)) {last;}
     875
     876        #print "NNN $startTime, $end\n";
     877        if (!$self->isBefore($startTime, $end)) {last;}
    780878        $endTime = $self->addInterval($startTime, $interval);
    781879        $self->countProcessedPendingAndFaults($label, $stage, $startTime, $endTime, \$processed, \$pending, \$faults);
     
    783881        print GNUDAT "$timestamp $processed 0 0\n";
    784882
     883        if ($processed > 0 ) {$someData = 1;}
     884
    785885        $startTime = $endTime;
    786886    }
    787887
    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;
    789891}
    790892
     
    15121614    $self->setRevision(12);
    15131615}
    1514 
    151516161;
    15161617
Note: See TracChangeset for help on using the changeset viewer.