IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 29038


Ignore:
Timestamp:
Aug 24, 2010, 1:01:00 PM (16 years ago)
Author:
rhenders
Message:

Moved Db revison stuff to bottom of file

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/czartool/CzarDb.pm

    r29022 r29038  
    489489
    490490    return scalar $query->fetchrow_array();
     491}
     492
     493
     494###########################################################################
     495#
     496# Deletes all but one row per interval from all stage tables for all labels between the two dates
     497#
     498###########################################################################
     499sub cleanupDateRange {
     500    my ($self, $startDay, $endDay, $interval) = @_;
     501
     502    my $thisDay = $startDay;
     503    my $quit = 0;
     504    while(!$quit) {
     505
     506        if (!$self->isBefore($thisDay, $endDay)) {
     507       
     508            $quit = 1;
     509        }
     510
     511        print "* Running cleanup for $thisDay with an interval of $interval\n";
     512        $self->cleanupADay($thisDay, $interval);
     513        $thisDay = $self->addInterval($thisDay, "1 DAY");
     514
     515    }
     516}
     517###########################################################################
     518#
     519# Deletes all but one row per interval from all stage tables for all labels between the provided day
     520#
     521###########################################################################
     522sub cleanupADay {
     523    my ($self, $startDay, $interval) = @_;
     524
     525    my $endDay =  $self->addInterval($startDay, "1 DAY");
     526
     527    my $labels = undef;
     528    my $fromTime = $startDay;
     529    my $toTime = undef;
     530    my $totalDeleted = undef;
     531    my $quit = 0;
     532    while(!$quit) {
     533
     534        $toTime = $self->addInterval($fromTime, $interval);
     535        if (!$self->isBefore($toTime, $endDay)) {
     536       
     537            $toTime = $endDay;
     538            $quit = 1;
     539        }
     540   
     541        my $stage = undef;
     542        $totalDeleted = 0;
     543        foreach $stage (@stages) {
     544
     545            if (!$self->getLabelsInThisTimePeriod($stage, $fromTime, $toTime, \$labels)) {next;}
     546
     547            my $label = undef;
     548            my $row = undef;
     549            foreach $row ( @{$labels} ) {
     550                my ($label) = @{$row};
     551
     552                my $query = $self->{_db}->prepare(<<SQL);
     553                SELECT COUNT(*)
     554                    FROM $stage
     555                    WHERE timestamp > '$fromTime'
     556                    AND timestamp <= '$toTime'
     557                    AND label = '$label'
     558SQL
     559
     560                    $query->execute;
     561
     562                my $toDelete = scalar $query->fetchrow_array() - 1;
     563                if ($toDelete < 1) {next;}
     564
     565                $query = $self->{_db}->prepare(<<SQL);
     566                DELETE FROM $stage
     567                    WHERE timestamp > '$fromTime'
     568                    AND timestamp <= '$toTime'
     569                    AND label = '$label' ORDER BY timestamp DESC LIMIT $toDelete
     570SQL
     571                    $query->execute;
     572
     573                $totalDeleted += $toDelete;
     574            }
     575        }
     576        print "   * Deleted $totalDeleted between $fromTime and  $toTime\n";
     577        $fromTime = $toTime;
     578    }
     579}
     580
     581###########################################################################
     582#
     583# Returns an array of labels present during the provided time frame
     584#
     585###########################################################################
     586sub getLabelsInThisTimePeriod {
     587    my ($self, $stage, $fromTime, $toTime, $labels) = @_;
     588
     589    my $query = $self->{_db}->prepare(<<SQL);
     590    SELECT DISTINCT label
     591        FROM $stage
     592        WHERE timestamp > '$fromTime'
     593        AND timestamp <= '$toTime';
     594SQL
     595
     596        if (!$query->execute) {
     597
     598            return 0;
     599        }
     600
     601    ${$labels} = $query->fetchall_arrayref();
     602
     603    return 1;
    491604}
    492605
     
    843956
    844957
    845 ###########################################################################
    846 #
    847 # Deletes all but one row per interval from all stage tables for all labels between the two dates
    848 #
    849 ###########################################################################
    850 sub cleanupDateRange {
    851     my ($self, $startDay, $endDay, $interval) = @_;
    852 
    853     my $thisDay = $startDay;
    854     my $quit = 0;
    855     while(!$quit) {
    856 
    857         if (!$self->isBefore($thisDay, $endDay)) {
    858        
    859             $quit = 1;
    860         }
    861 
    862         print "* Running cleanup for $thisDay with an interval of $interval\n";
    863         $self->cleanupADay($thisDay, $interval);
    864         $thisDay = $self->addInterval($thisDay, "1 DAY");
    865 
    866     }
    867 }
    868 ###########################################################################
    869 #
    870 # Deletes all but one row per interval from all stage tables for all labels between the provided day
    871 #
    872 ###########################################################################
    873 sub cleanupADay {
    874     my ($self, $startDay, $interval) = @_;
    875 
    876     my $endDay =  $self->addInterval($startDay, "1 DAY");
    877 
    878     my $labels = undef;
    879     my $fromTime = $startDay;
    880     my $toTime = undef;
    881     my $totalDeleted = undef;
    882     my $quit = 0;
    883     while(!$quit) {
    884 
    885         $toTime = $self->addInterval($fromTime, $interval);
    886         if (!$self->isBefore($toTime, $endDay)) {
    887        
    888             $toTime = $endDay;
    889             $quit = 1;
    890         }
    891    
    892         my $stage = undef;
    893         $totalDeleted = 0;
    894         foreach $stage (@stages) {
    895 
    896             if (!$self->getLabelsInThisTimePeriod($stage, $fromTime, $toTime, \$labels)) {next;}
    897 
    898             my $label = undef;
    899             my $row = undef;
    900             foreach $row ( @{$labels} ) {
    901                 my ($label) = @{$row};
    902 
    903                 my $query = $self->{_db}->prepare(<<SQL);
    904                 SELECT COUNT(*)
    905                     FROM $stage
    906                     WHERE timestamp > '$fromTime'
    907                     AND timestamp <= '$toTime'
    908                     AND label = '$label'
    909 SQL
    910 
    911                     $query->execute;
    912 
    913                 my $toDelete = scalar $query->fetchrow_array() - 1;
    914                 if ($toDelete < 1) {next;}
    915 
    916                 $query = $self->{_db}->prepare(<<SQL);
    917                 DELETE FROM $stage
    918                     WHERE timestamp > '$fromTime'
    919                     AND timestamp <= '$toTime'
    920                     AND label = '$label' ORDER BY timestamp DESC LIMIT $toDelete
    921 SQL
    922                     $query->execute;
    923 
    924                 $totalDeleted += $toDelete;
    925             }
    926         }
    927         print "   * Deleted $totalDeleted between $fromTime and  $toTime\n";
    928         $fromTime = $toTime;
    929     }
    930 }
    931 
    932 ###########################################################################
    933 #
    934 # Returns an array of labels present during the provided time frame
    935 #
    936 ###########################################################################
    937 sub getLabelsInThisTimePeriod {
    938     my ($self, $stage, $fromTime, $toTime, $labels) = @_;
    939 
    940     my $query = $self->{_db}->prepare(<<SQL);
    941     SELECT DISTINCT label
    942         FROM $stage
    943         WHERE timestamp > '$fromTime'
    944         AND timestamp <= '$toTime';
    945 SQL
    946 
    947         if (!$query->execute) {
    948 
    949             return 0;
    950         }
    951 
    952     ${$labels} = $query->fetchall_arrayref();
    953 
    954     return 1;
    955 }
    956 
    9579581;
    958959
Note: See TracChangeset for help on using the changeset viewer.