From e7ed4d79c6b5087afef523fe84b3d30d975de3f3 Mon Sep 17 00:00:00 2001 From: Rene Krenn Date: Mon, 22 Jul 2019 17:35:40 +0200 Subject: [PATCH] TT#63528 CCS importer: clear CFU for subs with "1:1" routing type Change-Id: I27d19da4629041127ff2fa5317f5b62de06e89fa --- .../Massive/Generator/config.debug.cfg | 10 +-- .../Massive/Generator/settings.debug.cfg | 6 +- .../Projects/Migration/UPCAT/Provisioning.pm | 78 ++++++++++--------- .../Projects/Migration/UPCAT/config.debug.cfg | 10 +-- .../Projects/Migration/UPCAT/process.pl | 33 ++++++++ .../Migration/UPCAT/settings.debug.cfg | 2 +- 6 files changed, 90 insertions(+), 49 deletions(-) diff --git a/lib/NGCP/BulkProcessor/Projects/Massive/Generator/config.debug.cfg b/lib/NGCP/BulkProcessor/Projects/Massive/Generator/config.debug.cfg index b7e135e..a2862e9 100644 --- a/lib/NGCP/BulkProcessor/Projects/Massive/Generator/config.debug.cfg +++ b/lib/NGCP/BulkProcessor/Projects/Massive/Generator/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.29 +accounting_host = 192.168.0.212 accounting_port = 3306 accounting_databasename = accounting accounting_username = root accounting_password = ##NGCP MySQL connectivity - "billing" db: -billing_host = 192.168.0.29 +billing_host = 192.168.0.212 billing_port = 3306 billing_databasename = billing billing_username = root billing_password = ##NGCP MySQL connectivity - "provisioning" db: -provisioning_host = 192.168.0.29 +provisioning_host = 192.168.0.212 provisioning_port = 3306 provisioning_databasename = provisioning provisioning_username = root provisioning_password = ##NGCP MySQL connectivity - "kamailio" db: -kamailio_host = 192.168.0.29 +kamailio_host = 192.168.0.212 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.29 +xa_host = 192.168.0.212 xa_port = 3306 xa_databasename = ngcp xa_username = root diff --git a/lib/NGCP/BulkProcessor/Projects/Massive/Generator/settings.debug.cfg b/lib/NGCP/BulkProcessor/Projects/Massive/Generator/settings.debug.cfg index 264d126..2331dc1 100644 --- a/lib/NGCP/BulkProcessor/Projects/Massive/Generator/settings.debug.cfg +++ b/lib/NGCP/BulkProcessor/Projects/Massive/Generator/settings.debug.cfg @@ -8,10 +8,12 @@ webpassword_length = 8 webusername_length = 8 sippassword_length = 16 sipusername_length = 8 -provision_subscriber_count = 1000 +provision_subscriber_count = 5 +#1000 providers_yml = providers.yml generate_cdr_multithreading = 1 #generate_cdr_numofthreads = 2 -generate_cdr_count = 10 +generate_cdr_count = 50000 +#10 diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/Provisioning.pm b/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/Provisioning.pm index 574d1af..1a3196e 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/Provisioning.pm +++ b/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/Provisioning.pm @@ -116,6 +116,7 @@ our @EXPORT_OK = qw( provision_ccs_subscribers $UPDATE_CCS_PREFERENCES_MODE $SET_CCS_CF_MODE + $CLEAR_CCS_CF_MODE ); my $split_ipnets_pattern = join('|',( @@ -133,6 +134,7 @@ my $ccs_contact_identifier_field = 'gpp9'; our $UPDATE_CCS_PREFERENCES_MODE = 'update_ccs_preferences'; our $SET_CCS_CF_MODE = 'set_ccs_cf'; +our $CLEAR_CCS_CF_MODE = 'clear_ccs_cf'; my $cf_types_pattern = '^' . $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_cf_mappings::CFB_TYPE . '|' . $NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_cf_mappings::CFT_TYPE . '|' @@ -1153,6 +1155,8 @@ sub _provision_ccs_susbcriber { _update_ccs_preferences($context); } elsif ($update_mode eq $SET_CCS_CF_MODE) { _set_callforwards($context); + } elsif ($update_mode eq $CLEAR_CCS_CF_MODE) { + _set_callforwards($context,1); } else { _warn($context,$context->{prov_subscriber}->{username} . ': ' . (scalar @$existing_billing_voip_subscribers) . ' existing billing subscribers found, skipping'); } @@ -1752,49 +1756,51 @@ sub _set_registrations { sub _set_callforwards { - my ($context) = @_; + my ($context,$clear) = @_; my $result = 1; foreach my $type (keys %{$context->{callforwards}}) { - NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_cf_mappings::delete_cfmappings($context->{db}, - $context->{prov_subscriber}->{id},{ '=' => $type }); - - my $destination_set_id = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_cf_destination_sets::insert_row($context->{db},{ - subscriber_id => $context->{prov_subscriber}->{id}, - name => "quickset_$type", - }); - foreach my $callforward (@{$context->{callforwards}->{$type}}) { - $callforward->{id} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_cf_destinations::insert_row($context->{db},{ - %$callforward, + _info($context,"$type deleted",1) + if NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_cf_mappings::delete_cfmappings($context->{db}, + $context->{prov_subscriber}->{id},{ '=' => $type }); + unless ($clear) { + my $destination_set_id = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_cf_destination_sets::insert_row($context->{db},{ + subscriber_id => $context->{prov_subscriber}->{id}, + name => "quickset_$type", + }); + foreach my $callforward (@{$context->{callforwards}->{$type}}) { + $callforward->{id} = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_cf_destinations::insert_row($context->{db},{ + %$callforward, + destination_set_id => $destination_set_id, + }); + } + my $cf_mapping_id = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_cf_mappings::insert_row($context->{db},{ + subscriber_id => $context->{prov_subscriber}->{id}, + type => $type, destination_set_id => $destination_set_id, + #time_set_id }); - } - my $cf_mapping_id = NGCP::BulkProcessor::Dao::Trunk::provisioning::voip_cf_mappings::insert_row($context->{db},{ - subscriber_id => $context->{prov_subscriber}->{id}, - type => $type, - destination_set_id => $destination_set_id, - #time_set_id - }); - - $context->{preferences}->{$type} = { id => set_subscriber_preference($context, - $context->{prov_subscriber}->{id}, - $context->{attributes}->{$type}, - $cf_mapping_id), value => $cf_mapping_id }; - if (defined $context->{ringtimeout}) { - $context->{preferences}->{ringtimeout} = { id => set_subscriber_preference($context, + $context->{preferences}->{$type} = { id => set_subscriber_preference($context, $context->{prov_subscriber}->{id}, - $context->{attributes}->{ringtimeout}, - $context->{ringtimeout}), value => $context->{ringtimeout} }; + $context->{attributes}->{$type}, + $cf_mapping_id), value => $cf_mapping_id }; + + if (defined $context->{ringtimeout}) { + $context->{preferences}->{ringtimeout} = { id => set_subscriber_preference($context, + $context->{prov_subscriber}->{id}, + $context->{attributes}->{ringtimeout}, + $context->{ringtimeout}), value => $context->{ringtimeout} }; + } + _info($context,"$type created (destination(s) " . join(', ',(map { $_->{destination}; } @{$context->{callforwards}->{$type}})) . ")",1); + + $context->{callforwards}->{$type} = { + destination_set => { + destinations => $context->{callforwards}->{$type}, + id => $destination_set_id, + }, + id => $cf_mapping_id, + }; } - _info($context,"$type created (destination(s) " . join(', ',(map { $_->{destination}; } @{$context->{callforwards}->{$type}})) . ")",1); - - $context->{callforwards}->{$type} = { - destination_set => { - destinations => $context->{callforwards}->{$type}, - id => $destination_set_id, - }, - id => $cf_mapping_id, - }; } return $result; diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/config.debug.cfg b/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/config.debug.cfg index bd050a0..45455b2 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/config.debug.cfg +++ b/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/config.debug.cfg @@ -7,35 +7,35 @@ enablemultithreading = 0 jobservers = 127.0.0.1:4730 ##NGCP MySQL connectivity - "accounting" db: -accounting_host = 192.168.0.29 +accounting_host = 192.168.174.130 accounting_port = 3306 accounting_databasename = accounting accounting_username = root accounting_password = ##NGCP MySQL connectivity - "billing" db: -billing_host = 192.168.0.29 +billing_host = 192.168.174.130 billing_port = 3306 billing_databasename = billing billing_username = root billing_password = ##NGCP MySQL connectivity - "provisioning" db: -provisioning_host = 192.168.0.29 +provisioning_host = 192.168.174.130 provisioning_port = 3306 provisioning_databasename = provisioning provisioning_username = root provisioning_password = ##NGCP MySQL connectivity - "kamailio" db: -kamailio_host = 192.168.0.29 +kamailio_host = 192.168.174.130 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.29 +xa_host = 192.168.174.130 xa_port = 3306 xa_databasename = ngcp xa_username = root diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/process.pl b/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/process.pl index 4aecec4..4e250c8 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/process.pl +++ b/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/process.pl @@ -95,6 +95,7 @@ use NGCP::BulkProcessor::Projects::Migration::UPCAT::Provisioning qw( provision_ccs_subscribers $UPDATE_CCS_PREFERENCES_MODE $SET_CCS_CF_MODE + $CLEAR_CCS_CF_MODE ); scripterror(getscriptpath() . ' already running',getlogger(getscriptpath())) unless flock DATA, LOCK_EX | LOCK_NB; # not tested on windows yet @@ -134,6 +135,8 @@ push(@TASK_OPTS,$update_ccs_subscriber_preferences_task_opt); my $set_ccs_subscriber_cf_task_opt = 'set_ccs_subscriber_cf'; push(@TASK_OPTS,$set_ccs_subscriber_cf_task_opt); +my $clear_ccs_subscriber_cf_task_opt = 'clear_ccs_subscriber_cf'; +push(@TASK_OPTS,$clear_ccs_subscriber_cf_task_opt); if (init()) { main(); @@ -226,6 +229,13 @@ sub main() { $completion |= 1; } + } elsif (lc($clear_ccs_subscriber_cf_task_opt) eq lc($task)) { + if (taskinfo($clear_ccs_subscriber_cf_task_opt,$result,1)) { + next unless check_dry(); + $result &= clear_ccs_subscriber_cf_task(\@messages); + $completion |= 1; + } + } else { $result = 0; scripterror("unknow task option '" . $task . "', must be one of " . join(', ',@TASK_OPTS),getlogger(getscriptpath())); @@ -567,6 +577,29 @@ sub set_ccs_subscriber_cf_task { return $result; } +sub clear_ccs_subscriber_cf_task { + my ($messages) = @_; + my ($result,$warning_count) = (0,0); + eval { + ($result,$warning_count) = provision_ccs_subscribers($CLEAR_CCS_CF_MODE); + }; + my $err = $@; + my $stats = ": $warning_count warnings"; + eval { + $stats .= "\n total contracts: " . + NGCP::BulkProcessor::Dao::Trunk::billing::contracts::countby_status_resellerid(undef,undef) . ' rows'; + $stats .= "\n total subscribers: " . + NGCP::BulkProcessor::Dao::Trunk::billing::voip_subscribers::countby_status_resellerid(undef,undef) . ' rows'; + }; + if ($err or !$result) { + push(@$messages,"clear ccs subscriber callforwards INCOMPLETE$stats"); + } else { + push(@$messages,"clear ccs subscribers callforwards completed$stats"); + } + destroy_all_dbs(); + return $result; +} + #END { # # this should not be required explicitly, but prevents Log4Perl's # # "rootlogger not initialized error upon exit.. diff --git a/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/settings.debug.cfg b/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/settings.debug.cfg index 79f674e..4691dfd 100644 --- a/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/settings.debug.cfg +++ b/lib/NGCP/BulkProcessor/Projects/Migration/UPCAT/settings.debug.cfg @@ -37,7 +37,7 @@ provision_ccs_subscriber_multithreading = 1 provision_ccs_subscriber_numofthreads = 2 ccs_reseller_name = default ccs_billing_profile_name = Default Billing Profile -ccs_domain = 192.168.0.29 +ccs_domain = 192.168.174.130 #10.15.19.193 #d20.upc.at #in-ivr.upc.at