package WebBack::Scheduler; use strict; use Digest::MD5 qw(md5 md5_base64); BEGIN { use Exporter (); our ( $VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS ); $VERSION = 0.05; @ISA = qw(Exporter); @EXPORT = ( ); %EXPORT_TAGS = ( ); @EXPORT_OK = ( ); } our @EXPORT_OK; sub new { my $type = shift; my $request = shift; my $conf_dir = shift; my $self = bless { @_ }; $self->{URL} = $request->url( -relative => 1 ); $self->{mode} = $request->param( "mode" ); $self->{conf_dir} = $conf_dir; return $self; } sub update { my $self = shift; my $request = shift; if ( defined $request->param('data_loaded') && $request->param('data_loaded') eq "TRUE" ) { # Update data in memory, don't save. my $counter = 1; my @newsched = (); while ( defined( $request->param("${counter}_exists") ) ) { if ( defined $request->param("${counter}_delete") && $request->param("${counter}_delete") ne "TRUE" ) { my %temp = (); if ( defined $request->param("${counter}_active") && $request->param("${counter}_active") eq "on" ) { $temp{active} = 1; } else { $temp{active} = 0; } $temp{hour} = $request->param("${counter}_hour"); $temp{minute} = $request->param("${counter}_minute"); $temp{day} = $request->param("${counter}_day"); $temp{month} = $request->param("${counter}_month"); $temp{dayofweek} = $request->param("${counter}_dayofweek"); $temp{fileset} = $request->param("${counter}_fileset"); $temp{device} = $request->param("${counter}_device"); push @newsched, \%temp; } $counter += 1; } # Check for a new schedule, and pull the information in if need be. if ( defined( $request->param("new_add") ) && $request->param("new_add") eq "TRUE" ) { my %temp = (); if ( defined $request->param("new_active") && $request->param("new_active") eq "on" ) { $temp{active} = 1; } else { $temp{active} = 0; } $temp{hour} = $request->param("new_hour"); $temp{minute} = $request->param("new_minute"); $temp{day} = $request->param("new_day"); $temp{month} = $request->param("new_month"); $temp{dayofweek} = $request->param("new_dayofweek"); $temp{fileset} = $request->param("new_fileset"); $temp{device} = $request->param("new_device"); push @newsched, \%temp; } $self->{schedules} = \@newsched; } else { # Load data from disk file. my $sched_file = $self->{conf_dir} . "/scheduled"; if ( ! -f "$sched_file" ) { my @empty = (); $self->{schedules} = \@empty; } else { my @empty = (); open SCHEDULED, "<$sched_file"; while () { my $line; my $active; if ( m/^#/ ) { $line = $_; $line =~ s/^#\s*//; $active = 0; } else { $line = $_; $active = 1; } m/([\d\-\,\*]+)\s+ ([\d\-\,\*]+)\s+ ([\d\-\,\*]+)\s+ ([\d\-\,\*]+)\s+ ([\d\-\,\*]+)\s+ ([\w]+)\s+ ([\w]+)/x =~ $line; if ( defined $1 ) { my %temp = ( active => $active, minute => "$1", hour => "$2", day => "$3", month => "$4", dayofweek => "$5", fileset => $6, device => $7 ); push @empty, \%temp; } } close SCHEDULED; $self->{schedules} = \@empty; } } } sub show { my $self = shift; my $colors = shift; print "\n"; print "Backup Scheduler\n"; print "{bgcolor} . "\" "; print "TEXT=\"" . $colors->{text} . "\" "; print "LINK=\"" . $colors->{link} . "\" "; print "ALINK=\"" . $colors->{alink} . "\" "; print "VLINK=\"" . $colors->{vlink} . "\">\n"; print "

Backup Scheduler

"; print "
{URL} . "\" METHOD=POST NAME=\"dir_tree\">\n"; print "{mode} . "\">\n"; print "\n"; print "
"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; my $aref = $self->{schedules}; my @scheduled = @$aref; my $counter = 1; for my $scheduled ( @scheduled ) { print "\n"; print "\n"; print "\n"; print ""; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; $counter += 1; } print "\n"; print "\n"; print "\n"; print ""; print ""; print "\n"; print "\n"; print "\n"; print ""; print ""; print ""; print "\n"; print "\n"; print "\n"; print "\n"; print "
Add/DeleteActive?HourMinuteFileSet
Backup Device
Day of the MonthMonthDay of the Week
Delete
\n"; print "\n"; print "{active} == 1) { print " CHECKED" } print ">\n"; print "{hour} . "\">"; print "\n"; print "{minute} . "\">\n"; print "FileSet: \n"; $self->show_fileset_selector( "${counter}_fileset", $scheduled->{fileset} ); print "
\n"; print "Backup Device: \n"; $self->show_device_selector( "${counter}_fileset", $scheduled->{device} ); print "
{day} . "\">{month} . "\">{dayofweek} . "\">
Add
FileSet: "; $self->show_fileset_selector("new_fileset"); print "
\n"; print "Backup Device: \n"; $self->show_device_selector("new_device"); print "
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "

\n"; print "
"; print "
"; print "
"; return; } sub show_fileset_selector { my $self = shift; my $name = shift; my $default = shift; my $fileset_dir = $self->{conf_dir} . "/filesets/"; my @filesets = (); if ( -d $fileset_dir ) { opendir FILESETS, $fileset_dir; @filesets = grep !/^\./, readdir FILESETS; closedir FILESETS; } if ( scalar(@filesets) == 0 ) { push @filesets, "No Filesets Defined"; } print "\n"; return; } sub show_device_selector { my $self = shift; my $name = shift; my $default = shift; my $device_dir = $self->{conf_dir} . "/devices/"; my @devices = (); if ( -d $device_dir ) { opendir DEVICES, $device_dir; @devices = grep !/^\./, readdir DEVICES; closedir DEVICES; } if ( scalar(@devices) == 0 ) { push @devices, "No Devices Defined"; } print "\n"; return; } 1;