|
Luc Didry |
8d6f10 |
package Lufi::Command::copyFilesToSwift;
|
|
Luc Didry |
8d6f10 |
use Mojo::Base 'Mojolicious::Command';
|
|
Luc Didry |
8d6f10 |
use File::Spec;
|
|
Luc Didry |
8d6f10 |
use Term::ProgressBar;
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
has description => 'Copy files from filesystem to Swift object storage';
|
|
Luc Didry |
8d6f10 |
has usage => sub { shift->extract_usage };
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
sub run {
|
|
Luc Didry |
8d6f10 |
my $c = shift;
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
if ($c->app->config('swift')) {
|
|
Luc Didry |
8d6f10 |
$c->app->check_swift_container();
|
|
Luc Didry |
8d6f10 |
my @dirs = glob(File::Spec->catdir($c->app->config('upload_dir'), '*'));
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
0b2ad4 |
unless (scalar(@dirs)) {
|
|
Luc Didry |
0b2ad4 |
say sprintf('The configured upload_dir (%s) seems to be empty. Is `upload_dir` configured in lufi.conf?', $c->app->config('upload_dir'));
|
|
Luc Didry |
0b2ad4 |
exit 1;
|
|
Luc Didry |
0b2ad4 |
}
|
|
Luc Didry |
8d6f10 |
say sprintf('%d folders to upload to Swift (can\'t say how many files, or the total size, sorry). This can take some time.', scalar(@dirs));
|
|
Luc Didry |
8d6f10 |
print 'Do you want to continue? [Y/n] ';
|
|
Luc Didry |
8d6f10 |
my $confirm = <STDIN>;
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
if ($confirm =~ m/yes|y/i) {
|
|
Luc Didry |
8d6f10 |
my $progress = Term::ProgressBar->new({ count => scalar(@dirs), ETA => 'linear', name => 'Copying to Swift'});
|
|
Luc Didry |
8d6f10 |
for my $dir (@dirs) {
|
|
Luc Didry |
8d6f10 |
my @files = glob(File::Spec->catfile($dir, '*'));
|
|
Luc Didry |
8d6f10 |
for my $file (@files) {
|
|
Luc Didry |
8d6f10 |
my ($volume, $directories, $filename) = File::Spec->splitpath($file);
|
|
Luc Didry |
8d6f10 |
my @file_dirs = File::Spec->splitdir($directories);
|
|
Luc Didry |
8d6f10 |
my $short = ($file_dirs[-1] ne '') ? $file_dirs[-1] : $file_dirs[-2];
|
|
Luc Didry |
8d6f10 |
my $path = File::Spec->catfile($short, $filename);
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
open my $fh, '<', $file or die sprintf('Unable to open file %s: %s', $file, $!);
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
$c->app->swift->put_object(
|
|
Luc Didry |
8d6f10 |
container_name => $c->app->config('swift')->{container},
|
|
Luc Didry |
8d6f10 |
object_name => $path,
|
|
Luc Didry |
8d6f10 |
content_length => -s $file,
|
|
Luc Didry |
8d6f10 |
content => $fh
|
|
Luc Didry |
8d6f10 |
);
|
|
Luc Didry |
8d6f10 |
close $fh;
|
|
Luc Didry |
8d6f10 |
}
|
|
Luc Didry |
8d6f10 |
$progress->update();
|
|
Luc Didry |
8d6f10 |
}
|
|
Luc Didry |
8d6f10 |
say sprintf('The copy to Swift object storage has ended. You can test Lufi, then delete `%s` directory', $c->app->config('upload_dir'));
|
|
Luc Didry |
8d6f10 |
} else {
|
|
Luc Didry |
8d6f10 |
say 'You want to stop. No problem.';
|
|
Luc Didry |
8d6f10 |
}
|
|
Luc Didry |
8d6f10 |
} else {
|
|
Luc Didry |
8d6f10 |
say 'You didn\'t configure `swift` in your config file. Exiting.';
|
|
Luc Didry |
8d6f10 |
exit 1;
|
|
Luc Didry |
8d6f10 |
}
|
|
Luc Didry |
8d6f10 |
}
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
=encoding utf8
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
=head1 NAME
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
Lufi::Command::copyFilesToSwift Copy files from filesystem to Swift object storage
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
=head1 SYNOPSIS
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
Usage: script/lufi copyFilesToSwift
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
This command needs you to:
|
|
Luc Didry |
8d6f10 |
- set `upload_dir` in your config file (otherwise, it will use the default path, `files` to copy files from)
|
|
Luc Didry |
8d6f10 |
- configure `swift` with correct informations in your config file
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
=cut
|
|
Luc Didry |
8d6f10 |
|
|
Luc Didry |
8d6f10 |
1;
|