IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 29686


Ignore:
Timestamp:
Nov 5, 2010, 3:54:50 PM (16 years ago)
Author:
rhenders
Message:

major changes to support generaionof IPP metrics

Location:
trunk/tools
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/czarplot.pl

    r29580 r29686  
    99use czartool::CzarDb;
    1010use czartool::Plotter;
     11use czartool::StageMetrics;
    1112
    1213my $czarDbName = "czardb";
     
    5758    print "* UNKNKOWN: option                          @ARGV\n";
    5859}
     60if ($analysis && !$stage) {
     61    $quit = 1;
     62    print "* REQUIRED: choose a stage for analsis      -s <chip|cam|warp|etc>      (default=none)\n";}
    5963if (!$histogram) {
    6064    print "* OPTIONAL: plot histogram                  -h                          (default=off)\n";}
     
    98102
    99103# default values
    100 if (!$nebulous && !$histogram && !$timeSeries) {$timeSeries = 1; $histogram = 0;}
     104if (!$nebulous && !$histogram && !$analysis && !$timeSeries) {$timeSeries = 1; $histogram = 0;}
    101105if (!$verbose) {$verbose = 0;}
    102106if (!$save_temps) {$save_temps = 0;}
     
    121125    $begin =  "$day 06:35";
    122126    $end = "$day 23:59";
     127        print "JKJKJK '$begin' '$end' \n";
     128
    123129}
    124130else {
     
    147153if($analysis) {
    148154
    149     my ($started, $finished, $stuck, $processed, $pending, $faults, $totalTime);
    150     $czarDb->runAnalysis($label, $stage, $begin, $end, \$started, \$finished, \$stuck, \$processed, \$pending, \$faults, \$totalTime);
    151 
    152     if (defined $started) {print "* Processing started at $started\n";}
    153     if (defined $finished) {print "* Processing finished at $finished and took $totalTime\n";}
    154     else {print "* Processing has not finished\n";}
    155     if (defined $stuck) {print "* Processing has been stuck since $stuck\n";}
    156     print "* $processed exposures have been processed, with $pending pending and $faults faults\n";
    157 
    158     print "*******************************************************************************\n";
     155    my $stageMetrics = new czartool::StageMetrics($stage, $label, $begin, $end);
     156    if ($czarDb->runAnalysis($stageMetrics)) {$stageMetrics->printMe();}
    159157}
  • trunk/tools/czartool/CzarDb.pm

    r29582 r29686  
    1010use base 'czartool::MySQLDb';
    1111our @ISA = qw(czartool::MySQLDb);    # inherits from MySQLDb
     12
     13use czartool::StageMetrics;
    1214
    1315###########################################################################
     
    4951    return 1;
    5052}
     53
     54###########################################################################
     55#
     56# Gets stdscience lables active in the provided time period
     57# TODO ugly hack to avoind getting update labels
     58#
     59###########################################################################
     60sub 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'
     72SQL
     73
     74    if (!$query->execute) {return 0;}
     75
     76    ${$labels} = $query->fetchall_arrayref();
     77
     78    return 1;
     79}
     80
     81
    5182
    5283###########################################################################
     
    264295}
    265296
     297###########################################################################
     298#
     299# Returns the start and end times during one day for the provided label and start/end stages
     300#
     301###########################################################################
     302sub 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}
    266321
    267322###########################################################################
     
    271326###########################################################################
    272327sub 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
    285338
    286339    my $query = $self->{_db}->prepare(<<SQL);
     
    293346SQL
    294347
    295     $query->execute;
    296 
    297348    my $lastProcessed = -1;
    298349    my $lastPending = -1;
     
    300351    my $lastTimestamp = undef;
    301352    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
    302380    my ($derivProcessed, $derivPending, $derivFaults);
    303     my $started = undef;
    304     my $finished = undef;
    305    
    306381    my $notProcessing = undef;
    307382    my $howLongNotProcessing = undef;
    308383    my $notProcessingLongerThanInterval = 0;
    309 
    310384    my $stuck = undef;
    311385    my $howLongStuck = undef;
    312386    my $stuckLongerThanInterval = 0;
    313 
    314387    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;
    317396    $linearProcessed = 0;
     397    $lastProcessed = -1;
    318398    while (my @row = $query->fetchrow_array()) {
    319399        my ($thisTimestamp, $thisPending, $thisFaults, $thisProcessed) = @row;
     
    326406        $linearPending = $thisPending;
    327407        $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;}
    328414
    329415        # get first derivative values
     
    363449                if (defined $notProcessing) {
    364450                   
    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                     }
    373451                    $notProcessing = undef;
    374452                    $stuck = undef;
    375453                }
    376454                if (!defined $started) {
     455
    377456                    $started = $lastTimestamp;
    378457                    $finished = undef;
    379 #                    print "* $stage processing started at $started\n";
    380458                }
    381459            }
     
    418496    }
    419497
    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    }
    423513
    424514    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
    434521    if (!defined $started){
    435522   
    436         ${$_started} = undef;
     523        $stageMetrics->setStarted(undef);
    437524    }
    438525    else {
    439526   
    440         ${$_started} = $started;
     527        my $rate = ($stageMetrics->getProcessed()/$self->getTimeInSecs($stageMetrics->getTotalTime) ) * 3600.0;
     528        $stageMetrics->setRate($rate);
     529        $stageMetrics->setStarted($started);
    441530    }
    442531    if ($stuck && $stuckLongerThanInterval && !defined $finished) {
    443532
    444         ${$_stuck} = $stuck;
     533        $stageMetrics->setStuck($stuck);
    445534    }
    446535    else {
    447536   
    448         ${$_stuck} = undef;
     537        $stageMetrics->setStuck(undef);
    449538    }
    450539
     
    517606            my $timeDiff = $self->diffTimesInSecs($thisTimestamp, $lastTimestamp);
    518607               
    519             if ($thisProcessed >= $lastProcessed){
     608            if ($thisProcessed >= $lastProcessed && $timeDiff){
    520609                $derivProcessed = abs($thisProcessed - $lastProcessed)/$timeDiff;
    521610            }
     
    15121601    $self->setRevision(12);
    15131602}
    1514 
    151516031;
    15161604
  • trunk/tools/czartool/Gpc1Db.pm

    r28924 r29686  
    5656
    5757    return "ERROR";
     58}
     59
     60###########################################################################
     61#
     62# Returns the number of science exposures taken 'last night' for a given day
     63#
     64# Notes:
     65#
     66# - 03:00 HST = 17:00 last night UTC
     67# - 17:00 HST = 07:00 this morning UTC
     68# - 'OBJECT' = science exposures
     69#
     70###########################################################################
     71sub countScienceExposuresFromLastNight {
     72    my ($self, $day) = @_;
     73
     74    my $begin = "$day 03";
     75    my $end = "$day 17";
     76
     77    my $query = $self->{_db}->prepare(<<SQL);
     78    SELECT COUNT(*)
     79        FROM summitExp
     80        WHERE dateobs > '$begin'
     81        AND dateobs < '$end' AND
     82        exp_type = 'OBJECT';
     83SQL
     84
     85    $query->execute;
     86return scalar $query->fetchrow_array();
    5887}
    5988
     
    158187    }
    159188
    160 
    161189    $query->execute;
    162190    return scalar $query->fetchrow_array();
  • trunk/tools/czartool/MySQLDb.pm

    r29436 r29686  
    9898###########################################################################
    9999#
     100# Subtracts the provided interval from the provided time
     101#
     102###########################################################################
     103sub subtractInterval {
     104    my ($self, $time, $interval) = @_;
     105
     106      my $query = $self->{_db}->prepare(<<SQL);
     107          SELECT '$time' - INTERVAL $interval;
     108SQL
     109    $query->execute;
     110
     111return scalar $query->fetchrow_array();
     112}
     113
     114###########################################################################
     115#
    100116# Finds the difference of two times
    101117#
     
    104120    my ($self, $time1, $time2) = @_;
    105121
    106       my $query = $self->{_db}->prepare(<<SQL);
     122    if (!$time1 || !$time2) {return 0;}
     123
     124    my $query = $self->{_db}->prepare(<<SQL);
    107125         SELECT TIMEDIFF('$time1','$time2');
     126SQL
     127
     128    $query->execute;
     129    return scalar $query->fetchrow_array();
     130}
     131
     132###########################################################################
     133#
     134# Returns the provided time in seconds
     135#
     136###########################################################################
     137sub getTimeInSecs {
     138    my ($self, $time) = @_;
     139
     140    if (!$time) {return 0;}
     141
     142      my $query = $self->{_db}->prepare(<<SQL);
     143         SELECT TIME_TO_SEC('$time');
    108144SQL
    109145
     
    120156    my ($self, $time1, $time2) = @_;
    121157
    122       my $query = $self->{_db}->prepare(<<SQL);
     158    if (!$time1 || !$time2) {return 0;}
     159
     160    my $query = $self->{_db}->prepare(<<SQL);
    123161         SELECT TIME_TO_SEC(TIMEDIFF('$time1','$time2'));
    124162SQL
     
    138176      my $query = $self->{_db}->prepare(<<SQL);
    139177          SELECT INTERVAL('$interval1', '$interval2');
    140 SQL
    141     $query->execute;
    142 
    143 return scalar $query->fetchrow_array();
    144 }
    145 
    146 ###########################################################################
    147 #
    148 # Subtracts the provided interval from the provided time
    149 #
    150 ###########################################################################
    151 sub subtractInterval {
    152     my ($self, $time, $interval) = @_;
    153 
    154       my $query = $self->{_db}->prepare(<<SQL);
    155           SELECT '$time' - INTERVAL $interval;
    156178SQL
    157179    $query->execute;
  • trunk/tools/czartool/Plotter.pm

    r29618 r29686  
    6767    my $stages = undef;                 
    6868
    69     if (!$selectedStage) {$stages = \@allStages;}
     69    if (!$selectedStage) {
     70        $stages = \@allStages;
     71        $selectedStage = 'all_stages';
     72    }
    7073    else {$stages = ["$selectedStage"]};       
    7174
    72     $self->{_czarDb}->getTimeMinMaxDiff($label, $selectedStage, $beginTime, $endTime, \$minX, \$maxX, \$timeDiff);
     75    $self->{_czarDb}->getTimeMinMaxDiff($label, "chip", $beginTime, $endTime, \$minX, \$maxX, \$timeDiff);
    7376
    7477    my $divX;
     
    9598#        "set xrange [\"$minX\":\"$maxX\"];" .
    9699        "set boxwidth;" .
     100        "set xtic rotate by -90 scale 0;" .
    97101        "set style data histogram;" .
    98102        "set style histogram rowstacked;" .
     
    124128    print GP ";\n";
    125129    close GP;
    126 }                                                   
     130}
     131
    127132###########################################################################
    128133#
Note: See TracChangeset for help on using the changeset viewer.