API-Eulerian

 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;
      }
    }
  }



( run in 0.684 second using v1.01-cache-2.11-cpan-49f99fa48dc )