#!/usr/bin/perl use strict; use warnings; use DBI; my $STAMPFILE = "/etc/bacula/scripts/summary.stamp"; my $dbh = DBI->connect("dbi:SQLite2:dbname=/var/lib/bacula/bacula.db","","") || die "Could not open SQLite database: $DBI::errstr"; local *FILE; my $last = 0; if (open(FILE, $STAMPFILE)) { $last = ; chomp($last); close(FILE); } else { $last = time() - 86400; } my $statement = qq~ SELECT DISTINCT J.* FROM Job J WHERE J.JobTDate > ? ORDER BY J.JobID ~; my $handle = $dbh->prepare($statement) || die "Could not prepare SQL statement: $DBI::errstr"; print "Summary of jobs finished since ".localtime($last).":\n"; $handle->execute($last) || die "Could not execute SQL statement: $DBI::errstr"; print "Job Name End Time Size Files Err Miss Status Level\n"; while (my $data = $handle->fetchrow_hashref) { if ($data->{JobTDate} > $last) { $last = $data->{JobTDate}; } my $size = $data->{JobBytes}; if ($size > 10 * 1024 * 1024 * 1024) { $size = sprintf("%d GB", ($size + 1024 * 1024 * 1024 - 1) / (1024 * 1024 * 1024)); } elsif ($size > 10 * 1024 * 1024) { $size = sprintf("%d MB", ($size + 1024 * 1024 - 1) / (1024 * 1024)); } elsif ($size > 10 * 1024) { $size = sprintf("%d kB", ($size + 1023) / 1024); } else { $size = sprintf("%d b ", $size); } printf("%4d %-15s %s %s %9s %7d %3d %4d %-6s %s (%s)\n", $data->{JobId}, $data->{Name}, substr($data->{EndTime}, 5, 5), substr($data->{EndTime}, 11, 8), $size, $data->{JobFiles}, $data->{JobErrors}, $data->{JobMissingFiles}, $data->{JobStatus}, $data->{Level}, $data->{Type}); } $handle->finish; $dbh->disconnect; open(FILE, ">$STAMPFILE") || die "Could not open $STAMPFILE for writing: $!"; print FILE "$last\n"; close(FILE) || die "Could not close $STAMPFILE after writing: $!";