X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=persistant_worker.pl;h=42dabe86e62ae2a7ee3087ea76029ac29382105e;hb=b7ad83dc3edd53f4023f67440774c636e120cec2;hp=82db537099de896057e8b365e16ceeddddf2db56;hpb=d297461cffe90c68b1beda9328c57fe2fdb9cf07;p=APKPM.git diff --git a/persistant_worker.pl b/persistant_worker.pl index 82db537..42dabe8 100755 --- a/persistant_worker.pl +++ b/persistant_worker.pl @@ -1,5 +1,9 @@ #!/usr/bin/perl +BEGIN { + $SIG{'__WARN__'} = sub { warn $_[0] if $_[0] =~ m/^(#+)/ && length($1) <= $ENV{DEBUG} } +} + package Cog; # persistant Gearman Worker - see the pun? use Moose; @@ -23,6 +27,7 @@ use Redis; use lib 'lib'; use H1::ZTEDSLAM; use H1::ZTEMSAN; +use APKPM::Model; my ($variant,$max_processes) = @ARGV; $variant ||= 'ZTEDSLAM'; @@ -31,7 +36,7 @@ warn "variant: $variant max_processes: $max_processes\n"; my $driver = Gearman::Driver->new( server => 'localhost:4730', - interval => 60, + interval => 15, loglevel => 'DEBUG', logfile => "log/$variant.log", ) || die $!; @@ -71,7 +76,7 @@ foreach my $ip ( keys %$poll ) { methods => [ { decode => 'd_json', -# encode => 'e_json', + encode => 'e_json', name => $method, body => sub { @@ -95,23 +100,24 @@ foreach my $ip ( keys %$poll ) { if ( $@ ) { $redis->sadd("$variant.$ip.error" => $@); - return "error: $@"; + return { error => $@ }; } elsif ( ! $hash ) { $redis->sadd("$variant.$ip.empty" => $port); - return "empty"; + return { error => 'empty' }; } else { $redis->sadd("$variant.$ip.ok" => $port); } $self->do_background_json( 'Store_insert', { - _table => 'dslam_h', + _table => 'dslam', ip => $crm->{IP_MANAGEMENT}, # FIXME IP_UREDAJA ? username => $username, timestamp => $self->datetime_now, - h => $self->to_hstore($hash), + variant => $variant, + h => $hash, }); - return "ok $username $ip $port"; # body end + return $hash; # body end # XXX -- worker body }, @@ -125,11 +131,12 @@ foreach my $ip ( keys %$poll ) { $driver->add_job({ max_processes => 1, - min_processes => 1, + min_processes => 0, worker => $worker, - name => "poll_$variant", + name => $variant . '_poll', methods => [ { - name => "poll_$variant", + name => $variant . '_poll', + encode => 'e_json', body => sub { my ( $self, $job, $workload ) = @_; @@ -187,13 +194,26 @@ $driver->add_job({ $taskset->wait; $redis->set( "$variant.poll.finish" => $self->datetime_now ); - warn "# seen ", dump($seen); + + my $status = APKPM::Model->redis_status; + my $row = $status->{poll}->{$variant}; + $row->{$_} = $status->{"$variant.poll.$_"} foreach ( 'start', 'finish' ); + $row->{variant} = $variant; + $self->do_background_json('Store_insert', { _table => 'dslam_poll', %$row }); + warn "# dslam_poll ",dump($row); my $ips = scalar keys %$seen; - return "polled $ips IPs"; # body end + my $ports = 0; + $ports += scalar keys %{ $seen->{$_} } foreach keys %$seen; + warn "# finish $ips ips with $ports ports\n"; + return { ips => $ips, ports => $ports, dslam_poll => $row } ; # body end } } ], }); +open(my $pid, '>', "/tmp/apkpm.$variant.pid"); +print $pid "$$\n"; +close $pid; + $driver->run;