]> source.dussan.org Git - archiva.git/commitdiff
o add support for selecting syncing mode
authorJason van Zyl <jvanzyl@apache.org>
Thu, 16 Nov 2006 11:07:23 +0000 (11:07 +0000)
committerJason van Zyl <jvanzyl@apache.org>
Thu, 16 Nov 2006 11:07:23 +0000 (11:07 +0000)
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@475682 13f79535-47bb-0310-9956-ffa450edef68

maven-meeper/src/bin/synchronize/syncopate/sync.new [new file with mode: 0755]

diff --git a/maven-meeper/src/bin/synchronize/syncopate/sync.new b/maven-meeper/src/bin/synchronize/syncopate/sync.new
new file mode 100755 (executable)
index 0000000..77f3f61
--- /dev/null
@@ -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 "<document>" . "\n";
+    
+    print REPORT "<properties>" . "\n";
+
+    print REPORT "<author>meeper</author>" . "\n";
+    
+    print REPORT "<title>$reportName</title>" . "\n";
+    
+    print REPORT "</properties>" . "\n";
+    
+    print REPORT "<body>" . "\n";
+    
+    print REPORT "<section name=\"$reportName\">" . "\n";
+    
+    print REPORT "<table>" . "\n";
+    
+    print REPORT "<tr>" . "\n";
+    
+    print REPORT "<th>Artifact</th>" . "\n";
+    
+    print REPORT "<th>Size (in bytes)</th>" . "\n";    
+    
+    print REPORT "<th>Date</th>" . "\n";        
+    
+    print REPORT "</tr>" . "\n";
+
+    open( SYNC, "$cmd 2>&1 |" );
+
+    my $rawReportText;
+    
+    while( <SYNC> ) 
+    {
+        # --------------------------------------------------------------------
+        # We have a line that tells us about an artifact that was synced. 
+        # --------------------------------------------------------------------        
+        if ( /^artifact/ )
+        {
+            my @details = split;
+            
+            print REPORT "<tr>" . "\n";
+            
+            print REPORT "<td>" . $details[1] . "</td>" . "\n";
+            
+            print REPORT "<td>" . $details[2] . "</td>" . "\n";            
+            
+            print REPORT "<td>" . $details[3] . " " . $details[4] . "</td>" . "\n";
+            
+            print REPORT "</tr>" . "\n";
+        }
+        else
+        {
+            $rawReportText = $rawReportText . $_;
+
+            print RAW_REPORT;
+        }
+    }        
+    
+    print REPORT "</table>" . "\n";    
+
+    print REPORT "<p><a href=\"$rawReport\">Raw report</a></p>";
+    
+    print REPORT "</section>" . "\n";
+    
+    print REPORT "</body>" . "\n";
+    
+    print REPORT "</document>" . "\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();
+}