App-FargateStack
view release on metacpan or search on metacpan
lib/App/FargateStack.pm view on Meta::CPAN
my $title = sprintf "Service:[%s]\n", $self->maybe_color( bright_white => $service_name );
$title .= sprintf "Status:[%s] Running:[%s] Pending:[%s] Desired:[%s]\n",
$status,
$self->maybe_color( green => $running_count ),
$self->maybe_color( yellow => $pending_count ),
$self->maybe_color( bright_white => $desired_count );
$title .= sprintf 'Task Definition: [%s]', $self->maybe_color( 'bright_white' => $task_definition_arn );
my @events = grep {defined} @{ $result->{events} }[ 0 .. ( $self->get_max_events - 1 ) ];
my @data = map { { 'Time' => $_->{createdAt}, Event => wrap( q{}, q{}, $_->{message} ) } } @events;
print {*STDOUT} easy_table(
table_options => { headingText => $title, allowANSI => $TRUE },
data => \@data,
columns => [qw(Time Event)],
);
$self->display_task_status($service_name);
return $SUCCESS;
}
########################################################################
sub display_task_status {
########################################################################
my ( $self, $service_name ) = @_;
my $ecs = $self->fetch_ecs;
my $cluster_name = $self->get_config->{cluster}->{name};
my $task_arns = $ecs->list_tasks( $cluster_name, 'taskArns' );
$ecs->check_result( message => 'ERROR: could not list tasks for cluster: [%s]', $cluster_name );
return
if !@{$task_arns};
$task_arns = [ map { basename($_) } @{$task_arns} ];
my $query
= sprintf
'tasks[?group == `service:%s`].{started_at:startedAt, task_definition_arn:taskDefinitionArn, last_status:lastStatus, image_digest:containers[0].imageDigest}',
$service_name;
my $service_tasks = $ecs->describe_tasks( $cluster_name, $task_arns, $query );
$ecs->check_result( message => 'ERROR: Could not describe tasks: [%s]', join q{,}, @{$task_arns} );
$self->log_debug( sub { return Dumper( [ service_tasks => $service_tasks ] ) } );
my @data;
foreach my $task ( @{$service_tasks} ) {
my ( $image_digest, $task_definition_arn, $started_at, $last_status )
= @{$task}{qw(image_digest task_definition_arn started_at last_status)};
my $short_image_digest = abbrev( $image_digest, 16 );
my $short_task_definition_arn = ( split m{/}xsm, $task_definition_arn )[-1];
my $latest_task_definition_arn = $self->get_latest_task_definition($service_name);
my $latest_image_digest = $self->get_latest_image($service_name)->{imageDigest};
$last_status = $self->maybe_color( $last_status eq 'RUNNING' ? 'green' : 'yellow' => $last_status );
$self->log_debug(
sub {
return Dumper(
[ task => $task,
latest_image_digest => $latest_image_digest
]
);
}
);
my $task_definition_status = choose {
return $self->maybe_color( green => 'Current' )
if $task_definition_arn eq $latest_task_definition_arn;
return $self->maybe_color( red => ( split m{/}xsm, $latest_task_definition_arn )[-1] );
};
$image_digest //= q{};
my $image_digest_status = choose {
return $self->maybe_color( green => 'Current' )
if $image_digest eq $latest_image_digest;
return $self->maybe_color( red => abbrev( $latest_image_digest, 16 ) );
};
push @data,
{
'Started At' => $started_at,
'Status' => $last_status,
'Task Definition' => $short_task_definition_arn,
'Task Definition Status' => $task_definition_status,
'Image Digest' => $short_image_digest,
'Image Status' => $image_digest_status,
};
}
print {*STDOUT} "\n\n",
easy_table(
table_options => { headingText => 'Task Status', allowANSI => $TRUE },
data => \@data,
columns => [ 'Started At', 'Status', 'Task Definition', 'Task Definition Status', 'Image Digest', 'Image Status' ],
);
return;
}
########################################################################
sub get_default_task_name {
########################################################################
my ( $self, $type, $filter ) = @_;
my $tasks = $self->common_args('tasks');
my ($task_name) = $self->get_args;
return $task_name
if $task_name;
my @task_names = keys %{$tasks};
return $task_names[0]
if @task_names == 1;
$type //= 'task';
my @tasks = grep { $tasks->{$_}->{type} eq $type } keys %{$tasks};
if ($filter) {
@tasks = grep { defined $tasks->{$_}->{$filter} } @tasks;
}
# more than 1, error or we found just 1
return $tasks[1] ? $EMPTY : $tasks[0];
}
( run in 0.624 second using v1.01-cache-2.11-cpan-6b5c3043376 )