Hi all,
I was fooling around a bit and added an RSS feed for my backuppc
installation. It's not very complete yet, but does have the basics, see
below. Created on 2.1.1. Requires XML::RSS, available from CPAN.
Enjoy.
Regards,
Rich
diff -ru --new-file backuppc.orig/cgi-bin/index.cgi
backuppc/cgi-bin/index.cgi
--- backuppc.orig/cgi-bin/index.cgi 2005-11-05 19:04:54.000000000 -0600
+++ backuppc/cgi-bin/index.cgi 2005-11-06 12:13:46.000000000 -0600
@@ -80,6 +80,7 @@
"startServer" => "StartServer",
"Stop" => "StopServer",
"adminOpts" => "AdminOptions",
+ "rss" => "RSS",
);
#
diff -ru --new-file backuppc.orig/lib/BackupPC/CGI/RSS.pm
backuppc/lib/BackupPC/CGI/RSS.pm
--- backuppc.orig/lib/BackupPC/CGI/RSS.pm 1969-12-31 18:00:00.000000000
-0600
+++ backuppc/lib/BackupPC/CGI/RSS.pm 2005-11-07 17:13:46.000000000 -0600
@@ -0,0 +1,151 @@
+#=============================================================
-*-perl-*-
+#
+# BackupPC::CGI::RSS package
+#
+# DESCRIPTION
+#
+# This module implements an RSS page for the CGI interface.
+#
+# AUTHOR
+# Rich Duzenbury (rduz at theduz dot com)
+#
+# COPYRIGHT
+# Copyright (C) 2005 Rich Duzenbury
+#
+# This program is free software; you can redistribute it and/or
modify
+# it under the terms of the GNU General Public License as published
by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA
+#
+#========================================================================
+#
+# Version 0.0.1, as a patch.
+#
+# See http://backuppc.sourceforge.net.
+#
+#========================================================================
+
+package BackupPC::CGI::RSS;
+
+use strict;
+use BackupPC::CGI::Lib qw(:all);
+use XML::RSS;
+
+sub action
+{
+ my $base_url = 'http://' . $ENV{'SERVER_NAME'} . $ENV{SCRIPT_NAME};
+
+ my($fullTot, $fullSizeTot, $incrTot, $incrSizeTot, $str,
+ $strNone, $strGood, $hostCntGood, $hostCntNone);
+
+ my $rss = new XML::RSS (version => '0.91',
+ encoding => 'ISO-8859-1');
+
+ $rss->channel( title => 'BackupPC Server',
+ link => $base_url,
+ language => 'en',
+ description => 'RSS feed for BackupPC',
+ );
+
+ $hostCntGood = $hostCntNone = 0;
+ GetStatusInfo("hosts");
+ my $Privileged = CheckPermission();
+
+ foreach my $host ( GetUserHosts(1) ) {
+ my($fullDur, $incrCnt, $incrAge, $fullSize, $fullRate,
$reasonHilite);
+ my($shortErr);
+ my @Backups = $bpc->BackupInfoRead($host);
+ my $fullCnt = $incrCnt = 0;
+ my $fullAge = $incrAge = -1;
+
+ $bpc->ConfigRead($host);
+ %Conf = $bpc->Conf();
+
+ next if ( $Conf{XferMethod} eq "archive" );
+ next if ( !$Privileged && !CheckPermission($host) );
+
+ for ( my $i = 0 ; $i < @Backups ; $i++ ) {
+ if ( $Backups[$i]{type} eq "full" ) {
+ $fullCnt++;
+ if ( $fullAge < 0 || $Backups[$i]{startTime} >
$fullAge ) {
+ $fullAge = $Backups[$i]{startTime};
+ $fullSize = $Backups[$i]{size} / (1024 * 1024);
+ $fullDur = $Backups[$i]{endTime} -
$Backups[$i]{startTime};
+ }
+ $fullSizeTot += $Backups[$i]{size} / (1024 * 1024);
+ } else {
+ $incrCnt++;
+ if ( $incrAge < 0 || $Backups[$i]{startTime} >
$incrAge ) {
+ $incrAge = $Backups[$i]{startTime};
+ }
+ $incrSizeTot += $Backups[$i]{size} / (1024 * 1024);
+ }
+ }
+ if ( $fullAge < 0 ) {
+ $fullAge = "";
+ $fullRate = "";
+ } else {
+ $fullAge = sprintf("%.1f", (time - $fullAge) / (24 *
3600));
+ $fullRate = sprintf("%.2f",
+ $fullSize / ($fullDur <= 0 ? 1 :
$fullDur));
+ }
+ if ( $incrAge < 0 ) {
+ $incrAge = "";
+ } else {
+ $incrAge = sprintf("%.1f", (time - $incrAge) / (24 *
3600));
+ }
+ $fullTot += $fullCnt;
+ $incrTot += $incrCnt;
+ $fullSize = sprintf("%.2f", $fullSize / 1000);
+ $incrAge = " " if ( $incrAge eq "" );
+ $reasonHilite = $Conf{CgiStatusHilightColor}{$Status{$host}{reason}}
+ || $Conf{CgiStatusHilightColor}{$Status{$host}{state}};
+ $reasonHilite = " bgcolor=\"$reasonHilite\"" if ( $reasonHilite ne
"" );
+ if ( $Status{$host}{state} ne "Status_backup_in_progress"
+ && $Status{$host}{state} ne "Status_restore_in_progress"
+ && $Status{$host}{error} ne "" ) {
+ ($shortErr = $Status{$host}{error}) =~ s/(.{48}).*/$1.../;
+ $shortErr = " ($shortErr)";
+ }
+
+my $host_state = $Lang->{$Status{$host}{state}};
+my $host_last_attempt = $Lang->{$Status{$host}{reason}} . $shortErr;
+
+$str = <<EOF;
+Full Count: $fullCnt
+Full age/days: $fullAge
+Full Size/GB: $fullSize
+Speed MB/sec: $fullRate
+Incremental Count: $incrCnt
+Incremental Age/Days: $incrAge
+State: $host_state
+Last Attempt: $host_last_attempt
+EOF
+
+ $rss->add_item(title => $host . ', ' .
+ $host_state . ', ' .
+ $host_last_attempt,
+ link => $base_url . '?host=' . $host,
+ description => $str);
+
+ }
+
+ $fullSizeTot = sprintf("%.2f", $fullSizeTot / 1000);
+ $incrSizeTot = sprintf("%.2f", $incrSizeTot / 1000);
+ my $now = timeStamp2(time);
+
+ print 'Content-type: text/xml', "\n\n",
+ $rss->as_string;
+
+}
+
+1;
-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP. Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
BackupPC-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/backuppc-users
http://backuppc.sourceforge.net/