user_usage now uses cached usage from list_files
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 15 Apr 2012 21:09:21 +0000 (23:09 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 15 Apr 2012 21:09:21 +0000 (23:09 +0200)
lib/CloudStore/API.pm
lib/CloudStore/Gearman/API.pm

index c87cb03..692a42a 100644 (file)
@@ -116,7 +116,7 @@ sub mkbasepath {
 }
 
 sub user_dir {
-       my ( $self,$user, $dir ) = @_;
+       my ( $self, $user, $dir ) = @_;
        $user = $self->user_info($user) unless ref $user eq 'HASH';
        my $path;
        if ( exists $user->{dir} ) {
@@ -160,6 +160,22 @@ sub append_meta {
 sub usage {
        my ( $self, $user ) = @_;
        $user = $self->user_info($user) unless ref $user eq 'HASH';
+
+       my $usage_path = $user->{dir} . '/.meta/files.usage';
+       if ( -e $usage_path ) {
+               warn "# usage $usage_path missing";
+               $self->list_files($user);
+       }
+
+       open(my $fh, '<', $usage_path);
+       my $size = <$fh>;
+       chomp $size;
+
+       warn "# usage $user->{login} usage: $size\n";
+       return $size;
+
+=for slow and broken
+
        my $path = $self->user_dir( $user => 'usage');
        my $sum;
        open(my $fh, '<', $path);
@@ -176,6 +192,9 @@ sub usage {
        $sum->{_quota} = $quota;
        warn "## usage ",dump($user, $sum), $/;
        return $sum;
+
+=cut
+
 }
 
 sub send_file {
@@ -310,6 +329,8 @@ sub list_files {
 
        $user = $self->user_info($user) unless ref $user eq 'HASH';
 
+       die "no dir for ",dump($user) unless exists $user->{dir};
+
        my $files = $user->{dir} . '/.meta/files';
        if ( -e $files && -s $files > 0) {
                local $/ = undef;
@@ -320,15 +341,15 @@ sub list_files {
                return $list;
        }
 
-       my $path = $user->{dir};
-       open(my $pipe, '-|', qq|find -L $path -printf "%y %s %p\n"|);
+       my $dir = $user->{dir};
+       open(my $pipe, '-|', qq|find -L $dir -printf "%y %s %p\n"|);
        open(my $fh, '>', "$files.new");
        my $total_usage = 0;
        my $list_txt;
        while(<$pipe>) {
                chomp;
                my ( $type, $size, $name ) = split(/\s/, $_);
-               $name =~ s{$path}{./};
+               $name =~ s{$dir}{./};
                $name =~ s{//+}{/}g;
                my $line = "$type $size $name\n";
                print $fh $line;
@@ -344,7 +365,7 @@ sub list_files {
        close($usage);
        rename "$files.usage.new", "$files.usage";
 
-       warn "# list_files $path usage: $total_usage\n";
+       warn "# list_files $dir usage: $total_usage\n";
 
        return $list_txt;
 }
index 0a1d0a0..d743b63 100644 (file)
@@ -113,9 +113,23 @@ sub file_size : Job : Decode(chomp_work) : MaxProcesses(40) {
 
 sub user_usage : Job : Decode(chomp_work) : MaxProcesses(40) {
        my ( $self, $job, $work ) = @_;
-       warn "# usage [$work]\n";
-       my $usage = $api->usage( $work );
-       return $usage->{_usage};
+       warn "# user_usage [$work]\n";
+#      my $usage = $api->usage( $work );
+#      return $usage->{_usage};
+       $api->usage($work);
+}
+
+=head2 list_files ~u2001/
+
+FIXME: path is not supported
+
+=cut
+
+sub list_files : Job : Decode(chomp_work) : MaxProcesses(10) {
+       my ( $self, $job, $work ) = @_;
+       warn "# list_files [$work]\n";
+       my $login = $1 if $work =~ s{~(\w+)}{};
+       $api->list_files($login);
 }
 
 1;