diff --git a/lib/NGCP/BulkProcessor/Dao/Trunk/billing/voip_subscribers.pm b/lib/NGCP/BulkProcessor/Dao/Trunk/billing/voip_subscribers.pm index 8621d91..d359b5b 100644 --- a/lib/NGCP/BulkProcessor/Dao/Trunk/billing/voip_subscribers.pm +++ b/lib/NGCP/BulkProcessor/Dao/Trunk/billing/voip_subscribers.pm @@ -10,6 +10,7 @@ use NGCP::BulkProcessor::Logging qw( use NGCP::BulkProcessor::ConnectorPool qw( get_billing_db + destroy_dbs ); use NGCP::BulkProcessor::SqlProcessor qw( diff --git a/lib/NGCP/BulkProcessor/Dao/Trunk/provisioning/voip_subscribers.pm b/lib/NGCP/BulkProcessor/Dao/Trunk/provisioning/voip_subscribers.pm index 0fd0f3d..d970921 100644 --- a/lib/NGCP/BulkProcessor/Dao/Trunk/provisioning/voip_subscribers.pm +++ b/lib/NGCP/BulkProcessor/Dao/Trunk/provisioning/voip_subscribers.pm @@ -20,6 +20,8 @@ use NGCP::BulkProcessor::SqlProcessor qw( ); use NGCP::BulkProcessor::SqlRecord qw(); +use NGCP::BulkProcessor::NoSqlConnectors::RedisEntry qw(); + require Exporter; our @ISA = qw(Exporter NGCP::BulkProcessor::SqlRecord); our @EXPORT_OK = qw( @@ -237,6 +239,10 @@ sub buildrecords_fromrows { $record->load_relation($load_recursive,'voip_fax_destinations','NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_fax_destinations::findby_subscriberid',$record->{id},$load_recursive); $record->load_relation($load_recursive,'profile','NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_subscriber_profiles::findby_id',$record->{profile_id},$load_recursive); + + $record->load_relation($load_recursive,'voip_domain','NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_domains::findby_id',$record->{domain_id},$load_recursive); + + NGCP::BulkProcessor::NoSqlConnectors::RedisEntry::load_relation($record,$load_recursive,'registrations','NGCP::BulkProcessor::Redis::Trunk::location::usrdom::get_usrdom_by_username_domain',$record->{username},($record->{voip_domain} ? $record->{voip_domain}->{domain} : undef),$load_recursive); push @records,$record; } diff --git a/lib/NGCP/BulkProcessor/NoSqlConnectors/RedisEntry.pm b/lib/NGCP/BulkProcessor/NoSqlConnectors/RedisEntry.pm index d1fa77a..192c77e 100644 --- a/lib/NGCP/BulkProcessor/NoSqlConnectors/RedisEntry.pm +++ b/lib/NGCP/BulkProcessor/NoSqlConnectors/RedisEntry.pm @@ -5,6 +5,8 @@ use strict; use Tie::IxHash; +use NGCP::BulkProcessor::Utils qw(load_module); + require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw( @@ -203,4 +205,61 @@ sub copy_value { return $entry; } +sub load_relation { + my $self = shift; + my ($load_recursive,$relation,$findby,@findby_args) = @_; + if ($load_recursive and 'HASH' eq ref $load_recursive and length($relation)) { + my $relation_path; + my $relation_path_backup = $load_recursive->{_relation_path}; + if (length($relation_path_backup)) { + $relation_path = $relation_path_backup . '.' . $relation; + } else { + no strict "refs"; ## no critic (ProhibitNoStrict) + $relation_path = ((ref $self) . '::gettablename')->() . '.' . $relation; + } + my $include = $load_recursive->{$relation_path}; + my $filter; + my $transform; + if ('HASH' eq ref $include) { + $filter = $include->{filter}; + $transform = $include->{transform}; + if (exists $include->{include}) { + $include = $include->{include}; + } elsif ($transform or $filter) { + $include = 1; + } + } + if (('CODE' eq ref $include and $include->($self)) + or (not ref $include and $include)) { + load_module($findby); + no strict "refs"; ## no critic (ProhibitNoStrict) + $load_recursive->{_relation_path} = $relation_path; + $self->{$relation} = $findby->(@findby_args); + if ('ARRAY' eq ref $self->{$relation} + and 'CODE' eq ref $filter) { + my $closure = _closure($filter,$load_recursive->{_context}); + $self->{$relation} = [ grep { $closure->($_); } @{$self->{$relation}}]; + } + if ('CODE' eq ref $transform) { + my $closure = _closure($transform,$load_recursive->{_context}); + $self->{$relation} = $closure->($self->{$relation}); + } + $load_recursive->{_relation_path} = $relation_path_backup; + return 1; + } + } + return 0; +} + +sub _closure { + my ($sub,$context) = @_; + return sub { + foreach my $key (keys %$context) { + no strict "refs"; ## no critic (ProhibitNoStrict) + *{"main::$key"} = $context->{$key} if 'CODE' eq ref $context->{$key}; + } + return $sub->(@_,$context); + }; +} + 1; diff --git a/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/Process.pm b/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/Process.pm index acaf212..538a499 100644 --- a/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/Process.pm +++ b/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/Process.pm @@ -42,6 +42,7 @@ use NGCP::BulkProcessor::ConnectorPool qw( use NGCP::BulkProcessor::Projects::Massive::RegistrationMonitoring::Dao::Location qw(); use NGCP::BulkProcessor::Dao::Trunk::billing::voip_subscribers qw(); +use NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_domains qw(); use NGCP::BulkProcessor::Redis::Trunk::location::usrdom qw(); @@ -199,6 +200,9 @@ sub load_registrations_all { $warning_count += $context->{warning_count}; } }, + load_recursive => { 'voip_subscribers.provisioning_voip_subscriber.voip_domain' => 1, + 'voip_subscribers.provisioning_voip_subscriber.registrations' => 1, + 'voip_subscribers.provisioning_voip_subscriber' => 1, }, multithreading => $load_registrations_multithreading, numofthreads => $load_registrations_numofthreads, ),$warning_count); @@ -244,9 +248,9 @@ sub _load_registrations_file_init_context() { $context->{domain} = $domain; my @registrations = (); my $result = 1; - $context->{usrdom} = NGCP::BulkProcessor::Redis::Trunk::location::usrdom::get_usrdom_by_username_domain($context->{username},$context->{domain},{ _entries => 1, }); + $context->{usrdom} = NGCP::BulkProcessor::Redis::Trunk::location::usrdom::get_usrdom_by_username_domain($context->{username},$context->{domain},{ entries => 1, }); if ($context->{usrdom}) { - foreach my $entry (@{$context->{usrdom}->{_entries}}) { + foreach my $entry (@{$context->{usrdom}->{entries}}) { push(@registrations,$entry); # if expiry > now } } @@ -259,13 +263,15 @@ sub _load_registrations_file_init_context() { sub _load_registrations_all_init_context() { my ($context,$prov_subscriber) = @_; - $context->{username} = $prov_subscriber->{username}; - $context->{domain} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_domains::findby_id($prov_subscriber->{domain_id})->{domain}; + #$context->{username} = $prov_subscriber->{username}; + #$context->{domain} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_domains::findby_id($prov_subscriber->{domain_id})->{domain}; + ##$context->{domain} = $context->{domain}->{domain} if $context->{domain}; my @registrations = (); my $result = 1; - $context->{usrdom} = NGCP::BulkProcessor::Redis::Trunk::location::usrdom::get_usrdom_by_username_domain(lc($context->{username}),$context->{domain},{ _entries => 1, }); - if ($context->{usrdom}) { - foreach my $entry (@{$context->{usrdom}->{_entries}}) { + #$context->{usrdom} = NGCP::BulkProcessor::Redis::Trunk::location::usrdom::get_usrdom_by_username_domain(lc($context->{username}),$context->{domain},{ entries => 1, }); + #if ($context->{usrdom}) { + if ($prov_subscriber->{registrations}) { + foreach my $entry (@{$prov_subscriber->{registrations}->{entries}}) { push(@registrations,$entry); # if expiry > now } } diff --git a/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/Redis.t b/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/Redis.t index 178ce7b..1579a68 100644 --- a/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/Redis.t +++ b/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/Redis.t @@ -99,7 +99,7 @@ SKIP: }, multithreading => 1, numofthreads => 4, - load_recursive => { _entries => 1, }, + load_recursive => { entries => 1, }, ); } diff --git a/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/config.debug.cfg b/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/config.debug.cfg index 9850a3b..5872464 100644 --- a/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/config.debug.cfg +++ b/lib/NGCP/BulkProcessor/Projects/Massive/RegistrationMonitoring/config.debug.cfg @@ -7,35 +7,35 @@ enablemultithreading = 1 jobservers = 127.0.0.1:4730 ##NGCP MySQL connectivity - "accounting" db: -accounting_host = 192.168.0.146 +accounting_host = 192.168.56.57 accounting_port = 3306 accounting_databasename = accounting accounting_username = root accounting_password = ##NGCP MySQL connectivity - "billing" db: -billing_host = 192.168.0.146 +billing_host = 192.168.56.57 billing_port = 3306 billing_databasename = billing billing_username = root billing_password = ##NGCP MySQL connectivity - "provisioning" db: -provisioning_host = 192.168.0.146 +provisioning_host = 192.168.56.57 provisioning_port = 3306 provisioning_databasename = provisioning provisioning_username = root provisioning_password = ##NGCP MySQL connectivity - "kamailio" db: -kamailio_host = 192.168.0.146 +kamailio_host = 192.168.56.57 kamailio_port = 3306 kamailio_databasename = kamailio kamailio_username = root kamailio_password = ##NGCP MySQL connectivity - default db for distributed transactions (XA) to connect to: -xa_host = 192.168.0.146 +xa_host = 192.168.56.57 xa_port = 3306 xa_databasename = ngcp xa_username = root @@ -50,7 +50,7 @@ ngcprestapi_realm = api_admin_http ##NGCP Redis connectivity - "location" store: location_databaseindex = 20 #location_password = -location_host = 192.168.0.146 +location_host = 192.168.56.57 location_port = 6379 #location_sock = diff --git a/lib/NGCP/BulkProcessor/Redis/Trunk/location/entry.pm b/lib/NGCP/BulkProcessor/Redis/Trunk/location/entry.pm index 5af5e11..ae78fd2 100644 --- a/lib/NGCP/BulkProcessor/Redis/Trunk/location/entry.pm +++ b/lib/NGCP/BulkProcessor/Redis/Trunk/location/entry.pm @@ -20,6 +20,7 @@ require Exporter; our @ISA = qw(Exporter NGCP::BulkProcessor::NoSqlConnectors::RedisEntry); our @EXPORT_OK = qw( get_entry + get_entries get_entry_by_ruid process_keys ); @@ -81,6 +82,20 @@ sub get_entry { } +sub get_entries { + + my ($keys,$load_recursive) = @_; + my $store = &$get_store(); + + my @entries = (); + foreach my $key (@$keys) { + push(@entries,get_entry($key,$load_recursive)); + } + + return \@entries; + +} + sub get_entry_by_ruid { my ($ruid,$load_recursive) = @_; @@ -159,5 +174,11 @@ sub process_keys { ); } +sub gettablename { + + return $table; + +} + 1; diff --git a/lib/NGCP/BulkProcessor/Redis/Trunk/location/usrdom.pm b/lib/NGCP/BulkProcessor/Redis/Trunk/location/usrdom.pm index 3d22684..792693f 100644 --- a/lib/NGCP/BulkProcessor/Redis/Trunk/location/usrdom.pm +++ b/lib/NGCP/BulkProcessor/Redis/Trunk/location/usrdom.pm @@ -16,7 +16,7 @@ use NGCP::BulkProcessor::NoSqlConnectors::RedisEntry qw( copy_value ); -use NGCP::BulkProcessor::Redis::Trunk::location::entry qw(); +#use NGCP::BulkProcessor::Redis::Trunk::location::entry qw(); require Exporter; our @ISA = qw(Exporter NGCP::BulkProcessor::NoSqlConnectors::RedisEntry); @@ -101,17 +101,20 @@ sub transformitem { my ($item,$load_recursive) = @_; # transformations go here ... - if ($load_recursive) { - $load_recursive = {} unless ref $load_recursive; - my $field = "_entries"; - if ($load_recursive->{$field}) { - my @entries = (); - foreach my $element (keys %{$item->getvalue()}) { - push(@entries,NGCP::BulkProcessor::Redis::Trunk::location::entry::get_entry($element,$load_recursive)); - } - $item->{$field} = \@entries; - } - } + + #if ($load_recursive) { + # $load_recursive = {} unless ref $load_recursive; + # my $field = "_entries"; + # if ($load_recursive->{$field}) { + # my @entries = (); + # foreach my $element (keys %{$item->getvalue()}) { + # push(@entries,NGCP::BulkProcessor::Redis::Trunk::location::entry::get_entry($element,$load_recursive)); + # } + # $item->{$field} = \@entries; + # } + #} + + $item->load_relation($load_recursive,'_entries','NGCP::BulkProcessor::Redis::Trunk::location::entry::get_entries',[ keys %{$item->getvalue()} ],$load_recursive); } @@ -156,5 +159,11 @@ sub process_keys { ); } +sub gettablename { + + return $table; + +} + 1;