server => $ENV{GEARMAN} || 'localhost:4730',
interval => 3,
job_runtime_attributes => {
- 'APKPM::Poll::poll_prefix' => {
- max_processes => 1,
- min_processes => 0,
- },
- 'APKPM::Poll::poll_ip_username' => {
- max_processes => 40,
- min_processes => 0,
- },
'APKPM::CPE::poll' => {
max_processes => 1,
min_processes => 0,
},
- 'APKPM::CPE::ping' => {
+ 'APKPM::CPE::info' => {
max_processes => 40,
min_processes => 0,
},
max_processes => 1,
min_processes => 0,
},
- 'APKPM::Davolink::info' => {
- max_processes => 30,
- min_processes => 0,
- },
- 'APKPM::EasyGateway::info' => {
- max_processes => 5,
- min_processes => 0,
- },
'APKPM::Store::insert' => {
max_processes => 2,
min_processes => 0,
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);
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( 'Davolink_info', "$ip $username adsl" );
+ $vendor = 'Davolink';
} elsif ( $vendor =~ m/zte/ ) {
- $redis->sadd( 'CPE.EasyGateway.queued' => $ip );
+ $vendor = 'EasyGateway';
+ } else {
+ $redis->sadd( 'CPE.skipped' => $username );
+ $vendor = undef;
+ }
- my $ret = eval { H1::EasyGateway->info( $ip ) };
+ if ( $vendor ) {
+ $redis->sadd( "CPE.$vendor.queued" => $ip );
- if ( $ret ) {
+ my $module = 'H1::' . $vendor;
+ my $ret = eval { $module->info( $ip ) };
+
+ warn "# $module ",dump($ret);
+ if ( $ret ) {
$self->do_background_json( 'Store_insert', {
- _table => 'easygateway',
+ _table => $vendor,
ip => $ip,
- username => delete $ret->{customerName},
+ username => $username,
timestamp => $self->datetime_now,
h => $self->to_hstore( $ret ),
});
-
- $redis->sadd( 'CPE.EasyGateway.ok' => $ip );
-
+ $redis->sadd( "CPE.$vendor.ok" => $ip );
} else {
- $redis->sadd( 'CPE.EasyGateway.error' => $ip );
+ $redis->sadd( "CPE.$vendor.error" => $ip );
}
-
- } else {
- $redis->sadd( 'CPE.skipped' => $username );
}
return { ip => $ip, rtt => $rtt };
+++ /dev/null
-package APKPM::Davolink;
-
-use base qw(Gearman::Driver::Worker);
-use Moose;
-use Time::HiRes;
-use Data::Dump qw(dump);
-
-with 'APKPM::Config';
-with 'APKPM::Gearman::Client';
-with 'APKPM::Gearman';
-
-use Redis;
-
-use lib '/opt/managment_tools/lib';
-use H1::Davolink;
-
-sub prefix { 'Davolink_' }
-
-sub info : Job : Decode(d_array) : Encode(e_json) {
- my ( $self, $job, $workload ) = @_;
- warn "# workload = ", dump $workload;
- my $cpeip = shift @$workload;
- my $username = shift @$workload;
-
- unshift @$workload, 'adsl'; # add default
-
- return { error => "invalid workload", expected => 'cpe.ip username (uptime|adsl|wan|routes)', workload => $workload } unless $cpeip && $username;
-
- my $cpeconnect=H1::Davolink->new($cpeip,$self->config('iadusername'),$self->config('iadpasswd'));
- $cpeconnect->connect() || return { error => "can't connect to $cpeip" };
- my $ret = { ip => $cpeip, username => $username };
- foreach my $param ( @$workload ) {
- if ( $param =~ m/uptime/i ) {
- $ret->{UPTIME} = $cpeconnect->custom("cat /proc/uptime");
- } elsif ( $param =~ m/adsl/i ) {
- $ret->{ADSL} = { $cpeconnect->adsl_info };
- $self->do_background_json( 'Store_insert', {
- _table => 'davolink',
- ip => $cpeip,
- username => $username,
- timestamp => $self->datetime_now,
- %{$ret->{ADSL}}
- });
- my $redis = Redis->new;
- $redis->sadd( 'CPE.Davolink.ok' => $cpeip );
- } elsif ( $param =~ m/wan/i ) {
- $ret->{WAN} = [ $cpeconnect->wan_info ];
- } elsif ( $param =~ m/route/i ) {
- $ret->{ROUTES} = [ $cpeconnect->route_info ];
- } else {
- die "unknown param $param";
- }
- };
-
- return $ret;
-}
-
-1;
+++ /dev/null
-create table davolink (
-ip inet not null,
-username text not null,
-timestamp timestamp default now(),
-SNRTX float,
-ATTNTX float,
-MAXTX integer,
-PWRTX float,
-PWRRX float,
-TX integer,
-RX integer,
-MAXRX integer,
-ATTNRX float,
-SNRRX float
-);
-
--- columns used in where for gnuplot
-create index davolink_username on davolink(username);
-create index davolink_timestamp on davolink(timestamp) ;
-
use strict;
use warnings;
-use Test::More tests => 4;
+use Test::More tests => 6;
use Data::Dump qw(dump);
use lib 'lib';
ok my $o = APKPM::CPE->new( server => 'localhost:4730' ), 'new';
-ok my $r = $o->poll( 'job', 'ab' ), 'poll';
+ok my $r = $o->info( 'job', [ '10.16.9.2', 'nobody', 'SAMSUNG' ] ), 'info SAMSUNG';
diag dump($r);
-ok my $r = $o->ping( 'job', [ '127.0.0.1', 'nobody', 'no-vendor' ] ), 'ping';
+ok my $r = $o->info( 'job', [ '10.16.4.239', 'nobody', 'zte' ] ), 'info zte';
diag dump($r);
+
+ok my $r = $o->poll( 'job', 'ab' ), 'poll';
+diag dump($r);
+