From a02ea47497ea417a09922cd90160fa2b01cdda79 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sun, 15 Apr 2012 23:09:21 +0200 Subject: [PATCH] user_usage now uses cached usage from list_files --- lib/CloudStore/API.pm | 31 ++++++++++++++++++++++++++----- lib/CloudStore/Gearman/API.pm | 20 +++++++++++++++++--- 2 files changed, 43 insertions(+), 8 deletions(-) diff --git a/lib/CloudStore/API.pm b/lib/CloudStore/API.pm index c87cb03..692a42a 100644 --- a/lib/CloudStore/API.pm +++ b/lib/CloudStore/API.pm @@ -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; } diff --git a/lib/CloudStore/Gearman/API.pm b/lib/CloudStore/Gearman/API.pm index 0a1d0a0..d743b63 100644 --- a/lib/CloudStore/Gearman/API.pm +++ b/lib/CloudStore/Gearman/API.pm @@ -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; -- 2.20.1