Merge branch 'devel' of h1dev:/srv/APKPM/
[APKPM.git] / lib / APKPM / LDAP.pm
index 29308d1..2dbad19 100644 (file)
@@ -10,6 +10,7 @@ with 'APKPM::Config';
 with 'APKPM::Gearman';
 
 use Net::LDAP;
+use Redis;
 
 sub prefix { 'LDAP_' }
 
@@ -19,7 +20,7 @@ sub process_name {
        return "$orig ($job_name)";
 }
 
-sub search : Job : Encode(e_json) {
+sub search : Job : Encode(e_json) : MinProcesses(0) {
        my ( $self, $job, $workload ) = @_;
 
        my $filter =
@@ -35,13 +36,33 @@ sub search : Job : Encode(e_json) {
        $mesg = $ldap->search(base => 'cn=clientnetVoD,cn=Dhcp,ou=Servers,dc=portus,dc=isp' , filter => $filter);
        warn "# found ", $mesg->count, " entries";
        my $entries = [];
+
+       my $redis = Redis->new;
+
        for ( my $i = 0; $i < $mesg->count; $i++ ) {
                my $entry = $mesg->entry($i);
                my $e = { dn => $entry->dn };
                foreach my $attr ( $entry->attributes ) {
                        $e->{$attr} = join("\n", $entry->get_value($attr));
+                       if ( $attr =~ m/dhcpOption/ ) {
+                               my $vendor = (
+                                       grep { /vendor-class-identifier/ }
+                                       $entry->get_value($attr)
+                               )[0];
+                               $vendor =~ s/^\S+\s+\"([^"]+)\"/$1/;
+                               $e->{_cpe_vendor} = $vendor;
+                               $e->{_cpe_parser} =
+                                       $vendor =~ m/SAMSUNG/ ? 'Davolink' :
+                                       $vendor =~ m/zte/     ? 'EasyGateway' :
+                                       undef;
+                       }
                }
                push @$entries, $e;
+
+               my $key = 'LDAP.' . $e->{cn};
+               $redis->set( $key => $self->e_json($e) );
+               $redis->expire( $key => 15 * 60 );
+
        }
 #      warn "## entries = ",dump $entries;
        return $entries;