From: Dobrica Pavlinusic Date: Mon, 9 Jan 2012 20:07:50 +0000 (+0100) Subject: torrent_share gearman worker X-Git-Url: http://git.rot13.org/?p=cloudstore.git;a=commitdiff_plain;h=9c49c51cec22f1b96b4d87a62d977439e8d7d8a5 torrent_share gearman worker --- diff --git a/gearman/transmission.pl b/gearman/transmission.pl index bf6bce3..2531ed3 100755 --- a/gearman/transmission.pl +++ b/gearman/transmission.pl @@ -5,6 +5,7 @@ use strict; use Transmission::Client; use JSON::XS; use Data::Dump qw(dump); +use autodie; sub home_dir { my $login = shift; @@ -22,7 +23,10 @@ my $j = JSON::XS->new; $j->allow_blessed(1); $j->convert_blessed(0); +use TokyoCabinet; + my $name = $ENV{ZSLICE} || die "need ZSLICE"; +my $torrent_dir = "/$name/torrent"; $name =~ s/\W+/_/g; $worker->register_function( $name . '_torrent_list' => sub { @@ -40,6 +44,41 @@ $worker->register_function( $name . '_torrent_list' => sub { return $j->encode( \@list ); } ); +$worker->register_function( $name . '_torrent_share' => sub { + my $work = $_[0]->arg; + chomp $work; + warn "# torrent_share [$work]\n"; + + my $user = $1 if $work =~ s{~(\w+)/}{}; + my $path = $work; + + my $dir = (getpwnam($user))[7] || die "no user $user"; + my $md5_path = "$dir/.md5"; + my %h; + tie %h, "TokyoCabinet::HDB", $md5_path || die "$md5_path: $!"; + my $md5 = $h{$path} || die "can't find $path in $md5_path"; + untie %h; + + warn "# $md5 $path"; + + if ( ! -e "$torrent_dir/download/$md5" ) { + symlink "/rsync1/s1/md5/$md5", "$torrent_dir/download/$md5"; # FIXME slice path + warn "# created $torrent_dir/download/$md5"; + } + + if ( ! -e "$torrent_dir/md5/$md5.torrent" ) { + my $tracker = "http://213.186.16.27:6502/announce"; # FIXME + system "mktorrent --announce $tracker --no-date --verbose --output $torrent_dir/md5/$md5.torrent $torrent_dir/download/$md5"; + + } + + symlink "$torrent_dir/md5/$md5.torrent", "$dir/$path.torrent" unless -e "$dir/$path.torrent"; + + $tc->add( filename => "$torrent_dir/md5/$md5.torrent" ); + + return "$dir/$path"; +} ); + warn "$0 $name pid $$ waitng for jobs\n"; $worker->work while 1;