modify schema for new CPE stats
[APKPM.git] / lib / APKPM / LDAP.pm
1 package APKPM::LDAP;
2
3 use base qw(Gearman::Driver::Worker);
4 use Moose;
5 use Time::HiRes;
6 use Data::Dump qw(dump);
7 use Regexp::Common qw(net);
8
9 with 'APKPM::Config';
10 with 'APKPM::Gearman';
11
12 use Net::LDAP;
13
14 sub prefix { 'LDAP_' }
15
16 sub process_name {
17         my ( $self, $orig, $job_name ) = @_;
18         warn "# process_name $orig $job_name\n";
19         return "$orig ($job_name)";
20 }
21
22 sub search : Job : Encode(e_json) : MinProcesses(0) {
23         my ( $self, $job, $workload ) = @_;
24
25         my $filter =
26                 $workload =~ m/$RE{net}{IPv4}/ ? "dhcpStatements=fixed-address $workload" :
27                 $workload =~ m/\w+=/ ? $workload : # have filter specified
28                 "cn=*$workload*" ; # defailt: search for user
29         ;
30         warn "# search ",dump($filter);
31
32         my $ldap = Net::LDAP->new($self->config('ldaphost')) or die $@;
33         my $mesg = $ldap->bind($self->config('ldapusername'),Password => $self->config('ldappasswd'));
34 #       $mesg = $ldap->search(base => $self->config('ldapbase'), filter => $filter);
35         $mesg = $ldap->search(base => 'cn=clientnetVoD,cn=Dhcp,ou=Servers,dc=portus,dc=isp' , filter => $filter);
36         warn "# found ", $mesg->count, " entries";
37         my $entries = [];
38         for ( my $i = 0; $i < $mesg->count; $i++ ) {
39                 my $entry = $mesg->entry($i);
40                 my $e = { dn => $entry->dn };
41                 foreach my $attr ( $entry->attributes ) {
42                         $e->{$attr} = join("\n", $entry->get_value($attr));
43                 }
44                 push @$entries, $e;
45         }
46 #       warn "## entries = ",dump $entries;
47         return $entries;
48 }
49
50 1;