App-Glacier
view release on metacpan or search on metacpan
lib/App/Glacier/Command.pm view on Meta::CPAN
return undef;
} else {
$self->abend(EX_FAILURE, "can't list vault: ",
$self->glacier->last_error_message);
}
}
return timestamp_deserialize($res);
}
sub directory {
my ($self, $vault_name) = @_;
unless (exists($self->{_dir}{$vault_name})) {
my $be = $self->cfget(qw(database inv backend));
$self->{_dir}{$vault_name} =
new App::Glacier::Directory(
$be,
$vault_name,
$self->glacier,
$self->config->as_hash(qw(database inv))
);
}
return $self->{_dir}{$vault_name};
}
sub config { shift->{_config} }
sub glacier { shift->{_glacier} }
sub cfget {
my ($self, @path) = @_;
return $self->config->get(@path);
}
sub cf_transfer_param {
my ($self, $type, $param) = @_;
return $self->cfget('transfer', $type, $param)
|| $self->cfget('transfer', $param);
}
sub run {
my $self = shift;
$self->abend(EX_SOFTWARE, "command not implemented");
}
sub getyn {
my $self = shift;
my $in;
do {
print "$self->{_progname}: @_? ";
STDOUT->flush();
$in = <STDIN>;
$in =~ s/^\s+//;
} while ($in !~ /^[yYnN]/);
return $in =~ /^[yY]/;
}
sub set_time_style_option {
my ($self, $style) = @_;
eval {
use App::Glacier::DateTime;
my $x = new App::Glacier::DateTime(year=>1970);
$x->canned_format($style);
};
if ($@) {
$self->abend(EX_USAGE, "unrecognized time style: $style");
}
$self->{_options}{time_style} = $style;
}
sub format_date_time {
my ($self, $obj, $field) = @_;
return $obj->{$field}->canned_format($self->{_options}{time_style});
}
sub archive_cache_filename {
my ($self, $vault_name, $archive_id) = @_;
return File::Spec->catfile($self->cfget(qw(transfer download cachedir)),
$vault_name,
$archive_id);
}
sub check_job {
my ($self, $key, $descr, $vault) = @_;
$self->debug(2, "$descr->{JobId} $descr->{Action} $vault");
if ($descr->{StatusCode} eq 'Failed') {
$self->debug(1,
"deleting failed $key $vault "
. ($descr->{JobDescription} || $descr->{Action})
. ' '
. $descr->{JobId});
$self->jobdb()->delete($key) unless $self->dry_run;
return;
}
my $res = $self->glacier->Describe_job($vault, $descr->{JobId});
if ($self->glacier->lasterr) {
if ($self->glacier->lasterr('code') == 404) {
$self->debug(1,
"deleting expired $key $vault "
. ($descr->{JobDescription} || $descr->{Action})
. ' '
. $descr->{JobId});
App::Glacier::Job->fromdb($self, $vault, $key, $res)->delete()
unless $self->dry_run;
} else {
$self->error("can't describe job $descr->{JobId}: ",
$self->glacier->last_error_message);
}
return;
} elsif (ref($res) ne 'HASH') {
croak "describe_job returned wrong datatype (".ref($res).") for \"$descr->{JobId}\"";
}
return $res;
}
1;
( run in 0.488 second using v1.01-cache-2.11-cpan-5a3173703d6 )