App-MBUtiny
view release on metacpan or search on metacpan
lib/App/MBUtiny/Storage/HTTP.pm view on Meta::CPAN
$self->error(join("\n", $client->transaction, $client->error));
$ostat = 0;
}
my $dst_size = $info{size} || 0;
unless ($src_size == $dst_size) {
$self->error(sprintf("An error occurred while sending data to %s. Sizes are different: SRC=%d; DST=%d", $url_wop, $src_size, $dst_size));
$ostat = 0;
}
}
# Fixup!
$self->fixup("put", $ostat, $comment) if $storage->{fixup};
$status = 0 unless $ostat;
}
$self->storage_status(STORAGE_SIGN, 0) unless $status;
}
sub get {
my $self = shift;
my %params = @_;
if ($self->storage_status(STORAGE_SIGN) <= 0) { # SKIP and set SKIP
$self->maybe::next::method(%params);
return $self->storage_status(STORAGE_SIGN, -1);
}
my $name = $params{name}; # archive name
my $file = $params{file}; # destination archive file path
foreach my $storage ($self->http_storages) {
my $url = $storage->{url};
my $url_wop = $storage->{url_wop};
my $attr = $storage->{attr};
# Create object
my $client = new App::MBUtiny::Storage::HTTP::Client(
url => $url, # Base URL
timeout => $storage->{timeout}, # default: 180
($attr && isnt_void($attr)) ? (headers => $attr) : (),
no_check_redirect => 0,
);
unless ($client->status) {
$self->error(sprintf("Can't connect to %s: %s", $url_wop, $client->error));
next;
}
# Download file
$client->download(file => $file, name => $name) or do {
$self->error(join("\n", $client->transaction, $client->error));
next;
};
my $src_size = 0;
if (my $res = $client->res) {
$src_size = $res->content_length || 0
}
my $dst_size = filesize($file) // 0;
unless ($src_size == $dst_size) {
$self->error(sprintf("An error occurred while fetching data from %s. Sizes are different: SRC=%d; DST=%d", $url_wop, $src_size, $dst_size));
next;
}
# Validate
unless ($self->validate($file)) { # FAIL validation!
$self->error(sprintf("HTTP storage %s failed: file %s is not valid!", $url_wop, $file));
next
}
# Done!
return $self->storage_status(STORAGE_SIGN, 1);
}
$self->storage_status(STORAGE_SIGN, 0);
$self->maybe::next::method(%params);
}
sub del {
my $self = shift;
my $name = shift;
$self->maybe::next::method($name);
return $self->storage_status(STORAGE_SIGN, -1) if $self->storage_status(STORAGE_SIGN) <= 0; # SKIP and set SKIP
my $status = 1;
foreach my $storage ($self->http_storages) {
my $url = $storage->{url};
my $url_wop = $storage->{url_wop};
my $attr = $storage->{attr};
my $ostat = 1;
# Create object
my $client = new App::MBUtiny::Storage::HTTP::Client(
url => $url, # Base URL
timeout => $storage->{timeout}, # default: 180
($attr && isnt_void($attr)) ? (headers => $attr) : (),
);
unless ($client->status) {
$self->error(sprintf("Can't connect to %s: %s", $url_wop, $client->error));
$ostat = 0;
}
# Get list
my @ls = ();
if ($ostat) {
@ls = $client->filelist(host => $self->{name});
unless ($client->status) {
$self->error(join("\n", $client->transaction, $client->error));
$ostat = 0;
}
}
# Delete file
if ($ostat && grep { $_ eq $name } @ls ) {
$client->remove(name => $name) or do {
$self->error(join("\n", $client->transaction, $client->error));
$ostat = 0;
};
}
# Fixup!
$self->fixup("del", $name) if $storage->{fixup};
$status = 0 unless $ostat;
}
$self->storage_status(STORAGE_SIGN, 0) unless $status;
}
sub list {
( run in 0.784 second using v1.01-cache-2.11-cpan-39bf76dae61 )