extract CPE_vendor_ip_username
authorDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 28 Nov 2011 13:09:04 +0000 (14:09 +0100)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 28 Nov 2011 13:09:08 +0000 (14:09 +0100)
This will be used to poll bitstram users

lib/APKPM/CPE.pm

index 4601f77..18388a7 100644 (file)
@@ -83,8 +83,6 @@ sub info : Job : Decode(d_array) : Encode(e_json) {
 
        my ( $ip, $username, $vendor ) = @$workload;
        
-       my ( $ret );
-
        my $redis = Redis->new;
 
        return { error => "invalid workload", expected => "ip username" } unless $ip && $username;
@@ -118,29 +116,43 @@ sub info : Job : Decode(d_array) : Encode(e_json) {
                $vendor = undef;
        }
 
-       if ( $vendor ) {
-               $redis->sadd( "CPE.$vendor.queued" => $ip );
-
-               my $module = 'H1::' . $vendor;
-               $ret = eval { $module->info( $ip ) };
-
-               warn "# $module ",dump($ret);
-
-               if ( $ret ) {
-                       $self->do_background_json( 'Store_insert', {
-                               _table => 'cpe_' . $vendor,
-                               ip => $ip,
-                               username => $username,
-                               timestamp => $self->datetime_now,
-                               h => $ret,
-                       });
-                       $redis->sadd( "CPE.$vendor.ok" => $ip );
-               } else {
-                       $redis->sadd( "CPE.$vendor.error" => $ip );
-               }
-       }
+       my $ret = $self->_vendor( $vendor, $ip, $username, $redis ) if $vendor;
 
        return { ip => $ip, rtt => $rtt, h => $ret };
 }
 
+sub vendor_ip_user : Job : Encode(e_json) {
+       my ( $self, $job, $workload ) = @_;
+       my ( $vendor, $ip, $username ) = split(/\s+/,$workload);
+
+       $self->_vendor( $vendor, $ip, $username );
+}
+
+sub _vendor {
+       my ( $self, $vendor, $ip, $username, $redis ) = @_;
+
+       $redis ||= Redis->new;
+
+       $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 => 'cpe_' . $vendor,
+                       ip => $ip,
+                       username => $username,
+                       timestamp => $self->datetime_now,
+                       h => $ret,
+               });
+               $redis->sadd( "CPE.$vendor.ok" => $ip );
+       } else {
+               $redis->sadd( "CPE.$vendor.error" => $ip );
+       }
+
+       return $ret;
+}
 1;