X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=persistant_worker.pl;h=647b2bdf4646df332fad89917b981d3c52e849be;hb=516c0e6f30c2fb9e16eada973a35a46d7000ee3a;hp=82db537099de896057e8b365e16ceeddddf2db56;hpb=d297461cffe90c68b1beda9328c57fe2fdb9cf07;p=APKPM.git diff --git a/persistant_worker.pl b/persistant_worker.pl index 82db537..647b2bd 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 $!; @@ -104,10 +109,11 @@ foreach my $ip ( keys %$poll ) { } $self->do_background_json( 'Store_insert', { - _table => 'dslam_h', + _table => 'dslam', ip => $crm->{IP_MANAGEMENT}, # FIXME IP_UREDAJA ? username => $username, timestamp => $self->datetime_now, + variant => $variant, h => $self->to_hstore($hash), }); @@ -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;