view release on metacpan or search on metacpan
examples/edw/Rest.pl view on Meta::CPAN
Getopt::Long::GetOptions(
"grid=s" => \$grid,
"ip=s" => \$ip,
"token=s" => \$token,
"site=s" => \$site,
"query=s" => \$query,
"help|?" => \$help
);
Pod::Usage::pod2usage(1) if ( $help );
my %h_setup = (
grid => $grid,
ip => $ip,
token => $token,
site => $site,
query => $query
);
# get local IP
if ( !defined $h_setup{ip} || !length $h_setup{ip} ) {
my $response = HTTP::Tiny->new->get('http://monip.org/');
unless ( $response->{success} ) {
print STDERR "\tunable to reach external network to get IP address.\n";
exit(1);
}
($h_setup{ip}) = ($response->{content} =~ /IP\s:\s(\d+\.\d+\.\d+\.\d+)/gm);
}
foreach my $p ( qw/ grid ip token site query / ) {
if ( !defined $h_setup{$p} || !length $h_setup{$p} ) {
print STDERR "\tmissing $p parameter, check help.\n";
exit(1);
}
}
delete $h_setup{$_} for ( qw/ site query / );
# get query to send
my $qfile = './examples/edw/sql/'.$query.'.sql';
if ( !-e $qfile ) {
print STDERR "\trequested query $query does not exists.\n";
exit(1);
}
my $date_from = time() - 24 * 3600;
my $date_to = time();
my $cmd = File::Slurp::slurp($qfile);
$cmd =~ s/\[% SITE %\]/$site/gm;
$cmd =~ s/\[% DATE_FROM %\]/$date_from/gm;
$cmd =~ s/\[% DATE_TO %\]/$date_to/gm;
#
# Create a user specific Hook used to handle Analysis replies.
#
$h_setup{hook} = new API::Eulerian::EDW::Hook::Print();
my $peer = new API::Eulerian::EDW::Peer::Rest(\%h_setup);
my $status = $peer->request( $cmd );
if ( $status->error() ) {
$status->dump();
exit(1);
}
# Dump stages durations
$status->{ bench }->dump();
examples/edw/Thin.pl view on Meta::CPAN
die "Mandatory argument command file path is missing";
}
#
# Create a user specific Hook used to handle Analysis replies.
#
my $hook = new API::Eulerian::EDW::Hook::Print();
#
# Setup Peer options
#
my $path = $ARGV[ 0 ];
my %setup = (
class => 'API::Eulerian::EDW::Peer::Thin',
hook => $hook,
grid => '', # TODO
ip => '', # TODO
token => '', # TODO
);
my $status;
my $peer;
my $cmd;
# Read command from File
$status = Eulerian::File->read( $path );
if( $status->error() ) {
$status->dump();
} else {
# Get command from file
$cmd = $status->{ data };
# Create Peer instance
$peer = new API::Eulerian::EDW::Peer( \%setup );
# Send Command, call hook
$status = $peer->request( $cmd );
if( $status->error() ) {
$status->dump();
} else {
# Dump stages durations
$status->{ bench }->dump();
# Cancel the command
$peer->cancel();
}
examples/edw/get_csv_file.pl view on Meta::CPAN
Getopt::Long::GetOptions(
"grid=s" => \$grid,
"ip=s" => \$ip,
"token=s" => \$token,
"site=s" => \$site,
"query=s" => \$query,
"help|?" => \$help
);
Pod::Usage::pod2usage(1) if ( $help );
my %h_setup = (
grid => $grid,
ip => $ip,
token => $token,
site => $site,
query => $query
);
# get local IP
if ( !defined $h_setup{ip} || !length $h_setup{ip} ) {
my $response = HTTP::Tiny->new->get('http://monip.org/');
unless ( $response->{success} ) {
print STDERR "\tunable to reach external network to get IP address.\n";
exit(1);
}
($h_setup{ip}) = ($response->{content} =~ /IP\s:\s(\d+\.\d+\.\d+\.\d+)/gm);
}
foreach my $p ( qw/ grid ip token site query / ) {
if ( !defined $h_setup{$p} || !length $h_setup{$p} ) {
print STDERR "\tmissing $p parameter, check help.\n";
exit(1);
}
}
delete $h_setup{$_} for ( qw/ site query / );
# get query to send
my $qfile = './examples/edw/sql/'.$query.'.sql';
if ( !-e $qfile ) {
print STDERR "\trequested query $query does not exists.\n";
exit(1);
}
my $date_from = time() - 24 * 3600;
my $date_to = time();
examples/edw/get_csv_file.pl view on Meta::CPAN
$cmd =~ s/\[% SITE %\]/$site/gm;
$cmd =~ s/\[% DATE_FROM %\]/$date_from/gm;
$cmd =~ s/\[% DATE_TO %\]/$date_to/gm;
#
# Create a user specific Hook used to handle Analysis replies.
#
my $edw = new API::Eulerian::EDW();
my $rh_ret = $edw->get_csv_file( \%h_setup, $cmd );
use Data::Dumper;
print Dumper($rh_ret);
1;
__END__
=head1 NAME
get_csv_file.pl - Sample EDW script for querying through REST and get a CSV file
lib/API/Eulerian/EDW/Hook.pm view on Meta::CPAN
#
package API::Eulerian::EDW::Hook;
#
# Enforce compilor rules
#
use strict; use warnings;
#
# @brief Allocate a new Eulerian Data Warehouse Peer Hook.
#
# @param $class - Eulerian Data Warehouse Peer Hook Class.
# @param $setup - Setup attributes.
#
# @return Eulerian Data Warehouse Peer Hook instance.
#
sub new
{
my ( $class, $setup ) = @_;
my $self = bless( {}, $class );
$self->setup( $setup );
return $self;
}
#
# @brief Setup Eulerian Data Warehouse Peer Hook.
#
# @param $self - Eulerian Data Warehouse Peer Hook.
# @param $setup - Setup entries.
#
sub setup
{
my ( $self, $setup ) = @_;
}
#
# @brief
#
# @param $self - Eulerian Data Warehouse Peer Hook.
# @param $uuid - UUID of Eulerian Analytics Analysis.
# @param $start - Timerange begin.
# @param $end - Timerange end.
# @param $columns - Array of Columns definitions.
#
lib/API/Eulerian/EDW/Hook.pm view on Meta::CPAN
=head1 METHODS
=head2 new()
I<Create a new instance of Eulerian Data Warehouse Peer Hook>
=head3 input
=over 4
=item * setup - Hash reference of Hook parameters.
=back
=head3 output
=over 4
=item * API::Eulerian::EDW::Hook instance.
=back
=head2 setup()
I<Setup Eulerian Data Warehouse Peer Hook>
=head3 input
=over 4
=item * setup - Hash reference of Hook parameters.
=back
=head2 on_headers()
I<Interface definition of the callback function used whenever a new Eulerian
Data Warehouse Started.>
=head3 input
lib/API/Eulerian/EDW/Hook/Noop.pm view on Meta::CPAN
#use parent 'API::Eulerian::EDW::Hook';
use API::Eulerian::EDW::Hook();
our @ISA = qw/ API::Eulerian::EDW::Hook /;
#
# @brief Allocate a new Eulerian Data Warehouse Peer Hook.
#
# @param $class - Eulerian Data Warehouse Peer Hook Class.
# @param $setup - Setup attributes.
#
# @return Eulerian Data Warehouse Peer Hook instance.
#
sub new
{
my ( $class, $setup ) = @_;
return $class->SUPER::new( $setup );
}
#
# @brief Setup Eulerian Data Warehouse Peer Hook.
#
# @param $self - Eulerian Data Warehouse Peer Hook.
# @param $setup - Setup entries.
#
sub setup
{
my ( $self, $setup ) = @_;
return $self;
}
#
# @brief Start a new Analysis.
#
# @param $self - Eulerian Data Warehouse Peer Hook.
# @param $uuid - UUID of Eulerian Analytics Analysis.
# @param $start - Timerange begin.
# @param $end - Timerange end.
# @param $columns - Array of Columns definitions.
lib/API/Eulerian/EDW/Hook/Print.pm view on Meta::CPAN
#
use strict; use warnings;
#
# Inherited interface from API::Eulerian::EDW::Hook
#
use parent 'API::Eulerian::EDW::Hook';
#
# @brief Allocate a new Eulerian Data Warehouse Peer Hook.
#
# @param $class - Eulerian Data Warehouse Peer Hook Class.
# @param $setup - Setup attributes.
#
# @return Eulerian Data Warehouse Peer Hook instance.
#
sub new
{
my ( $class, $setup ) = @_;
return $class->SUPER::new( $setup );
}
#
# @brief Setup Eulerian Data Warehouse Peer Hook.
#
# @param $self - Eulerian Data Warehouse Peer Hook.
# @param $setup - Setup entries.
#
sub setup
{
my ( $self, $setup ) = @_;
return $self;
}
#
# @brief Start a new Analysis.
#
# @param $self - Eulerian Data Warehouse Peer Hook.
# @param $uuid - UUID of Eulerian Analytics Analysis.
# @param $start - Timerange begin.
# @param $end - Timerange end.
# @param $columns - Array of Columns definitions.
lib/API/Eulerian/EDW/Peer.pm view on Meta::CPAN
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,
lib/API/Eulerian/EDW/Peer.pm view on Meta::CPAN
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";
lib/API/Eulerian/EDW/Peer.pm view on Meta::CPAN
=head1 METHODS
=head2 new()
I<Allocate and initialize a new API::Eulerian::EDW::Peer instance.>
=head3 input
=over 4
=item * setup - Hash Perl of initialization parameters
o class : Eulerian Data Warehouse Peer class name.
o kind : Eulerian Authority token kind.
o platform : Eulerian Authority platform.
o hook : API::Eulerian::EDW::Hook instance.
o token : Eulerian customer token.
lib/API/Eulerian/EDW/Peer.pm view on Meta::CPAN
=back
=head3 output
=over 4
=item * Eulerian Customer token.
=back
=head2 setup()
I<Setup Eulerian Data Warehouse Peer.>
=head3 input
=over 4
=item * setup - Perl Hash of peer parameters.
o class : Eulerian Data Warehouse Peer class name.
o kind : Eulerian Authority token kind.
o platform : Eulerian Authority platform.
o hook : API::Eulerian::EDW::Hook instance.
o token : Eulerian customer token.
lib/API/Eulerian/EDW/Peer/Rest.pm view on Meta::CPAN
# Defines Parser class name matching format.
#
my %PARSERS = (
'json' => 'API::Eulerian::EDW::Parser::JSON',
'csv' => 'API::Eulerian::EDW::Parser::CSV',
);
#
# @brief Allocate and initialize a new Eulerian Data Warehouse Rest Peer.
#
# @param $class - Eulerian Data Warehouse Rest Peer class.
# @param $setup - Setup attributes.
#
# @return Eulerian Data Warehouse Peer.
#
sub new
{
my $proto = shift();
my $class = ref($proto) || $proto;
my $setup = shift() || {};
my $self = $class->SUPER::new();
# Setup Rest Peer Default attributes values
$self->{ _ACCEPT } = $setup->{accept} || 'application/json';
$self->{ _ENCODING } = 'gzip';
$self->{ _WDIR } = $setup->{wdir} || '/tmp';
$self->{ _UUID } = 0;
# Setup Rest Peer Attributes
$self->setup( $setup );
return bless($self, $class);
}
#
# @brief UUID attribute accessors.
#
# @param $self - Eulerian Data Warehouse Peer.
# @param $uuid - Request UUID.
#
# @return UUID.
lib/API/Eulerian/EDW/Peer/Rest.pm view on Meta::CPAN
sub wdir
{
my ( $self, $wdir ) = @_;
$self->{ _WDIR } = $wdir if defined( $wdir );
return $self->{ _WDIR };
}
#
# @brief Setup Eulerian Data Warehouse Peer.
#
# @param $self - Eulerian Data Warehouse Peer.
# @param $setup - Setup entries.
#
sub setup
{
my ( $self, $setup ) = @_;
# Setup base interface values
$self->SUPER::setup( $setup );
# Setup Rest specifics options
$self->accept( $setup->{ accept } ) if exists( $setup->{ accept } );
$self->encoding( $setup->{ encoding } ) if exists( $setup->{ encoding } );
$self->wdir( $setup->{ wdir } ) if exists( $setup->{ wdir } );
return $self;
}
#
# @brief Dump Eulerian Data Warehouse Peer setup.
#
# @param $self - Eulerian Data Warehouse Peer.
#
sub dump
{
my $self = shift;
my $dump = '';
$self->SUPER::dump();
$dump .= 'Accept : ' . $self->accept() . "\n";
$dump .= 'Encoding : ' . $self->encoding() . "\n";
lib/API/Eulerian/EDW/Peer/Rest.pm view on Meta::CPAN
my $json = API::Eulerian::EDW::Request->json( $response );
my $pattern = '([0-9]*)\.(json|csv|parquet)';
my $status = API::Eulerian::EDW::Status->new();
my $url = $json->{ data }->[ 1 ];
my $wdir = $self->wdir();
my %rc = ();
if( ! $wdir ) {
$status->error( 1 );
$status->code( 400 );
$status->msg( "Working directory isn't set" );
} elsif( ! API::Eulerian::EDW::File->writable( $wdir ) ) {
$status->error( 1 );
$status->code( 400 );
$status->msg( "Working directory isn't writable" );
} elsif( ! ( $url =~ m/$pattern/ ) ) {
$status->error( 1 );
$status->code( 400 );
$status->msg( "Unknown local file name" );
} else {
my $path = $wdir. '/' . "$1.$2";
lib/API/Eulerian/EDW/Peer/Thin.pm view on Meta::CPAN
#
use Encode;
#
#
#
our @ISA = qw/ API::Eulerian::EDW::Peer /;
#
# @brief Allocate and initialize a new Eulerian Data Warehouse Thin Peer.
#
# @param $class - Eulerian Data Warehouse Thin Peer class.
# @param $setup - Setup attributes.
#
# @return Eulerian Data Warehouse Peer.
#
sub new
{
my $proto = shift;
my $class = ref( $proto ) || $proto;
my $setup = shift() || {};
my $self = $class->SUPER::new();
# Setup Default host value
$self->host( 'edwaro' );
# Setup Default ports value
$self->ports( [ 8080, 8080 ] );
# Setup Rest Peer Attributes
$self->setup( $setup );
return bless( $self, $class );
}
#
# @brief Setup Eulerian Data Warehouse Peer.
#
# @param $self - Eulerian Data Warehouse Peer.
# @param $setup - Setup entries.
#
sub setup
{
my ( $self, $setup ) = @_;
# Setup base interface values
$self->SUPER::setup( $setup );
# Setup Thin Peer specifics options
}
#
# @brief Dump Eulerian Data Warehouse Peer setup.
#
# @param $self - Eulerian Data Warehouse Peer.
#
sub dump
{
my $self = shift;
my $dump = "\n";
$self->SUPER::dump();
print( $dump );
}
lib/API/Eulerian/EDW/WebSocket.pm view on Meta::CPAN
# @param $hooks - User specific hook callback.
#
# @return API::Eulerian::EDW::Status instance.
#
sub join
{
my ( $self, $url, $hook ) = @_;
my $status = API::Eulerian::EDW::Status->new();
my $socket = $self->_socket();
my $bufsize = 4 * 1024 * 1024;
my $offset = 0;
my $buf = '';
my $read;
my $rfds;
my $peer;
# Create a Websocket
$peer = Protocol::WebSocket::Client->new(
url => $url,
max_payload_size => $bufsize
);
lib/API/Eulerian/EDW/WebSocket.pm view on Meta::CPAN
# Save back refs
$self->{ _HOOK } = $hook;
$peer->{ _WS } = $self;
# Connect on remote host
$peer->connect;
# If connected
if( defined( $socket->connected ) ) {
for(; defined( $socket ); ) {
$read = $socket->sysread( $buf, $bufsize, $offset );
if( $read > 0 ) {
$peer->read( $buf );
} else {
close( $socket );
undef( $socket );
last;
}
}
}