remove archive burned on media
[BackupPC.git] / bin / BackupPC_removeBurnedArchives
diff --git a/bin/BackupPC_removeBurnedArchives b/bin/BackupPC_removeBurnedArchives
new file mode 100755 (executable)
index 0000000..da45dad
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/perl -w
+use strict;
+no utf8;
+
+use lib "__INSTALLDIR__/lib";
+use DBI;
+use BackupPC::Lib;
+use BackupPC::SearchLib;
+use Data::Dumper;
+my $bpc = BackupPC::Lib->new || die "can't create BackupPC::Lib";
+my %Conf = $bpc->Conf();
+my $tar_dir = $Conf{InstallDir}."/".$Conf{GzipTempDir};
+%BackupPC::SearchLib::Conf = %Conf;
+#die(Dumper(\%Conf));
+my $dsn = $Conf{SearchDSN} || die "need searchdsn in config.pl\n";
+my $user = $Conf{SearchUser} || '';
+my $dbh = DBI->connect($dsn, $user, "", { raiseerror => 1, autocommit => 0 });
+my $tar_dir = $Conf{InstallDir}.'/'.$Conf{GzipTempDir};
+my $sql = q{
+       SELECT hosts.name AS host, shares.name AS share, backups.num AS num, MAX(archive_burned.copy)
+       FROM backups
+               INNER JOIN hosts ON (hosts.id=backups.hostid)
+               INNER JOIN shares ON (shares.id=backups.shareid)
+               INNER JOIN archive_backup ON (archive_backup.backup_id=backups.id)
+               INNER JOIN archive_burned ON (archive_burned.archive_id=archive_backup.archive_id)
+       GROUP BY 1, 2, 3
+       HAVING MAX(archive_burned.copy)>=2;
+};
+my $sth = $dbh->prepare($sql);
+my $totalRemoved = 0;
+$sth->execute();
+
+while (my $row = $sth->fetchrow_hashref()) {
+       my $filename = BackupPC::SearchLib::getGzipName($row->{'host'}, $row->{'share'}, $row->{'num'});
+       
+       $filename .= ".tar.gz";
+       $filename = $tar_dir . "/" . $filename;
+       my $fs_size = stat($filename)[7];
+       $totalRemoved += $fs_size;
+       print "removing $filename... size: $fs_size\n";
+#      if (system("rm $filename") != 0) {
+#              print "ERROR: unable to remove $filename.\n";
+#      }
+}
+
+print "Finished. Freed $totalRemoved bytes (".($totalRemoved/(1024*1024))."MB\n";
+
+$sth->finish();
+$dbh->disconnect();