File Coverage

blib/lib/WWW/VastAI/API/Workergroups.pm
Criterion Covered Total %
statement 41 41 100.0
branch 9 18 50.0
condition 2 10 20.0
subroutine 11 11 100.0
pod 6 6 100.0
total 69 86 80.2


line stmt bran cond sub pod time code
1             package WWW::VastAI::API::Workergroups;
2             our $VERSION = '0.001';
3             # ABSTRACT: Workergroup management for Vast.ai serverless
4              
5 10     10   81 use Moo;
  10         42  
  10         94  
6 10     10   3889 use Carp qw(croak);
  10         22  
  10         764  
7 10     10   5169 use WWW::VastAI::Workergroup;
  10         37  
  10         341  
8 10     10   66 use namespace::clean;
  10         19  
  10         71  
9              
10             has client => (
11             is => 'ro',
12             required => 1,
13             weak_ref => 1,
14             );
15              
16             sub _wrap {
17 3     3   8 my ($self, $data) = @_;
18 3         107 return WWW::VastAI::Workergroup->new(
19             client => $self->client,
20             data => $data,
21             );
22             }
23              
24             sub list {
25 1     1 1 1751 my ($self) = @_;
26 1         10 my $result = $self->client->request_op('listWorkergroups');
27 1 50 0     10 my $groups = ref $result eq 'HASH' ? ($result->{workergroups} || $result->{results} || []) : ($result || []);
      0        
28 1         4 return [ map { $self->_wrap($_) } @{$groups} ];
  1         5  
  1         3  
29             }
30              
31             sub create {
32 1     1 1 16 my ($self, %params) = @_;
33 1 50       7 croak "template_hash required" unless $params{template_hash};
34 1 50       5 croak "endpoint_name required" unless $params{endpoint_name};
35              
36 1         8 my $result = $self->client->request_op('createWorkergroup', body => \%params);
37 1 50 33     8 my $group = ref $result eq 'HASH' ? ($result->{workergroup} || $result) : $result;
38 1         6 return $self->_wrap($group);
39             }
40              
41             sub update {
42 1     1 1 5 my ($self, $id, %params) = @_;
43 1 50       5 croak "workergroup id required" unless defined $id;
44              
45 1         10 my $result = $self->client->request_op(
46             'updateWorkergroup',
47             path => { id => $id },
48             body => \%params,
49             );
50              
51 1 50 33     9 my $group = ref $result eq 'HASH' ? ($result->{workergroup} || $result) : $result;
52 1         6 return $self->_wrap($group);
53             }
54              
55             sub delete {
56 1     1 1 4 my ($self, $id) = @_;
57 1 50       5 croak "workergroup id required" unless defined $id;
58 1         10 return $self->client->request_op('deleteWorkergroup', path => { id => $id });
59             }
60              
61             sub logs {
62 1     1 1 4 my ($self, $id, %params) = @_;
63 1 50       5 croak "workergroup id required" unless defined $id;
64 1         5 my %body = ( workergroup_id => $id, %params );
65 1         8 return $self->client->request_op('getWorkergroupLogs', body => \%body);
66             }
67              
68             sub workers {
69 1     1 1 4 my ($self, $id) = @_;
70 1 50       5 croak "workergroup id required" unless defined $id;
71 1         9 return $self->client->request_op('getWorkergroupWorkers', body => { workergroup_id => $id });
72             }
73              
74             1;
75              
76             __END__