use warnings;
use strict;
+=head1 NAME
+
+Filesystem Gearman Worker
+
+=cut
+
+
use Data::Dump qw(dump);
-use File::Path qw(make_path remove_tree);
-sub home_dir {
- my $login = shift;
- my ( undef, undef, $uid, $gid, undef, undef, $email, $dir, $shell ) = getpwnam $login;
- return $dir;
-}
+use lib '/srv/cloudstore/lib';
+use CloudStore::API;
+use WarnColor;
+
+my $api = CloudStore::API->new('s1');
use Gearman::Worker;
my $worker = Gearman::Worker->new;
$worker->job_servers('127.0.0.1:4730');
+=head2 create_user
+
+=cut
+
+$worker->register_function( create_user => sub {
+ my ($job) = @_;
+
+ my $work = $job->arg;
+ chomp $work;
+ warn "# create_user [$work]\n";
+ my ( $email, $password, $quota ) = split(/\s+/,$work,3);
+ $quota ||= 200000 && warn "default quota";
+ $api->create_user( $email, $password, $quota );
+});
+
+=head2 send_file ~u2001/from.txt#~u2003/dir/new to.txt
+
+=cut
+
$worker->register_function( send_file => sub {
my ($job) = @_;
warn "# send_file [$work]\n";
my ( $from, $to ) = split(/#/,$work,2);
+
+ my $f_uid = $1 if $from =~ s{~(\w+)/}{};
+ my $t_uid = $1 if $to =~ s{~(\w+)/}{};
- my $f_dir = home_dir($1) if $from =~ s/~(\w+)//;
- my $t_dir = home_dir($1) if $to =~ s/~(\w+)//;
+ warn "send_file $f_uid $from -> $t_uid $to\n";
- warn "send_file $f_dir $from -> $t_dir $to\n";
+ $api->send_file( $f_uid => $from, $t_uid => $to );
+});
+
+=head2 rename_file ~u2001/old.txt#new.txt
+
+=cut
+
+$worker->register_function( rename_file => sub {
+ my ($job) = @_;
- my $t_basedir = $t_dir . $to;
- $t_basedir =~ s{/[^/]+$}{};
- make_path $t_basedir unless -d $t_basedir;
- link $f_dir . $from => $t_dir . $to;
+ my $work = $job->arg;
+ chomp $work;
+ warn "# rename_file [$work]\n";
- return "send_file $f_dir $from -> $t_dir $to";
+ my ( $from, $to ) = split(/#/,$work,2);
+ my $login = $1 if $from =~ s{~(\w+)/}{};
+ $api->rename_file( $login, $from, $to );
});
+=head2 delete ~u2001/file_or_dir
+
+=cut
$worker->register_function( delete => sub {
my ($job) = @_;
chomp $work;
warn "# delete [$work]\n";
- my $dir = home_dir($1) if $work =~ s/~(\w+)//;
- my $full = $dir . $work;
-
- if ( -d $full ) {
- warn "remove_tree $full\n";
- remove_tree $full;
- } else {
- warn "unlink $full\n";
- }
- if ( $! ) {
- warn "ERROR: $!";
- return "$full: $!\n";
- } else {
- return "$full: OK\n";
- }
+ my $login = $1 if $work =~ s{~(\w+)}{};
+ $api->delete( $login, $work );
+
+});
+
+=head2 file_size ~u2001/foo.txt
+
+=cut
+
+$worker->register_function( file_size => sub {
+ my ($job) = @_;
+ my $work = $job->arg;
+ chomp $work;
+ warn "# file_size [$work]\n";
+
+ my $login = $1 if $work =~ s{~(\w+)}{};
+ $api->file_size( $login, $work );
+});
+
+=head2 user_usage u2001
+=cut
+
+$worker->register_function( user_usage => sub {
+ my ($job) = @_;
+ my $work = $job->arg;
+ chomp $work;
+ warn "# usage [$work]\n";
+ my $usage = $api->usage( $work );
+ return $usage->{_usage};
});
warn "$0 pid $$ waitng for jobs\n";
+
$worker->work while 1;