File Coverage

blib/lib/CloudHealth/API.pm
Criterion Covered Total %
statement 7 84 8.3
branch n/a
condition n/a
subroutine 3 45 6.6
pod 0 42 0.0
total 10 171 5.8


line stmt bran cond sub pod time code
1             package CloudHealth::API;
2 3     3   209734 use Moo;
  3         33914  
  3         15  
3 3     3   6059 use Types::Standard qw/HasMethods/;
  3         232866  
  3         34  
4              
5             our $VERSION = '0.01';
6              
7             has call_former => (is => 'ro', isa => HasMethods['params2request'], default => sub {
8             require CloudHealth::API::CallObjectFormer;
9             CloudHealth::API::CallObjectFormer->new;
10             });
11             has credentials => (is => 'ro', isa => HasMethods['api_key'], default => sub {
12             require CloudHealth::API::Credentials;
13             CloudHealth::API::Credentials->new;
14             });
15             has io => (is => 'ro', isa => HasMethods['call'], default => sub {
16             require CloudHealth::API::Caller;
17             CloudHealth::API::Caller->new;
18             });
19             has result_parser => (is => 'ro', isa => HasMethods['result2return'], default => sub {
20             require CloudHealth::API::ResultParser;
21             CloudHealth::API::ResultParser->new
22             });
23              
24             sub _invoke {
25 0     0   0 my ($self, $method, $params) = @_;
26 0         0 my $req = $self->call_former->params2request($method, $self->credentials, $params);
27 0         0 my $result = $self->io->call($req);
28 0         0 return $self->result_parser->result2return($result);
29             }
30              
31             sub method_classification {
32             {
33 9     9 0 10514 aws_accounts => [ qw/EnableAWSAccount AWSAccounts SingleAWSAccount
34             UpdateExistingAWSAccount DeleteAWSAccount GetExternalID/ ],
35             perspectives => [ qw/RetrieveAllPerspectives RetrievePerspectiveSchema CreatePerspectiveSchema
36             UpdatePerspectiveSchema DeletePerspectiveSchema/ ],
37             reports => [ qw/ListQueryableReports ListReportsOfSpecificType DataForStandardReport
38             DataForCustomReport ReportDimensionsAndMeasures/ ],
39             assets => [ qw/ListOfQueryableAssets AttributesOfSingleAsset SearchForAssets/ ],
40             metrics => [ qw/MetricsForSingleAsset UploadMetricsForSingleAsset/ ],
41             tags => [ qw/UpdateTagsForSingleAsset/ ],
42             partner => [ qw/SpecificCustomerReport AssetsForSpecificCustomer CreatePartnerCustomer
43             ModifyExistingCustomer DeleteExistingCustomer GetSingleCustomer GetAllCustomers
44             StatementForSingleCustomer StatementsForAllCustomers
45             CreateAWSAccountAssignment ReadAllAWSAccountAssignments
46             ReadSingleAWSAccountAssignment UpdateAWSAccountAssignment
47             DeleteAWSAccountAssignment/ ],
48             gov_cloud => [ qw/ConnectGovCloudCommercialAccountToGovCloudAssetAccount
49             ListAllGovCloudLinkagesOwnedByCurrentCustomer
50             DetailsOfSingleGovCloudLinkage UpdateSingleGovCloudLinkage
51             UnderstandFormatOfGovCloudLinkagePayload/ ],
52             }
53             }
54              
55             sub EnableAWSAccount {
56 0     0 0   my $self = shift;
57 0           $self->_invoke('EnableAWSAccount', [ @_ ]);
58             }
59             sub AWSAccounts {
60 0     0 0   my $self = shift;
61 0           $self->_invoke('AWSAccounts', [ @_ ]);
62             }
63             sub SingleAWSAccount {
64 0     0 0   my $self = shift;
65 0           $self->_invoke('SingleAWSAccount', [ @_ ]);
66             }
67             sub UpdateExistingAWSAccount {
68 0     0 0   my $self = shift;
69 0           $self->_invoke('UpdateExistingAWSAccount', [ @_ ]);
70             }
71             sub DeleteAWSAccount {
72 0     0 0   my $self = shift;
73 0           $self->_invoke('DeleteAWSAccount', [ @_ ]);
74             }
75             sub GetExternalID {
76 0     0 0   my $self = shift;
77 0           $self->_invoke('GetExternalID', [ @_ ]);
78             }
79              
80             sub RetrieveAllPerspectives {
81 0     0 0   my $self = shift;
82 0           $self->_invoke('RetrieveAllPerspectives', [ @_ ]);
83             }
84              
85             sub RetrievePerspectiveSchema {
86 0     0 0   my $self = shift;
87 0           $self->_invoke('RetrievePerspectiveSchema', [ @_ ]);
88             }
89             sub CreatePerspectiveSchema {
90 0     0 0   my $self = shift;
91 0           $self->_invoke('CreatePerspectiveSchema', [ @_ ]);
92             }
93             sub UpdatePerspectiveSchema {
94 0     0 0   my $self = shift;
95 0           $self->_invoke('UpdatePerspectiveSchema', [ @_ ]);
96             }
97             sub DeletePerspectiveSchema {
98 0     0 0   my $self = shift;
99 0           $self->_invoke('DeletePerspectiveSchema', [ @_ ]);
100             }
101              
102             sub ListQueryableReports {
103 0     0 0   my $self = shift;
104 0           $self->_invoke('ListQueryableReports', [ @_ ]);
105             }
106              
107             sub ListReportsOfSpecificType {
108 0     0 0   my $self = shift;
109 0           $self->_invoke('ListReportsOfSpecificType', [ @_ ]);
110             }
111              
112 0     0 0   sub DataForStandardReport { die "TODO" }
113 0     0 0   sub DataForCustomReport { die "TODO" }
114 0     0 0   sub ReportDimensionsAndMeasures { die "TODO" }
115              
116             sub ListOfQueryableAssets {
117 0     0 0   my $self = shift;
118 0           $self->_invoke('ListOfQueryableAssets', [ @_ ]);
119             }
120              
121             sub AttributesOfSingleAsset {
122 0     0 0   my $self = shift;
123 0           $self->_invoke('AttributesOfSingleAsset', [ @_ ]);
124             }
125              
126             sub SearchForAssets {
127 0     0 0   my $self = shift;
128 0           $self->_invoke('SearchForAssets', [ @_ ]);
129             }
130              
131             sub MetricsForSingleAsset {
132 0     0 0   my $self = shift;
133 0           $self->_invoke('MetricsForSingleAsset', [ @_ ]);
134             }
135              
136 0     0 0   sub UploadMetricsForSingleAsset { die "TODO" }
137              
138             sub UpdateTagsForSingleAsset {
139 0     0 0   my $self = shift;
140 0           $self->_invoke('UpdateTagsForSingleAsset', [ @_ ]);
141             }
142              
143             sub SpecificCustomerReport {
144 0     0 0   my $self = shift;
145 0           $self->_invoke('SpecificCustomerReport', [ @_ ]);
146             }
147             sub AssetsForSpecificCustomer {
148 0     0 0   my $self = shift;
149 0           $self->_invoke('AssetsForSpecificCustomer', [ @_ ]);
150             }
151             sub CreatePartnerCustomer {
152 0     0 0   my $self = shift;
153 0           $self->_invoke('CreatePartnerCustomer', [ @_ ]);
154             }
155             sub ModifyExistingCustomer {
156 0     0 0   my $self = shift;
157 0           $self->_invoke('ModifyExistingCustomer', [ @_ ]);
158             }
159             sub DeleteExistingCustomer {
160 0     0 0   my $self = shift;
161 0           $self->_invoke('DeleteExistingCustomer', [ @_ ]);
162             }
163             sub GetSingleCustomer {
164 0     0 0   my $self = shift;
165 0           $self->_invoke('GetSingleCustomer', [ @_ ]);
166             }
167             sub GetAllCustomers {
168 0     0 0   my $self = shift;
169 0           $self->_invoke('GetAllCustomers', [ @_ ]);
170             }
171             sub StatementForSingleCustomer {
172 0     0 0   my $self = shift;
173 0           $self->_invoke('StatementForSingleCustomer', [ @_ ]);
174             }
175             sub StatementsForAllCustomers {
176 0     0 0   my $self = shift;
177 0           $self->_invoke('StatementsForAllCustomers', [ @_ ]);
178             }
179              
180 0     0 0   sub ConnectGovCloudCommercialAccountToGovCloudAssetAccount { die "TODO" }
181 0     0 0   sub ListAllGovCloudLinkagesOwnedByCurrentCustomer { die "TODO" }
182 0     0 0   sub DetailsOfSingleGovCloudLinkage { die "TODO" }
183 0     0 0   sub UpdateSingleGovCloudLinkage { die "TODO" }
184 0     0 0   sub UnderstandFormatOfGovCloudLinkagePayload { die "TODO" }
185            
186             sub CreateAWSAccountAssignment {
187 0     0 0   my $self = shift;
188 0           $self->_invoke('CreateAWSAccountAssignment', [ @_ ]);
189             }
190             sub ReadAllAWSAccountAssignments {
191 0     0 0   my $self = shift;
192 0           $self->_invoke('ReadAllAWSAccountAssignments', [ @_ ]);
193             }
194             sub ReadSingleAWSAccountAssignment {
195 0     0 0   my $self = shift;
196 0           $self->_invoke('ReadSingleAWSAccountAssignment', [ @_ ]);
197             }
198             sub UpdateAWSAccountAssignment {
199 0     0 0   my $self = shift;
200 0           $self->_invoke('UpdateAWSAccountAssignment', [ @_ ]);
201             }
202             sub DeleteAWSAccountAssignment {
203 0     0 0   my $self = shift;
204 0           $self->_invoke('DeleteAWSAccountAssignment', [ @_ ]);
205             }
206              
207             1;
208             ### main pod documentation begin ###
209              
210             =encoding UTF-8
211            
212             =head1 NAME
213            
214             CloudHealth::API - A REST API Client for the CloudHealth API
215              
216             =head1 SYNOPSIS
217            
218             use CloudHealth::API;
219             my $ch = CloudHealth::API->new;
220            
221             my $res = $ch->MetricsForSingleAsset(
222             asset => $asset,
223             );
224             print Dumper($res);
225            
226             =head1 DESCRIPTION
227              
228             This module implements the CloudHealth REST API found in L
229              
230             =head1 METHODS
231              
232             Each method on the client corresponds to an API action. You can find a class in the
233             C namespace that describes the parameters that the method call accepts:
234              
235             L
236              
237             $ch->EnableAWSAccount(authentication => { protocol => '..' }, ...);
238              
239             L
240              
241             $ch->AWSAccounts;
242              
243             L
244              
245             $ch->SingleAWSAccount(id => $id);
246              
247             L
248              
249             $ch->UpdateExistingAWSAccount(id => $id, authentication => { protocol => '..' }, ...);
250              
251             L
252              
253             $ch->GetExternalID(id => $id)
254              
255             L
256              
257             $ch->MetricsForSingleAsset(asset => $id, from => '...', to => '...');
258              
259             L
260              
261             L
262              
263             L
264              
265             L
266              
267             L
268              
269             L
270              
271             L
272              
273             L
274              
275             L
276              
277             L
278              
279             L
280              
281             L
282              
283             L
284              
285             L
286              
287             L
288              
289             L
290              
291             L
292              
293             L
294              
295             L
296              
297             L
298              
299             L
300              
301             L
302              
303             L
304              
305             L
306              
307             L
308              
309             L
310              
311             =head1 AUTHENTICATION
312              
313             As the documentation states, you need an API KEY to query the API. The default authentication
314             mechanism expects to find that API key in the C environment variable.
315              
316             You can also pass any object that implements an C method to the C attribute
317             of the constructor
318              
319             =head1 RESULTS
320              
321             Results are returned as a Perl HashRef representing the JSON returned by the API.
322              
323             =head1 SEE ALSO
324              
325             L
326              
327             There is a CLI wrapper available as a CPAN module: L
328              
329             =head1 AUTHOR
330              
331             Jose Luis Martinez
332             CPAN ID: JLMARTIN
333             CAPSiDE
334             jlmartinez@capside.com
335              
336             =head1 BUGS and SOURCE
337            
338             The source code is located here: L
339            
340             Please report bugs to: L
341            
342             =head1 COPYRIGHT and LICENSE
343            
344             Copyright (c) 2018 by Jose Luis Martinez Torres
345            
346             This code is distributed under the Apache 2 License. The full text of the license can be found in the LICENSE file included with this module.
347              
348             =cut