query zfs quota
authorDobrica Pavlinusic <dpavlin@rsync1.maxxo.com>
Fri, 9 Dec 2011 20:29:39 +0000 (21:29 +0100)
committerDobrica Pavlinusic <dpavlin@rsync1.maxxo.com>
Fri, 9 Dec 2011 20:29:39 +0000 (21:29 +0100)
gearman/zfs.pl [new file with mode: 0755]

diff --git a/gearman/zfs.pl b/gearman/zfs.pl
new file mode 100755 (executable)
index 0000000..63bbe55
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+use Data::Dump qw(dump);
+
+sub home_dir {
+       my $login = shift;
+       my ( undef, undef, $uid, $gid, undef, undef, $email, $dir, $shell ) = getpwnam $login;
+       return $dir;
+}
+
+use Gearman::Worker;
+my $worker = Gearman::Worker->new;
+$worker->job_servers('127.0.0.1:4730');
+
+die "missing ZSLICE from env" unless $ENV{ZSLICE};
+
+sub zfs_get {
+       my ($command,$job) = @_;
+       my $work = $job->arg;
+       chomp $work;
+
+
+       my $zfs = sprintf 'zfs get -H -p -o value %s@%s %s', $command, $work, $ENV{ZSLICE};
+          $zfs = sprintf 'zfs userspace -H -p -o name,used,quota %s', $ENV{ZSLICE} if $command eq 'userspace';
+
+       warn "# zfs_get $command [$work] -> $zfs\n";
+
+       my $v = `$zfs`;
+
+       warn "# $command $work = $v\n";
+
+       return $v;
+}
+
+$worker->register_function( zfs_userused  => sub { zfs_get( 'userused'  => $_[0] ) } );
+
+$worker->register_function( zfs_userquota => sub { zfs_get( 'userquota' => $_[0] ) } );
+
+$worker->register_function( zfs_userspace => sub { zfs_get( 'userspace' => $_[0] ) } );
+
+warn "$0 pid $$ waitng for jobs\n";
+$worker->work while 1;
+