X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_export%2Fsaisei.pm;h=6fb504f8261d523e0f88508e081b7c888178c772;hb=7afd80e3dfcaa34b04f693c40949d7408f7a7ac1;hp=f76051ea3361dd9487e2fd6ef8d6329305a95ffe;hpb=5f9edcbe9fb3b3eb905614927aa6120d50c06ff1;p=freeside.git diff --git a/FS/FS/part_export/saisei.pm b/FS/FS/part_export/saisei.pm index f76051ea3..6fb504f82 100644 --- a/FS/FS/part_export/saisei.pm +++ b/FS/FS/part_export/saisei.pm @@ -9,6 +9,7 @@ use MIME::Base64; use REST::Client; use Data::Dumper; use FS::Conf; +use Carp qw(carp); =pod @@ -24,40 +25,52 @@ Saisei integration for Freeside This export offers basic svc_broadband provisioning for Saisei. -This is a customer integration with Saisei. This will setup a rate plan and tie -the rate plan to a host and access point via the Saisei API when the broadband service is provisioned. -It will also untie the rate plan via the API upon unprovisioning of the broadband service. - -Add a new export and fill out required fields: -
+This will create and modify the rate plans at Saisei as soon as the broadband service attached to this export is created or modified. +This will also create and modify an access point at Saisei as soon as the tower is created or modified.
-Add a new export and fill out required fields: -
+
+
+
-When you provision the service, enter the ip address associated to this service. -Select the Tower and Sector for it's access point. +
-When the service is provisioned it will auto setup the rate plan. +Unprovisioning this service will set the host entry at Saisei to the default rate plan with the user and access point set to none. +
+
+Documentation
END
);
sub _export_insert {
my ($self, $svc_broadband) = @_;
- my $service_part = FS::Record::qsearchs( 'part_svc', { 'svcpart' => $svc_broadband->{Hash}->{svcpart} } );
- my $rateplan_name = $service_part->{Hash}->{svc};
- $rateplan_name =~ s/\s/_/g;
-
- # load needed info from our end
- my $cust_main = $svc_broadband->cust_main;
- return "Could not load service customer" unless $cust_main;
- my $conf = new FS::Conf;
-
- # get policy list
- my $policies = $self->api_get_policies();
+ my $rateplan_name = $self->get_rateplan_name($svc_broadband);
# check for existing rate plan
my $existing_rateplan;
@@ -115,7 +137,8 @@ sub _export_insert {
# if no existing rate plan create one and modify it.
$self->api_create_rateplan($svc_broadband, $rateplan_name) unless $existing_rateplan;
- $self->api_modify_rateplan($policies->{collection}, $svc_broadband, $rateplan_name) unless ($self->{'__saisei_error'} || $existing_rateplan);
+ $self->api_modify_rateplan($svc_broadband, $rateplan_name) unless ($self->{'__saisei_error'} || $existing_rateplan);
+ return $self->api_error if $self->{'__saisei_error'};
# set rateplan to existing one or newly created one.
my $rateplan = $existing_rateplan ? $existing_rateplan : $self->api_get_rateplan($rateplan_name);
@@ -125,7 +148,6 @@ sub _export_insert {
if (!$username) {
$self->{'__saisei_error'} = 'no username - can not export';
- warn "No user $username\n" if $self->option('debug');
return $self->api_error;
}
else {
@@ -135,66 +157,72 @@ sub _export_insert {
# if no existing user create one.
$self->api_create_user($username, $description) unless $existing_user;
+ return $self->api_error if $self->{'__saisei_error'};
# set user to existing one or newly created one.
my $user = $existing_user ? $existing_user : $self->api_get_user($username);
- ## add access point ?
+ ## add access point
my $tower_sector = FS::Record::qsearchs({
'table' => 'tower_sector',
'select' => 'tower.towername,
- tower.up_rate as toweruprate,
- tower.down_rate as towerdownrate,
+ tower.up_rate_limit as tower_upratelimit,
+ tower.down_rate_limit as tower_downratelimit,
tower_sector.sectorname,
- tower_sector.up_rate as sectoruprate,
- tower_sector.down_rate as sectordownrate ',
+ tower_sector.up_rate_limit as sector_upratelimit,
+ tower_sector.down_rate_limit as sector_downratelimit ',
'addl_from' => 'LEFT JOIN tower USING ( towernum )',
'hashref' => {
'sectornum' => $svc_broadband->{Hash}->{sectornum},
},
});
- my $existing_tower_ap;
my $tower_name = $tower_sector->{Hash}->{towername};
$tower_name =~ s/\s/_/g;
- #check if tower has been set up as an access point.
- $existing_tower_ap = $self->api_get_accesspoint($tower_name) unless $self->{'__saisei_error'};;
+ my $tower_opt = {
+ 'tower_name' => $tower_name,
+ 'tower_uprate_limit' => $tower_sector->{Hash}->{tower_upratelimit},
+ 'tower_downrate_limit' => $tower_sector->{Hash}->{tower_downratelimit},
+ };
- #if tower does not exist as an access point create it.
- $self->api_create_accesspoint(
- $tower_name,
- $tower_sector->{Hash}->{toweruprate},
- $tower_sector->{Hash}->{towerdownrate}
- ) unless $existing_tower_ap;
+ my $tower_ap = process_tower($self, $tower_opt);
+ return $self->api_error if $self->{'__saisei_error'};
- my $existing_sector_ap;
my $sector_name = $tower_sector->{Hash}->{sectorname};
$sector_name =~ s/\s/_/g;
- #check if sector has been set up as an access point.
- $existing_sector_ap = $self->api_get_accesspoint($sector_name);
-
- #if sector does not exist as an access point create it.
- $self->api_create_accesspoint(
- $sector_name,
- $tower_sector->{Hash}->{sectoruprate},
- $tower_sector->{Hash}->{sectordownrate},
- $tower_name,
- ) unless $existing_sector_ap;
-
- # Attach newly created sector to it's tower.
- $self->api_modify_accesspoint($sector_name, $tower_name) unless ($self->{'__saisei_error'} || $existing_sector_ap);
+ my $sector_opt = {
+ 'tower_name' => $tower_name,
+ 'sector_name' => $sector_name,
+ 'sector_uprate_limit' => $tower_sector->{Hash}->{sector_upratelimit},
+ 'sector_downrate_limit' => $tower_sector->{Hash}->{sector_downratelimit},
+ };
+ my $accesspoint = process_sector($self, $sector_opt);
+ return $self->api_error if $self->{'__saisei_error'};
+
+## get custnum and pkgpart from cust_pkg for virtual access point
+ my $cust_pkg = FS::Record::qsearchs({
+ 'table' => 'cust_pkg',
+ 'hashref' => { 'pkgnum' => $svc_broadband->{Hash}->{pkgnum}, },
+ });
+ my $virtual_ap_name = $cust_pkg->{Hash}->{custnum}.'_'.$cust_pkg->{Hash}->{pkgpart}.'_'.$svc_broadband->{Hash}->{speed_down}.'_'.$svc_broadband->{Hash}->{speed_up};
- # set access point to existing one or newly created one.
- my $accesspoint = $existing_sector_ap ? $existing_sector_ap : $self->api_get_accesspoint($sector_name);
+ my $virtual_ap_opt = {
+ 'virtual_name' => $virtual_ap_name,
+ 'sector_name' => $sector_name,
+ 'virtual_uprate_limit' => $svc_broadband->{Hash}->{speed_up},
+ 'virtual_downrate_limit' => $svc_broadband->{Hash}->{speed_down},
+ };
+ my $virtual_ap = process_virtual_ap($self, $virtual_ap_opt);
+ return $self->api_error if $self->{'__saisei_error'};
## tie host to user add sector name as access point.
$self->api_add_host_to_user(
$user->{collection}->[0]->{name},
$rateplan->{collection}->[0]->{name},
$svc_broadband->{Hash}->{ip_addr},
- $accesspoint->{collection}->[0]->{name},
+ $virtual_ap->{collection}->[0]->{name},
) unless $self->{'__saisei_error'};
}
@@ -203,44 +231,151 @@ sub _export_insert {
}
sub _export_replace {
- my ($self, $svc_phone) = @_;
- return '';
+ my ($self, $svc_broadband) = @_;
+ my $error = $self->_export_insert($svc_broadband);
+ return $error;
}
sub _export_delete {
my ($self, $svc_broadband) = @_;
- my $cust_main = $svc_broadband->cust_main;
- return "Could not load service customer" unless $cust_main;
- my $conf = new FS::Conf;
-
- my $rateplan_name = $svc_broadband->{Hash}->{description};
- $rateplan_name =~ s/\s/_/g;
+ my $rateplan_name = $self->get_rateplan_name($svc_broadband);
- my @email = map { $_->emailaddress } FS::Record::qsearch({
- 'table' => 'cust_contact',
- 'select' => 'emailaddress',
- 'addl_from' => ' JOIN contact_email USING (contactnum)',
- 'hashref' => { 'custnum' => $cust_main->{Hash}->{custnum}, },
- });
- my $username = $email[0];
+ my $username = $svc_broadband->{Hash}->{svcnum};
- ## tie host to user
+ ## untie host to user
$self->api_delete_host_to_user($username, $rateplan_name, $svc_broadband->{Hash}->{ip_addr}) unless $self->{'__saisei_error'};
return '';
}
sub _export_suspend {
- my ($self, $svc_phone) = @_;
+ my ($self, $svc_broadband) = @_;
return '';
}
sub _export_unsuspend {
- my ($self, $svc_phone) = @_;
+ my ($self, $svc_broadband) = @_;
return '';
}
+sub export_partsvc {
+ my ($self, $svc_part) = @_;
+
+ if ( $FS::svc_Common::noexport_hack ) {
+ carp 'export_partsvc() suppressed by noexport_hack'
+ if $self->option('debug');
+ return;
+ }
+
+ my $fcc_477_speeds;
+ if ($svc_part->{Hash}->{svc_broadband__speed_down} eq "down" || $svc_part->{Hash}->{svc_broadband__speed_up} eq "up") {
+ for my $type (qw( down up )) {
+ my $speed_type = "broadband_".$type."stream";
+ foreach my $pkg_svc (FS::Record::qsearch({
+ 'table' => 'pkg_svc',
+ 'select' => 'pkg_svc.*, part_pkg_fcc_option.fccoptionname, part_pkg_fcc_option.optionvalue',
+ 'addl_from' => ' LEFT JOIN part_pkg_fcc_option USING (pkgpart) ',
+ 'extra_sql' => " WHERE pkg_svc.svcpart = ".$svc_part->{Hash}->{svcpart}." AND pkg_svc.quantity > 0 AND part_pkg_fcc_option.fccoptionname = '".$speed_type."'",
+ })) { $fcc_477_speeds->{
+ $pkg_svc->{Hash}->{pkgpart}}->{$speed_type} = $pkg_svc->{Hash}->{optionvalue} * 1000 unless !$pkg_svc->{Hash}->{optionvalue}; }
+ }
+ }
+ else {
+ $fcc_477_speeds->{1}->{broadband_downstream} = $svc_part->{Hash}->{"svc_broadband__speed_down"};
+ $fcc_477_speeds->{1}->{broadband_upstream} = $svc_part->{Hash}->{"svc_broadband__speed_up"};
+ }
+
+ foreach my $key (keys %$fcc_477_speeds) {
+
+ $svc_part->{Hash}->{speed_down} = $fcc_477_speeds->{$key}->{broadband_downstream};
+ $svc_part->{Hash}->{speed_up} = $fcc_477_speeds->{$key}->{broadband_upstream};
+ $svc_part->{Hash}->{svc_broadband__speed_down} = $fcc_477_speeds->{$key}->{broadband_downstream};
+ $svc_part->{Hash}->{svc_broadband__speed_up} = $fcc_477_speeds->{$key}->{broadband_upstream};
+
+ my $temp_svc = $svc_part->{Hash};
+ my $svc_broadband = {};
+ map { if ($_ =~ /^svc_broadband__(.*)$/) { $svc_broadband->{Hash}->{$1} = $temp_svc->{$_}; } } keys %$temp_svc;
+
+ my $rateplan_name = $self->get_rateplan_name($svc_broadband, $svc_part->{Hash}->{svc});
+
+ # check for existing rate plan
+ my $existing_rateplan;
+ $existing_rateplan = $self->api_get_rateplan($rateplan_name) unless $self->{'__saisei_error'};
+
+ # Modify the existing rate plan with new service data.
+ $self->api_modify_existing_rateplan($svc_broadband, $rateplan_name) unless ($self->{'__saisei_error'} || !$existing_rateplan);
+
+ # if no existing rate plan create one and modify it.
+ $self->api_create_rateplan($svc_broadband, $rateplan_name) unless $existing_rateplan;
+ $self->api_modify_rateplan($svc_part, $rateplan_name) unless ($self->{'__saisei_error'} || $existing_rateplan);
+
+ }
+
+ return $self->api_error;
+
+}
+
+sub export_tower_sector {
+ my ($self, $tower) = @_;
+
+ if ( $FS::svc_Common::noexport_hack ) {
+ carp 'export_tower_sector() suppressed by noexport_hack'
+ if $self->option('debug');
+ return;
+ }
+
+ #modify tower or create it.
+ my $tower_name = $tower->{Hash}->{towername};
+ $tower_name =~ s/\s/_/g;
+ my $tower_opt = {
+ 'tower_name' => $tower_name,
+ 'tower_uprate_limit' => $tower->{Hash}->{up_rate_limit},
+ 'tower_downrate_limit' => $tower->{Hash}->{down_rate_limit},
+ 'modify_existing' => '1', # modify an existing access point with this info
+ };
+
+ 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 = {
+ 'table' => 'tower_sector',
+ 'select' => '*',
+ 'hashref' => { 'towernum' => $tower->{Hash}->{towernum}, },
+ };
+
+ #for each one modify or create it.
+ foreach my $tower_sector ( FS::Record::qsearch($hash_opt) ) {
+ my $sector_name = $tower_sector->{Hash}->{sectorname};
+ $sector_name =~ s/\s/_/g;
+ my $sector_opt = {
+ 'tower_name' => $tower_name,
+ 'sector_name' => $sector_name,
+ 'sector_uprate_limit' => $tower_sector->{Hash}->{up_rate_limit},
+ '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) unless ($sector_name eq "_default");
+ return $sector_access_point if $sector_access_point->{error};
+ }
+
+ return { error => $self->api_error, };
+}
+
+## creates the rateplan name
+sub get_rateplan_name {
+ my ($self, $svc_broadband, $svc_name) = @_;
+
+ my $service_part = FS::Record::qsearchs( 'part_svc', { 'svcpart' => $svc_broadband->{Hash}->{svcpart} } ) unless $svc_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/[^A-Za-z0-9\-_]//g;
+
+ return $rateplan_name;
+}
+
=head1 Saisei API
These methods allow access to the Saisei API using the credentials
@@ -259,35 +394,55 @@ Returns empty on failure; retrieve error messages using L.
sub api_call {
my ($self,$method,$path,$params) = @_;
+
$self->{'__saisei_error'} = '';
my $auth_info = $self->option('username') . ':' . $self->option('password');
$params ||= {};
warn "Calling $method on http://"
.$self->{Hash}->{machine}.':'.$self->option('port')
- ."/rest/stm/configurations/running/$path\n" if $self->option('debug');
+ ."/rest/top/configurations/running/$path\n" if $self->option('debug');
my $data = encode_json($params) if keys %{ $params };
my $client = REST::Client->new();
$client->addHeader("Authorization", "Basic ".encode_base64($auth_info));
$client->setHost('http://'.$self->{Hash}->{machine}.':'.$self->option('port'));
- $client->$method('/rest/stm/configurations/running'.$path, $data, { "Content-type" => 'application/json'});
+ $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'} = "There was an error decoding the JSON data from Saisei. Bad JSON data logged in error log if debug option was set.";
+ 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'} = "There was an error decoding the JSON data from Saisei. Bad JSON data logged in error log if debug option was set.";
+ 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'} = "Saisei Error: ".$result->{message} unless $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'} = "Could not connect to the host (".$self->{Hash}->{machine}.':'.$self->option('port').") during $method , we received the responce code: " . $client->responseCode();
+ warn "Saisei Response Content is\n".$client->responseContent."\n" if $self->option('debug');
+ return;
+ }
else {
- $self->{'__saisei_error'} = "Bad response from server during $method: " . $client->responseContent();
- warn "Response Content is\n".$client->responseContent."\n" if $self->option('debug');
+ $self->{'__saisei_error'} = "Received Bad response from server during $method , we received responce code: " . $client->responseCode();
+ warn "Saisei Response Content is\n".$client->responseContent."\n" if $self->option('debug');
return;
}
@@ -318,10 +473,10 @@ sub api_get_policies {
my $get_policies = $self->api_call("GET", '/policies/?token=1&order=name&start=0&limit=20&select=name%2Cpercent_rate%2Cassured%2C');
return if $self->api_error;
- $self->{'__saisei_error'} = "Did not receive any global policies"
+ $self->{'__saisei_error'} = "Did not receive any global policies from Saisei."
unless $get_policies;
- return $get_policies;
+ return $get_policies->{collection};
}
=head2 api_get_rateplan
@@ -336,8 +491,6 @@ sub api_get_rateplan {
my $get_rateplan = $self->api_call("GET", "/rate_plans/$rateplan");
return if $self->api_error;
- $self->{'__saisei_error'} = "Did not receive any rateplan info"
- unless $get_rateplan;
return $get_rateplan;
}
@@ -354,8 +507,6 @@ sub api_get_user {
my $get_user = $self->api_call("GET", "/users/$user");
return if $self->api_error;
- $self->{'__saisei_error'} = "Did not receive any user info"
- unless $get_user;
return $get_user;
}
@@ -372,12 +523,27 @@ sub api_get_accesspoint {
my $get_accesspoint = $self->api_call("GET", "/access_points/$accesspoint");
return if $self->api_error;
- $self->{'__saisei_error'} = "Did not receive any access point info"
- unless $get_accesspoint;
return $get_accesspoint;
}
+=head2 api_get_host
+
+Gets user info for specific host.
+
+=cut
+
+sub api_get_host {
+ my $self = shift;
+ my $ip = shift;
+
+ my $get_host = $self->api_call("GET", "/hosts/$ip");
+
+ return { message => $self->api_error, } if $self->api_error;
+
+ return $get_host;
+}
+
=head2 api_create_rateplan
Creates a rateplan.
@@ -387,6 +553,9 @@ Creates a rateplan.
sub api_create_rateplan {
my ($self, $svc, $rateplan) = @_;
+ $self->{'__saisei_error'} = "There is no download speed set for the service $rateplan with host (".$svc->{Hash}->{ip_addr}."). All services that are to be exported to Saisei need to have a download speed set for them." if !$svc->{Hash}->{speed_down};
+ $self->{'__saisei_error'} = "There is no upload speed set for the service $rateplan with host (".$svc->{Hash}->{ip_addr}."). All services that are to be exported to Saisei need to have a upload speed set for them." if !$svc->{Hash}->{speed_up};
+
my $new_rateplan = $self->api_call(
"PUT",
"/rate_plans/$rateplan",
@@ -394,22 +563,26 @@ sub api_create_rateplan {
'downstream_rate' => $svc->{Hash}->{speed_down},
'upstream_rate' => $svc->{Hash}->{speed_up},
},
- );
+ ) unless $self->{'__saisei_error'};
+
+ $self->{'__saisei_error'} = "Saisei could not create the rate plan $rateplan."
+ unless ($new_rateplan || $self->{'__saisei_error'});
- $self->{'__saisei_error'} = "Rate Plan not created"
- unless $new_rateplan; # should never happen
return $new_rateplan;
}
=head2 api_modify_rateplan
-Modify a rateplan.
+Modify a new rateplan.
=cut
sub api_modify_rateplan {
- my ($self,$policies,$svc,$rateplan_name) = @_;
+ my ($self,$svc,$rateplan_name) = @_;
+
+ # get policy list
+ my $policies = $self->api_get_policies();
foreach my $policy (@$policies) {
my $policyname = $policy->{name};
@@ -425,8 +598,8 @@ sub api_modify_rateplan {
},
);
- $self->{'__saisei_error'} = "Rate Plan not modified"
- unless $modified_rateplan; # should never happen
+ $self->{'__saisei_error'} = "Saisei could not modify the rate plan $rateplan_name after it was created."
+ unless ($modified_rateplan || $self->{'__saisei_error'}); # should never happen
}
@@ -434,6 +607,31 @@ sub api_modify_rateplan {
}
+=head2 api_modify_existing_rateplan
+
+Modify a existing rateplan.
+
+=cut
+
+sub api_modify_existing_rateplan {
+ my ($self,$svc,$rateplan_name) = @_;
+
+ my $modified_rateplan = $self->api_call(
+ "PUT",
+ "/rate_plans/$rateplan_name",
+ {
+ 'downstream_rate' => $svc->{Hash}->{speed_down},
+ 'upstream_rate' => $svc->{Hash}->{speed_up},
+ },
+ );
+
+ $self->{'__saisei_error'} = "Saisei could not modify the rate plan $rateplan_name."
+ unless ($modified_rateplan || $self->{'__saisei_error'}); # should never happen
+
+ return;
+
+}
+
=head2 api_create_user
Creates a user.
@@ -451,8 +649,8 @@ sub api_create_user {
},
);
- $self->{'__saisei_error'} = "User not created"
- unless $new_user; # should never happen
+ $self->{'__saisei_error'} = "Saisei could not create the user $user"
+ unless ($new_user || $self->{'__saisei_error'}); # should never happen
return $new_user;
@@ -465,34 +663,33 @@ Creates a access point.
=cut
sub api_create_accesspoint {
- my ($self,$accesspoint, $uprate, $downrate) = @_;
+ 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",
{
- 'downstream_rate_limit' => $downrate,
- 'upstream_rate_limit' => $uprate,
+ 'downstream_rate_limit' => $downratelimit,
+ 'upstream_rate_limit' => $upratelimit,
},
);
- $self->{'__saisei_error'} = "Access point not created"
- unless $new_accesspoint; # should never happen
+ $self->{'__saisei_error'} = "Saisei could not create the access point $accesspoint"
+ unless ($new_accesspoint || $self->{'__saisei_error'}); # should never happen
return;
}
=head2 api_modify_accesspoint
-Modify a access point.
+Modify a new access point.
=cut
sub api_modify_accesspoint {
my ($self, $accesspoint, $uplink) = @_;
- my $modified_rateplan = $self->api_call(
+ my $modified_accesspoint = $self->api_call(
"PUT",
"/access_points/$accesspoint",
{
@@ -500,8 +697,34 @@ sub api_modify_accesspoint {
},
);
- $self->{'__saisei_error'} = "Rate Plan not modified"
- unless $modified_rateplan; # should never happen
+ $self->{'__saisei_error'} = "Saisei could not modify the access point $accesspoint after it was created."
+ unless ($modified_accesspoint || $self->{'__saisei_error'}); # should never happen
+
+ return;
+
+}
+
+=head2 api_modify_existing_accesspoint
+
+Modify a existing accesspoint.
+
+=cut
+
+sub api_modify_existing_accesspoint {
+ my ($self, $accesspoint, $uplink, $upratelimit, $downratelimit) = @_;
+
+ my $modified_accesspoint = $self->api_call(
+ "PUT",
+ "/access_points/$accesspoint",
+ {
+ 'downstream_rate_limit' => $downratelimit,
+ 'upstream_rate_limit' => $upratelimit,
+# 'uplink' => $uplink, # name of attached access point
+ },
+ );
+
+ $self->{'__saisei_error'} = "Saisei could not modify the access point $accesspoint."
+ unless ($modified_accesspoint || $self->{'__saisei_error'}); # should never happen
return;
@@ -526,8 +749,8 @@ sub api_add_host_to_user {
},
);
- $self->{'__saisei_error'} = "Host not created"
- unless $new_host; # should never happen
+ $self->{'__saisei_error'} = "Saisei could not create the host $ip"
+ unless ($new_host || $self->{'__saisei_error'}); # should never happen
return $new_host;
@@ -535,7 +758,8 @@ sub api_add_host_to_user {
=head2 api_delete_host_to_user
-unties host to user and rateplan.
+unties host from user and rateplan.
+this will set the host entry at Saisei to the default rate plan with the user and access point set to