buseniss logic and store data in PostgreSQL using hstore
[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 with 'APKPM::Gearman::Client';
11
12 use H1::ZTEDSLAM;
13 use H1::ZTEMSAN;
14
15 use Data::Dumper;
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 $crm_results = $self->do('CRM_search' => $workload);
43
44         my $crm = $crm_results->[0];
45         warn "ERROR: more than one result from CRM, using first ", dump($crm_results)
46                 if $#$crm_results > 0;
47
48         warn "# crm ",dump $crm;
49
50         my $time = $self->datetime_now;
51
52         my $module = 'H1::' . $crm->{TIP_UREDJAJA};
53
54         warn "# eval $module";
55         my $hash;
56         eval { $hash = $module->hash( $crm->{IP_UREDAJA}, $crm->{SHELF_SLOT_PORT} ) };
57         return { error => $@ } if $@;
58
59         warn "# hash ",dump $hash;
60         local $Data::Dumper::Useqq = 1; # double quote for PostgreSQL
61         my $h = Dumper($hash);
62         $h =~ s/\s+/ /gs;
63         $h =~ s/^\$\w+\s*=\s*{\s*//s;
64         $h =~ s/\s*}\s*;\s*$//s;
65
66         $self->do_background_json( 'Store_insert', {
67                 _table => 'dslam_h',
68                 ip => $crm->{IP_MANAGEMENT}, # FIXME IP_UREDAJA ?
69                 username => $crm->{USERNAME},
70                 timestamp => $time,
71                 h => $h,
72         });
73
74         return $hash;
75 }
76
77 1;