X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_export%2Fsaisei.pm;h=26d9ac5f46e66d20ff6ef50db2506141af4352dd;hb=9de91f76024959b359e07c20c08497118e1cb895;hp=86e73e09cfb8645643056d8e73168dee0ecb0675;hpb=c7523dbf2f4c44d61fe2ae2f9cc3baf5e32bf73a;p=freeside.git diff --git a/FS/FS/part_export/saisei.pm b/FS/FS/part_export/saisei.pm index 86e73e09c..26d9ac5f4 100644 --- a/FS/FS/part_export/saisei.pm +++ b/FS/FS/part_export/saisei.pm @@ -94,7 +94,7 @@ To use this export, follow the below instructions:
@@ -110,7 +110,7 @@ Create a package for the above created service, and order this package for a cus
Unprovisioning this service will set the host entry at Saisei to the default rate plan with the user and access point set to none. @@ -122,7 +122,7 @@ Clicking on this link will export all services attached to this export not curre
- +Documentation END ); @@ -336,6 +336,7 @@ sub export_tower_sector { }; my $tower_access_point = process_tower($self, $tower_opt); + return $tower_access_point if $tower_access_point->{error}; #get list of all access points my $hash_opt = { @@ -355,10 +356,11 @@ sub export_tower_sector { 'sector_downrate_limit' => $tower_sector->{Hash}->{down_rate_limit}, 'modify_existing' => '1', # modify an existing access point with this info }; - my $sector_access_point = process_sector($self, $sector_opt); + my $sector_access_point = process_sector($self, $sector_opt) unless ($sector_name eq "_default"); + return $sector_access_point if $sector_access_point->{error}; } - return $self->api_error; + return { error => $self->api_error, }; } ## creates the rateplan name @@ -369,7 +371,7 @@ sub get_rateplan_name { my $service_name = $svc_name ? $svc_name : $service_part->{Hash}->{svc}; my $rateplan_name = $service_name . " " . $svc_broadband->{Hash}->{speed_down} . "-" . $svc_broadband->{Hash}->{speed_up}; - $rateplan_name =~ s/\s/_/g; + $rateplan_name =~ s/\s/_/g; $rateplan_name =~ s/[^A-Za-z0-9\-_]//g; return $rateplan_name; } @@ -408,38 +410,39 @@ sub api_call { $client->setHost('http://'.$self->{Hash}->{machine}.':'.$self->option('port')); $client->$method('/rest/top/configurations/running'.$path, $data, { "Content-type" => 'application/json'}); - warn "Response Code is ".$client->responseCode()."\n" if $self->option('debug'); + warn "Saisei Response Code is ".$client->responseCode()."\n" if $self->option('debug'); my $result; if ($client->responseCode() eq '200' || $client->responseCode() eq '201') { eval { $result = decode_json($client->responseContent()) }; unless ($result) { - $self->{'__saisei_error'} = "Error decoding json: $@"; + $self->{'__saisei_error'} = "Error decoding json from Saisei"; + warn "Saisei RC 201 Response Content is not json\n".$client->responseContent()."\n" if $self->option('debug'); return; } } elsif ($client->responseCode() eq '404') { eval { $result = decode_json($client->responseContent()) }; unless ($result) { - $self->{'__saisei_error'} = "Error decoding json: $@"; + $self->{'__saisei_error'} = "Error decoding json from Saisei"; + warn "Saisei RC 404 Response Content is not json\n".$client->responseContent()."\n" if $self->option('debug'); return; } ## check if message is for empty hash. my($does_not_exist) = $result->{message} =~ /'(.*)' does not exist$/; $self->{'__saisei_error'} = "Error ".$result->{message} unless $does_not_exist; - warn "Response Content is\n".$client->responseContent."\n" if ($self->option('debug') && !$does_not_exist); + warn "Saisei Response Content is\n".$client->responseContent."\n" if ($self->option('debug') && !$does_not_exist); return; } elsif ($client->responseCode() eq '500') { $self->{'__saisei_error'} = "Can't connect to host during $method , received responce code: " . $client->responseCode() . " and message: " . $client->responseContent(); - warn "Response Content is\n".$client->responseContent."\n" if $self->option('debug'); + warn "Saisei Response Content is\n".$client->responseContent."\n" if $self->option('debug'); return; } else { $self->{'__saisei_error'} = "Bad response from server during $method , received responce code: " . $client->responseCode() . " and message: " . $client->responseContent(); -# unless ($method eq "GET"); - warn "Response Content is\n".$client->responseContent."\n" if $self->option('debug'); + warn "Saisei Response Content is\n".$client->responseContent."\n" if $self->option('debug'); return; } @@ -536,7 +539,7 @@ sub api_get_host { my $get_host = $self->api_call("GET", "/hosts/$ip"); - return $self->api_error if $self->api_error; + return { message => $self->api_error, } if $self->api_error; return $get_host; } @@ -662,7 +665,6 @@ Creates a access point. sub api_create_accesspoint { my ($self,$accesspoint, $upratelimit, $downratelimit) = @_; - # this has not been tested, but should work, if needed. my $new_accesspoint = $self->api_call( "PUT", "/access_points/$accesspoint", @@ -791,6 +793,11 @@ sub api_delete_host_to_user { sub process_tower { my ($self, $opt) = @_; + if (!$opt->{tower_uprate_limit} || !$opt->{tower_downrate_limit}) { + $self->{'__saisei_error'} = "Can not export tower, no up or down rates attached to tower"; + return { error => $self->api_error, }; + } + my $existing_tower_ap; my $tower_name = $opt->{tower_name}; @@ -803,23 +810,29 @@ sub process_tower { '', # tower does not have a uplink on sectors. $opt->{tower_uprate_limit}, $opt->{tower_downrate_limit}, - ) if $existing_tower_ap && $opt->{modify_existing}; + ) if $existing_tower_ap->{collection} && $opt->{modify_existing}; #if tower does not exist as an access point create it. $self->api_create_accesspoint( $tower_name, $opt->{tower_uprate_limit}, - $opt->{tower_downrate_limit} - ) unless $existing_tower_ap; + $opt->{tower_downrate_limit}, + ) unless $existing_tower_ap->{collection}; my $accesspoint = $self->api_get_accesspoint($tower_name); + return { error => $self->api_error, } if $self->api_error; return $accesspoint; } sub process_sector { my ($self, $opt) = @_; + if (!$opt->{sector_uprate_limit} || !$opt->{sector_downrate_limit}) { + $self->{'__saisei_error'} = "Can not export sector, no up or down rates attached to sector"; + return { error => $self->api_error, }; + } + my $existing_sector_ap; my $sector_name = $opt->{sector_name}; @@ -847,6 +860,7 @@ sub process_sector { # set access point to existing one or newly created one. my $accesspoint = $existing_sector_ap ? $existing_sector_ap : $self->api_get_accesspoint($sector_name); + return { error => $self->api_error, } if $self->api_error; return $accesspoint; } @@ -874,10 +888,10 @@ sub process_virtual_ap { $opt->{virtual_downrate_limit}, ) unless $existing_virtual_ap; -my $update_sector; -if ($existing_virtual_ap && (ref $existing_virtual_ap->{collection}->[0]->{uplink} eq "HASH") && ($existing_virtual_ap->{collection}->[0]->{uplink}->{link}->{name} ne $opt->{sector_name})) { - $update_sector = 1; -} + my $update_sector; + if ($existing_virtual_ap && (ref $existing_virtual_ap->{collection}->[0]->{uplink} eq "HASH") && ($existing_virtual_ap->{collection}->[0]->{uplink}->{link}->{name} ne $opt->{sector_name})) { + $update_sector = 1; + } # Attach newly created virtual ap to tower sector ap or if sector has changed. $self->api_modify_accesspoint($virtual_name, $opt->{sector_name}) unless ($self->{'__saisei_error'} || ($existing_virtual_ap && !$update_sector));