use Redis;
use Net::Ping;
+use lib 'lib';
+use H1::EasyGateway;
+use H1::Davolink;
+
with 'APKPM::Gearman::Client';
with 'APKPM::Gearman';
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);
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;
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;
});
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 };