blob: 583b666d46b97d16e8962eea09616a4bf8ad8fcc [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* global define, module, require, exports */
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(['jquery',
'nf.Dialog',
'nf.Common'],
function ($, nfDialog, nfCommon) {
return (nf.ErrorHandler = factory($, nfDialog, nfCommon));
});
} else if (typeof exports === 'object' && typeof module === 'object') {
module.exports = (nf.ErrorHandler = factory(require('jquery'),
require('nf.Dialog'),
require('nf.Common')));
} else {
nf.ErrorHandler = factory(root.$,
root.nf.Dialog,
root.nf.Common);
}
}(this, function ($, nfDialog, nfCommon) {
'use strict';
var self = {
/**
* Method for handling ajax errors.
*
* @argument {object} xhr The XmlHttpRequest
* @argument {string} status The status of the request
* @argument {string} error The error
*/
handleAjaxError: function (xhr, status, error) {
if (status === 'canceled') {
if ($('#splash').is(':visible')) {
$('#message-title').text('Session Expired');
$('#message-content').text('Your session has expired. Please reload to log in again.');
// show the error pane
$('#message-pane').show();
} else {
nfDialog.showOkDialog({
headerText: 'Session Expired',
dialogContent: 'Your session has expired. Please press Ok to log in again.',
okHandler: function () {
window.location = '../nifi/';
}
});
}
return;
}
// if an error occurs while the splash screen is visible close the canvas show the error message
if ($('#splash').is(':visible')) {
if (xhr.status === 401) {
$('#message-title').text('Unauthorized');
} else if (xhr.status === 403) {
$('#message-title').text('Insufficient Permissions');
} else if (xhr.status === 409) {
$('#message-title').text('Invalid State');
} else if (xhr.status === 413) {
$('#message-title').text('Payload Too Large');
} else {
$('#message-title').text('An unexpected error has occurred');
}
if ($.trim(xhr.responseText) === '') {
$('#message-content').text('Please check the logs.');
} else {
$('#message-content').text(xhr.responseText);
}
// show the error pane
$('#message-pane').show();
return;
}
// status code 400, 404, 409, and 413 are expected response codes for nfCommon errors.
if (xhr.status === 400 || xhr.status === 404 || xhr.status === 409 || xhr.status == 413 || xhr.status === 503) {
nfDialog.showOkDialog({
headerText: 'Error',
dialogContent: nfCommon.escapeHtml(xhr.responseText)
});
} else if (xhr.status === 403) {
nfDialog.showOkDialog({
headerText: 'Insufficient Permissions',
dialogContent: nfCommon.escapeHtml(xhr.responseText)
});
} else {
if (xhr.status < 99 || xhr.status === 12007 || xhr.status === 12029) {
var content = 'Please ensure the application is running and check the logs for any errors.';
if (nfCommon.isDefinedAndNotNull(status)) {
if (status === 'timeout') {
content = 'Request has timed out. Please ensure the application is running and check the logs for any errors.';
} else if (status === 'abort') {
content = 'Request has been aborted.';
} else if (status === 'No Transport') {
content = 'Request transport mechanism failed. Please ensure the host where the application is running is accessible.';
}
}
$('#message-title').text('Unable to communicate with NiFi');
$('#message-content').text(content);
} else if (xhr.status === 401) {
$('#message-title').text('Unauthorized');
if ($.trim(xhr.responseText) === '') {
$('#message-content').text('Authentication is required to use this NiFi.');
} else {
$('#message-content').text(xhr.responseText);
}
} else if (xhr.status === 500) {
$('#message-title').text('An unexpected error has occurred');
if ($.trim(xhr.responseText) === '') {
$('#message-content').text('An error occurred communicating with the application core. Please check the logs and fix any configuration issues before restarting.');
} else {
$('#message-content').text(xhr.responseText);
}
} else if (xhr.status === 200 || xhr.status === 201) {
$('#message-title').text('Parse Error');
if ($.trim(xhr.responseText) === '') {
$('#message-content').text('Unable to interpret response from NiFi.');
} else {
$('#message-content').text(xhr.responseText);
}
} else {
$('#message-title').text(xhr.status + ': Unexpected Response');
$('#message-content').text('An unexpected error has occurred. Please check the logs.');
}
// show the error pane
$('#message-pane').show();
}
},
/**
* Method for handling ajax errors when submitting configuration update (PUT/POST) requests.
* In addition to what handleAjaxError does, this function splits
* the error message text to display them as an unordered list.
*
* @argument {object} xhr The XmlHttpRequest
* @argument {string} status The status of the request
* @argument {string} error The error
*/
handleConfigurationUpdateAjaxError: function (xhr, status, error) {
if (xhr.status === 400) {
var errors = xhr.responseText.split('\n');
var content;
if (errors.length === 1) {
content = $('<span></span>').text(errors[0]);
} else {
content = nfCommon.formatUnorderedList(errors);
}
nfDialog.showOkDialog({
dialogContent: content,
headerText: 'Configuration Error'
});
} else {
self.handleAjaxError(xhr, status, error);
}
}
};
return self;
}));