ui side + handle exceptions
This commit is contained in:
parent
93363f81bb
commit
c9dcbda18d
@ -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;
|
||||
|
||||
@ -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);
|
||||
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);
|
||||
}
|
||||
|
||||
@ -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()) {
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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">
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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",
|
||||
|
||||
@ -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",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user