use do_high for CRM_search
[APKPM.git] / persistant_worker.pl
index 82db537..42dabe8 100755 (executable)
@@ -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;