use DateTime::Duration to correctly convert partial dates in to fields
[BackupPC.git] / bin / BackupPC_ASA_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::Search;
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{GzipTempDir};
13 %BackupPC::Search::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 $sql = q{
19         SELECT hosts.name AS host, shares.name AS share, backups.num AS num, MAX(archive_burned.copy)
20         FROM backups
21                 INNER JOIN hosts ON (hosts.id=backups.hostid)
22                 INNER JOIN shares ON (shares.id=backups.shareid)
23                 INNER JOIN archive_backup_parts ON (archive_backup_parts.backup_id=backups.id)
24                 INNER JOIN archive_burned ON (archive_burned.archive_id=archive_backup_parts.archive_id)
25         GROUP BY 1, 2, 3
26         HAVING MAX(archive_burned.copy)>=2;
27 };
28 my $sth = $dbh->prepare($sql);
29 my $totalRemoved = 0;
30 $sth->execute();
31
32 while (my $row = $sth->fetchrow_hashref()) {
33         my $filename = BackupPC::Search::getGzipName($row->{'host'}, $row->{'share'}, $row->{'num'});
34         
35         $filename .= ".tar.gz";
36         $filename = $tar_dir . "/" . $filename;
37         my $fs_size = (stat($filename))[7];
38         $totalRemoved += $fs_size;
39         print "removing $filename... size: $fs_size\n";
40 #       if (system("rm $filename") != 0) {
41 #               print "ERROR: unable to remove $filename.\n";
42 #       }
43 }
44
45 print "Finished. Freed $totalRemoved bytes (".($totalRemoved/(1024*1024))."MB\n";
46
47 $sth->finish();
48 $dbh->disconnect();