X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fpart_export%2Fprizm.pm;h=99644895165a330d3eac4c85d8ff6d31adec972b;hp=75b10a763e16d79eb5ebd0664350051ad519ac36;hb=1ad547a47f16b4230762e752fbe48d460ed997e1;hpb=df82b9e2945a50797d72ea42d6c75f869e6c5959 diff --git a/FS/FS/part_export/prizm.pm b/FS/FS/part_export/prizm.pm index 75b10a763..996448951 100644 --- a/FS/FS/part_export/prizm.pm +++ b/FS/FS/part_export/prizm.pm @@ -1,12 +1,13 @@ package FS::part_export::prizm; -use vars qw(@ISA %info %options $DEBUG); +use vars qw(@ISA %info %options $DEBUG $me); use Tie::IxHash; use FS::Record qw(fields dbh); use FS::part_export; @ISA = qw(FS::part_export); -$DEBUG = 1; +$DEBUG = 0; +$me = '[' . __PACKAGE__ . ']'; tie %options, 'Tie::IxHash', 'url' => { label => 'Northbound url', default=>'https://localhost:8443/prizm/nbi' }, @@ -78,11 +79,12 @@ possibly harmful. EOT %info = ( - 'svc' => 'svc_broadband', - 'desc' => 'Real-time export to Northbound Interface', - 'options' => \%options, - 'nodomain' => 'Y', - 'notes' => $notes, + 'svc' => 'svc_broadband', + 'desc' => 'Real-time export to Northbound Interface', + 'options' => \%options, + 'nodomain' => 'Y', + 'no_machine' => 1, + 'notes' => $notes, ); sub prizm_command { @@ -125,6 +127,9 @@ sub queued_prizm_command { # subroutine sub _export_insert { my( $self, $svc ) = ( shift, shift ); + warn "$me: _export_insert called for export ". $self->exportnum. + " on service ". $svc->svcnum. "\n" + if $DEBUG; my $cust_main = $svc->cust_svc->cust_pkg->cust_main; @@ -151,6 +156,7 @@ sub _export_insert { my $pcustomer; if ($err_or_som->result->[0]) { $pcustomer = $err_or_som->result->[0]->customerId; + warn "$me: found customer $pcustomer in prizm\n" if $DEBUG; }else{ my $chashref = $cust_main->hashref; my $customerinfo = { @@ -177,6 +183,7 @@ sub _export_insert { unless ref($err_or_som); $pcustomer = $err_or_som->result; + warn "$me: added customer $pcustomer to prizm\n" if $DEBUG; } warn "multiple prizm customers found for $cust_main->custnum" if scalar(@$pcustomer) > 1; @@ -200,6 +207,32 @@ sub _export_insert { # } # } +# here we cope with a problem of prizm failing to insert for reason +# of duplicate mac addr, but doing so inconsistently... a race in prizm? + + $self->prizm_command( 'CustomerIfService', 'removeElementFromCustomer', + 0, + $cust_main->custnum, + 0, + $svc->mac_addr, + ); + + $err_or_som = $self->prizm_command( 'NetworkIfService', 'getPrizmElements', + [ 'MAC Address' ], + [ $svc->mac_addr ], + [ '=' ], + ); + if ( ref($err_or_som) && $err_or_som->result->[0] ) { # ignore errors + $self->prizm_command( 'NetworkIfService', 'deleteElement', + $err_or_som->result->[0], + 1, + ); + } +# end of coping + + my $performance_profile = $svc->performance_profile; + $performance_profile ||= $svc->cust_svc->cust_pkg->part_pkg->pkg; + my $element_name_length = 50; $element_name_length = $1 if $self->option('element_name_length') =~ /^\s*(\d+)\s*$/; @@ -210,13 +243,14 @@ sub _export_insert { 0, $element_name_length), $location, $contact, - sprintf("%032X", $svc->authkey), - $svc->cust_svc->cust_pkg->part_pkg->pkg, + sprintf("%032X", $svc->authkey || 0), + $performance_profile, $svc->vlan_profile, ($self->option('ems') ? 1 : 0 ), ); return $err_or_som unless ref($err_or_som); + warn "$me: added provisioned element to prizm\n" if $DEBUG; my (@names) = ('Management IP', 'GPS Latitude', @@ -244,6 +278,7 @@ sub _export_insert { ); return $err_or_som unless ref($err_or_som); + warn "$me: set element configuration\n" if $DEBUG; $err_or_som = $self->prizm_command('NetworkIfService', 'setElementConfigSet', [ $element ], @@ -253,15 +288,17 @@ sub _export_insert { ); return $err_or_som unless ref($err_or_som); + warn "$me: set element vlan profile\n" if $DEBUG; $err_or_som = $self->prizm_command('NetworkIfService', 'setElementConfigSet', [ $element ], - $svc->cust_svc->cust_pkg->part_pkg->pkg, + $performance_profile, 0, 1, ); return $err_or_som unless ref($err_or_som); + warn "$me: set element configset (performance profile)\n" if $DEBUG; $err_or_som = $self->prizm_command('NetworkIfService', 'activateNetworkElements', @@ -272,6 +309,7 @@ sub _export_insert { return $err_or_som unless ref($err_or_som); + warn "$me: activated element\n" if $DEBUG; $err_or_som = $self->prizm_command('CustomerIfService', 'addElementToCustomer', @@ -283,6 +321,7 @@ sub _export_insert { return $err_or_som unless ref($err_or_som); + warn "$me: added element to customer\n" if $DEBUG; ''; } @@ -395,6 +434,18 @@ sub _export_replace { return $err_or_som unless ref($err_or_som); + my $performance_profile = $new->performance_profile; + $performance_profile ||= $new->cust_svc->cust_pkg->part_pkg->pkg; + + $err_or_som = $self->prizm_command('NetworkIfService', 'setElementConfigSet', + [ $element ], + $performance_profile, + 0, + 1, + ); + return $err_or_som + unless ref($err_or_som); + ''; } @@ -466,7 +517,8 @@ sub _export_unsuspend { sub export_links { my( $self, $svc, $arrayref ) = ( shift, shift, shift ); - push @$arrayref, 'SM'; + push @$arrayref, + 'SM'; ''; }