[rt-users] Sharing my corrected version of the purgedead-script for RT 3

Dirk Pape pape-rt at inf.fu-berlin.de
Thu Aug 21 11:33:58 EDT 2003


Hello,

the version of the purgedead.pl Script, which I found in the archives does 
not purge the "Ticket Role Groups" (Clients, Watcher, etc), which are 
attached to the Ticket.

I have added some code for this to the script and want to share it.

Dirk.
-------------- next part --------------
#!/export/perl/bin/perl
#
# Steve Poirier - <A HREF="mailto:steve at inet-technologies.com">steve at inet-technologies.com</A>
# edited by Tim Allwine <A HREF="mailto:tallwine at oreilly.com">tallwine at oreilly.com</A>
# to use with RT2 and MySQL
# edited by Tony Aiuto <tony at ics.com> to deal with Links
# edited by Jonas Lincoln <lincoln at unit.liu.se> to work with RT3 and mysql
# edited by Dirk Pape <pape-rt at inf.fu-berlin.de> to cope with Role-Groups (RT 3)

use strict;
my $date = shift;
my $ticketnbr = 0;

if ( ! $date ) { $date=`/bin/date -I -d "3 months ago"`; }
print "$date\n";

# Replace this with your RT_LIB_PATH
use lib "/export/rt3/lib";
# Replace this with your RT_ETC_PATH
use lib "/export/rt3/etc";

use RT::Interface::CLI  qw(CleanEnv loc
			   GetCurrentUser GetMessageContent);
use RT::Group;
use RT;

#Clean out all the nasties from the environment
CleanEnv();

#Load etc/config.pm and drop privs
RT::LoadConfig();

#Connect to the database and get RT::SystemUser and RT::Nobody loaded
RT::Init();

(my $x=RT::Handle->new)->Connect;

my $dbh = $x->dbh() or die "Couldn't connect to RT database";

my $sql = "SELECT id FROM Tickets WHERE Status=? AND LastUpdated < \'$date\'";
my $sth = $dbh->prepare($sql);
$sth->execute('deleted');

# proceed with deletion

my $d_sth     = $dbh->prepare('SELECT id FROM Transactions where Ticket=?');
my $stid      = $dbh->prepare('DELETE FROM Attachments WHERE TransactionId=?');
my $sttrans   = $dbh->prepare( 'DELETE FROM Transactions WHERE Ticket=?');
my $stobjects = $dbh->prepare( 'DELETE FROM TicketCustomFieldValues WHERE Ticket=?');
my $stlinks1  = $dbh->prepare( 'DELETE FROM Links WHERE LocalBase=?');
my $stlinks2  = $dbh->prepare( 'DELETE FROM Links WHERE LocalTarget=?');
my $d_groups  = $dbh->prepare( 'SELECT id FROM Groups WHERE Domain="RT::Ticket-Role" AND Instance=?');
my $grpmbrs   = $dbh->prepare( 'DELETE FROM GroupMembers WHERE GroupId=?');
my $groups    = $dbh->prepare( 'DELETE FROM Groups WHERE Domain="RT::Ticket-Role" AND Instance=?');
my $stticket  = $dbh->prepare( 'DELETE FROM Tickets WHERE id=?');

while ( my ($ticketid) = $sth->fetchrow_array() )  {
    print "\nticket $ticketid is dead and last updated before $date. Deleting:  ";
    $d_sth->execute($ticketid);

# delete Attachments for this ticket
    print "Attachments. ";
    while ( my ($transid) = $d_sth->fetchrow_array() )  {
	  $stid->execute($transid);
    }

# delete Ticket in Transactions table
    print "Transactions. ";
    $sttrans->execute($ticketid);

# delete TicketRole groups for this ticket
    print "TicketRole groupmembers. ";
    $d_groups->execute($ticketid);
    while ( my ($groupid) = $d_groups->fetchrow_array() )  {
	  $grpmbrs->execute($groupid);
    }
    print "TicketRole groups. ";
    $groups->execute($ticketid);

# delete Ticket in ObjectKeywords table
    print "ObjectKeywords. ";
    $stobjects->execute($ticketid);

# delete Ticket from the Links table
    print "Links1. ";
    $stlinks1->execute($ticketid);
    print "Links2. ";
    $stlinks2->execute($ticketid);

# delete Ticket from the Tickets table
    print "Ticket. ";
    $stticket->execute($ticketid);

    $ticketnbr++;
}
print "\nDone. Deleted $ticketnbr tickets.\n\n";

exit;


More information about the rt-users mailing list