IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 28, 2010, 11:26:51 AM (16 years ago)
Author:
rhenders
Message:

Now all tables are 'cleaned'. Clunky solution, bu will do for now

File:
1 edited

Legend:

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

    r29168 r29251  
    561561###########################################################################
    562562#
    563 # Deletes all but one row per interval from all stage tables for all labels between the provided day
     563# Deletes all but one row per interval from all tables for the provided date range
     564# TODO this is very clumsy, I just have time to thinmk of something more elegant
    564565#
    565566###########################################################################
     
    574575    my $totalDeleted = undef;
    575576    my $quit = 0;
     577    my $query = undef;
    576578    while(!$quit) {
    577579
     
    594596                my ($label) = @{$row};
    595597
    596                 my $query = $self->{_db}->prepare(<<SQL);
     598                $query = $self->{_db}->prepare(<<SQL);
    597599                SELECT COUNT(*)
    598600                    FROM $stage
     
    617619                $totalDeleted += $toDelete;
    618620            }
     621
    619622        }
     623
     624        # servers table
     625        my $servers = undef;
     626        if ($self->getServers(\$servers)) {
     627
     628            my $server = undef;
     629            my $row = undef;
     630            foreach $row ( @{$servers} ) {
     631                my ($server) = @{$row};
     632
     633                $query = $self->{_db}->prepare(<<SQL);
     634                SELECT COUNT(*)
     635                    FROM servers
     636                    WHERE timestamp > '$fromTime'
     637                    AND timestamp <= '$toTime'
     638                    AND server = '$server'
     639SQL
     640                $query->execute;
     641
     642                my $toDelete = scalar $query->fetchrow_array() - 1;
     643                if ($toDelete > 0) {
     644
     645                    $query = $self->{_db}->prepare(<<SQL);
     646                    DELETE FROM servers
     647                        WHERE timestamp > '$fromTime'
     648                        AND timestamp <= '$toTime'
     649                        AND server = '$server' ORDER BY timestamp DESC LIMIT $toDelete
     650SQL
     651                    $query->execute;
     652
     653                    $totalDeleted += $toDelete;
     654                }
     655            }
     656        }
     657
     658        # now deal with cluster_space table
     659        $query = $self->{_db}->prepare(<<SQL);
     660        SELECT COUNT(*)
     661            FROM cluster_space
     662            WHERE timestamp > '$fromTime'
     663            AND timestamp <= '$toTime'
     664SQL
     665        $query->execute;
     666
     667        my $toDelete = scalar $query->fetchrow_array() - 1;
     668        if ($toDelete > 0) {
     669
     670            $query = $self->{_db}->prepare(<<SQL);
     671            DELETE FROM cluster_space
     672                WHERE timestamp > '$fromTime'
     673                AND timestamp <= '$toTime'
     674                ORDER BY timestamp DESC LIMIT $toDelete
     675SQL
     676            $query->execute;
     677
     678            $totalDeleted += $toDelete;
     679        }
     680
    620681        print "   * Deleted $totalDeleted between $fromTime and  $toTime\n";
    621682        $fromTime = $toTime;
    622683    }
     684}
     685
     686###########################################################################
     687#
     688# Returns an array of servers
     689#
     690###########################################################################
     691sub getServers {
     692    my ($self, $servers) = @_;
     693
     694    my $query = $self->{_db}->prepare(<<SQL);
     695    SELECT DISTINCT server
     696        FROM servers
     697SQL
     698
     699        if (!$query->execute) {
     700
     701            return 0;
     702        }
     703
     704    ${$servers} = $query->fetchall_arrayref();
     705
     706    return 1;
    623707}
    624708
Note: See TracChangeset for help on using the changeset viewer.