Merge branch 'devel' of h1dev:/srv/APKPM/
[APKPM.git] / lib / APKPM / CRM.pm
1 package APKPM::CRM;
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 use Redis;
15
16 #$RPC::XML::ENCODING = "utf-8"; # FIXME really used?
17
18 sub prefix { 'CRM_' }
19
20 sub process_name {
21         my ( $self, $orig, $job_name ) = @_;
22         warn "# process_name $orig $job_name\n";
23         return "$orig ($job_name)";
24 }
25
26 sub begin {
27         my ( $self, $job, $workload ) = @_;
28         warn "# begin ", dump( $workload );
29 }
30
31 sub search : Job : Encode(e_json_encode) {
32         my ( $self, $job, $workload ) = @_;
33         warn "# search ",dump($workload);
34
35         my $field = 'USERNAME';
36         my $value = '%' . $workload . '%';
37         ($field,$value) = split(/[:=]/,$workload,2) if $workload =~ m/[:=]/;
38
39         my $cli = RPC::XML::Client->new($self->config('crmxml'));
40         warn "RPC::XML $field $value";
41         my $resp = $cli->send_request('search',RPC::XML::array->new( $field => $value ));
42
43         my $redis = Redis->new;
44         map {
45                 my $key = 'CRM.' . $_->{USERNAME};
46                 $redis->set( $key => $self->e_json($_) );
47                 $redis->expire( $key => 15 * 60 );
48         } @{ $resp->value->[0] };
49
50         return ref $resp ? $resp->value->[0] : { error => $resp };
51 }
52
53 sub e_json_encode {
54         my ($self,$data) = @_;
55         my $json = $self->e_json($data);
56         $json = Encode::decode('utf-8', $json);
57         Encode::from_to($json,'cp1250', 'utf-8');
58         return $json;
59 }
60
61 1;