Commit c9dcbda18dc1c6f5649eb23c5fa13d8d1b1effd4

Authored by Bohdan Smetaniuk
1 parent 93363f81

ui side + handle exceptions

... ... @@ -104,6 +104,7 @@ import org.thingsboard.server.queue.provider.TbQueueProducerProvider;
104 104 import org.thingsboard.server.queue.util.TbCoreComponent;
105 105 import org.thingsboard.server.service.component.ComponentDiscoveryService;
106 106 import org.thingsboard.server.service.edge.EdgeNotificationService;
  107 +import org.thingsboard.server.service.edge.rpc.EdgeGrpcService;
107 108 import org.thingsboard.server.service.edge.rpc.init.SyncEdgeService;
108 109 import org.thingsboard.server.service.queue.TbClusterService;
109 110 import org.thingsboard.server.service.security.model.SecurityUser;
... ... @@ -212,6 +213,9 @@ public abstract class BaseController {
212 213 @Autowired(required = false)
213 214 protected SyncEdgeService syncEdgeService;
214 215
  216 + @Autowired(required = false)
  217 + protected EdgeGrpcService edgeGrpcService;
  218 +
215 219 @Value("${server.log_controller_error_stack_trace}")
216 220 @Getter
217 221 private boolean logControllerErrorStackTrace;
... ...
... ... @@ -26,7 +26,6 @@ import org.springframework.web.bind.annotation.RequestParam;
26 26 import org.springframework.web.bind.annotation.ResponseBody;
27 27 import org.springframework.web.bind.annotation.ResponseStatus;
28 28 import org.springframework.web.bind.annotation.RestController;
29   -import org.thingsboard.server.common.data.AdminSettings;
30 29 import org.thingsboard.server.common.data.Customer;
31 30 import org.thingsboard.server.common.data.EntitySubtype;
32 31 import org.thingsboard.server.common.data.EntityType;
... ... @@ -47,6 +46,7 @@ import org.thingsboard.server.dao.exception.DataValidationException;
47 46 import org.thingsboard.server.dao.exception.IncorrectParameterException;
48 47 import org.thingsboard.server.dao.model.ModelConstants;
49 48 import org.thingsboard.server.queue.util.TbCoreComponent;
  49 +import org.thingsboard.server.service.edge.rpc.EdgeGrpcSession;
50 50 import org.thingsboard.server.service.security.model.SecurityUser;
51 51 import org.thingsboard.server.service.security.permission.Operation;
52 52 import org.thingsboard.server.service.security.permission.Resource;
... ... @@ -415,8 +415,13 @@ public class EdgeController extends BaseController {
415 415 public void syncEdge(@RequestBody EdgeId edgeId) throws ThingsboardException {
416 416 try {
417 417 edgeId = checkNotNull(edgeId);
418   - Edge edge = checkEdgeId(edgeId, Operation.READ);
419   - syncEdgeService.sync(edge);
  418 + if (isEdgesSupportEnabled()) {
  419 + EdgeGrpcSession session = edgeGrpcService.getEdgeGrpcSessionById(edgeId);
  420 + Edge edge = session.getEdge();
  421 + syncEdgeService.sync(edge);
  422 + } else {
  423 + throw new ThingsboardException("Edges support disabled", ThingsboardErrorCode.GENERAL);
  424 + }
420 425 } catch (Exception e) {
421 426 throw handleException(e);
422 427 }
... ...
... ... @@ -146,6 +146,15 @@ public class EdgeGrpcService extends EdgeRpcServiceGrpc.EdgeRpcServiceImplBase i
146 146 save(edgeId, DefaultDeviceStateService.LAST_CONNECT_TIME, System.currentTimeMillis());
147 147 }
148 148
  149 + public EdgeGrpcSession getEdgeGrpcSessionById(EdgeId edgeId) {
  150 + EdgeGrpcSession session = sessions.get(edgeId);
  151 + if (session != null && session.isConnected()) {
  152 + return session;
  153 + } else {
  154 + throw new RuntimeException("Edge is not connected");
  155 + }
  156 + }
  157 +
149 158 private void processHandleMessages() {
150 159 executor.submit(() -> {
151 160 while (!Thread.interrupted()) {
... ...
... ... @@ -33,7 +33,8 @@ function EdgeService($http, $q, customerService) {
33 33 unassignEdgeFromCustomer: unassignEdgeFromCustomer,
34 34 makeEdgePublic: makeEdgePublic,
35 35 setRootRuleChain: setRootRuleChain,
36   - getEdgeEvents: getEdgeEvents
  36 + getEdgeEvents: getEdgeEvents,
  37 + syncEdge: syncEdge
37 38 };
38 39
39 40 return service;
... ... @@ -262,4 +263,15 @@ function EdgeService($http, $q, customerService) {
262 263 });
263 264 return deferred.promise;
264 265 }
  266 +
  267 + function syncEdge(edgeId) {
  268 + var deferred = $q.defer();
  269 + var url = '/api/edge/sync';
  270 + $http.post(url, edgeId).then(function success(response) {
  271 + deferred.resolve(response);
  272 + }, function fail(response) {
  273 + deferred.reject(response.data);
  274 + });
  275 + return deferred.promise;
  276 + }
265 277 }
... ...
... ... @@ -48,6 +48,12 @@
48 48 <md-icon md-svg-icon="mdi:clipboard-arrow-left"></md-icon>
49 49 <span translate>edge.copy-id</span>
50 50 </md-button>
  51 + <md-button ng-click="onEdgeSync(edge.id)"
  52 + ng-show="!isEdit"
  53 + class="md-raised">
  54 + <md-icon md-svg-icon="mdi:clipboard-arrow-left"></md-icon>
  55 + <span translate>edge.sync</span>
  56 + </md-button>
51 57 </div>
52 58
53 59 <md-content class="md-padding" layout="column">
... ...
... ... @@ -20,7 +20,7 @@ import edgeFieldsetTemplate from './edge-fieldset.tpl.html';
20 20 /* eslint-enable import/no-unresolved, import/default */
21 21
22 22 /*@ngInject*/
23   -export default function EdgeDirective($compile, $templateCache, $translate, $mdDialog, $document, utils, toast, types, customerService) {
  23 +export default function EdgeDirective($compile, $templateCache, $translate, $mdDialog, $document, utils, toast, types, customerService, edgeService) {
24 24 var linker = function (scope, element) {
25 25 var template = $templateCache.get(edgeFieldsetTemplate);
26 26 element.html(template);
... ... @@ -69,6 +69,17 @@ export default function EdgeDirective($compile, $templateCache, $translate, $mdD
69 69 toast.showSuccess($translate.instant('edge.id-copied-message'), 750, angular.element(element).parent().parent(), 'bottom left');
70 70 };
71 71
  72 + scope.onEdgeSync = function (edgeId) {
  73 + edgeService.syncEdge(edgeId).then(
  74 + function success() {
  75 + toast.showSuccess($translate.instant('edge.sync-message'), 750, angular.element(element).parent().parent(), 'bottom left');
  76 + },
  77 + function fail(error) {
  78 + toast.showError(error);
  79 + }
  80 + );
  81 + }
  82 +
72 83 $compile(element.contents())(scope);
73 84
74 85 scope.onEdgeInfoCopied = function(type) {
... ...
... ... @@ -756,6 +756,8 @@
756 756 "details": "Details",
757 757 "copy-id": "Regelketten-ID kopieren",
758 758 "id-copied-message": "Regelketten-ID wurde in die Zwischenablage kopiert",
  759 + "sync": "Sync Edge",
  760 + "sync-message": "Edge wurde synchronisiert",
759 761 "permissions": "Berechtigungen",
760 762 "edge-required": "Rand ist erforderlich.",
761 763 "edge-type": "Randtyp",
... ...
... ... @@ -788,6 +788,8 @@
788 788 "events": "Events",
789 789 "copy-id": "Copy Edge Id",
790 790 "id-copied-message": "Edge Id has been copied to clipboard",
  791 + "sync": "Sync Edge",
  792 + "sync-message": "Edge has been synchronized",
791 793 "permissions": "Permissions",
792 794 "edge-required": "Edge required",
793 795 "edge-type": "Edge type",
... ...
... ... @@ -769,6 +769,8 @@
769 769 "details": "Detalles",
770 770 "copy-id": "Copiar ID de borde",
771 771 "id-copied-message": "El ID de borde se ha copiado al portapapeles",
  772 + "sync": "Sinc Edge",
  773 + "sync-message": "Edge se ha sincronizado",
772 774 "permissions": "Permisos",
773 775 "edge-required": "Edge required",
774 776 "edge-type": "Type de la bordure",
... ...
... ... @@ -774,6 +774,8 @@
774 774 "details": "Détails de l'entité",
775 775 "copy-id": "Copier borudre Id",
776 776 "id-copied-message": "Id de la bordure a été copié dans le presse-papier",
  777 + "sync": "Sync Edge",
  778 + "sync-message": "Edge a été synchronisé",
777 779 "permissions": "Autorisations",
778 780 "edge-required": "Bordure est requise",
779 781 "edge-type": "Type de la bordure",
... ...