API-Eulerian
view release on metacpan or search on metacpan
lib/API/Eulerian/EDW/Peer/Rest.pm view on Meta::CPAN
#
# @param $self - Eulerian Data Warehouse Rest Peer.
# @param $command - Eulerian Data Warehouse Command.
#
# @return HTTP Request Body.
#
sub body
{
my ( $self, $command ) = @_;
$command =~ s/\n//gm;
return JSON::encode_json({
kind => 'edw#request',
query => $command,
creationTime => POSIX::strftime( '%d/%m/%Y %H:%M:%S', gmtime() ),
location => Sys::Hostname::hostname(),
expiration => undef,
});
};
#
# @brief Setup HTTP Request Headers.
#
# @param $self - Eulerian Data Warehouse Peer.
#
# @return HTTP Headers.
#
sub headers
{
my $self = shift;
my $status = $self->SUPER::headers();
my $headers;
if( ! $status->error() ) {
$headers = $status->{ headers };
$headers->push_header( 'Content-Type', 'application/json' );
$headers->push_header( 'Accept', $self->accept() );
$headers->push_header( 'Accept-Encoding', $self->encoding() );
}
return $status;
}
#
# @brief Create a new JOB on Eulerian Data Warehouse Rest Platform.
#
# @param $self - Eulerian Data Warehouse Peer.
# @param $command - Eulerian Data Warehouse Command.
#
# @return Reply content.
#
sub create
{
my ( $self, $command ) = @_;
my $response;
my $status;
# Create headers
$status = $self->headers();
if( ! $status->error() ) {
my $url = $self->url() . '/edw/jobs';
# Post Job create request to remote host
$status = API::Eulerian::EDW::Request->post(
$url, $status->{ headers }, $self->body( $command )
);
if( ! $status->error() ) {
$self->uuid(
API::Eulerian::EDW::Request->json(
$status->{ response }
)->{ data }->[ 0 ]
);
}
}
return $status;
}
#
# @brief Get Eulerian Data Warehouse Job Status.
#
# @param $self - Eulerian Data Warehouse Rest Peer.
# @param $reply - Eulerian Data Warehouse Platform Reply.
#
# @return Job Reply status.
#
sub status
{
my ( $self, $status ) = @_;
my $response = $status->{ response };
my $url = API::Eulerian::EDW::Request->json(
$response )->{ data }->[ 1 ];
$status = $self->headers();
if( ! $status->error() ) {
$status = API::Eulerian::EDW::Request->get(
$url, $status->{ headers }
);
}
return $status;
}
#
# @brief Test if Job status is 'Running';
#
# @param $self - API::Eulerian::EDW::Rest instance.
# @param $rc - Return context.
#
# @return 0 - Not running.
# @return 1 - Running.
#
sub running
{
my ( $self, $status ) = @_;
return API::Eulerian::EDW::Request->json(
$status->{ response }
)->{ status } eq 'Running';
}
#
# @brief Test if Job status is 'Done'.
#
# @param $self - API::Eulerian::EDW::Rest instance.
# @param $rc - Return context.
#
lib/API/Eulerian/EDW/Peer/Rest.pm view on Meta::CPAN
}
return $status;
}
#
# @brief Cancel Job on Eulerian Data Warehouse Platform.
#
# @param $self - API::Eulerian::EDW::Rest instance.
# @param $rc - Reply context.
#
sub cancel
{
my ( $self ) = @_;
my $status;
# Get HTTP request headers
$status = $self->headers();
if( ! $status->error() ) {
my $headers = $status->{ headers };
delete $status->{ headers };
# Create cancel job url
if( ! $self->uuid() ) {
$status->error( 1 );
$status->msg( "Failed to cancel Job. Unknown UUID" );
$status->code( 404 );
} else {
my $url = $self->url() . '/edw/jobs/';
$url .= $self->uuid() . '/cancel';
# Send Cancel request to remote host
$status = API::Eulerian::EDW::Request->get( $url, $headers );
}
}
return $status;
}
#
# @brief Drop Eulerian Data Warehouse Object Events.
#
# @param $self - Peer.
# @param $what - Object Path.
# @param $site - Site.
# @param $from - Day begin.
# @param $end - Day end.
#
sub drop
{
my ( $self, $what, $site, $from, $to ) = @_;
my $status;
# Get HTTP request headers
$status = $self->headers();
if( ! $status->error() ) {
my $headers = $status->{ headers };
my $url = $self->url() . '/edw/store';
my $cmd = "DROP $what\@$site FROM $from TO $to;";
delete $status->{ headers };
# Send Cancel request to remote host
$status = API::Eulerian::EDW::Request->post(
$url, $headers, $self->body( $cmd )
);
}
return $status;
}
#
# End Up module properly
#
1;
( run in 0.620 second using v1.01-cache-2.11-cpan-ceb78f64989 )