IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 7, 2010, 9:16:10 AM (16 years ago)
Author:
eugene
Message:

updates from trunk

Location:
branches/eam_branches/ipp-20100823
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/ipp-20100823

  • branches/eam_branches/ipp-20100823/tools/czartool/CzarDb.pm

    r28921 r29124  
    1 #!/usr/bin/perl i-w
     1#!/usr/bin/perl -w
    22
    33package czartool::CzarDb;
     
    66use strict;
    77
    8 my @stages = ("chip", "cam", "fake", "warp", "stack", "diff", "magic", "magicDS", "dist"); # TODO put elsewhere
     8my @stages = ("burntool", "chip", "cam", "fake", "warp", "stack", "diff", "magic", "magicDS", "dist"); # TODO put elsewhere
    99
    1010use base 'czartool::MySQLDb';
     
    119119
    120120    $query->execute;
     121}
     122
     123###########################################################################
     124#
     125# Updates nightlyscience table
     126#
     127###########################################################################
     128sub updateNightlyScience {
     129    my ($self, $status) = @_;
     130
     131    my $query = $self->{_db}->prepare(<<SQL);
     132    DELETE FROM nightlyscience;
     133SQL
     134
     135    $query->execute;
     136
     137    $query = $self->{_db}->prepare(<<SQL);
     138    INSERT INTO nightlyscience
     139        (status)
     140        VALUES
     141        ('$status');
     142SQL
     143
     144       $query->execute;
    121145}
    122146
     
    218242###########################################################################
    219243sub createTimeSeriesData {
    220     my ($self, $label, $stage, $fromTime, $toTime, $minX, $maxX, $minY, $maxY, $timeDiff) = @_;
    221 
    222     my $dataFile = "/tmp/czarplot_gnuplot_".$label."_".$stage."_t.dat";
    223     open (GNUDAT, ">$dataFile");
     244    my ($self, $label, $stage, $fromTime, $toTime, $minX, $maxX, $minY, $maxY, $timeDiff, $dataFile, $isLog) = @_;
     245
     246    ${$dataFile} = "/tmp/czarplot_gnuplot_".$label."_".$stage."_t.dat";
     247
     248    open (GNUDAT, ">${$dataFile}") or print "* Problem opening gnuplot data file for plot for '$label' '$stage'\n";
    224249
    225250    my $query = $self->{_db}->prepare(<<SQL);
     
    235260SQL
    236261
    237     if (!$query->execute) {return undef;}
     262    if (!$query->execute) {return 0;}
    238263
    239264    my $minProcessed = undef;
    240 
    241     ($minProcessed, ${$maxY}, ${$minY}, ${$maxX}, ${$minX}, ${$timeDiff}) = $query->fetchrow_array();
    242 
    243     if (!defined $minProcessed) {return undef;}
     265    my ($_maxY, $_minY, $_timeDiff);
     266    ($minProcessed, $_maxY, $_minY, ${$maxX}, ${$minX}, $_timeDiff) = $query->fetchrow_array();
     267
     268    if ($_maxY > ${$maxY}) {${$maxY} = $_maxY;}
     269    if ($_minY < ${$minY}) {${$minY} = $_minY;}
     270    if ($_timeDiff > ${$timeDiff}) {${$timeDiff} = $_timeDiff;}
     271
     272    if (!defined $minProcessed) {return 0;}
    244273
    245274    $query = $self->{_db}->prepare(<<SQL);
     
    256285    # loop round results
    257286    while (my @row = $query->fetchrow_array()) {
    258 
    259287        my ($timestamp, $pending, $faults, $processed) = @row;
    260     #    print  "'$timestamp' '$pending' '$faults' '$processed'\n";
     288
     289        if ($isLog) {
     290
     291            $processed = log($processed + 1);
     292            $pending = log($pending + 1);
     293            $faults = log($faults + 1);
     294        }
     295
    261296        print GNUDAT "$timestamp $pending $faults $processed\n";
    262297    }
    263     close(GNUDAT);
    264 
    265     return $dataFile;
     298
     299    close(GNUDAT) or print "* Problem closing gnuplot data file for plot for '$label' '$stage'\n";
     300
     301    return 1;
    266302}
    267303
     
    491527}
    492528
     529
     530###########################################################################
     531#
     532# Deletes all but one row per interval from all stage tables for all labels between the two dates
     533#
     534###########################################################################
     535sub cleanupDateRange {
     536    my ($self, $startDay, $endDay, $interval) = @_;
     537
     538    my $thisDay = $startDay;
     539    my $quit = 0;
     540    while(!$quit) {
     541
     542        if (!$self->isBefore($thisDay, $endDay)) {
     543       
     544            $quit = 1;
     545        }
     546
     547        print "* Running cleanup for $thisDay with an interval of $interval\n";
     548        $self->cleanupADay($thisDay, $interval);
     549        $thisDay = $self->addInterval($thisDay, "1 DAY");
     550
     551    }
     552}
     553###########################################################################
     554#
     555# Deletes all but one row per interval from all stage tables for all labels between the provided day
     556#
     557###########################################################################
     558sub cleanupADay {
     559    my ($self, $startDay, $interval) = @_;
     560
     561    my $endDay =  $self->addInterval($startDay, "1 DAY");
     562
     563    my $labels = undef;
     564    my $fromTime = $startDay;
     565    my $toTime = undef;
     566    my $totalDeleted = undef;
     567    my $quit = 0;
     568    while(!$quit) {
     569
     570        $toTime = $self->addInterval($fromTime, $interval);
     571        if (!$self->isBefore($toTime, $endDay)) {
     572       
     573            $toTime = $endDay;
     574            $quit = 1;
     575        }
     576   
     577        my $stage = undef;
     578        $totalDeleted = 0;
     579        foreach $stage (@stages) {
     580
     581            if (!$self->getLabelsInThisTimePeriod($stage, $fromTime, $toTime, \$labels)) {next;}
     582
     583            my $label = undef;
     584            my $row = undef;
     585            foreach $row ( @{$labels} ) {
     586                my ($label) = @{$row};
     587
     588                my $query = $self->{_db}->prepare(<<SQL);
     589                SELECT COUNT(*)
     590                    FROM $stage
     591                    WHERE timestamp > '$fromTime'
     592                    AND timestamp <= '$toTime'
     593                    AND label = '$label'
     594SQL
     595
     596                    $query->execute;
     597
     598                my $toDelete = scalar $query->fetchrow_array() - 1;
     599                if ($toDelete < 1) {next;}
     600
     601                $query = $self->{_db}->prepare(<<SQL);
     602                DELETE FROM $stage
     603                    WHERE timestamp > '$fromTime'
     604                    AND timestamp <= '$toTime'
     605                    AND label = '$label' ORDER BY timestamp DESC LIMIT $toDelete
     606SQL
     607                    $query->execute;
     608
     609                $totalDeleted += $toDelete;
     610            }
     611        }
     612        print "   * Deleted $totalDeleted between $fromTime and  $toTime\n";
     613        $fromTime = $toTime;
     614    }
     615}
     616
     617###########################################################################
     618#
     619# Returns an array of labels present during the provided time frame
     620#
     621###########################################################################
     622sub getLabelsInThisTimePeriod {
     623    my ($self, $stage, $fromTime, $toTime, $labels) = @_;
     624
     625    my $query = $self->{_db}->prepare(<<SQL);
     626    SELECT DISTINCT label
     627        FROM $stage
     628        WHERE timestamp > '$fromTime'
     629        AND timestamp <= '$toTime';
     630SQL
     631
     632        if (!$query->execute) {
     633
     634            return 0;
     635        }
     636
     637    ${$labels} = $query->fetchall_arrayref();
     638
     639    return 1;
     640}
     641
    493642###########################################################################
    494643#
     
    500649
    501650    my $currentRevision = -1;
    502     my $latestRevision = 10;
    503 
    504     while ($currentRevision != $latestRevision) {
     651
     652    while (1) {
    505653
    506654        $currentRevision = $self->getRevision();
     
    517665        elsif ($currentRevision == 8) {$self->createRevision_9();}
    518666        elsif ($currentRevision == 9) {$self->createRevision_10();}
     667        elsif ($currentRevision == 10) {$self->createRevision_11();}
     668        elsif ($currentRevision == 11) {$self->createRevision_12();}
     669        else {last;}
    519670    }
    520671}
     
    841992}
    842993
     994#######################################################################################
     995#
     996# Create revision 11 of the database
     997#
     998#######################################################################################
     999sub createRevision_11 {
     1000    my ($self) = @_;
     1001
     1002    print "* Creating revision 11 of '$self->{_dbName}'\n";
     1003
     1004    # same shape as other stage tables to enable easy update
     1005    my $query = $self->{_db}->prepare(<<SQL);
     1006    CREATE TABLE burntool (
     1007            timestamp TIMESTAMP DEFAULT NOW(),
     1008            label VARCHAR(128) DEFAULT "NONE",
     1009            pending BIGINT NOT NULL,
     1010            processed BIGINT NOT NULL,
     1011            faults BIGINT NOT NULL);
     1012SQL
     1013
     1014      $query->execute;
     1015        $query = $self->{_db}->prepare(<<SQL);
     1016        CREATE INDEX burntoolIndex ON burntool (timestamp, label);
     1017SQL
     1018
     1019      $query->execute;
     1020
     1021    $self->setRevision(11);
     1022}
     1023
     1024#######################################################################################
     1025#
     1026# Create revision 12 of the database
     1027#
     1028#######################################################################################
     1029sub createRevision_12 {
     1030    my ($self) = @_;
     1031
     1032    print "* Creating revision 12 of '$self->{_dbName}'\n";
     1033
     1034    # same shape as other stage tables to enable easy update
     1035    my $query = $self->{_db}->prepare(<<SQL);
     1036    CREATE TABLE nightlyscience (
     1037            timestamp TIMESTAMP DEFAULT NOW(),
     1038            status VARCHAR(128) DEFAULT "NONE");
     1039SQL
     1040
     1041    $query->execute;
     1042
     1043    $self->setRevision(12);
     1044}
     1045
    84310461;
    8441047
Note: See TracChangeset for help on using the changeset viewer.