diff --git a/maven-meeper/src/bin/synchronize/syncopate/sync.new b/maven-meeper/src/bin/synchronize/syncopate/sync.new new file mode 100755 index 000000000..77f3f61b0 --- /dev/null +++ b/maven-meeper/src/bin/synchronize/syncopate/sync.new @@ -0,0 +1,319 @@ +#!/usr/bin/perl + +use strict; +use IniFiles; +use Net::SMTP; + +my $configuration = new Config::IniFiles( -file => "syncopate.conf" ); + +my $globalRepoDirectory = $configuration->val( "syncopate", "repoDirectory" ); + +my $repoDirectory = $configuration->val( "syncopate", "repoDirectory" ); + +my $standardOptions = $configuration->val( "syncopate", "options" ); + +my $rsyncUser = $configuration->val( "syncopate", "rsyncUser" ); + +my $reportDirectory = $configuration->val( "syncopate", "reportDirectory" ); + +my $smtpServer = $configuration->val( "syncopate", "smtpServer" ); + +my $reportUrl = $configuration->val( "syncopate", "reportUrl" ); + +if ( defined( $ARGV[0] ) ) +{ + my $sourceConfiguration = new Config::IniFiles( -file => "conf/m1/$ARGV[0]" . ".conf" ); + + syncSource( $sourceConfiguration ); +} +else +{ + syncSources(); +} + +# ----------------------------------------------------------------------------- +# +# +# ----------------------------------------------------------------------------- +sub syncSources +{ + my @sources = glob( "conf/m1/*.conf" ); + + for my $source (@sources) + { + my $sourceConfiguration = new Config::IniFiles( -file => $source ); + + my $batchDisabled = $sourceConfiguration->val( "info", "batchDisabled" ); + + if ( not defined( $batchDisabled ) ) + { + syncSource( $sourceConfiguration ); + } + } +} + +# ----------------------------------------------------------------------------- +# +# +# ----------------------------------------------------------------------------- +sub syncSource() +{ + my $sourceConfiguration = shift; + + print "Syncing " . $sourceConfiguration->val( "info", "name" ) . "\n"; + + # Look at the mode we are going to use to sync: svn over https, rsync over ssh, or plain rsync (we should move away from this) + + my $syncMode = $sourceConfiguration->val( "host", "mode" ); + + if ( $syncMode == "rsync_ssh" ) + { + runRsyncOverSsh( $sourceConfiguration ); + } + else if ( $syncMode == "rsync" ) + { + runRsync( $sourceConfiguration ); + } + else if ( $syncMode == "svn" ) + { + runSvnOverHttps( $sourceConfiguration ); + } +} + +# ----------------------------------------------------------------------------- +# +# ----------------------------------------------------------------------------- + + + +sub runRsyncOverSsh() +{ + my $sourceConfiguration = shift; + + my $address = $sourceConfiguration->val( "host", "address" ); + + my $directory = $sourceConfiguration->val( "host", "directory" ); + + my $options = $sourceConfiguration->val( "host", "options" ); + + my $rsyncUser = $configuration->val( "syncopate", "rsyncUser" ); + + my $identity = $configuration->val( "syncopate", "identity" ); + + if ( $sourceConfiguration->val( "host", "rsyncUser" ) ) + { + $rsyncUser = $sourceConfiguration->val( "host", "rsyncUser" ); + } + + if ( $sourceConfiguration->val( "host", "identity" ) ) + { + $identity = "-i " . $sourceConfiguration->val( "host", "identity" ); + } + + if ( $sourceConfiguration->val( "host", "repoDirectory" ) ) + { + $repoDirectory = $sourceConfiguration->val( "host", "repoDirectory" ); + } + + + my $cmd = "rsync $standardOptions $options --rsh=\"ssh -oBatchMode=yes $identity -T -l $rsyncUser\" $address:$directory/ $repoDirectory"; + + # ------------------------------------------------------------------------- + # Now we want to run rsync and generate a small xdoc which describes the + # syncronization that just occurred. + # ------------------------------------------------------------------------- + + my $id = $sourceConfiguration->val( "info", "id" ); + + my $name = $sourceConfiguration->val( "info", "name" ); + + my $reportName = "Synchronization report for " . $name; + + my @date = date(); + + my $date = $date[0] . "-" . $date[1] . "-" . $date[2]; + + my $dir = $date; + + $dir =~ s/-/\//g; + + $dir = $id . "/" . $dir; + + my $rdir = $reportDirectory . "/" . $dir; + + system( "mkdir -p $rdir > /dev/null 2>&1" ); + + my $base = $id . "-" . $date[0] . $date[1] . $date[2] . "-" . $date[3] . $date[4] . $date[5]; + + my $xmlReport = $rdir . "/" . $base . ".xml"; + + my $rawReport = $rdir . "/" . $base . ".txt"; + + open( REPORT, "> $xmlReport" ); + + open( RAW_REPORT, "> $rawReport" ); + + print REPORT "" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "meeper" . "\n"; + + print REPORT "$reportName" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "
" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "" . "\n"; + + open( SYNC, "$cmd 2>&1 |" ); + + my $rawReportText; + + while( ) + { + # -------------------------------------------------------------------- + # We have a line that tells us about an artifact that was synced. + # -------------------------------------------------------------------- + if ( /^artifact/ ) + { + my @details = split; + + print REPORT "" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "" . "\n"; + } + else + { + $rawReportText = $rawReportText . $_; + + print RAW_REPORT; + } + } + + print REPORT "
ArtifactSize (in bytes)Date
" . $details[1] . "" . $details[2] . "" . $details[3] . " " . $details[4] . "
" . "\n"; + + print REPORT "

Raw report

"; + + print REPORT "
" . "\n"; + + print REPORT "" . "\n"; + + print REPORT "
" . "\n"; + + close( REPORT ); + + close( RAW_REPORT ); + + if ( $rawReportText ) + { + $rawReportText = $rawReportText . "\n\nYou can view the syncronization reports for today here: \n\n"; + + $rawReportText = $rawReportText . $reportUrl . "/" . $dir; + + notify( $sourceConfiguration, $reportName, $rawReportText ); + } +} + +sub runRsync() +{ + my $sourceConfiguration = shift; +} + +sub runSvnOverHttps() +{ + my $sourceConfiguration = shift; +} + +sub date +{ + my $second; + my $minute; + my $hour; + my $day; + my $month; + my $year; + + ($second, $minute,$hour,$day, $month, $year) = (localtime)[0..5]; + + $year = $year + 1900; #got 2004 + + $month = $month + 1; + + $second = $second + 1; + + $minute = $minute + 1; + + $hour = $hour + 1; + + if ( $second <= 9 ) + { + $second = "0".$second; + } + if ( $minute <= 9 ) + { + $minute = "0".$minute; + } + if ( $hour <= 9 ) + { + $hour = "0".$hour; + } + if ( $day <= 9 ) + { + $day = "0".$day; + } + if ( $month <= 9) + { + $month = "0".$month; + } + + return ($year,$month,$day,$hour,$minute,$second); +} + +sub notify() +{ + my $sourceConfiguration = shift; + + my $subject = shift; + + my $text = shift; + + my $smtp = new Net::SMTP( $smtpServer ); + + $smtp->mail( "meeper\@maven.org" ); + + $smtp->to( $sourceConfiguration->val( "info", "contact" ) ); + + $smtp->data(); + + $smtp->datasend( "Subject: $subject\n" ); + + $smtp->datasend( "From: meeper\@maven.org\n" ); + + $smtp->datasend( "\n" ); + + $smtp->datasend( $text ); + + $smtp->dataend(); + + $smtp->quit(); +}