<OL>
<LI>
Create a new service definition and set the table to svc_broadband. The service name will become the Saisei rate plan name.
-Set the upload and download speed for the service. This is required to be able to export the service to Saisei.
+Set the upload speed, download speed, and tower to be required for the service. This is required to be able to export the service to Saisei.
Attach this Saisei export to this service.
</LI>
<P>
</LI>
<P>
<LI>
-Provision the service, making sure to enter the IP address associated with this service and select the tower and sector for it's access point.
+Provision the service, making sure to enter the IP address associated with this service, the upload and download speed are correct, and select the tower and sector for it's access point.
This provisioned service will then be exported as a host to Saisei.
<P>
Unprovisioning this service will set the host entry at Saisei to the default rate plan with the user and access point set to <i>none</i>.
</LI>
</OL>
<P>
-
+<A HREF="http://www.freeside.biz/mediawiki/index.php/Saisei_provisioning_export" target="_new">Documentation</a>
END
);
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;
}
$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'} = "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'} = "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 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);
+ $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'} = "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');
+ $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 , received responce code: " . $client->responseCode() . " and message: " . $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;
}
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->{collection};
sub api_create_rateplan {
my ($self, $svc, $rateplan) = @_;
- $self->{'__saisei_error'} = "No downrate listed for service $rateplan" if !$svc->{Hash}->{speed_down};
- $self->{'__saisei_error'} = "No uprate listed for service $rateplan" if !$svc->{Hash}->{speed_up};
+ $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",
},
) unless $self->{'__saisei_error'};
- $self->{'__saisei_error'} = "Rate Plan not created"
+ $self->{'__saisei_error'} = "Saisei could not create the rate plan $rateplan."
unless ($new_rateplan || $self->{'__saisei_error'});
return $new_rateplan;
},
);
- $self->{'__saisei_error'} = "Rate Plan not modified after create"
+ $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
}
},
);
- $self->{'__saisei_error'} = "Rate Plan not modified"
+ $self->{'__saisei_error'} = "Saisei could not modify the rate plan $rateplan_name."
unless ($modified_rateplan || $self->{'__saisei_error'}); # should never happen
return;
},
);
- $self->{'__saisei_error'} = "User not created"
+ $self->{'__saisei_error'} = "Saisei could not create the user $user"
unless ($new_user || $self->{'__saisei_error'}); # should never happen
return $new_user;
},
);
- $self->{'__saisei_error'} = "Access point not created"
+ $self->{'__saisei_error'} = "Saisei could not create the access point $accesspoint"
unless ($new_accesspoint || $self->{'__saisei_error'}); # should never happen
return;
},
);
- $self->{'__saisei_error'} = "Rate Plan not modified"
+ $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;
},
);
- $self->{'__saisei_error'} = "Access point not modified"
+ $self->{'__saisei_error'} = "Saisei could not modify the access point $accesspoint."
unless ($modified_accesspoint || $self->{'__saisei_error'}); # should never happen
return;
},
);
- $self->{'__saisei_error'} = "Host not created"
+ $self->{'__saisei_error'} = "Saisei could not create the host $ip"
unless ($new_host || $self->{'__saisei_error'}); # should never happen
return $new_host;
my $default_rate_plan = $self->api_call("GET", '?token=1&select=default_rate_plan');
return if $self->api_error;
- $self->{'__saisei_error'} = "Did not receive a default rate plan"
+ $self->{'__saisei_error'} = "Can not delete the host as Saisei did not return a default rate plan. Please make sure Saisei has a default rateplan setup."
unless $default_rate_plan;
my $default_rateplan_name = $default_rate_plan->{collection}->[0]->{default_rate_plan}->{link}->{name};
},
);
- $self->{'__saisei_error'} = "Host not created"
+ $self->{'__saisei_error'} = "Saisei could not delete the host $ip"
unless ($delete_host || $self->{'__saisei_error'}); # should never happen
return $delete_host;
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";
+ $self->{'__saisei_error'} = "Could not export tower ".$opt->{tower_name}." because there was no up or down rates attached to the tower. Saisei requires a up and down rate be attached to each tower.";
return { error => $self->api_error, };
}
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";
+ $self->{'__saisei_error'} = "Could not export sector ".$opt->{tower_name}." because there was no up or down rates attached to the sector. Saisei requires a up and down rate be attached to each sector.";
return { error => $self->api_error, };
}
my $param = shift;
my $part_export = FS::Record::qsearchs('part_export', { 'exportnum' => $param->{export_provisioned_services_exportnum}, } )
- or die "unknown exportnum $param->{export_provisioned_services_exportnum}";
+ or die "You are trying to use an unknown exportnum $param->{export_provisioned_services_exportnum}. This export does not exist.\n";
bless $part_export;
my @svcparts = FS::Record::qsearch({
if ($status{$process_count}) { my $s = $status{$process_count}; $job->update_statustext($s); }
## check if service exists as host if not export it.
my $host = api_get_host($part_export, $svc->{Hash}->{ip_addr});
- die $host->{message} if $host->{message};
+ die ("Please double check your credentials as ".$host->{message}."\n") if $host->{message};
warn "Exporting service ".$svc->{Hash}->{ip_addr}."\n" if ($part_export->option('debug'));
my $export_error = _export_insert($part_export,$svc) unless $host->{collection};
- die $export_error if $export_error;
+ if ($export_error) {
+ warn "Error exporting service ".$svc->{Hash}->{ip_addr}."\n" if ($part_export->option('debug'));
+ die ("$export_error\n");
+ }
$process_count++;
}