App-BackupPlan
view release on metacpan or search on metacpan
lib/App/BackupPlan.pm view on Meta::CPAN
my $taskName = $task->getAttributes->getNamedItem('name')->getNodeValue;
my $p = new App::BackupPlan::Policy;
foreach my $child ($task->getChildNodes) {
if ($child->getNodeType == ELEMENT_NODE){
my $name = $child->getNodeName;
my $value = $child->getFirstChild->getNodeValue;
$p->set($name,$value);
}
}
$raw_policies{$taskName} = $p;
}
%raw_policies = injectDefaultPolicy($defaultPolicy,%raw_policies);
return ($defaultPolicy,%raw_policies);
}
sub injectDefaultPolicy {
my ($defPolicy,%raw_pcs) = @_;
foreach my $k (keys %raw_pcs) {
$raw_pcs{$k}->setMaxFiles($defPolicy->getMaxFiles) unless defined($raw_pcs{$k}->getMaxFiles);
$raw_pcs{$k}->setPrefix($defPolicy->getPrefix) unless defined($raw_pcs{$k}->getPrefix);
$raw_pcs{$k}->setFrequency($defPolicy->getFrequency) unless defined($raw_pcs{$k}->getFrequency);
$raw_pcs{$k}->setSourceDir($defPolicy->getSourceDir) unless defined($raw_pcs{$k}->getSourceDir);
$raw_pcs{$k}->setTargetDir($defPolicy->getTargetDir) unless defined($raw_pcs{$k}->getTargetDir);
}
return %raw_pcs;
}
sub getFiles {
my %fileMap;
my ($sourceDir, $pattern) = @_;
opendir DH, $sourceDir or die "Cannot open directory $sourceDir: $!\n";
foreach my $f (readdir DH) {
if ($f=~m/$pattern\_(\d{4}\d{2}\d{2}).*/) {
my $fname = $sourceDir."/".$f;
#print "$fname\n";
$fileMap{$1}= $fname;
}
}
closedir DH;
return %fileMap;
}
sub getLastTs {
my (@ts) = sort @_;
my $nts = scalar @ts;
return $ts[$nts-1];
}
sub getFirstTs {
my (@ts) = sort @_;
return $ts[0];
}
# Autoload methods go after =cut, and are processed by the autosplit program.
1;
__END__
# Below is stub documentation for your module. You'd better edit it!
=head1 NAME
App::BackupPlan - Perl extension for automated, regular backups
=head1 SYNOPSIS
#when using system tar
use App::BackupPlan;
my $plan = new App::BackupPlan($configFile, $logFile);
$plan->run;
#when using perl tar
use App::BackupPlan;
$App::BackupPlan::TAR='perl';
my $plan = new App::BackupPlan($configFile, $logFile);
$plan->run;
=head1 DESCRIPTION
App::BackupPlan is a simple module to perform regular, selective and automated
backups of your system. It requires an xml file with the
specification of your backup plan, logically divided into independent tasks.
The constructor also takes a log4perl configuration file, to customise the logging produced.
This can be omitted if the default logging behaviour is desired.
By setting up a regular back-up task using cron or similar, and by configuring a backup plan with different
tasks, backup frequencies and max number of files retained, it is possible to achieve a regular
and incremental backup of different part of your system, without too much trouble.
=head2 CONFIGURATION
Here is a made-up sample configuration file for a backup plan that backups two directories with
different frequencies: a B<pictures> and a B<videos> directories.
<backup>
<plan name="one">
<default>
<maxFiles>3</maxFiles>
<frequency>1m</frequency>
<targetDir><![CDATA[/backup]]></targetDir>
</default>
<task name="pics">
<prefix>pics</prefix>
<sourceDir><![CDATA[/data/pictures]]></sourceDir>
<frequency>20d</frequency>
</task>
<task name="video">
<prefix>vid</prefix>
<maxFiles>2</maxFiles>
<sourceDir><![CDATA[/data/Videos]]></sourceDir>
<frequency>40d</frequency>
</task>
</plan>
</backup>
=over
=item * The tag B<E<lt>backupE<gt>> is the container tag for the backup plan.
=item * The tag B<E<lt>planE<gt>> contains the actual plan, as a collection of B<tasks>,
( run in 0.546 second using v1.01-cache-2.11-cpan-39bf76dae61 )