ui side + handle exceptions

This commit is contained in:
Bohdan Smetaniuk 2020-10-02 14:21:52 +03:00
parent 93363f81bb
commit c9dcbda18d
10 changed files with 60 additions and 5 deletions

View File

@ -104,6 +104,7 @@ import org.thingsboard.server.queue.provider.TbQueueProducerProvider;
import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.component.ComponentDiscoveryService;
import org.thingsboard.server.service.edge.EdgeNotificationService;
import org.thingsboard.server.service.edge.rpc.EdgeGrpcService;
import org.thingsboard.server.service.edge.rpc.init.SyncEdgeService;
import org.thingsboard.server.service.queue.TbClusterService;
import org.thingsboard.server.service.security.model.SecurityUser;
@ -212,6 +213,9 @@ public abstract class BaseController {
@Autowired(required = false)
protected SyncEdgeService syncEdgeService;
@Autowired(required = false)
protected EdgeGrpcService edgeGrpcService;
@Value("${server.log_controller_error_stack_trace}")
@Getter
private boolean logControllerErrorStackTrace;

View File

@ -26,7 +26,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import org.thingsboard.server.common.data.AdminSettings;
import org.thingsboard.server.common.data.Customer;
import org.thingsboard.server.common.data.EntitySubtype;
import org.thingsboard.server.common.data.EntityType;
@ -47,6 +46,7 @@ import org.thingsboard.server.dao.exception.DataValidationException;
import org.thingsboard.server.dao.exception.IncorrectParameterException;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.queue.util.TbCoreComponent;
import org.thingsboard.server.service.edge.rpc.EdgeGrpcSession;
import org.thingsboard.server.service.security.model.SecurityUser;
import org.thingsboard.server.service.security.permission.Operation;
import org.thingsboard.server.service.security.permission.Resource;
@ -415,8 +415,13 @@ public class EdgeController extends BaseController {
public void syncEdge(@RequestBody EdgeId edgeId) throws ThingsboardException {
try {
edgeId = checkNotNull(edgeId);
Edge edge = checkEdgeId(edgeId, Operation.READ);
syncEdgeService.sync(edge);
if (isEdgesSupportEnabled()) {
EdgeGrpcSession session = edgeGrpcService.getEdgeGrpcSessionById(edgeId);
Edge edge = session.getEdge();
syncEdgeService.sync(edge);
} else {
throw new ThingsboardException("Edges support disabled", ThingsboardErrorCode.GENERAL);
}
} catch (Exception e) {
throw handleException(e);
}

View File

@ -146,6 +146,15 @@ public class EdgeGrpcService extends EdgeRpcServiceGrpc.EdgeRpcServiceImplBase i
save(edgeId, DefaultDeviceStateService.LAST_CONNECT_TIME, System.currentTimeMillis());
}
public EdgeGrpcSession getEdgeGrpcSessionById(EdgeId edgeId) {
EdgeGrpcSession session = sessions.get(edgeId);
if (session != null && session.isConnected()) {
return session;
} else {
throw new RuntimeException("Edge is not connected");
}
}
private void processHandleMessages() {
executor.submit(() -> {
while (!Thread.interrupted()) {

View File

@ -33,7 +33,8 @@ function EdgeService($http, $q, customerService) {
unassignEdgeFromCustomer: unassignEdgeFromCustomer,
makeEdgePublic: makeEdgePublic,
setRootRuleChain: setRootRuleChain,
getEdgeEvents: getEdgeEvents
getEdgeEvents: getEdgeEvents,
syncEdge: syncEdge
};
return service;
@ -262,4 +263,15 @@ function EdgeService($http, $q, customerService) {
});
return deferred.promise;
}
function syncEdge(edgeId) {
var deferred = $q.defer();
var url = '/api/edge/sync';
$http.post(url, edgeId).then(function success(response) {
deferred.resolve(response);
}, function fail(response) {
deferred.reject(response.data);
});
return deferred.promise;
}
}

View File

@ -48,6 +48,12 @@
<md-icon md-svg-icon="mdi:clipboard-arrow-left"></md-icon>
<span translate>edge.copy-id</span>
</md-button>
<md-button ng-click="onEdgeSync(edge.id)"
ng-show="!isEdit"
class="md-raised">
<md-icon md-svg-icon="mdi:clipboard-arrow-left"></md-icon>
<span translate>edge.sync</span>
</md-button>
</div>
<md-content class="md-padding" layout="column">

View File

@ -20,7 +20,7 @@ import edgeFieldsetTemplate from './edge-fieldset.tpl.html';
/* eslint-enable import/no-unresolved, import/default */
/*@ngInject*/
export default function EdgeDirective($compile, $templateCache, $translate, $mdDialog, $document, utils, toast, types, customerService) {
export default function EdgeDirective($compile, $templateCache, $translate, $mdDialog, $document, utils, toast, types, customerService, edgeService) {
var linker = function (scope, element) {
var template = $templateCache.get(edgeFieldsetTemplate);
element.html(template);
@ -69,6 +69,17 @@ export default function EdgeDirective($compile, $templateCache, $translate, $mdD
toast.showSuccess($translate.instant('edge.id-copied-message'), 750, angular.element(element).parent().parent(), 'bottom left');
};
scope.onEdgeSync = function (edgeId) {
edgeService.syncEdge(edgeId).then(
function success() {
toast.showSuccess($translate.instant('edge.sync-message'), 750, angular.element(element).parent().parent(), 'bottom left');
},
function fail(error) {
toast.showError(error);
}
);
}
$compile(element.contents())(scope);
scope.onEdgeInfoCopied = function(type) {

View File

@ -756,6 +756,8 @@
"details": "Details",
"copy-id": "Regelketten-ID kopieren",
"id-copied-message": "Regelketten-ID wurde in die Zwischenablage kopiert",
"sync": "Sync Edge",
"sync-message": "Edge wurde synchronisiert",
"permissions": "Berechtigungen",
"edge-required": "Rand ist erforderlich.",
"edge-type": "Randtyp",

View File

@ -788,6 +788,8 @@
"events": "Events",
"copy-id": "Copy Edge Id",
"id-copied-message": "Edge Id has been copied to clipboard",
"sync": "Sync Edge",
"sync-message": "Edge has been synchronized",
"permissions": "Permissions",
"edge-required": "Edge required",
"edge-type": "Edge type",

View File

@ -769,6 +769,8 @@
"details": "Detalles",
"copy-id": "Copiar ID de borde",
"id-copied-message": "El ID de borde se ha copiado al portapapeles",
"sync": "Sinc Edge",
"sync-message": "Edge se ha sincronizado",
"permissions": "Permisos",
"edge-required": "Edge required",
"edge-type": "Type de la bordure",

View File

@ -774,6 +774,8 @@
"details": "Détails de l'entité",
"copy-id": "Copier borudre Id",
"id-copied-message": "Id de la bordure a été copié dans le presse-papier",
"sync": "Sync Edge",
"sync-message": "Edge a été synchronisé",
"permissions": "Autorisations",
"edge-required": "Bordure est requise",
"edge-type": "Type de la bordure",