X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=lib%2FAPKPM%2FCPE.pm;h=97c2f1f2068d8abd4d7fb9b7e36a7c0494785f57;hb=69d009f7f297e9c8fbbcb679db00059357cdf17b;hp=8549ebee80baaeb0c7c000251379c99dcec99752;hpb=a356ba4a00c5305a8d35b9ed98eeae6d2e0e11a1;p=APKPM.git diff --git a/lib/APKPM/CPE.pm b/lib/APKPM/CPE.pm index 8549ebe..97c2f1f 100644 --- a/lib/APKPM/CPE.pm +++ b/lib/APKPM/CPE.pm @@ -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' => $ip ); - $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 };