Merge pull request #1140 from weaveworks/ui-disconnect

Handle server disconnects gracefully in the UI
This commit is contained in:
David
2016-03-14 11:09:44 +01:00
3 changed files with 15 additions and 9 deletions

View File

@@ -12,9 +12,9 @@ export default class Status extends React.Component {
classNames += ' status-loading';
showWarningIcon = true;
} else if (!this.props.topologiesLoaded) {
text = 'Loading topologies...';
text = 'Connecting to Scope...';
classNames += ' status-loading';
showWarningIcon = false;
showWarningIcon = true;
} else if (this.props.websocketClosed) {
classNames += ' status-loading';
showWarningIcon = true;

View File

@@ -424,8 +424,10 @@ export class AppStore extends Store {
break;
case ActionTypes.CLOSE_WEBSOCKET:
websocketClosed = true;
this.__emitChange();
if (!websocketClosed) {
websocketClosed = true;
this.__emitChange();
}
break;
case ActionTypes.DESELECT_NODE:
@@ -502,8 +504,10 @@ export class AppStore extends Store {
break;
case ActionTypes.RECEIVE_ERROR:
errorUrl = payload.errorUrl;
this.__emitChange();
if (errorUrl !== null) {
errorUrl = payload.errorUrl;
this.__emitChange();
}
break;
case ActionTypes.RECEIVE_NODE_DETAILS:

View File

@@ -63,6 +63,8 @@ function createWebsocket(topologyUrl, optionsQuery) {
socket.onclose = null;
socket.onerror = null;
socket.close();
// onclose() is not called, but that's fine since we're opening a new one
// right away
}
socket = new WebSocket(wsUrl + topologyUrl
@@ -74,9 +76,9 @@ function createWebsocket(topologyUrl, optionsQuery) {
socket.onclose = function() {
clearTimeout(reconnectTimer);
log('Closing websocket to ' + topologyUrl, socket.readyState);
socket = null;
closeWebsocket();
log('Closed websocket to ' + topologyUrl);
reconnectTimer = setTimeout(function() {
createWebsocket(topologyUrl, optionsQuery);
@@ -109,7 +111,7 @@ export function getTopologies(options) {
}, TOPOLOGY_INTERVAL);
},
error: function(err) {
log('Error in topology request: ' + err);
log('Error in topology request: ' + err.responseText);
receiveError(url);
topologyTimer = setTimeout(function() {
getTopologies(options);
@@ -169,7 +171,7 @@ export function getApiDetails() {
apiDetailsTimer = setTimeout(getApiDetails, API_INTERVAL);
},
error: function(err) {
log('Error in api details request: ' + err);
log('Error in api details request: ' + err.responseText);
receiveError(url);
apiDetailsTimer = setTimeout(getApiDetails, API_INTERVAL / 2);
}