Metabrik-Repository
view release on metacpan or search on metacpan
lib/Metabrik/Database/Rir.pm view on Meta::CPAN
#
# $Id$
#
# database::rir Brik
#
package Metabrik::Database::Rir;
use strict;
use warnings;
# Some history:
# http://www.apnic.net/about-APNIC/organization/history-of-apnic/history-of-the-regional-internet-registries
use base qw(Metabrik);
sub brik_properties {
return {
revision => '$Revision$',
tags => [ qw(unstable as country subnet) ],
author => 'GomoR <GomoR[at]metabrik.org>',
license => 'http://opensource.org/licenses/BSD-3-Clause',
attributes => {
datadir => [ qw(datadir) ],
input => [ qw(input.rir) ],
_read => [ qw(INTERNAL) ],
},
attributes_default => {
input => 'input.rir',
},
commands => {
update => [ ],
next_record => [ qw(input|OPTIONAL) ],
ip_to_asn => [ qw(ipv4_address) ],
},
require_modules => {
'Metabrik::Client::Www' => [ ],
'Metabrik::File::Read' => [ ],
'Metabrik::Network::Address' => [ ],
},
};
}
sub update {
my $self = shift;
my @urls = qw(
ftp://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
ftp://ftp.ripe.net/ripe/stats/delegated-ripencc-extended-latest
ftp://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest
ftp://ftp.apnic.net/pub/stats/apnic/delegated-apnic-extended-latest
ftp://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest
);
my $datadir = $self->datadir;
my $cw = Metabrik::Client::Www->new_from_brik_init($self) or return;
my @fetched = ();
for my $url (@urls) {
$self->log->verbose("update: fetching url [$url]");
(my $filename = $url) =~ s/^.*\/(.*?)$/$1/;
my $output = $datadir.'/'.$filename;
my $r = $cw->mirror($url, $filename, $datadir);
if (! defined($r)) {
$self->log->warning("update: can't fetch url [$url]");
next;
}
if (@$r == 0) { # Nothing new
next;
}
push @fetched, $output;
}
return \@fetched;
}
sub next_record {
my $self = shift;
my ($input) = @_;
my $fr = $self->_read;
if (! defined($fr)) {
$input ||= $self->datadir.'/'.$self->input;
$self->brik_help_run_file_not_found('next_record', $input) or return;
$fr = Metabrik::File::Read->new_from_brik_init($self) or return;
$fr->encoding('ascii');
$fr->input($input);
$fr->as_array(0);
$fr->open or return;
$self->_read($fr);
}
my $na = Metabrik::Network::Address->new_from_brik_init($self) or return;
# 2|afrinic|20150119|4180|00000000|20150119|00000
# afrinic|*|asn|*|1146|summary
# afrinic|*|ipv4|*|2586|summary
# afrinic|*|ipv6|*|448|summary
# afrinic|ZA|asn|1228|1|19910301|allocated
# arin|US|ipv4|13.128.0.0|524288|19860425|assigned|efe0f73dfd0d72364bf64f417b803f18
( run in 0.846 second using v1.01-cache-2.11-cpan-39bf76dae61 )