enh(commvault/commserve): add cache files system (#2735)
This commit is contained in:
parent
0f80b9ea03
commit
693cf702e4
|
@ -52,7 +52,9 @@ sub new {
|
|||
'api-username:s' => { name => 'api_username' },
|
||||
'api-password:s' => { name => 'api_password' },
|
||||
'user-domain:s' => { name => 'user_domain' },
|
||||
'timeout:s' => { name => 'timeout' }
|
||||
'timeout:s' => { name => 'timeout' },
|
||||
'cache-create' => { name => 'cache_create' },
|
||||
'cache-use' => { name => 'cache_use' }
|
||||
});
|
||||
}
|
||||
$options{options}->add_help(package => __PACKAGE__, sections => 'REST API OPTIONS', once => 1);
|
||||
|
@ -83,6 +85,8 @@ sub check_options {
|
|||
$self->{api_password} = (defined($self->{option_results}->{api_password})) ? $self->{option_results}->{api_password} : '';
|
||||
$self->{timeout} = (defined($self->{option_results}->{timeout})) ? $self->{option_results}->{timeout} : 30;
|
||||
$self->{user_domain} = (defined($self->{option_results}->{user_domain})) ? $self->{option_results}->{user_domain} : '';
|
||||
$self->{cache_create} = $self->{option_results}->{cache_create};
|
||||
$self->{cache_use} = $self->{option_results}->{cache_use};
|
||||
|
||||
if ($self->{hostname} eq '') {
|
||||
$self->{output}->add_option_msg(short_msg => 'Need to specify hostname option.');
|
||||
|
@ -119,6 +123,12 @@ sub get_port {
|
|||
return $self->{port};
|
||||
}
|
||||
|
||||
sub is_use_cache {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
return defined($self->{cache_use}) ? 1 : 0;
|
||||
}
|
||||
|
||||
sub json_decode {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
|
@ -259,17 +269,88 @@ sub request_internal {
|
|||
return $decoded;
|
||||
}
|
||||
|
||||
sub get_cache_file_response {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
$self->{cache}->read(statefile => 'cache_commvault_commserve_' . $options{type} . '_' . md5_hex($self->{option_results}->{hostname}) . '_' . md5_hex($self->{option_results}->{api_username}));
|
||||
my $response = $self->{cache}->get(name => 'response');
|
||||
my $update_time = $self->{cache}->get(name => 'update_time');
|
||||
if (!defined($response)) {
|
||||
$self->{output}->add_option_msg(short_msg => 'Cache file missing');
|
||||
$self->{output}->option_exit();
|
||||
}
|
||||
return $response;
|
||||
}
|
||||
|
||||
sub get_cache_file_update {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
$self->{cache}->read(statefile => 'cache_commvault_commserve_' . $options{type} . '_' . md5_hex($self->{option_results}->{hostname}) . '_' . md5_hex($self->{option_results}->{api_username}));
|
||||
my $update_time = $self->{cache}->get(name => 'update_time');
|
||||
return $update_time;
|
||||
}
|
||||
|
||||
sub create_cache_file {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
$self->{cache}->read(statefile => 'cache_commvault_commserve_' . $options{type} . '_' . md5_hex($self->{option_results}->{hostname}) . '_' . md5_hex($self->{option_results}->{api_username}));
|
||||
$self->{cache}->write(data => { response => $options{response}, update_time => time() });
|
||||
$self->{output}->output_add(
|
||||
severity => 'ok',
|
||||
short_msg => 'Cache file created successfully'
|
||||
);
|
||||
$self->{output}->display();
|
||||
$self->{output}->exit();
|
||||
}
|
||||
|
||||
sub request {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
return $self->request_internal(
|
||||
return $self->get_cache_file_response(type => $options{type})
|
||||
if (defined($self->{cache_use}));
|
||||
|
||||
my $response = $self->request_internal(
|
||||
endpoint => $options{endpoint}
|
||||
);
|
||||
|
||||
$self->create_cache_file(type => $options{type}, response => $response)
|
||||
if (defined($self->{cache_create}));
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
sub request_jobs {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
return $self->get_cache_file_response(type => 'jobs')
|
||||
if (defined($self->{cache_use}));
|
||||
|
||||
my $lookup_time = $options{completed_job_lookup_time};
|
||||
if (defined($self->{cache_create})) {
|
||||
my $update_time = $self->get_cache_file_update(type => 'jobs');
|
||||
$lookup_time = 3600;
|
||||
if (defined($update_time)) {
|
||||
$lookup_time = time() - $update_time;
|
||||
}
|
||||
}
|
||||
|
||||
my $response = $self->request_internal(
|
||||
endpoint => $options{endpoint},
|
||||
get_param => ['completedJobLookupTime=' . $lookup_time]
|
||||
);
|
||||
|
||||
$self->create_cache_file(type => 'jobs', response => $response)
|
||||
if (defined($self->{cache_create}));
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
sub request_paging {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
return $self->get_cache_file_response(type => $options{type})
|
||||
if (defined($self->{cache_use}));
|
||||
|
||||
my ($page_num, $page_count) = (1, 200);
|
||||
my $alerts = [];
|
||||
while (1) {
|
||||
|
@ -283,6 +364,9 @@ sub request_paging {
|
|||
$page_num++;
|
||||
}
|
||||
|
||||
$self->create_cache_file(type => $options{type}, response => $alerts)
|
||||
if (defined($self->{cache_create}));
|
||||
|
||||
return $alerts;
|
||||
}
|
||||
|
||||
|
@ -330,6 +414,14 @@ Set API password
|
|||
|
||||
Set HTTP timeout
|
||||
|
||||
=item B<--cache-create>
|
||||
|
||||
Create a cache file and quit.
|
||||
|
||||
=item B<--cache-use>
|
||||
|
||||
Use the cache file (created with --cache-create).
|
||||
|
||||
=back
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
|
|
@ -138,6 +138,7 @@ sub manage_selection {
|
|||
my ($self, %options) = @_;
|
||||
|
||||
my $alarms = $options{custom}->request_paging(
|
||||
type => 'alert',
|
||||
endpoint => '/Alert'
|
||||
);
|
||||
|
||||
|
|
|
@ -159,8 +159,9 @@ sub manage_selection {
|
|||
}
|
||||
|
||||
# Also we get Pending/Waiting/Running jobs with that
|
||||
my $results = $options{custom}->request(
|
||||
endpoint => '/Job?completedJobLookupTime=' . $lookup_time
|
||||
my $results = $options{custom}->request_jobs(
|
||||
endpoint => '/Job',
|
||||
completed_job_lookup_time => $lookup_time
|
||||
);
|
||||
|
||||
$self->{global} = { total => 0 };
|
||||
|
@ -214,6 +215,9 @@ sub manage_selection {
|
|||
|
||||
$self->{policy}->{$policy_name} = { job => {}, display => $policy_name } if (!defined($self->{policy}->{$policy_name}));
|
||||
my $elapsed_time = $current_time - $job->{jobStartTime};
|
||||
if ($options{custom}->is_use_cache()) {
|
||||
$elapsed_time = $job->{jobElapsedTime};
|
||||
}
|
||||
$self->{policy}->{$policy_name}->{job}->{ $job->{jobId} } = {
|
||||
display => $job->{jobId},
|
||||
elapsed => $elapsed_time,
|
||||
|
|
|
@ -46,6 +46,7 @@ sub manage_selection {
|
|||
my ($self, %options) = @_;
|
||||
|
||||
my $agents = $options{custom}->request(
|
||||
type => 'mediaagent',
|
||||
endpoint => '/v2/MediaAgents'
|
||||
);
|
||||
|
||||
|
|
|
@ -46,6 +46,7 @@ sub manage_selection {
|
|||
my ($self, %options) = @_;
|
||||
|
||||
my $policies = $options{custom}->request(
|
||||
type => 'storagepolicy',
|
||||
endpoint => '/V2/StoragePolicy'
|
||||
);
|
||||
|
||||
|
|
|
@ -105,6 +105,7 @@ sub manage_selection {
|
|||
my ($self, %options) = @_;
|
||||
|
||||
my $results = $options{custom}->request(
|
||||
type => 'mediaagent',
|
||||
endpoint => '/v2/MediaAgents'
|
||||
);
|
||||
|
||||
|
|
|
@ -115,6 +115,7 @@ sub manage_selection {
|
|||
my ($self, %options) = @_;
|
||||
|
||||
my $results = $options{custom}->request(
|
||||
type => 'storagepool',
|
||||
endpoint => '/StoragePool'
|
||||
);
|
||||
|
||||
|
|
Loading…
Reference in New Issue