b209f4b73e1ea60effcd0e3afa21b447cd5228b0
[BackupPC.git] / bin / BackupPC_removeBurnedArchives
1 #!/usr/bin/perl -w
2 use strict;
3 no utf8;
4
5 use lib "/usr/local/BackupPC/lib";
6 use DBI;
7 use BackupPC::Lib;
8 use BackupPC::SearchLib;
9 use Data::Dumper;
10 my $bpc = BackupPC::Lib->new || die "can't create BackupPC::Lib";
11 my %Conf = $bpc->Conf();
12 my $tar_dir = $Conf{InstallDir}."/".$Conf{GzipTempDir};
13 %BackupPC::SearchLib::Conf = %Conf;
14 #die(Dumper(\%Conf));
15 my $dsn = $Conf{SearchDSN} || die "need searchdsn in config.pl\n";
16 my $user = $Conf{SearchUser} || '';
17 my $dbh = DBI->connect($dsn, $user, "", { raiseerror => 1, autocommit => 0 });
18 my $tar_dir = $Conf{InstallDir}.'/'.$Conf{GzipTempDir};
19 my $sql = q{
20         SELECT hosts.name AS host, shares.name AS share, backups.num AS num, MAX(archive_burned.copy)
21         FROM backups
22                 INNER JOIN hosts ON (hosts.id=backups.hostid)
23                 INNER JOIN shares ON (shares.id=backups.shareid)
24                 INNER JOIN archive_backup ON (archive_backup.backup_id=backups.id)
25                 INNER JOIN archive_burned ON (archive_burned.archive_id=archive_backup.archive_id)
26         GROUP BY 1, 2, 3
27         HAVING MAX(archive_burned.copy)>=2;
28 };
29 my $sth = $dbh->prepare($sql);
30 my $totalRemoved = 0;
31 $sth->execute();
32
33 while (my $row = $sth->fetchrow_hashref()) {
34         my $filename = BackupPC::SearchLib::getGzipName($row->{'host'}, $row->{'share'}, $row->{'num'});
35         
36         $filename .= ".tar.gz";
37         $filename = $tar_dir . "/" . $filename;
38         my $fs_size = (stat($filename))[7];
39         $totalRemoved += $fs_size;
40         print "removing $filename... size: $fs_size\n";
41 #       if (system("rm $filename") != 0) {
42 #               print "ERROR: unable to remove $filename.\n";
43 #       }
44 }
45
46 print "Finished. Freed $totalRemoved bytes (".($totalRemoved/(1024*1024))."MB\n";
47
48 $sth->finish();
49 $dbh->disconnect();