UNPKG

ngx-dynamic-dashboard

Version:
113 lines 16.2 kB
import { ErrorObject, SolutionObject } from './error-model'; /** * Created by jayhamilton on 7/5/17. */ export class ErrorHandler { static getErrorObject(errMsg) { return new ErrorObject(errMsg.statusText, 'Some description', ErrorHandler.getSolutionList(errMsg.status + ' ' + errMsg.statusText), errMsg.resource); } /** * todo - fix this error handling logic. Move it to its own class. * @param errMsg * @returns {SolutionObject[]} */ static getSolutionList(errMsg) { console.log('ERROR CONDITION: ' + errMsg); const solutionList = []; switch (ErrorHandler.getErrorType(errMsg.toLowerCase())) { case 'ERR_CERTIFICATE': solutionList.push(new SolutionObject('Check to see if your browser has accepted the certificate', 0, 'http://link1')); break; case 'ERR_CROSS_ORIGIN_RESOURCE_SHARING': solutionList.push(new SolutionObject('Check to see if your browser has accepted the certificate', 0, 'http://link1')); break; case 'ERR_CONNECTION_REFUSED': solutionList.push(new SolutionObject('Check to see if the host/service you are attempting to connect to is up.', 0, 'http://link1')); break; case 'ERR_NOT_FOUND': solutionList.push(new SolutionObject('Resource not found.', 0, 'http://link1')); break; case 'ERR_CONNECTION_TIMEOUT': solutionList.push(new SolutionObject('A timeout occurred. The default timeout on a connection is 60 seconds. ' + 'Check the endpoint to see if you are able to access the ip and port using ping. ' + 'If 60 seconds is to short of a timeout go into configuration and increase it.', 0, 'http://link1')); break; default: { solutionList.push(new SolutionObject(errMsg, 0, 'http://link1')); } } return solutionList; } static getErrorType(errMsg) { if (errMsg.indexOf('trust') > -1) { return 'ERR_CERTIFICATE'; } if (errMsg.indexOf('cors') > -1) { return 'ERR_CROSS_ORIGIN_RESOURCE_SHARING'; } if (errMsg.indexOf('refuse') > -1) { return 'ERR_CONNECTION_REFUSED'; } if (errMsg.indexOf('timeout') > -1) { return 'ERR_CONNECTION_TIMEOUT'; } if (errMsg.indexOf('404') > -1) { return 'ERR_NOT_FOUND'; } return errMsg; } static getWebSocketErrorReason(error) { let reason = 'There was probably a problem with an attempt to connect to the endpoint!'; switch (error.code) { case 1000: reason = 'Normal closure'; break; case 1001: reason = 'An endpoint is going away'; break; case 1002: reason = 'An endpoint is terminating the connection due to a protocol error.'; break; case 1003: reason = 'An endpoint is terminating the connection because it has received a type of data it cannot accept'; break; case 1004: reason = 'Reserved. The specific meaning might be defined in the future.'; break; case 1005: reason = 'No status code was actually present'; break; case 1006: reason = 'The connection was closed abnormally'; break; case 1007: reason = 'The endpoint is terminating the connection because a message was received that contained inconsistent data'; break; case 1008: reason = 'The endpoint is terminating the connection because it received a message that violates its policy'; break; case 1009: reason = 'The endpoint is terminating the connection because a data frame was received that is too large'; break; case 1010: reason = 'The client is terminating the connection because it expected the server to negotiate one or more extension, but the server didn\'t.'; break; case 1011: reason = 'The server is terminating the connection because it encountered an unexpected condition that prevented it from fulfilling the request.'; break; case 1012: reason = 'The server is terminating the connection because it is restarting'; break; case 1013: reason = 'The server is terminating the connection due to a temporary condition'; break; case 1015: reason = 'The connection was closed due to a failure to perform a TLS handshake'; break; } return reason; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIvVXNlcnMvYmVubGkvd29ya3NwYWNlcy9uZ3gtZHluYW1pYy1kYXNoYm9hcmQtZnJhbWV3b3JrL3Byb2plY3RzL25neC1keW5hbWljLWRhc2hib2FyZC9zcmMvIiwic291cmNlcyI6WyJkYXNoYm9hcmQvZXJyb3IvZXJyb3ItaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsV0FBVyxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUxRDs7R0FFRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBRXJCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBVztRQUM3QixPQUFPLElBQUksV0FBVyxDQUNsQixNQUFNLENBQUMsVUFBVSxFQUNqQixrQkFBa0IsRUFDbEIsWUFBWSxDQUFDLGVBQWUsQ0FDeEIsTUFBTSxDQUFDLE1BQU07Y0FDWCxHQUFHO2NBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUN4QixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQWM7UUFFakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLENBQUMsQ0FBQTtRQUUxQyxNQUFNLFlBQVksR0FBcUIsRUFBRSxDQUFDO1FBRTFDLFFBQVEsWUFBWSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtZQUVyRCxLQUFLLGlCQUFpQjtnQkFDbEIsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQywyREFBMkQsRUFBRSxDQUFDLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztnQkFDdEgsTUFBTTtZQUNWLEtBQUssbUNBQW1DO2dCQUNwQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxDQUFDLDJEQUEyRCxFQUFFLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FB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SyxJQUFJO2dCQUNMLE1BQU0sR0FBRyxtRUFBbUUsQ0FBQztnQkFDN0UsTUFBTTtZQUNWLEtBQUssSUFBSTtnQkFDTCxNQUFNLEdBQUcsdUVBQXVFLENBQUM7Z0JBQ2pGLE1BQU07WUFDVixLQUFLLElBQUk7Z0JBQ0wsTUFBTSxHQUFHLHVFQUF1RSxDQUFDO2dCQUNqRixNQUFNO1NBQ2I7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Vycm9yT2JqZWN0LCBTb2x1dGlvbk9iamVjdH0gZnJvbSAnLi9lcnJvci1tb2RlbCc7XG5cbi8qKlxuICogQ3JlYXRlZCBieSBqYXloYW1pbHRvbiBvbiA3LzUvMTcuXG4gKi9cbmV4cG9ydCBjbGFzcyBFcnJvckhhbmRsZXIge1xuXG4gICAgc3RhdGljIGdldEVycm9yT2JqZWN0KGVyck1zZzogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgRXJyb3JPYmplY3QoXG4gICAgICAgICAgICBlcnJNc2cuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgICdTb21lIGRlc2NyaXB0aW9uJyxcbiAgICAgICAgICAgIEVycm9ySGFuZGxlci5nZXRTb2x1dGlvbkxpc3QoXG4gICAgICAgICAgICAgICAgZXJyTXNnLnN0YXR1c1xuICAgICAgICAgICAgICAgICsgJyAnXG4gICAgICAgICAgICAgICAgKyBlcnJNc2cuc3RhdHVzVGV4dCksXG4gICAgICAgICAgICBlcnJNc2cucmVzb3VyY2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRvZG8gLSBmaXggdGhpcyBlcnJvciBoYW5kbGluZyBsb2dpYy4gTW92ZSBpdCB0byBpdHMgb3duIGNsYXNzLlxuICAgICAqIEBwYXJhbSBlcnJNc2dcbiAgICAgKiBAcmV0dXJucyB7U29sdXRpb25PYmplY3RbXX1cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0U29sdXRpb25MaXN0KGVyck1zZzogc3RyaW5nKSB7XG5cbiAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIENPTkRJVElPTjogICcgKyBlcnJNc2cpXG5cbiAgICAgICAgY29uc3Qgc29sdXRpb25MaXN0OiBTb2x1dGlvbk9iamVjdFtdID0gW107XG5cbiAgICAgICAgc3dpdGNoIChFcnJvckhhbmRsZXIuZ2V0RXJyb3JUeXBlKGVyck1zZy50b0xvd2VyQ2FzZSgpKSkge1xuXG4gICAgICAgICAgICBjYXNlICdFUlJfQ0VSVElGSUNBVEUnOlxuICAgICAgICAgICAgICAgIHNvbHV0aW9uTGlzdC5wdXNoKG5ldyBTb2x1dGlvbk9iamVjdCgnQ2hlY2sgdG8gc2VlIGlmIHlvdXIgYnJvd3NlciBoYXMgYWNjZXB0ZWQgdGhlIGNlcnRpZmljYXRlJywgMCwgJ2h0dHA6Ly9saW5rMScpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0VSUl9DUk9TU19PUklHSU5fUkVTT1VSQ0VfU0hBUklORyc6XG4gICAgICAgICAgICAgICAgc29sdXRpb25MaXN0LnB1c2gobmV3IFNvbHV0aW9uT2JqZWN0KCdDaGVjayB0byBzZWUgaWYgeW91ciBicm93c2VyIGhhcyBhY2NlcHRlZCB0aGUgY2VydGlmaWNhdGUnLCAwLCAnaHR0cDovL2xpbmsxJykpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRVJSX0NPTk5FQ1RJT05fUkVGVVNFRCc6XG4gICAgICAgICAgICAgICAgc29sdXRpb25MaXN0LnB1c2gobmV3IFNvbHV0aW9uT2JqZWN0KFxuICAgICAgICAgICAgICAgICAgICAnQ2hlY2sgdG8gc2VlIGlmIHRoZSBob3N0L3NlcnZpY2UgeW91IGFyZSBhdHRlbXB0aW5nIHRvIGNvbm5lY3QgdG8gaXMgdXAuJywgMCwgJ2h0dHA6Ly9saW5rMScpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0VSUl9OT1RfRk9VTkQnOlxuICAgICAgICAgICAgICAgIHNvbHV0aW9uTGlzdC5wdXNoKG5ldyBTb2x1dGlvbk9iamVjdChcbiAgICAgICAgICAgICAgICAgICAgJ1Jlc291cmNlIG5vdCBmb3VuZC4nLCAwLCAnaHR0cDovL2xpbmsxJykpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRVJSX0NPTk5FQ1RJT05fVElNRU9VVCc6XG4gICAgICAgICAgICAgICAgc29sdXRpb25MaXN0LnB1c2gobmV3IFNvbHV0aW9uT2JqZWN0KFxuICAgICAgICAgICAgICAgICAgICAnQSB0aW1lb3V0IG9jY3VycmVkLiBUaGUgZGVmYXVsdCB0aW1lb3V0IG9uIGEgY29ubmVjdGlvbiBpcyA2MCBzZWNvbmRzLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ0NoZWNrIHRoZSBlbmRwb2ludCB0byBzZWUgaWYgeW91IGFyZSBhYmxlIHRvIGFjY2VzcyB0aGUgaXAgYW5kIHBvcnQgdXNpbmcgcGluZy4gJyArXG4gICAgICAgICAgICAgICAgICAgICdJZiA2MCBzZWNvbmRzIGlzIHRvIHNob3J0IG9mIGEgdGltZW91dCBnbyBpbnRvIGNvbmZpZ3VyYXRpb24gYW5kIGluY3JlYXNlIGl0LicsIDAsICdodHRwOi8vbGluazEnKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgc29sdXRpb25MaXN0LnB1c2gobmV3IFNvbHV0aW9uT2JqZWN0KGVyck1zZywgMCwgJ2h0dHA6Ly9saW5rMScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzb2x1dGlvbkxpc3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEVycm9yVHlwZShlcnJNc2c6IHN0cmluZyk6IHN0cmluZyB7XG5cbiAgICAgICAgaWYgKGVyck1zZy5pbmRleE9mKCd0cnVzdCcpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiAnRVJSX0NFUlRJRklDQVRFJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyTXNnLmluZGV4T2YoJ2NvcnMnKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0VSUl9DUk9TU19PUklHSU5fUkVTT1VSQ0VfU0hBUklORyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyck1zZy5pbmRleE9mKCdyZWZ1c2UnKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0VSUl9DT05ORUNUSU9OX1JFRlVTRUQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJNc2cuaW5kZXhPZigndGltZW91dCcpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiAnRVJSX0NPTk5FQ1RJT05fVElNRU9VVCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyck1zZy5pbmRleE9mKCc0MDQnKSA+IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0VSUl9OT1RfRk9VTkQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnJNc2c7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFdlYlNvY2tldEVycm9yUmVhc29uKGVycm9yOiBhbnkpIHtcblxuICAgICAgICBsZXQgcmVhc29uID0gJ1RoZXJlIHdhcyBwcm9iYWJseSBhIHByb2JsZW0gd2l0aCBhbiBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlIGVuZHBvaW50ISc7XG4gICAgICAgIHN3aXRjaCAoZXJyb3IuY29kZSkge1xuICAgICAgICAgICAgY2FzZSAxMDAwOlxuICAgICAgICAgICAgICAgIHJlYXNvbiA9ICdOb3JtYWwgY2xvc3VyZSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEwMDE6XG4gICAgICAgICAgICAgICAgcmVhc29uID0gJ0FuIGVuZHBvaW50IGlzIGdvaW5nIGF3YXknO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxMDAyOlxuICAgICAgICAgICAgICAgIHJlYXNvbiA9ICdBbiBlbmRwb2ludCBpcyB0ZXJtaW5hdGluZyB0aGUgY29ubmVjdGlvbiBkdWUgdG8gYSBwcm90b2NvbCBlcnJvci4nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxMDAzOlxuICAgICAgICAgICAgICAgIHJlYXNvbiA9ICdBbiBlbmRwb2ludCBpcyB0ZXJtaW5hdGluZyB0aGUgY29ubmVjdGlvbiBiZWNhdXNlIGl0IGhhcyByZWNlaXZlZCBhIHR5cGUgb2YgZGF0YSBpdCBjYW5ub3QgYWNjZXB0JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTAwNDpcbiAgICAgICAgICAgICAgICByZWFzb24gPSAnUmVzZXJ2ZWQuIFRoZSBzcGVjaWZpYyBtZWFuaW5nIG1pZ2h0IGJlIGRlZmluZWQgaW4gdGhlIGZ1dHVyZS4nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxMDA1OlxuICAgICAgICAgICAgICAgIHJlYXNvbiA9ICdObyBzdGF0dXMgY29kZSB3YXMgYWN0dWFsbHkgcHJlc2VudCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEwMDY6XG4gICAgICAgICAgICAgICAgcmVhc29uID0gJ1RoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYWJub3JtYWxseSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEwMDc6XG4gICAgICAgICAgICAgICAgcmVhc29uID0gJ1RoZSBlbmRwb2ludCBpcyB0ZXJtaW5hdGluZyB0aGUgY29ubmVjdGlvbiBiZWNhdXNlIGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWQgdGhhdCBjb250YWluZWQgaW5jb25zaXN0ZW50IGRhdGEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxMDA4OlxuICAgICAgICAgICAgICAgIHJlYXNvbiA9ICdUaGUgZW5kcG9pbnQgaXMgdGVybWluYXRpbmcgdGhlIGNvbm5lY3Rpb24gYmVjYXVzZSBpdCByZWNlaXZlZCBhIG1lc3NhZ2UgdGhhdCB2aW9sYXRlcyBpdHMgcG9saWN5JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTAwOTpcbiAgICAgICAgICAgICAgICByZWFzb24gPSAnVGhlIGVuZHBvaW50IGlzIHRlcm1pbmF0aW5nIHRoZSBjb25uZWN0aW9uIGJlY2F1c2UgYSBkYXRhIGZyYW1lIHdhcyByZWNlaXZlZCB0aGF0IGlzIHRvbyBsYXJnZSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEwMTA6XG4gICAgICAgICAgICAgICAgcmVhc29uID0gJ1RoZSBjbGllbnQgaXMgdGVybWluYXRpbmcgdGhlIGNvbm5lY3Rpb24gYmVjYXVzZSBpdCBleHBlY3RlZCB0aGUgc2VydmVyIHRvIG5lZ290aWF0ZSBvbmUgb3IgbW9yZSBleHRlbnNpb24sIGJ1dCB0aGUgc2VydmVyIGRpZG5cXCd0Lic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEwMTE6XG4gICAgICAgICAgICAgICAgcmVhc29uID0gJ1RoZSBzZXJ2ZXIgaXMgdGVybWluYXRpbmcgdGhlIGNvbm5lY3Rpb24gYmVjYXVzZSBpdCBlbmNvdW50ZXJlZCBhbiB1bmV4cGVjdGVkIGNvbmRpdGlvbiB0aGF0IHByZXZlbnRlZCBpdCBmcm9tIGZ1bGZpbGxpbmcgdGhlIHJlcXVlc3QuJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTAxMjpcbiAgICAgICAgICAgICAgICByZWFzb24gPSAnVGhlIHNlcnZlciBpcyB0ZXJtaW5hdGluZyB0aGUgY29ubmVjdGlvbiBiZWNhdXNlIGl0IGlzIHJlc3RhcnRpbmcnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxMDEzOlxuICAgICAgICAgICAgICAgIHJlYXNvbiA9ICdUaGUgc2VydmVyIGlzIHRlcm1pbmF0aW5nIHRoZSBjb25uZWN0aW9uIGR1ZSB0byBhIHRlbXBvcmFyeSBjb25kaXRpb24nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAxMDE1OlxuICAgICAgICAgICAgICAgIHJlYXNvbiA9ICdUaGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGR1ZSB0byBhIGZhaWx1cmUgdG8gcGVyZm9ybSBhIFRMUyBoYW5kc2hha2UnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWFzb247XG4gICAgfVxufVxuIl19