#!/usr/bin/perl use strict; use lib "__INSTALLDIR__/lib"; use BackupPC::Lib; use BackupPC::View; use Data::Dumper; use Spreadsheet::WriteExcel; use POSIX qw/strftime/; my $xls_file = '/tmp/report.xls'; my $workbook = Spreadsheet::WriteExcel->new($xls_file) || die "can't write to $xls_file: $!"; my @cols = qw( hostname type num startTime endTime =E##-D##,duration level noFill fillFromNum mangle nFiles nFilesNew nFilesExist xferErrs xferMethod xferBadShare xferBadFile tarErrs size sizeNew sizeExist compress sizeNewComp =W##/T##,sizeNewRatio sizeExistComp =Y##/U##,sizeExistRatio ); my $date_format = $workbook->add_format(num_format => 'yyyy-mm-dd hh:mm:ss'); my $duration_format = $workbook->add_format(num_format => 'hh:mm:ss'); my $header_format = $workbook->add_format(color => 'gray'); my $pcnt_format = $workbook->add_format(num_format => '0.0%'); my $size_format = $workbook->add_format(num_format => '#0'); my $formats = { duration => $duration_format, sizeNewRatio => $pcnt_format, sizeExistRatio => $pcnt_format, size => $size_format, sizeNew => $size_format, sizeExist => $size_format, sizeNewComp => $size_format, sizeExistComp => $size_format, }; my $bpc = BackupPC::Lib->new || die; my %Conf = $bpc->Conf(); my $TopDir = $bpc->TopDir(); my $hosts = $bpc->HostInfoRead(); my $worksheet = $workbook->add_worksheet('BackupPC'); my $row = 0; my $i = 0; # insert sheet header (with formatting) foreach my $c (@cols) { if ($c =~ m/^=.*,(.+)/) { $worksheet->write($row, $i++, $1, $header_format); } else { $worksheet->write($row, $i++, $c, $header_format); } } $row++; foreach my $host_key (sort keys %{$hosts}) { my $hostname = $hosts->{$host_key}->{'host'} || die "can't find host for $host_key"; print $hostname, " "; # get backups for a host my @backups = $bpc->BackupInfoRead($hostname); print scalar @backups, " increments\n"; foreach my $backup (@backups) { $worksheet->write($row, 0, $hostname); for (my $i = 0; $i <= $#cols; $i++) { my $col = $cols[$i]; if ($col =~ m/Time/) { $worksheet->write_date_time($row, $i, strftime("%Y-%m-%dT%H:%M:%S", localtime( $backup->{ $cols[$i] }) ), $date_format ); } elsif ($col =~ m/(=[^,]+),*(.*)/) { my ($f,$n) = ($1,$2); $f =~ s/##/($row+1)/ge; $worksheet->write($row, $i, $f, $formats->{$n}); } else { $worksheet->write($row, $i, $backup->{$col}, $formats->{$col}); } } $row++; } } $workbook->close(); print "Created $xls_file\n";