API-Eulerian
view release on metacpan or search on metacpan
lib/API/Eulerian/EDW/Peer.pm view on Meta::CPAN
#/usr/bin/env perl
###############################################################################
#
# @file Peer.pm
#
# @brief Eulerian Data Warehouse Peer Base class Module definition.
#
# @author Thorillon Xavier:x.thorillon@eulerian.com
#
# @date 26/11/2021
#
# @version 1.0
#
###############################################################################
package API::Eulerian::EDW::Peer;
use strict;
use API::Eulerian::EDW::Status();
#
# @brief Allocate a new Eulerian Data Warehouse Peer.
#
# @param $class - Eulerian Data Warehouse Peer Class.
# @param $setup - Setup attributes.
#
# @return Eulerian Data Warehouse Peer instance.
#
sub new
{
my $proto = shift();
my $class = ref($proto) || $proto;
my $setup = shift() || {};
return bless({
_CLASS => $class,
_KIND => 'access',
_PLATFORM => 'fr',
_HOOKS => undef,
_TOKEN => undef,
_GRID => undef,
_HOST => undef,
_PORTS => [ 80, 443 ],
_SECURE => 1,
_IP => undef
});
}
#
# @brief Class attribute getter.
#
# @param $self - Eulerian Data Warehouse Peer.
#
# @return Eulerian Data Warehouse Peer Class name.
#
sub class
{
return shift->{ _CLASS };
}
# @brief Token Kind attribute accessors.
#
# @param $self - Eulerian Data Warehouse Peer.
# @param $kind - Token kind.
#
# @return Token Kind.
#
sub kind
{
my ( $self, $kind ) = @_;
$self->{ _KIND } = $kind if defined( $kind );
return $self->{ _KIND };
}
#
# @brief Host attribute accessors.
#
# @param $self - Eulerian Data Warehouse Peer.
# @param $host - Eulerian Data Warehouse Host name.
#
# @return Eulerian Data Warehouse Host Name.
#
sub host
{
my ( $self, $host ) = @_;
$self->{ _HOST } = $host if defined( $host );
return $self->{ _HOST };
}
#
# @brief Ports attribute accessors.
#
# @param $self - Eulerian Data Warehouse Peer.
# @param $ports - Eulerian Data Warehouse Host Ports.
#
# @return Eulerian Data Warehouse Host Ports.
#
sub ports
{
my ( $self, $ports ) = @_;
$self->{ _PORTS } = $ports if defined( $ports );
return $self->{ _PORTS };
}
#
# @brief Platform attribute accessors.
#
# @param $self - Eulerian Data Warehouse Peer.
# @param $platform - Eulerian Data Warehouse Platform.
lib/API/Eulerian/EDW/Peer.pm view on Meta::CPAN
# @brief IP attribute accessors.
#
# @param $self - Eulerian Data Warehouse Peer.
# @param $ip - Eulerian Data Warehouse Peer IP.
#
# @return Secure mode flag.
#
sub ip
{
my ( $self, $ip ) = @_;
$self->{ _IP } = $ip if defined( $ip );
return $self->{ _IP };
}
#
# @brief Token attribute accessors.
#
# @param $self - Eulerian Data Warehouse Peer.
# @param $token - Eulerian Token.
#
# @return Eulerian Token.
#
sub token
{
my ( $self, $token ) = @_;
$self->{ _TOKEN } = $token if defined( $token );
return $self->{ _TOKEN };
}
#
# @brief Setup Eulerian Data Warehouse Peer.
#
# @param $self - Eulerian Data Warehouse Peer.
# @param $setup - Setup entries.
#
sub setup
{
my ( $self, $setup ) = @_;
foreach my $param ( qw/
kind platform hook secure token grid ip host ports / ) {
if ( $self->can($param) && exists $setup->{ $param } ) {
$self->$param( $setup->{$param} );
}
}
return $self;
}
#
# @brief Dump Eulerian Data Warehouse Peer settings.
#
# @param $self - Eulerian Data Warehouse Peer.
#
sub dump
{
my ( $self ) = @_;
my $hook = $self->hook() ? 'Set' : 'Unset';
my $secure = $self->secure() ? 'True' : 'False';
my $ports = $self->ports();
my $dump = "\n";
$ports = $ports ? $ports->[ 0 ] . ',' . $ports->[ 1 ] : undef;
$dump .= 'Host : ' . $self->host() . "\n" if $self->host();
$dump .= 'Ports : ' . $ports . "\n" if $ports;
$dump .= 'Class : ' . $self->class() . "\n";
$dump .= 'Kind : ' . $self->kind() . "\n";
$dump .= 'Platform : ' . $self->platform() . "\n";
$dump .= 'Hook : ' . $hook . "\n";
$dump .= 'Token : ' . $self->token() . "\n";
$dump .= 'Grid : ' . $self->grid() . "\n";
$dump .= 'Secure : ' . $secure . "\n";
$dump .= 'Ip : ' . $self->ip() . "\n";
print( $dump );
return $self;
}
#
# @brief Get Authorization bearer value from Eulerian Authority Services.
#
# @param $self - Eulerian Data Warehouse Peer.
#
# @return API::Eulerian::EDW::Status. On success a new entry 'bearer' is inserted into
# the Status.
#
sub _bearer
{
my $self = shift;
my $bearer = $self->{ _BEARER };
my $status;
if( ! defined( $bearer ) ) {
# Request Authority Services for a valid bearer
$status = API::Eulerian::EDW::Authority->bearer(
$self->kind(), $self->platform(),
$self->grid(), $self->ip(),
$self->token()
);
# Cache bearer value for next use
$self->{ _BEARER } = $status->{ bearer } if ! $status->error();
} else {
# Return Cached bearer value
$status = API::Eulerian::EDW::Status->new();
$status->{ bearer } = $bearer;
}
return $status;
}
#
# @brief Create HTTP Request Headers.
#
# @param $self - Eulerian Data Warehouse Peer.
#
# @return API::Eulerian::EDW::Status. On success a new entry 'headers' is inserted into
# the status.
#
sub headers
{
my $self = shift;
my $status = $self->_bearer();
my $headers;
( run in 2.092 seconds using v1.01-cache-2.11-cpan-d80b1682f3f )