fix eval typo
[APKPM.git] / lib / APKPM / CPE.pm
index 06e2d44..97c2f1f 100644 (file)
@@ -7,6 +7,10 @@ use Data::Dump qw(dump);
 use Redis;
 use Net::Ping;
 
+use lib 'lib';
+use H1::EasyGateway;
+use H1::Davolink;
+
 with 'APKPM::Gearman::Client';
 with 'APKPM::Gearman';
 
@@ -44,7 +48,7 @@ sub poll : Job : Encode(e_json) {
 
                my $vendor = $1;
 
-               $taskset->add_task('CPE_ping', "$ip $username $vendor", {
+               $taskset->add_task('CPE_info', "$ip $username $vendor", {
                        on_complete => sub { push @$results, ${$_[0]} }
                });
                $redis->sadd('CPE.queued' => $ip);
@@ -64,7 +68,7 @@ sub poll : Job : Encode(e_json) {
                my $n = $k;
                $n =~ s/^CPE\.//;
                $n =~ s/\./_/g;
-               $poll->{$n} = eval { $redis->scard($k) } || $redis->get($k);
+               $poll->{$n} = eval { $redis->scard($k) } || $redis->get($k) };
        }
 
        warn "# poll = ",dump $poll;
@@ -74,7 +78,7 @@ sub poll : Job : Encode(e_json) {
        return $poll;
 }
 
-sub ping : Job : Decode(d_array) : Encode(e_json) {
+sub info : Job : Decode(d_array) : Encode(e_json) {
        my ( $self, $job, $workload ) = @_;
 
        my ( $ip, $username, $vendor ) = @$workload;
@@ -104,13 +108,34 @@ sub ping : Job : Decode(d_array) : Encode(e_json) {
        });
 
        if ( $vendor =~ m/SAMSUNG/ ) {
-               $redis->sadd( 'CPE.Davolink.queued' => $username );
-               $self->do_background( 'Davolink_info', "$ip $username adsl" );
+               $vendor = 'Davolink';
        } elsif ( $vendor =~ m/zte/ ) {
-               $redis->sadd( 'CPE.EasyGateway.queued' => $username );
-               $self->do_background( 'EasyGateway_info', $ip );
+               $vendor = 'EasyGateway';
        } else {
                $redis->sadd( 'CPE.skipped' => $username );
+               $vendor = undef;
+       }
+
+       if ( $vendor ) {
+               $redis->sadd( "CPE.$vendor.queued" => $ip );
+
+               my $module = 'H1::' . $vendor;
+               my $ret = eval { $module->info( $ip ) };
+
+               warn "# $module ",dump($ret);
+
+               if ( $ret ) {
+                       $self->do_background_json( 'Store_insert', {
+                               _table => $vendor,
+                               ip => $ip,
+                               username => $username,
+                               timestamp => $self->datetime_now,
+                               h => $self->to_hstore( $ret ),
+                       });
+                       $redis->sadd( "CPE.$vendor.ok" => $ip );
+               } else {
+                       $redis->sadd( "CPE.$vendor.error" => $ip );
+               }
        }
 
        return { ip => $ip, rtt => $rtt };