0a1d0a0935e201531b2a790c56a8beef4b4be8a5
[cloudstore.git] / lib / CloudStore / Gearman / API.pm
1 package CloudStore::Gearman::API;
2 use base qw(Gearman::Driver::Worker);
3 use Moose;
4
5 =head1 NAME
6
7 Gearman API workers
8
9 =cut
10
11 use Data::Dump qw(dump);
12 use autodie;
13
14 use lib '/srv/cloudstore/lib';
15 use CloudStore::API;
16 #use WarnColor;
17
18
19 use base qw(Gearman::Driver::Worker);
20
21 sub prefix { '' } # don't prefix methods with package
22
23 sub process_name {
24         my ( $self, $orig, $job_name ) = @_;
25         warn "# process_name $orig $job_name\n";
26         return "$orig ($job_name)";
27 }
28
29 sub chomp_work {
30         my ($self,$work) = @_;
31         chomp $work;
32         return $work;
33 }
34
35 our $api = CloudStore::API->new;
36
37 =head2 create_user "user_id password quota"
38
39 =cut
40
41 sub create_user : Job : Decode(chomp_work) : MinProcesses(1) : MaxProcesses(1) {
42         my ( $self, $job, $work ) = @_;
43
44         warn "# create_user [$work]\n";
45         my ( $email, $password, $quota ) = split(/\s+/,$work,3);
46         $quota ||= 200000 && warn "default quota";
47         $api->create_user( $email, $password, $quota );
48 }
49
50 =head2 send_file ~u2001/from.txt#~u2003/dir/new to.txt
51
52 =cut
53
54 sub send_file : Job : Decode(chomp_work) : MaxProcesses(2) {
55         my ( $self, $job, $work ) = @_;
56
57         warn "# send_file [$work]\n";
58
59         my ( $from, $to ) = split(/#/,$work,2);
60         
61         my $f_uid = $1 if $from =~ s{~(\w+)/}{};
62         my $t_uid = $1 if $to   =~ s{~(\w+)/}{};
63
64         warn "send_file $f_uid $from -> $t_uid $to\n";
65
66         $api->send_file( $f_uid => $from, $t_uid => $to );
67 }
68
69 =head2 rename_file ~u2001/old.txt#new.txt
70
71 =cut
72
73 sub rename_file : Job : Decode(chomp_work) : MaxProcesses(2) {
74         my ( $self, $job, $work ) = @_;
75
76         warn "# rename_file [$work]\n";
77
78         my ( $from, $to ) = split(/#/,$work,2);
79         my $login = $1 if $from =~ s{~(\w+)/}{};
80         $api->rename_file( $login, $from, $to );
81 }
82
83 =head2 delete ~u2001/file_or_dir
84
85 =cut
86
87 sub delete : Job : Decode(chomp_work) : MaxProcesses(2) {
88         my ( $self, $job, $work ) = @_;
89
90         warn "# delete [$work]\n";
91
92         my $login = $1 if $work =~ s{~(\w+)}{};
93         $api->delete( $login, $work );
94
95 }
96
97 =head2 file_size ~u2001/foo.txt
98
99 =cut
100
101 sub file_size : Job : Decode(chomp_work) : MaxProcesses(40) {
102         my ( $self, $job, $work ) = @_;
103
104         warn "# file_size [$work]\n";
105
106         my $login = $1 if $work =~ s{~(\w+)}{};
107         $api->file_size( $login, $work );
108 }
109
110 =head2 user_usage u2001
111
112 =cut
113
114 sub user_usage : Job : Decode(chomp_work) : MaxProcesses(40) {
115         my ( $self, $job, $work ) = @_;
116         warn "# usage [$work]\n";
117         my $usage = $api->usage( $work );
118         return $usage->{_usage};
119 }
120
121 1;