mirror of https://github.com/portainer/portainer
41 lines
1.6 KiB
JavaScript
41 lines
1.6 KiB
JavaScript
angular.module('portainer.app')
|
|
.factory('EndpointStatusInterceptor', ['$q', '$injector', 'EndpointProvider', function ($q, $injector, EndpointProvider) {
|
|
'use strict';
|
|
var interceptor = {};
|
|
|
|
interceptor.response = responseInterceptor;
|
|
interceptor.responseError = responseErrorInterceptor;
|
|
|
|
function canBeOffline(url) {
|
|
return (_.startsWith(url, 'api/') && (
|
|
_.includes(url, '/containers') ||
|
|
_.includes(url, '/images') ||
|
|
_.includes(url, '/volumes') ||
|
|
_.includes(url, '/networks') ||
|
|
_.includes(url, '/info') ||
|
|
_.includes(url, '/version')
|
|
));
|
|
}
|
|
|
|
function responseInterceptor(response) {
|
|
var EndpointService = $injector.get('EndpointService');
|
|
var url = response.config.url;
|
|
if (response.status === 200 && canBeOffline(url) && EndpointProvider.offlineMode()) {
|
|
EndpointProvider.setOfflineMode(false);
|
|
EndpointService.updateEndpoint(EndpointProvider.endpointID(), {Status: EndpointProvider.endpointStatusFromOfflineMode(false)});
|
|
}
|
|
return response || $q.when(response);
|
|
}
|
|
|
|
function responseErrorInterceptor(rejection) {
|
|
var EndpointService = $injector.get('EndpointService');
|
|
var url = rejection.config.url;
|
|
if ((rejection.status === 502 || rejection.status === -1) && canBeOffline(url) && !EndpointProvider.offlineMode()) {
|
|
EndpointProvider.setOfflineMode(true);
|
|
EndpointService.updateEndpoint(EndpointProvider.endpointID(), {Status: EndpointProvider.endpointStatusFromOfflineMode(true)});
|
|
}
|
|
return $q.reject(rejection);
|
|
}
|
|
|
|
return interceptor;
|
|
}]); |