calculate usage based on log files
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 10 Dec 2011 13:53:19 +0000 (14:53 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sat, 10 Dec 2011 13:53:19 +0000 (14:53 +0100)
lib/CloudStore/API.pm
t/API.t

index d83792a..4baa4c3 100644 (file)
@@ -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 (executable)
--- 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;