#!perl
use strict ;
use Win32::Process::List;

# configuration:

# Repertoire de base 
my $rootDir=		'c:\\rsync' ;
# Repertoire a sauvegarder.
# /!\ Attention aux / 
# Ne pas inclure la lettre de lecteur.
my $src=		"/Documents and Settings/frederic.helin" ;

# nom ou adresse du serveur de sauvegarde
my $server=		"workine" ;

# compte utilisé pour les sauvegardes
my $user=		"backup" ;

# mot de passe associé au compte $user
my $pass=		'backup' ;

# Répertoire de stockage des sauvegardes sur le server
my $dst=		"::Upload/externe/" ;

# chemin d'accès vers l'exécutable rsync
my $rsync=		"$rootDir\\rsync.exe" ;

# fichier contenant la liste des fichiers à exclure de la sauvegarde
my $exclude=		"$rootDir\\exclude" ;

# Options rsync
my $rsyncOptions=	"-a --delete --stats --exclude-from=$exclude" ;

# fichier du mot de passe associé au compte "$user"
my $passFile=		"$rootDir\\pass" ;

# fichier de log ( contient la date de la sauvegarde ). doit être dans un emplacement sauvegardé par le serveur car utilisé par celui-ci pour vérifier la periodicité des sauvegardes.
our $logFile=		"$src\\rsync.log" ;
our $fd ;

sub openLog($){
   my $logFile=shift ;
   open our $fd, ">>$logFile" or die "open: $!" ;
}

sub closeLog(){
   close our $fd ;
}

sub writeLog($){
   my $msg = shift  ;
   my $date=localtime ;
   print $fd "$date: $msg" ;
}

sub isProcessAlive($){
   my $process=shift ;
   my $P = Win32::Process::List->new();
   my $result = $P->GetProcessPid( $process ) ;
   if( $result > 0 ){ return 1 ; }
   else{ return 0 }
}

sub writePassFile($$){
   my ($file, $pass) = @_ ;
   open my $fd, ">$file"   or die "open: $!" ;
   print $fd $pass."\n" or die "print: $!" ;
   close $fd ;
}

sub deletePassFile($){
	my $file = shift ;
	unlink($file) or die "Can't unlink $file: $!";
}

openLog( $logFile ) ;
writeLog "backup starting\n" ;
my $process="outlook" ;
if( isProcessAlive( $process ) ){
   writeLog( "Outlook is running\n" ) ;
   writeLog( "Backup aborted\n" ) ;
   exit 1 ;
   }

writePassFile( $passFile, $pass ) ;
my $cmdArgs="$rsyncOptions"." --password-file="."$passFile \"$src\" $user".'@'."$server$dst" ;
my $result=` $rsync $cmdArgs 2>&1`  ;
deletePassFile( $passFile ) ;
writeLog "$result" ;
writeLog "backup done\n\n" ;
close( $logFile ) ;
