Skip to content

Commit 16244d3

Browse files
committed
New file.
1 parent 36bfae9 commit 16244d3

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed

lib/Bio/KBase/AppService/ClientExt.pm

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#
2+
# Extension of client module to add client-side logic.
3+
#
4+
5+
package Bio::KBase::AppService::ClientExt;
6+
7+
use Data::Dumper;
8+
use strict;
9+
use base 'Bio::KBase::AppService::Client';
10+
11+
sub await_task_completion
12+
{
13+
my($self, $task_ids, $query_frequency, $timeout) = @_;
14+
15+
die "await_task_completion: invalid task IDs" if ref($task_ids) ne 'ARRAY';
16+
return [] if @$task_ids == 00;
17+
18+
# Handle case where a list of tasks is passed.
19+
if (ref($task_ids->[0]) eq 'HASH')
20+
{
21+
$task_ids = [ map { $_->{id} } @$task_ids];
22+
}
23+
24+
$query_frequency //= 10;
25+
26+
my %final_states = map { $_ => 1 } qw(failed suspend completed user_skipped skipped passed deleted);
27+
28+
my $end_time;
29+
if ($timeout)
30+
{
31+
my $end_time = time + $timeout;
32+
}
33+
34+
my %order;
35+
for my $i (0..$#$task_ids)
36+
{
37+
$order{$task_ids->[$i]} = $i;
38+
}
39+
40+
my %remaining = map { $_ => 1 } @$task_ids;
41+
42+
my $result = [];
43+
print Dumper(\%remaining);
44+
while (%remaining && (!$end_time || (time < $end_time)))
45+
{
46+
my $qtasks = $self->query_tasks([keys %remaining]);
47+
while (my($qid, $qtask) = each %$qtasks)
48+
{
49+
my $status = $qtask->{status};
50+
print "Queried status = $status: " . Dumper($qtask);
51+
if ($final_states{$status})
52+
{
53+
#
54+
# This task is done; fill in result and remove from query list.
55+
#
56+
$result->[$order{$qid}] = $qtask;
57+
delete $remaining{$qid};
58+
}
59+
}
60+
61+
sleep($query_frequency);
62+
}
63+
return $result;
64+
}
65+
66+
1;

0 commit comments

Comments
 (0)