+sub mkbasepath {
+ my ($path,$opts) = @_;
+ $path =~ s{/[^/]+$}{};
+ make_path $path unless -d $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} . '/' . $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 ) = @_;
+ $user = $self->user_info($user) unless ref $user eq 'HASH';
+ 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->{_usage} += $v[1];
+ }
+ my ( $usage, $quota ) = split(/ /,
+ $self->gearman_do( 'narada_s1_quota_get' => $user->{uid} )
+ );
+ $sum->{_usage} += $usage;
+ $sum->{_quota} = $quota;
+ warn "## usage ",dump($user, $sum), $/;
+ return $sum;
+}
+