show CPE stats instead of (unused) poll
[APKPM.git] / lib / APKPM / Davolink.pm
1 package APKPM::Davolink;
2
3 use base qw(Gearman::Driver::Worker);
4 use Moose;
5 use Time::HiRes;
6 use Data::Dump qw(dump);
7
8 with 'APKPM::Config';
9 with 'APKPM::Gearman::Client';
10 with 'APKPM::Gearman';
11
12 use Redis;
13
14 use lib '/opt/managment_tools/lib';
15 use H1::Davolink;
16
17 sub prefix { 'Davolink_' }
18
19 sub info : Job : Decode(d_array) : Encode(e_json) {
20         my ( $self, $job, $workload ) = @_;
21         warn "# workload = ", dump $workload;
22         my $cpeip = shift @$workload;
23         my $username = shift @$workload;
24
25         unshift @$workload, 'adsl'; # add default
26
27         return { error => "invalid workload", expected => 'cpe.ip username (uptime|adsl|wan|routes)', workload => $workload } unless $cpeip && $username;
28
29         my $cpeconnect=H1::Davolink->new($cpeip,$self->config('iadusername'),$self->config('iadpasswd'));
30         $cpeconnect->connect() || return { error => "can't connect to $cpeip" };
31         my $ret = { ip => $cpeip, username => $username };
32         foreach my $param ( @$workload ) {
33                 if ( $param =~ m/uptime/i ) {
34                         $ret->{UPTIME} = $cpeconnect->custom("cat /proc/uptime");
35                 } elsif ( $param =~ m/adsl/i ) {
36                         $ret->{ADSL} = { $cpeconnect->adsl_info };
37                         $self->do_background_json( 'Store_insert', {
38                                 _table => 'adsl',
39                                 ip => $cpeip,
40                                 username => $username,
41                                 timestamp => $self->datetime_now,
42                                 %{$ret->{ADSL}}
43                         });
44                         my $redis = Redis->new;
45                         $redis->sadd( 'poll.adsl.ok' => $cpeip );
46                 } elsif ( $param =~ m/wan/i ) {
47                         $ret->{WAN} = [ $cpeconnect->wan_info ];
48                 } elsif ( $param =~ m/route/i ) {
49                         $ret->{ROUTES} = [ $cpeconnect->route_info ];
50                 } else {
51                         die "unknown param $param";
52                 }
53         };
54
55         return $ret;
56 }
57
58 1;