1ff40f28bab1bb16f791572f36b8453e307c8176
[APKPM.git] / lib / APKPM / EasyGateway.pm
1 package APKPM::EasyGateway;
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 use SOAP::Lite;
14
15 sub prefix { 'EasyGateway_' }
16
17 sub info : Job : Encode(e_json) {
18         my ( $self, $job, $workload ) = @_;
19         warn "# workload = ", dump $workload;
20
21         my $ip = $workload;
22
23         return { error => "invalid workload", expected => 'cpe.ip', workload => $workload } unless $ip;
24
25         my $ret;
26
27         my $soap = SOAP::Lite
28                 ->service('http://10.99.0.74:9090/cpews/services/Cpe112DiagnosisSoapImpl?WSDL');
29
30         my $out = $soap->getWanDslStatus( "IP=$ip" );
31
32         $ret->{$_} = $out->{$_} foreach keys %$out;
33
34         my $out = $soap->getCpeBasicInfo( "IP=$ip" ); # mac, username, uptime
35
36         foreach ( keys %$out ) {
37                 next unless defined $out->{$_}; # skip undef values
38                 $ret->{$_} = $out->{$_};
39         }
40
41         $self->do_background_json( 'Store_insert', {
42                 _table => 'easygateway',
43                 ip => $ip,
44                 username => $ret->{customerName},
45                 timestamp => $self->datetime_now,
46                 h => $self->to_hstore( $ret ),
47         });
48
49         my $redis = Redis->new;
50         $redis->sadd( 'CPE.EasyGateway.ok' => $ip );
51
52         return $ret;
53 }
54
55 1;