Browse Source

Improve WS errors handling.

pull/1249/head
Igor Kulikov 8 years ago
parent
commit
0b664e9d93
  1. 4
      application/src/main/java/org/thingsboard/server/controller/plugin/TbWebSocketHandler.java
  2. 6
      application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetryWebSocketService.java
  3. 16
      ui/src/app/api/telemetry-websocket.service.js
  4. 3
      ui/src/app/services/toast.scss

4
application/src/main/java/org/thingsboard/server/controller/plugin/TbWebSocketHandler.java

@ -263,7 +263,7 @@ public class TbWebSocketHandler extends TextWebSocketHandler implements Telemetr
if (regularUserSessions.size() < maxSessionsPerRegularUser) { if (regularUserSessions.size() < maxSessionsPerRegularUser) {
regularUserSessions.add(sessionId); regularUserSessions.add(sessionId);
} else { } else {
log.info("[{}][{}][{}] Failed to start session. Max user sessions limit reached" log.info("[{}][{}][{}] Failed to start session. Max regular user sessions limit reached"
, sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), sessionId); , sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), sessionId);
session.close(CloseStatus.POLICY_VIOLATION.withReason("Max regular user sessions limit reached")); session.close(CloseStatus.POLICY_VIOLATION.withReason("Max regular user sessions limit reached"));
return false; return false;
@ -276,7 +276,7 @@ public class TbWebSocketHandler extends TextWebSocketHandler implements Telemetr
if (publicUserSessions.size() < maxSessionsPerPublicUser) { if (publicUserSessions.size() < maxSessionsPerPublicUser) {
publicUserSessions.add(sessionId); publicUserSessions.add(sessionId);
} else { } else {
log.info("[{}][{}][{}] Failed to start session. Max user sessions limit reached" log.info("[{}][{}][{}] Failed to start session. Max public user sessions limit reached"
, sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), sessionId); , sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), sessionId);
session.close(CloseStatus.POLICY_VIOLATION.withReason("Max public user sessions limit reached")); session.close(CloseStatus.POLICY_VIOLATION.withReason("Max public user sessions limit reached"));
return false; return false;

6
application/src/main/java/org/thingsboard/server/service/telemetry/DefaultTelemetryWebSocketService.java

@ -266,7 +266,7 @@ public class DefaultTelemetryWebSocketService implements TelemetryWebSocketServi
} else if (customerSessions.size() < maxSubscriptionsPerCustomer) { } else if (customerSessions.size() < maxSubscriptionsPerCustomer) {
customerSessions.add(subId); customerSessions.add(subId);
} else { } else {
log.info("[{}][{}][{}] Failed to start subscription. Max customer sessions limit reached" log.info("[{}][{}][{}] Failed to start subscription. Max customer subscriptions limit reached"
, sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), subId); , sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), subId);
msgEndpoint.close(sessionRef, CloseStatus.POLICY_VIOLATION.withReason("Max customer subscriptions limit reached")); msgEndpoint.close(sessionRef, CloseStatus.POLICY_VIOLATION.withReason("Max customer subscriptions limit reached"));
return false; return false;
@ -279,7 +279,7 @@ public class DefaultTelemetryWebSocketService implements TelemetryWebSocketServi
if (regularUserSessions.size() < maxSubscriptionsPerRegularUser) { if (regularUserSessions.size() < maxSubscriptionsPerRegularUser) {
regularUserSessions.add(subId); regularUserSessions.add(subId);
} else { } else {
log.info("[{}][{}][{}] Failed to start subscription. Max user sessions limit reached" log.info("[{}][{}][{}] Failed to start subscription. Max regular user subscriptions limit reached"
, sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), subId); , sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), subId);
msgEndpoint.close(sessionRef, CloseStatus.POLICY_VIOLATION.withReason("Max regular user subscriptions limit reached")); msgEndpoint.close(sessionRef, CloseStatus.POLICY_VIOLATION.withReason("Max regular user subscriptions limit reached"));
return false; return false;
@ -292,7 +292,7 @@ public class DefaultTelemetryWebSocketService implements TelemetryWebSocketServi
if (publicUserSessions.size() < maxSubscriptionsPerPublicUser) { if (publicUserSessions.size() < maxSubscriptionsPerPublicUser) {
publicUserSessions.add(subId); publicUserSessions.add(subId);
} else { } else {
log.info("[{}][{}][{}] Failed to start subscription. Max user sessions limit reached" log.info("[{}][{}][{}] Failed to start subscription. Max public user subscriptions limit reached"
, sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), subId); , sessionRef.getSecurityCtx().getTenantId(), sessionRef.getSecurityCtx().getId(), subId);
msgEndpoint.close(sessionRef, CloseStatus.POLICY_VIOLATION.withReason("Max public user subscriptions limit reached")); msgEndpoint.close(sessionRef, CloseStatus.POLICY_VIOLATION.withReason("Max public user subscriptions limit reached"));
return false; return false;

16
ui/src/app/api/telemetry-websocket.service.js

@ -26,7 +26,7 @@ const WS_IDLE_TIMEOUT = 90000;
const MAX_PUBLISH_COMMANDS = 10; const MAX_PUBLISH_COMMANDS = 10;
/*@ngInject*/ /*@ngInject*/
function TelemetryWebsocketService($rootScope, $websocket, $timeout, $window, toast, types, userService) { function TelemetryWebsocketService($rootScope, $websocket, $timeout, $window, $mdUtil, toast, types, userService) {
var isOpening = false, var isOpening = false,
isOpened = false, isOpened = false,
@ -111,7 +111,10 @@ function TelemetryWebsocketService($rootScope, $websocket, $timeout, $window, to
} }
} }
function onError (/*message*/) { function onError (errorEvent) {
if (errorEvent) {
showWsError(0, errorEvent);
}
isOpening = false; isOpening = false;
} }
@ -137,7 +140,10 @@ function TelemetryWebsocketService($rootScope, $websocket, $timeout, $window, to
} }
} }
function onClose () { function onClose (closeEvent) {
if (closeEvent && closeEvent.code > 1000) {
showWsError(closeEvent.code, closeEvent.reason);
}
isOpening = false; isOpening = false;
isOpened = false; isOpened = false;
if (isActive) { if (isActive) {
@ -191,7 +197,9 @@ function TelemetryWebsocketService($rootScope, $websocket, $timeout, $window, to
} else { } else {
message += "error code - " + errorCode + "."; message += "error code - " + errorCode + ".";
} }
toast.showError(message); $mdUtil.nextTick(function () {
toast.showError(message);
});
} }
function fetchKeys(subscriptionId) { function fetchKeys(subscriptionId) {

3
ui/src/app/services/toast.scss

@ -16,18 +16,21 @@
md-toast.tb-info-toast .md-toast-content { md-toast.tb-info-toast .md-toast-content {
height: 100%; height: 100%;
max-height: 100%;
padding: 18px; padding: 18px;
font-size: 18px; font-size: 18px;
} }
md-toast.tb-success-toast .md-toast-content { md-toast.tb-success-toast .md-toast-content {
height: 100%; height: 100%;
max-height: 100%;
font-size: 18px !important; font-size: 18px !important;
background-color: #008000; background-color: #008000;
} }
md-toast.tb-error-toast .md-toast-content { md-toast.tb-error-toast .md-toast-content {
height: 100%; height: 100%;
max-height: 100%;
font-size: 18px !important; font-size: 18px !important;
background-color: #800000; background-color: #800000;
} }

Loading…
Cancel
Save