From af29b6cf7512b894a8ed062e8fc9b44aa2c6dde4 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sat, 10 Dec 2011 14:53:19 +0100 Subject: [PATCH] calculate usage based on log files --- lib/CloudStore/API.pm | 43 +++++++++++++++++++++++++++++++------------ t/API.t | 20 +++++++++++++++++++- 2 files changed, 50 insertions(+), 13 deletions(-) diff --git a/lib/CloudStore/API.pm b/lib/CloudStore/API.pm index d83792a..4baa4c3 100644 --- a/lib/CloudStore/API.pm +++ b/lib/CloudStore/API.pm @@ -67,21 +67,45 @@ sub mkbasepath { make_path $path unless -d $path; } -sub append { - my $self = shift @_; - my $user = shift @_; - my $path; +sub user_dir { + my ( $self,$user, $dir ) = @_; $user = $self->user_info($user) unless ref $user eq 'HASH'; + my $path; if ( exists $user->{dir} ) { - $path = $user->{dir} . '/.log'; + $path = $user->{dir} . '/' . $dir; } else { die "no dir in ", dump $user; } + $path =~ s{//+}{/}g; +# warn "## user_dir $path"; + return $path; +} + +sub append { + my $self = shift @_; + my $user = shift @_; + my $path = $self->user_dir( $user => '.log'); my $line = join('#',@_); open(my $fh, '>>', $path); print $fh "$line\n"; close $fh; warn "## $path $line\n"; + $user = $self->user_info($user) unless ref $user eq 'HASH'; +} + +sub usage { + my ( $self, $user ) = @_; + my $path = $self->user_dir( $user => '.log'); + my $sum; + open(my $fh, '<', $path); + while(<$fh>) { + chomp; + my @v = split(/#/,$_); + $sum->{ $v[0] } += $v[1]; + $sum->{_total} += $v[1]; + } + warn "## usage ",dump($user, $sum), $/; + return $sum; } sub send_file { @@ -100,13 +124,13 @@ sub send_file { warn "# send_file - move $f_uid $f_path to pool\n"; chown $self->{md5}->{uid}, $self->{md5}->{gid}, $f_full; chmod oct("0444"), $f_full; + $self->append( $f, 'sent', -s $f_full, $t->{uid}, $f_path ); } elsif ( $uid == $self->{md5}->{uid} ) { warn "# send_file - shared $f_full\n"; } $self->delete( $t, $t_path ) if -e $t_full; - $self->append( $f, 'sent', -s $f_full, $t->{uid}, $f_path ); link $f_full, $t_full; $self->append( $t, 'recv', -s $t_full, $f->{uid}, $t_path ); } @@ -147,12 +171,7 @@ sub delete { warn "delete $deleted_size bytes shared\n"; - $self->append( $user, 'delete', -$deleted_size, $path ); -} - -sub usage { - my ( $uid ) = @_; - + $self->append( $user, 'delete', -$deleted_size, $user->{uid}, $path ); } 1; diff --git a/t/API.t b/t/API.t index 58eb691..2083c28 100755 --- a/t/API.t +++ b/t/API.t @@ -2,7 +2,7 @@ use strict; use warnings; -use Test::More tests => 17; +use Test::More tests => 25; use Data::Dump qw(dump); use lib 'lib'; @@ -32,14 +32,32 @@ ok close($fh) , 'close'; ok chown $test->{uid}, $test->{gid}, "$test->{dir}/foo.txt", 'chown'; ok my $uid2 = $o->create_user('test2@example.com','password',100_000_000), 'create_user test2'; +ok my $test2 = $o->user_info( $uid2 ), "user_info $uid2"; + +foreach ( $test->{dir}, $test2->{dir} ) { + $_ .= "/.log"; + unlink $_ if -e $_; +} + +sub usage { + ok my $u = $o->usage( $_[0] ), 'usage'; +# diag dump $u; +} ok $o->send_file( $uid => '/foo.txt', $uid2 => 'dir1/dir2/bar.txt' ), 'send_file'; +usage $uid; +usage $uid2; ok $o->send_file( $uid2 => 'dir1/dir2/bar.txt', $uid => 'bar.txt' ), 'send_file back'; +usage $uid; +usage $uid2; ok $o->delete( $uid, 'foo.txt' ); +usage $uid; ok $o->delete( $uid2, 'dir1' ); +usage $uid2; ok $o->delete( $uid, 'bar.txt' ); +usage $uid; -- 2.20.1