Akamai-Open-DiagnosticTools
view release on metacpan or search on metacpan
lib/Akamai/Open/DiagnosticTools.pm view on Meta::CPAN
LOC_URI => '/v1/locations'
};
extends 'Akamai::Open::Request::EdgeGridV1';
has 'tools_uri' => (is => 'ro', default => TOOLS_URI);
has 'dig_uri' => (is => 'ro', default => DIG_URI);
has 'mtr_uri' => (is => 'ro', default => MTR_URI);
has 'loc_uri' => (is => 'ro', default => LOC_URI);
has 'baseurl' => (is => 'rw', trigger => \&Akamai::Open::Debug::debugger);
has 'last_error'=> (is => 'rw');
sub validate_base_url {
my $self = shift;
my $base = $self->baseurl();
$self->debug->logger->debug('validating baseurl');
$base =~ s{/$}{} && $self->baseurl($base);
return;
}
foreach my $f (qw/dig mtr locations/) {
lib/Akamai/Open/DiagnosticTools.pm view on Meta::CPAN
sub dig {
my $self = shift;
my $param = shift;
my $valid_types_re = qr/^(?i:A|AAAA|PTR|SOA|MX|CNAME)$/;
my $data;
$self->debug->logger->debug('dig() was called');
unless(ref($param)) {
$self->last_error('parameter of dig() has to be a hashref');
$self->debug->logger->error($self->last_error());
return(undef);
}
unless(defined($param->{'hostname'}) && defined($param->{'queryType'})) {
$self->last_error('hostname and queryType are mandatory options for dig()');
$self->debug->logger->error($self->last_error());
return(undef);
}
unless($param->{'queryType'} =~ m/$valid_types_re/) {
$self->last_error('queryType has to be one of A, AAAA, PTR, SOA, MX or CNAME');
$self->debug->logger->error($self->last_error());
return(undef);
}
unless(defined($param->{'location'}) || defined($param->{'sourceIp'})) {
$self->last_error('either location or sourceIp has to be set');
$self->debug->logger->error($self->last_error());
return(undef);
}
$self->request->uri->query_form($param);
$self->sign_request();
$self->response($self->user_agent->request($self->request()));
$self->debug->logger->info(sprintf('HTTP response code for dig() call is %s', $self->response->code()));
$data = decode_json($self->response->content());
given($self->response->code()) {
when($_ == 200) {
if(defined($data->{'dig'}->{'errorString'})) {
$self->last_error($data->{'dig'}->{'errorString'});
$self->debug->logger->error($self->last_error());
return(undef);
} else {
return($data->{'dig'});
}
}
when($_ =~m/^5\d\d/) {
$self->last_error('the server returned a 50x error');
$self->debug->logger->error($self->last_error());
return(undef);
}
}
$self->last_error(sprintf('%s %s %s', $data->{'httpStatus'} ,$data->{'title'} ,$data->{'problemInstance'}));
$self->debug->logger->error($self->last_error());
return(undef);
}
sub mtr {
my $self = shift;
my $param = shift;
my $data;
$self->debug->logger->debug('mtr() was called');
unless(ref($param)) {
$self->last_error('parameter of mtr() has to be a hashref');
$self->debug->logger->error($self->last_error());
return(undef);
}
unless(defined($param->{'destinationDomain'})) {
$self->last_error('destinationDomain is a mandatory options for mtr()');
$self->debug->logger->error($self->last_error());
return(undef);
}
unless(defined($param->{'location'}) || defined($param->{'sourceIp'})) {
$self->last_error('either location or sourceIp has to be set');
$self->debug->logger->error($self->last_error());
return(undef);
}
$self->request->uri->query_form($param);
$self->sign_request();
$self->response($self->user_agent->request($self->request()));
$self->debug->logger->info(sprintf('HTTP response code for mtr() call is %s', $self->response->code()));
$data = decode_json($self->response->content());
given($self->response->code()) {
when($_ == 200) {
if(defined($data->{'mtr'}->{'errorString'})) {
$self->last_error($data->{'mtr'}->{'errorString'});
$self->debug->logger->error($self->last_error());
return(undef);
} else {
return($data->{'mtr'});
}
}
when($_ =~m/^5\d\d/) {
$self->last_error('the server returned a 50x error');
$self->debug->logger->error($self->last_error());
return(undef);
}
}
$self->last_error(sprintf('%s %s %s', $data->{'httpStatus'} ,$data->{'title'} ,$data->{'problemInstance'}));
$self->debug->logger->error($self->last_error());
return(undef);
}
sub locations {
my $self = shift;
my $data;
$self->debug->logger->debug('locations() was called');
$self->sign_request();
$self->response($self->user_agent->request($self->request()));
$self->debug->logger->info(sprintf('HTTP response code for locations() call is %s', $self->response->code()));
$data = decode_json($self->response->content());
given($self->response->code()) {
when($_ == 200) {
if(defined($data->{'errorString'})) {
$self->last_error($data->{'errorString'});
$self->debug->logger->error($self->last_error());
return(undef);
} else {
return($data->{'locations'});
}
}
when($_ =~m/^5\d\d/) {
$self->last_error('the server returned a 50x error');
$self->debug->logger->error($self->last_error());
return(undef);
}
}
$self->last_error(sprintf('%s %s %s', $data->{'httpStatus'} ,$data->{'title'} ,$data->{'problemInstance'}));
$self->debug->logger->error($self->last_error());
return(undef);
}
1;
__END__
=pod
=encoding utf-8
lib/Akamai/Open/DiagnosticTools.pm view on Meta::CPAN
I<baseurl()> is a I<Moose> powered getter/setter method, to set
and receive the object's assigned baseurl.
=head2 $diag->locations()
To initiate diagnostinc actions inside the Akamai network, you'll
need the information about the locations from which diagnostic
actions are available.
I<locations()> provides the informations. On success it returns a
Perl-style array reference. On error it returns I<undef> and sets
the I<last_error()> appropriate.
=head2 $diag->mtr($hash_ref)
I<mtr()> returns a network trace like the well know I<mtr> Unix command.
I<mtr()> accepts the following parameters in $hash_ref as a Perl-style
hash reference:
=over 4
lib/Akamai/Open/DiagnosticTools.pm view on Meta::CPAN
servers using the I<locations()> call. This paramter is optional.
Either location or sourceIp has to be passed to I<mtr()>
=item * sourceIp
A Akamai Server IP you want to run mtr from. This paramter is optional.
Either location or sourceIp has to be passed to I<mtr()>
=back
On success it returns a Perl-style hash reference. On error it returns
I<undef> and sets the I<last_error()> appropriate.
The hash reference has the following format:
{
'source' => ...,
'packetLoss' => '...',
'destination' => '...',
'errorString' => ...,
'analysis' => '...',
'host' => '...',
'avgLatency' => '...',
'hops' => [
{
'num' => '...',
'avg' => '...',
'last' => '...',
'stDev' => '...',
'host' => '...',
lib/Akamai/Open/DiagnosticTools.pm view on Meta::CPAN
servers using the I<locations()> call. This paramter is optional.
Either location or sourceIp has to be passed to I<dig()>
=item * sourceIp
A Akamai Server IP you want to run dig from. This paramter is optional.
Either location or sourceIp has to be passed to I<dig()>
=back
On success it returns a Perl-style hash reference. On error it returns
I<undef> and sets the I<last_error()> appropriate.
The hash reference has the following format:
{
'authoritySection' => [
{
'recordType' => '...',
'domain' => '...',
'value' => '...',
'ttl' => '...',
lib/Akamai/Open/DiagnosticTools.pm view on Meta::CPAN
'answerSection' => [
{
'recordType' => '...',
'domain' => '...',
'value' => '...',
'ttl' => '...',
'preferenceValues' => ...,
'recordClass' => '...'
}
],
'errorString' => ...,
'queryType' => '...',
'hostname' => '...',
'result' => '...'
}
=head2 $diag->last_error()
Just returns the last occured error.
=head1 AUTHOR
Martin Probst <internet+cpan@megamaddin.org>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Martin Probst.
This is free software; you can redistribute it and/or modify it under
( run in 0.317 second using v1.01-cache-2.11-cpan-65fba6d93b7 )