171 lines
4.2 KiB
Perl
171 lines
4.2 KiB
Perl
#!perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use CPAN::HandleConfig;
|
|
use CPAN;
|
|
use CPAN::Mirrors;
|
|
use File::Spec;
|
|
|
|
my $file = 'MIRRORED.BY';
|
|
|
|
my $mirrored_by_file = File::Spec->catfile(
|
|
CPAN::HandleConfig::cpan_home(),
|
|
$file
|
|
);
|
|
|
|
unless( -e $mirrored_by_file ) {
|
|
eval {
|
|
CPAN::FTP->localize(
|
|
$file,
|
|
$mirrored_by_file,
|
|
3,1) } or die "Could not fetch a $file: $@\n";
|
|
}
|
|
|
|
my $mirrors = CPAN::Mirrors->new( $mirrored_by_file );
|
|
|
|
my $seen = {};
|
|
my $n = 5;
|
|
|
|
my $best_continent = $mirrors->find_best_continents( n => $n, seen => $seen, verbose => 1 );
|
|
print "Best continent is $best_continent\n";
|
|
|
|
my @mirrors = $mirrors->get_mirrors_by_continents( $best_continent );
|
|
|
|
my $callback = sub {
|
|
my( $m ) = @_;
|
|
printf "%s = %s ms\n", $m->hostname, 1000 * $m->rtt
|
|
};
|
|
my @sorted_mirrors = $mirrors->get_mirrors_timings( \@mirrors, $seen, $callback );
|
|
|
|
print "Best mirrors are ",
|
|
join "\n\t", map( $_->hostname, @sorted_mirrors[0..$n-1] ),
|
|
"\n";
|
|
|
|
print "Best urls are\n\t",
|
|
join( "\n\t", map( $_->http, @sorted_mirrors[0..$n-1] ) ),
|
|
"\n";
|
|
|
|
=encoding utf8
|
|
|
|
=head1 NAME
|
|
|
|
cpan-mirrors - Find the fatest CPAN mirrors nearby
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
% cpan-mirrors
|
|
|
|
Testing Africa
|
|
is.co.za -> 733.72 ms
|
|
wa.co.za -> 601.56 ms
|
|
ucu.ac.ug -> 407.99 ms
|
|
mirror.ac.za -> 614.05 ms
|
|
zol.co.zw -> 612.57 ms
|
|
-->median time: 612.57 ms
|
|
Testing Oceania
|
|
serversaustralia.com.au -> 38.62 ms
|
|
cpan.inspire.net.nz -> 67.81 ms
|
|
digitalpacific.com.au -> 37.89 ms
|
|
uber.com.au -> 44.47 ms
|
|
lagoon.nc -> 67.49 ms
|
|
-->median time: 44.47 ms
|
|
Testing North America
|
|
httpupdate40.cpanel.net -> 254.00 ms
|
|
httpupdate35.cpanel.net -> 409.75 ms
|
|
mirrors.sonic.net -> 368.56 ms
|
|
httpupdate8.cpanel.net -> 409.10 ms
|
|
cpan.cs.utah.edu -> 408.00 ms
|
|
-->median time: 408.00 ms
|
|
Testing Asia
|
|
vinahost.vn -> 146.10 ms
|
|
yazd.ac.ir -> 469.29 ms
|
|
mirrors-ru.go-parts.com -> 367.09 ms
|
|
sohu.com -> 399.76 ms
|
|
neolabs.kz -> 610.92 ms
|
|
-->median time: 399.76 ms
|
|
Testing South America
|
|
mmgdesigns.com.ar -> 407.96 ms
|
|
nbtelecom.com.br -> 401.96 ms
|
|
sunsite.dcc.uchile.cl -> 415.69 ms
|
|
linorg.usp.br -> 424.65 ms
|
|
unal.edu.co -> 407.60 ms
|
|
-->median time: 407.96 ms
|
|
Testing Europe
|
|
uk2.net -> 409.37 ms
|
|
ambiweb.de -> 710.65 ms
|
|
bibleonline.ru -> 471.49 ms
|
|
rol.ru -> 469.70 ms
|
|
rub.de -> 346.57 ms
|
|
-->median time: 469.70 ms
|
|
Median result by continent:
|
|
44 ms Oceania
|
|
400 ms Asia
|
|
408 ms South America
|
|
408 ms North America
|
|
470 ms Europe
|
|
613 ms Africa
|
|
Best continent is Oceania
|
|
cpan.catalyst.net.nz = 78.8369178771973 ms
|
|
cpan.inspire.net.nz = 69.4258213043213 ms
|
|
cpan.mirrors.ilisys.com.au = 50.2209663391113 ms
|
|
digitalpacific.com.au = 40.1251316070557 ms
|
|
lagoon.nc = 88.8760089874268 ms
|
|
nautile.nc = 65.7081604003906 ms
|
|
optusnet.com.au = 41.4729118347168 ms
|
|
serversaustralia.com.au = 46.1521148681641 ms
|
|
uber.com.au = 48.2730865478516 ms
|
|
waia.asn.au = 86.2929821014404 ms
|
|
webtastix.net = 70.5790519714355 ms
|
|
Best mirrors are digitalpacific.com.au
|
|
optusnet.com.au
|
|
serversaustralia.com.au
|
|
uber.com.au
|
|
cpan.mirrors.ilisys.com.au
|
|
|
|
Best urls are
|
|
http://cpan.mirror.digitalpacific.com.au/
|
|
http://mirror.optusnet.com.au/CPAN/
|
|
http://cpan.mirror.serversaustralia.com.au/
|
|
http://cpan.mirror.uber.com.au/
|
|
http://cpan.mirrors.ilisys.com.au/
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
CPAN Mirrors come and go, and maybe you do too. The mirror that was
|
|
fast then might not be fast now, especially if you changed hemispheres.
|
|
|
|
This program goes through the F<MIRRORED.BY> file and pings a selection
|
|
of mirrors on each continent to find the fastest mirrors. From the best
|
|
continent, it samples several mirrors to find the URL you should add
|
|
to your configuration.
|
|
|
|
If you don't have a F<MIRRORED.BY> file, this program will download one
|
|
for you. It looks through your existing C<urllist> configuration and
|
|
then default locations. It stores it in C<~/.cpan> (or your configured
|
|
location to store files).
|
|
|
|
=head1 TO DO
|
|
|
|
=over 4
|
|
|
|
=item * Add an option to update the CPAN configuration
|
|
|
|
=item * Add an option to give JSON output
|
|
|
|
=back
|
|
|
|
=head1 AUTHOR
|
|
|
|
brian d foy C<< <bdfoy@cpan.org> >>
|
|
|
|
=head1 LICENSE
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the same terms as Perl itself.
|
|
|
|
See L<http://www.perl.com/perl/misc/Artistic.html>
|
|
|
|
=cut
|