Marathon

 view release on metacpan or  search on metacpan

lib/Marathon/App.pm  view on Meta::CPAN

package Marathon::App;

use strict;
use warnings;
use parent 'Marathon::Remote';

our @rw_values = qw(
 id
 labels
 dependencies
 healthchecks
 requirePorts
 cpus
 backoffSeconds
 upgradeStrategy
 ports
 constraints
 cmd
 args
 env
 container
 executor
 mem
 maxLaunchDelaySeconds
 backoffFactor
 instances
);

sub new {
    my ($class, $conf, $parent) = @_;
    my $self = bless {};
    $conf = {} unless $conf && ref $conf eq 'HASH';
    $self->{data} = $conf;
    $self->{parent} = $parent;
    return $self;
}

sub create {
    my $self = shift;
    $self->_bail unless defined $self->{parent};
    return $self->{parent}->_post('/v2/apps', $self->get_updateable_values);
}

sub update {
    my ($self, $args) = @_;
    my $param = $args && $args->{force} && $args->{force} && $args->{force} !~ /false/i ? '?force=true' : ''; #default is false
    $self->_bail unless defined $self->{parent};
    return $self->{parent}->_put('/v2/apps/' . $self->id . $param, $self->get_updateable_values);
}

sub delete {
    my $self = shift;
    $self->_bail unless defined $self->{parent};
    return $self->{parent}->_delete('/v2/apps/' . $self->id);
}

sub restart {
    my $self = shift;
    $self->_bail unless defined $self->{parent};
    return $self->{parent}->_post('/v2/apps/' . $self->id . '/restart' );
}

sub versions {
    my ( $self, $extra ) = @_;
    if ( defined $extra ) {
        return $self->get_version( $extra );
    }
    $self->_bail unless defined $self->{parent};
    return $self->{parent}->_get_obj('/v2/apps/' . $self->id . '/versions' );
}

sub get_version {
    my ( $self, $version ) = @_;
    $self->_bail unless defined $self->{parent};
    return $self->{parent}->_get_obj('/v2/apps/' . $self->id . '/versions/' . $version );
}

sub kill_tasks {
    my ( $self, $args ) = @_;
    my %real_args = map {
        $_ =~ m,^host|scale$, ?
            ( $_ => $args->{$_} ) : print(STDERR "Extraoneous value `$_' to kill_tasks will be ignored\n") && ()
    } keys %{$args};
    return $self->{parent}->_delete('/v2/apps/' . $self->id . '/tasks', \%real_args);
}

sub kill_task {
    my ( $self, $task_id, $scale ) = @_;
    return $self->{parent}->_delete('/v2/apps/' . $self->id . '/tasks/' . $task_id, {scale => $scale});
}

sub get_updateable_values {
    my $self = shift;
    my %kv = map { $self->{data}->{$_} ? ( $_ => $self->{data}->{$_} ) : () } @Marathon::App::rw_values;
    return \%kv;
}

sub labels {
    my ($self, $val) = @_;
    if ( $val ) {
        $self->{data}->{labels} = $val;
    }
    return $self->{data}->{labels};
}



( run in 0.812 second using v1.01-cache-2.11-cpan-9581c071862 )