MT#58896 possibility to include redis registrations in customer exporter

Change-Id: I2dfdab69fdf116ad128706ec4296e492f8224868
mr12.2.1
Rene Krenn 2 years ago
parent 660c532733
commit 38a6857546

@ -10,6 +10,7 @@ use NGCP::BulkProcessor::Logging qw(
use NGCP::BulkProcessor::ConnectorPool qw(
get_billing_db
destroy_dbs
);
use NGCP::BulkProcessor::SqlProcessor qw(

@ -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;
}

@ -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;

@ -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
}
}

@ -99,7 +99,7 @@ SKIP:
},
multithreading => 1,
numofthreads => 4,
load_recursive => { _entries => 1, },
load_recursive => { entries => 1, },
);
}

@ -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 =

@ -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;

@ -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;

Loading…
Cancel
Save