simple DSPAM search
[APKPM.git] / lib / APKPM / DSLAM.pm
1 package APKPM::DSLAM;
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';
10
11 require RPC::XML;
12 require RPC::XML::Client;
13 use Encode;
14
15 #$RPC::XML::ENCODING = "utf-8"; # FIXME really used?
16
17 sub prefix { 'DSLAM_' }
18
19 sub process_name {
20         my ( $self, $orig, $job_name ) = @_;
21         warn "# process_name $orig $job_name\n";
22         return "$orig ($job_name)";
23 }
24
25 sub begin {
26         my ( $self, $job, $workload ) = @_;
27         warn "# begin ", dump( $workload );
28 }
29
30 sub search : Job : Encode(e_json_encode) {
31         my ( $self, $job, $workload ) = @_;
32         warn "# search ",dump($workload);
33
34         my ($field,$value);
35
36         if ( $workload =~ m/[:=]/ ) {
37                 ($field,$value) = split(/[:=]/,$workload,2)
38         } else {
39                 return { error => 'invalid workload', expected => 'OPT_82:%' };
40         }
41
42         my $cli = RPC::XML::Client->new($self->config('crmxml'));
43         warn "RPC::XML $field $value";
44         my $resp = $cli->send_request('ports',RPC::XML::array->new( $field => $value ));
45         return ref $resp ? $resp->value->[0] : { error => $resp };
46 }
47
48 sub e_json_encode {
49         my ($self,$data) = @_;
50         my $json = $self->e_json($data);
51         $json = Encode::decode('utf-8', $json);
52         Encode::from_to($json,'cp1250', 'utf-8');
53         return $json;
54 }
55
56 1;