Subversion Repositories DevTools

Rev

Rev 6779 | Rev 7389 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 6779 Rev 7387
Line 42... Line 42...
42
#
42
#
43
#   Globals
43
#   Globals
44
#
44
#
45
my $logger = StdLogger->new();                  # Stdout logger. Only during config
45
my $logger = StdLogger->new();                  # Stdout logger. Only during config
46
$logger->err("No config file specified") unless (defined $ARGV[0]);
46
$logger->err("No config file specified") unless (defined $ARGV[0]);
-
 
47
$logger->err("Config File does not exist: $ARGV[0]") unless (-f $ARGV[0]);
47
my $name = basename( $ARGV[0]);
48
my $name = basename( $ARGV[0]);
48
   $name =~ s~.conf$~~;
49
   $name =~ s~.conf$~~;
49
my $now = 0;
50
my $now = 0;
50
my $startTime = 0;
51
my $startTime = 0;
51
my $tar = 'tar';
52
my $tar = 'tar';
Line 68... Line 69...
68
my $RemotePkgList = {};
69
my $RemotePkgList = {};
69
my $targetBinDir = "$FindBin::Bin/targetBin";
70
my $targetBinDir = "$FindBin::Bin/targetBin";
70
my $server_id;
71
my $server_id;
71
my @projectList;
72
my @projectList;
72
my @releaseList;
73
my @releaseList;
-
 
74
my $isS3Target;
73
 
75
 
74
#
76
#
75
#   Contain statisics maintained while operating
77
#   Contain statisics maintained while operating
76
#       Can be dumped with a kill -USR2
78
#       Can be dumped with a kill -USR2
77
#       List here for documentation
79
#       List here for documentation
Line 121... Line 123...
121
#
123
#
122
#   Describe configuration parameters
124
#   Describe configuration parameters
123
#
125
#
124
my %cdata = (
126
my %cdata = (
125
    '.ignore'         => {'pkg\.(.+)' => 'pkgs' },
127
    '.ignore'         => {'pkg\.(.+)' => 'pkgs' },
-
 
128
    '.oneOf'          => [['hostname','S3Bucket']] ,
-
 
129
 
126
    'piddir'          => {'mandatory' => 1      , 'fmt' => 'dir'},
130
    'piddir'          => {'mandatory' => 1      , 'fmt' => 'dir'},
127
    'sleep'           => {'default'   => 5      , 'fmt' => 'period'},
131
    'sleep'           => {'default'   => 5      , 'fmt' => 'period'},
128
    'dpkg_archive'    => {'mandatory' => 1      , 'fmt' => 'dir'},
132
    'dpkg_archive'    => {'mandatory' => 1      , 'fmt' => 'dir'},
129
    'logfile'         => {'mandatory' => 1      , 'fmt' => 'vfile'},
133
    'logfile'         => {'mandatory' => 1      , 'fmt' => 'vfile'},
130
    'logfile.size'    => {'default'   => '1M'   , 'fmt' => 'size'},
134
    'logfile.size'    => {'default'   => '1M'   , 'fmt' => 'size'},
131
    'logfile.count'   => {'default'   => 9      , 'fmt' => 'int'},
135
    'logfile.count'   => {'default'   => 9      , 'fmt' => 'int'},
132
    'verbose'         => {'default'   => 0      , 'fmt' => 'int'},
136
    'verbose'         => {'default'   => 0      , 'fmt' => 'int'},
133
    'user'            => {'mandatory' => 1      , 'fmt' => 'text'},
-
 
134
    'hostname'        => {'mandatory' => 1      , 'fmt' => 'text'},
-
 
135
    'rmHostName'      => {'default'   => undef  , 'fmt' => 'text'},
137
    'rmHostName'      => {'default'   => undef  , 'fmt' => 'text'},
136
    'sshport'         => {'default'   => 0      , 'fmt' => 'int'},
138
    'sshport'         => {'default'   => 0      , 'fmt' => 'int'},
137
    'identity'        => {'mandatory' => 1      , 'fmt' => 'file'},
-
 
138
    'bindir'          => {'mandatory' => 1      , 'fmt' => 'text'},
-
 
139
    'tagdir'          => {'mandatory' => 1      , 'fmt' => 'dir'},
139
    'tagdir'          => {'mandatory' => 1      , 'fmt' => 'dir'},
140
    'forcedirscan'    => {'default'   => 100    , 'fmt' => 'period'},
140
    'forcedirscan'    => {'default'   => 100    , 'fmt' => 'period'},
141
    'tagage'          => {'default'   => '10m'  , 'fmt' => 'period'},
141
    'tagage'          => {'default'   => '10m'  , 'fmt' => 'period'},
142
    'tagListUpdate'   => {'default'   => '1h'   , 'fmt' => 'period'},
142
    'tagListUpdate'   => {'default'   => '1h'   , 'fmt' => 'period'},
143
    'tagMaxPackages'  => {'default'   => 10      , 'fmt' => 'int'},
143
    'tagMaxPackages'  => {'default'   => 10     , 'fmt' => 'int'},
144
    'rmConfigCheck'   => {'default'   => '60'   , 'fmt' => 'period'},
144
    'rmConfigCheck'   => {'default'   => '60'   , 'fmt' => 'period'},
145
    'rmConfFullRead'  => {'default'   => '1h'   , 'fmt' => 'period'},
145
    'rmConfFullRead'  => {'default'   => '1h'   , 'fmt' => 'period'},
146
    'synctime'        => {'default'   => '2h'   , 'fmt' => 'period'},
146
    'synctime'        => {'default'   => '2h'   , 'fmt' => 'period'},
147
    'syncretry'       => {'default'   => '5m'   , 'fmt' => 'period'},
147
    'syncretry'       => {'default'   => '5m'   , 'fmt' => 'period'},
148
    'allProjects'     => {'default'   => 0      , 'fmt' => 'bool'},
148
    'allProjects'     => {'default'   => 0      , 'fmt' => 'bool'},
Line 157... Line 157...
157
    'packageFilter'   => {'default'   => undef  , 'fmt' => 'text'},
157
    'packageFilter'   => {'default'   => undef  , 'fmt' => 'text'},
158
    'active'          => {'default'   => 1      , 'fmt' => 'bool'},
158
    'active'          => {'default'   => 1      , 'fmt' => 'bool'},
159
    'debug'           => {'default'   => 0      , 'fmt' => 'bool'},                 # Log to screen
159
    'debug'           => {'default'   => 0      , 'fmt' => 'bool'},                 # Log to screen
160
    'txdetail'        => {'default'   => 0      , 'fmt' => 'bool'},
160
    'txdetail'        => {'default'   => 0      , 'fmt' => 'bool'},
161
    'noTransfers'     => {'default'   => 0      , 'fmt' => 'bool'},                 # Debugging option to prevent transfers
161
    'noTransfers'     => {'default'   => 0      , 'fmt' => 'bool'},                 # Debugging option to prevent transfers
-
 
162
 
162
    
163
    #
-
 
164
    #   Transfer via ssh
-
 
165
    #   Cannot be used in conjunction with S3Bucket
-
 
166
    #    
-
 
167
    'hostname'        => {'fmt' => 'text', requires => 'user,identity,bindir'},
-
 
168
    'user'            => {'fmt' => 'text', requires => 'hostname'},
-
 
169
    'identity'        => {'fmt' => 'file'},
-
 
170
    'bindir'          => {'fmt' => 'text'},
-
 
171
 
-
 
172
    #
-
 
173
    #   Transfer to S3 configuration items
-
 
174
    #       Cannot be used in conjunction with hostname
-
 
175
    #       Many other options will be ignored 
-
 
176
    #
-
 
177
    'S3Bucket'        => {'fmt' => 'text', requires => 'S3Profile'},
-
 
178
    'S3Profile'       => {'fmt' => 'text', requires => 'S3Bucket' },
163
);
179
);
164
 
180
 
165
 
181
 
166
#
182
#
167
#   Read in the configuration
183
#   Read in the configuration
Line 263... Line 279...
263
        if ( scalar @{$errors} > 0 )
279
        if ( scalar @{$errors} > 0 )
264
        {
280
        {
265
            warn "$_\n" foreach (@{$errors});
281
            warn "$_\n" foreach (@{$errors});
266
            die ("Config contained errors\n");
282
            die ("Config contained errors\n");
267
        }
283
        }
-
 
284
        $isS3Target = defined $conf->{'S3Bucket'};
268
 
285
 
269
        #
286
        #
270
        #   Reset some information
287
        #   Reset some information
271
        #   Create a new logger
288
        #   Create a new logger
272
        #
289
        #
273
        $logger = Logger->new($conf);
290
        $logger = Logger->new($conf) unless $conf->{debug};
274
        $conf->{logger} = $logger;
291
        $conf->{logger} = $logger;
275
        $conf->{'pidfile'} = $conf->{'piddir'} . '/' . $name . '.pid';
292
        $conf->{'pidfile'} = $conf->{'piddir'} . '/' . $name . '.pid';
-
 
293
        $logger->setVerbose($conf->{verbose});
276
        $logger->verbose("Log Levl: $conf->{verbose}");
294
        $logger->verbose("Log Levl: $conf->{verbose}");
277
 
295
 
278
        #
296
        #
279
        #   Setup statistics filename
297
        #   Setup statistics filename
280
        $conf->{'statsfile'} = $conf->{'piddir'} . '/' . $name . '.stats';
298
        $conf->{'statsfile'} = $conf->{'piddir'} . '/' . $name . '.stats';
Line 282... Line 300...
282
 
300
 
283
        #
301
        #
284
        #   Extract extra package config
302
        #   Extract extra package config
285
        #       Ignore ALL and Version info if transferring the entire archive
303
        #       Ignore ALL and Version info if transferring the entire archive
286
        #       Honor the EXCLUDE - for bandwidth reasons
304
        #       Honor the EXCLUDE - for bandwidth reasons
-
 
305
        #       
-
 
306
        #   NOTE: Package inclusion will not be processed in allArchive mode
-
 
307
        #   BUG:  This processing should be done after the RmConfig has been included
287
        #
308
        #
288
        $extraPkgs = {};
309
        $extraPkgs = {};
289
        $excludePkgs = {};
310
        $excludePkgs = {};
290
        while (my($key, $data) = each ( %{$conf->{pkgs}} ))
311
        while (my($key, $data) = each ( %{$conf->{pkgs}} ))
291
        {
312
        {
Line 355... Line 376...
355
 
376
 
356
        $logger->warn("Transfer session configured as not active") unless ( $conf->{'active'} );
377
        $logger->warn("Transfer session configured as not active") unless ( $conf->{'active'} );
357
        $logger->warn("Transfer all project packages") if ( $conf->{'allProjects'} );
378
        $logger->warn("Transfer all project packages") if ( $conf->{'allProjects'} );
358
        $logger->warn("Transfer entire package archive") if ( $conf->{'allArchive'} );
379
        $logger->warn("Transfer entire package archive") if ( $conf->{'allArchive'} );
359
        $logger->warn("All Transfers disabled") if ( $conf->{'noTransfers'} );
380
        $logger->warn("All Transfers disabled") if ( $conf->{'noTransfers'} );
-
 
381
        $logger->warn("Transfer to AWS S3 Bucket") if ( $isS3Target );
360
    }
382
    }
361
 
383
 
362
    return $rv;
384
    return $rv;
363
}
385
}
364
 
386
 
Line 530... Line 552...
530
#
552
#
531
# Returns         : Nothing
553
# Returns         : Nothing
532
#
554
#
533
sub checkForBasicTools
555
sub checkForBasicTools
534
{
556
{
-
 
557
    return if $isS3Target;
-
 
558
 
535
    my $ph;
559
    my $ph;
536
    my $found;
560
    my $found;
537
    my $tgt_cmd = "if [ -x  $conf->{'bindir'}/get_plist.pl ] ; then echo :FOUND:; fi";
561
    my $tgt_cmd = "if [ -x  $conf->{'bindir'}/get_plist.pl ] ; then echo :FOUND:; fi";
538
    my $ssh_cmd = sshCmd($tgt_cmd);
562
    my $ssh_cmd = sshCmd($tgt_cmd);
539
 
563
 
Line 607... Line 631...
607
    #
631
    #
608
    #   Is Release List Processing active
632
    #   Is Release List Processing active
609
    #   Can configure blat to disable release sync
633
    #   Can configure blat to disable release sync
610
    #   This will then allow 'new' packages to be sent
634
    #   This will then allow 'new' packages to be sent
611
    #
635
    #
612
    if ( $conf->{maxpackages} == 0 || $conf->{'synctime'} <= 0)
636
    if ( $conf->{maxpackages} == 0 || $conf->{'synctime'} <= 0 || $isS3Target )
613
    {
637
    {
614
        $logger->verbose2("processReleaseList disabled");
638
        $logger->verbose2("processReleaseList disabled");
-
 
639
        $RemotePkgList = {};
615
        return;
640
        return;
616
    }
641
    }
617
 
642
 
618
    #
643
    #
619
    #   Time to perform the scan
644
    #   Time to perform the scan
Line 1608... Line 1633...
1608
                } elsif ( transferPackage( $package, $version )) {
1633
                } elsif ( transferPackage( $package, $version )) {
1609
                    unlink $file;
1634
                    unlink $file;
1610
                }
1635
                }
1611
                else
1636
                else
1612
                {
1637
                {
-
 
1638
                    if ($conf->{'tagage'} > 0) {
1613
                    my ($mtime) = Utils::mtime( $file );
1639
                        my ($mtime) = Utils::mtime( $file );
1614
                    if ( $now - $mtime > $conf->{'tagage'} )
1640
                        if ( $now - $mtime > $conf->{'tagage'} )
1615
                    {
1641
                        {
1616
                        $logger->warn ("Delete unsatisfied tag: $package::$version");
1642
                            $logger->warn ("Delete unsatisfied tag: $package::$version after $conf->{'tagage'}" );
1617
                        unlink $file;
1643
                            unlink $file;
1618
                        $statistics{staleTags}++;
1644
                            $statistics{staleTags}++;
-
 
1645
                        }
1619
                    }
1646
                    }
1620
                }
1647
                }
1621
 
1648
 
1622
                $tagCount--;
1649
                $tagCount--;
1623
                reapChildren();
1650
                reapChildren();
Line 1740... Line 1767...
1740
    {
1767
    {
1741
        $logger->warn("transferPackage:Package not found: $pname, $pver");
1768
        $logger->warn("transferPackage:Package not found: $pname, $pver");
1742
        return $rv;
1769
        return $rv;
1743
    }
1770
    }
1744
 
1771
 
-
 
1772
    my $tzdir = catfile( $conf->{'dpkg_archive'} , '.dpkg_archive', 'tarStore' );
-
 
1773
    my $tzfile = $pname . '__' . $pver . '.tgz';
-
 
1774
    my $tzpath = catfile($tzdir, $tzfile);
-
 
1775
    unless (-f $tzpath) {
-
 
1776
        $logger->verbose("transferPackage: tarZip not found - $tzpath");
-
 
1777
 
-
 
1778
        $conf->{'tagdir'} =~ m~^(.*)/~;
-
 
1779
        my $tagRoot = $1;
-
 
1780
        my $tag = "$pname::$pver";
-
 
1781
        Utils::TouchFile($conf, catfile($tagRoot, 'tarZip', $tag));
-
 
1782
        return 0;
-
 
1783
    }
-
 
1784
 
-
 
1785
 
1745
    ###########################################################################
1786
    ###########################################################################
1746
    #   Transfer the package / symlink
1787
    #   Transfer the package / symlink
1747
    #
1788
    #
-
 
1789
    if ($isS3Target) {
-
 
1790
        $cmdRv = transferPackageS3($tzdir, $tzfile, $pname, $pver);
-
 
1791
    } else {
-
 
1792
        $cmdRv = transferPackageSsh($tzdir, $tzfile, $sfile, $pname, $pver);
-
 
1793
    }
-
 
1794
 
-
 
1795
    #
-
 
1796
    #   Display the size of the package
-
 
1797
    #       Diagnostic use
-
 
1798
    #
-
 
1799
    if ($conf->{txdetail}) {
-
 
1800
        my $ph;
-
 
1801
        open ( $ph, "du -bs $sfile 2>/dev/null |" );
-
 
1802
        my $line = <$ph>;
-
 
1803
        $line =~ m/^([0-9]+)/;
-
 
1804
        $line = $1 || 0;
-
 
1805
        my $size = sprintf "%.3f", $line / 1024 / 1024 / 1024 ;
-
 
1806
        close $ph;
-
 
1807
        my $duration = time - $startTime;
-
 
1808
        $logger->logmsg("transferPackage: Stats: $pname, $pver, $size Gb, $duration Secs");
-
 
1809
    }
-
 
1810
 
-
 
1811
    if ( $cmdRv == 0 ) {           
-
 
1812
        #
-
 
1813
        #   Mark has having been transferred in the current cycle
-
 
1814
        #
-
 
1815
        $RemotePkgList->{$pname}{$pver}{transferred} = 1;
1748
    my $tar_cmd;
1816
        $rv = 1;
-
 
1817
        $statistics{txCount}++;
-
 
1818
 
-
 
1819
    } else {
-
 
1820
        $logger->warn("transferPackage:Transfer Error: $pname, $pver, $?");
-
 
1821
    }
-
 
1822
 
-
 
1823
    LogTxError ($?);
-
 
1824
    return $rv;
-
 
1825
}
-
 
1826
 
-
 
1827
#-------------------------------------------------------------------------------
-
 
1828
# Function        : transferPackageSsh
-
 
1829
#
-
 
1830
# Description     : Transfer a package via an ssh connection 
-
 
1831
#
-
 
1832
# Inputs          : $tzdir  - Directory that contains the tarZip file
-
 
1833
#                   $tzname - Name of tarZip File
-
 
1834
#                   $sfile  - Full path to the source file
-
 
1835
#                   $pname  - Package Name
-
 
1836
#                   $pver   - Package Version 
-
 
1837
#
-
 
1838
# Returns         : Result Code
-
 
1839
#                   0   - Transfer OK
-
 
1840
#                   <0  - Skip transfer
-
 
1841
#                   >0  - Command error code
-
 
1842
#
-
 
1843
sub transferPackageSsh
-
 
1844
{
-
 
1845
    my ($tzdir, $tzname, $sfile, $pname, $pver) = @_;
1749
    my $tgt_cmd;
1846
    my $tgt_cmd;
1750
    my $ssh_cmd;
1847
    my $ssh_cmd;
-
 
1848
    my $cmdRv = 0;
-
 
1849
    my $tzfile = catfile($tzdir, $tzname);
1751
       
1850
   
1752
    if (-l $sfile) {
1851
    if (-l $sfile) {
1753
 
1852
 
1754
        #
1853
        #
1755
        #   Determine the value of the symlink
1854
        #   Determine the value of the symlink
1756
        #   Only support simple symlinks - this in the same directory
1855
        #   Only support simple symlinks - that are in the same directory
1757
        #
1856
        #
1758
        my $lver = readlink( $sfile );
1857
        my $lver = readlink( $sfile );
1759
        if ( ! defined $lver ) {
1858
        if ( ! defined $lver ) {
1760
            $logger->warn("Can't resolve symlink: $pname, $pver");
1859
            $logger->warn("Can't resolve symlink: $pname, $pver");
1761
            next;
1860
            return -1;
1762
        }
1861
        }
1763
 
1862
 
1764
        if ( $lver =~ m ~/~ ) {
1863
        if ( $lver =~ m ~/~ ) {
1765
            $logger->warn("Won't resolve symlink: $pname, $pver, $lver");
1864
            $logger->warn("Won't resolve symlink: $pname, $pver, $lver");
1766
            next;
1865
            return -1;
1767
        }
1866
        }
1768
 
1867
 
1769
        $tgt_cmd = "$conf->{'bindir'}/receive_symlink \"$pname\" \"$pver\" \"$lver\"";
1868
        $tgt_cmd = "$conf->{'bindir'}/receive_symlink \"$pname\" \"$pver\" \"$lver\"";
1770
        $ssh_cmd = sshCmd($tgt_cmd);
1869
        $ssh_cmd = sshCmd($tgt_cmd);
1771
 
1870
 
1772
    } else {
1871
    } else {
1773
        #
1872
        #
1774
        #   Create the process pipe to transfer the package
1873
        #   Create the process pipe to transfer the package
1775
        #   Tar the directory and pipe the result through a ssh session to
1874
        #   Pipe the tarZip of the package through a ssh session to the target machine
1776
        #   the target machine
-
 
1777
        #   $tar -czf - -C "$dpkg/${pname}/${pver}" . |  ssh  ... "./receive_package pname pver"
1875
        #   cat $tzpath | ssh  ... "./receive_package pname pver"
1778
        #
1876
        #
1779
        $tar_cmd = "$tar -czf - -C \"$sfile\" .";
-
 
1780
        $tgt_cmd = "$conf->{'bindir'}/receive_package \"$pname\" \"$pver\"";
1877
        $tgt_cmd = "$conf->{'bindir'}/receive_package \"$pname\" \"$pver\"";
1781
        $ssh_cmd = sshCmd($tgt_cmd);
1878
        $ssh_cmd = sshCmd($tgt_cmd);
-
 
1879
        $ssh_cmd .= " <$tzfile"
1782
    }
1880
    }
1783
 
1881
 
1784
    $logger->verbose2("transferPackage:tar_cmd:$tar_cmd") if defined $tar_cmd;
-
 
1785
    $logger->verbose2("transferPackage:tgt_cmd:$tgt_cmd");
1882
    $logger->verbose2("transferPackage:tgt_cmd:$tgt_cmd");
1786
    $logger->verbose2("transferPackage:ssh_cmd:$ssh_cmd");
1883
    $logger->verbose2("transferPackage:ssh_cmd:$ssh_cmd");
1787
 
1884
 
1788
    unless ($conf->{'noTransfers'}) {
1885
    unless ($conf->{'noTransfers'}) {
1789
        my $ph;
1886
        my $ph;
1790
        my @cmd_list;
-
 
1791
        push (@cmd_list, $tar_cmd) if defined $tar_cmd;
-
 
1792
        push (@cmd_list, $ssh_cmd);
-
 
1793
        my $cmd = join (' | ', @cmd_list);
-
 
1794
        open ($ph, "$cmd |");
1887
        open ($ph, "$ssh_cmd |");
1795
        while ( <$ph> )
1888
        while ( <$ph> )
1796
        {
1889
        {
1797
            chomp;
1890
            chomp;
1798
            $logger->verbose2("transferPackage:Data: $_");
1891
            $logger->verbose2("transferPackage:Data: $_");
1799
        }
1892
        }
1800
        close ($ph);
1893
        close ($ph);
1801
        $cmdRv = $?;
1894
        $cmdRv = $?;
1802
        $logger->verbose("transferPackage:End: $?");
1895
        $logger->verbose("transferPackage:End: $?");
1803
    }
1896
    }
1804
 
1897
 
-
 
1898
    return $cmdRv;
-
 
1899
}
-
 
1900
 
-
 
1901
#-------------------------------------------------------------------------------
-
 
1902
# Function        : transferPackageS3
-
 
1903
#
-
 
1904
# Description     : Transfer a package to an AWS S3 bucket
-
 
1905
#                   Requires that the package already be tarZip-ed
-
 
1906
#
-
 
1907
# Inputs          : $tzdir  - Directory that contains the tarZip file
-
 
1908
#                   $tzfile - Name of tarZip File
-
 
1909
#                   $pname  - Package Name
-
 
1910
#                   $pver   - Package Version 
-
 
1911
#
-
 
1912
# Returns         : Result Code
-
 
1913
#                   0   - Transfer OK
-
 
1914
#                   <0  - Skip transfer
-
 
1915
#                   >0  - Command error code
-
 
1916
#
-
 
1917
sub transferPackageS3
-
 
1918
{
-
 
1919
    my ($tzdir, $tzfile, $pname, $pver) = @_;
-
 
1920
    my $cmdRv = 0;
-
 
1921
 
1805
    #
1922
    #
1806
    #   Display the size of the package
1923
    #   Locate the file on the dpkgArchive tarZip store
-
 
1924
    #   
-
 
1925
    my $sfile = catfile($tzdir, $tzfile);
-
 
1926
    if (-l $sfile) {
-
 
1927
        $logger->warn("Will not transfer symlink: $pname, $pver");
1807
    #       Diagnostic use
1928
        return -1;
-
 
1929
    }
-
 
1930
 
1808
    #
1931
    #
-
 
1932
    #   Create a command to transfer the file to AWS use the cli tools
-
 
1933
    #   Note: Ive seen problem with this when used from Perth to AWS (Sydney)
-
 
1934
    #         If this is an issue use curl - see the savePkgToS3.sh for an implementation
-
 
1935
    #   
-
 
1936
    my $s3_cmd = "aws --profile $conf->{'S3Profile'} s3 cp $sfile s3://$conf->{'S3Bucket'}/$tzfile";
-
 
1937
    $logger->verbose2("transferPackage:s3_cmd:$s3_cmd");
-
 
1938
 
1809
    if ($conf->{txdetail}) {
1939
    unless ($conf->{'noTransfers'}) {
1810
        my $ph;
1940
        my $ph;
1811
        open ( $ph, "du -bs $sfile 2>/dev/null |" );
1941
        open ($ph, "$s3_cmd |");
1812
        my $line = <$ph>;
1942
        while ( <$ph> )
1813
        $line =~ m/^([0-9]+)/;
1943
        {
1814
        $line = $1 || 0;
1944
            chomp;
1815
        my $size = sprintf "%.3f", $line / 1024 / 1024 / 1024 ;
1945
            $logger->verbose2("transferPackage:Data: $_");
-
 
1946
        }
1816
        close $ph;
1947
        close ($ph);
1817
        my $duration = time - $startTime;
1948
        $cmdRv = $?;
1818
        $logger->logmsg("transferPackage: Stats: $pname, $pver, $size Gb, $duration Secs");
1949
        $logger->verbose("transferPackage:End: $?");
1819
    }
1950
    }
1820
 
1951
 
1821
    if ( $cmdRv == 0 )
-
 
1822
    {           
-
 
1823
        #
-
 
1824
        #   Mark has having been transferred in the current cycle
-
 
1825
        #
-
 
1826
        $RemotePkgList->{$pname}{$pver}{transferred} = 1;
-
 
1827
        $rv = 1;
-
 
1828
        $statistics{txCount}++;
-
 
1829
    }
-
 
1830
    else
-
 
1831
    {
-
 
1832
        $logger->warn("transferPackage:Transfer Error: $pname, $pver, $?");
-
 
1833
    }
-
 
1834
    LogTxError ($?);
-
 
1835
    return $rv;
1952
    return $cmdRv;
1836
}
1953
}
1837
 
1954
 
-
 
1955
 
1838
#-------------------------------------------------------------------------------
1956
#-------------------------------------------------------------------------------
1839
# Function        : deletePackage
1957
# Function        : deletePackage
1840
#
1958
#
1841
# Description     : Delete specified package to target system
1959
# Description     : Delete specified package to target system
1842
#
1960
#
Line 2160... Line 2278...
2160
        $lastReleaseScan = 0;
2278
        $lastReleaseScan = 0;
2161
        $lastTagListUpdate = 0;
2279
        $lastTagListUpdate = 0;
2162
        $lastRmConfRead = 0;
2280
        $lastRmConfRead = 0;
2163
    };
2281
    };
2164
 
2282
 
2165
    alarm 60;
2283
    alarm 60 unless $conf->{debug};
2166
    $SIG{ALRM} = sub {
2284
    $SIG{ALRM} = sub {
2167
        # On Dump Statistics
2285
        # On Dump Statistics
2168
        $logger->verbose2('Received SIGUSR2.');
2286
        $logger->verbose2('Received SIGUSR2.');
2169
        periodicStatistics();
2287
        periodicStatistics();
2170
        alarm 60;
2288
        alarm 60;