From 79f77ebbbac8ba80b8816da2f03a9978962b2436 Mon Sep 17 00:00:00 2001 From: Bohdan Smetaniuk Date: Fri, 14 Aug 2020 13:52:40 +0300 Subject: [PATCH 1/2] fetch admin settings --- .../service/edge/EdgeContextComponent.java | 5 ++++ .../service/edge/rpc/EdgeGrpcSession.java | 14 ++++++++++ .../AdminSettingsUpdateMsgConstructor.java | 26 +++++++++++++++++++ .../edge/rpc/init/DefaultSyncEdgeService.java | 15 +++++++++++ .../common/data/edge/EdgeEventType.java | 3 ++- common/edge-api/src/main/proto/edge.proto | 8 ++++++ 6 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/AdminSettingsUpdateMsgConstructor.java diff --git a/application/src/main/java/org/thingsboard/server/service/edge/EdgeContextComponent.java b/application/src/main/java/org/thingsboard/server/service/edge/EdgeContextComponent.java index 2b756cefc4..f5a97e2326 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/EdgeContextComponent.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/EdgeContextComponent.java @@ -39,6 +39,7 @@ import org.thingsboard.server.queue.discovery.PartitionService; import org.thingsboard.server.queue.provider.TbQueueProducerProvider; import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.edge.rpc.EdgeEventStorageSettings; +import org.thingsboard.server.service.edge.rpc.constructor.AdminSettingsUpdateMsgConstructor; import org.thingsboard.server.service.edge.rpc.constructor.AlarmUpdateMsgConstructor; import org.thingsboard.server.service.edge.rpc.constructor.AssetUpdateMsgConstructor; import org.thingsboard.server.service.edge.rpc.constructor.CustomerUpdateMsgConstructor; @@ -188,6 +189,10 @@ public class EdgeContextComponent { @Autowired private WidgetTypeUpdateMsgConstructor widgetTypeUpdateMsgConstructor; + @Lazy + @Autowired + private AdminSettingsUpdateMsgConstructor adminSettingsUpdateMsgConstructor; + @Lazy @Autowired private EntityDataMsgConstructor entityDataMsgConstructor; diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcSession.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcSession.java index 8dcecfb36d..85e29f6802 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcSession.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcSession.java @@ -30,6 +30,7 @@ import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.RandomStringUtils; import org.checkerframework.checker.nullness.qual.Nullable; +import org.thingsboard.server.common.data.AdminSettings; import org.thingsboard.server.common.data.Customer; import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.DataConstants; @@ -374,6 +375,9 @@ public final class EdgeGrpcSession implements Closeable { case WIDGET_TYPE: processWidgetType(edgeEvent, msgType, edgeEventAction); break; + case ADMIN_SETTINGS: + processAdminSettings(edgeEvent); + break; } } @@ -717,6 +721,16 @@ public final class EdgeGrpcSession implements Closeable { } } + private void processAdminSettings(EdgeEvent edgeEvent) { + AdminSettings adminSettings = mapper.convertValue(edgeEvent.getEntityBody(), AdminSettings.class); + EntityUpdateMsg entityUpdateMsg = EntityUpdateMsg.newBuilder() + .setAdminSettingsUpdateMsg(ctx.getAdminSettingsUpdateMsgConstructor().constructAdminSettingsUpdateMsg(adminSettings)) + .build(); + outputStream.onNext(ResponseMsg.newBuilder() + .setEntityUpdateMsg(entityUpdateMsg) + .build()); + } + private UpdateMsgType getResponseMsgType(ActionType actionType) { switch (actionType) { case UPDATED: diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/AdminSettingsUpdateMsgConstructor.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/AdminSettingsUpdateMsgConstructor.java new file mode 100644 index 0000000000..97acc749f8 --- /dev/null +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/AdminSettingsUpdateMsgConstructor.java @@ -0,0 +1,26 @@ +package org.thingsboard.server.service.edge.rpc.constructor; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.thingsboard.server.common.data.AdminSettings; +import org.thingsboard.server.common.data.id.AdminSettingsId; +import org.thingsboard.server.dao.util.mapping.JacksonUtil; +import org.thingsboard.server.gen.edge.AdminSettingsUpdateMsg; + +@Slf4j +@Component +public class AdminSettingsUpdateMsgConstructor { + + public AdminSettingsUpdateMsg constructAdminSettingsUpdateMsg(AdminSettings adminSettings) { + AdminSettingsUpdateMsg.Builder builder = AdminSettingsUpdateMsg.newBuilder() + .setKey(adminSettings.getKey()) + .setJsonValue(JacksonUtil.toString(adminSettings.getJsonValue())); + AdminSettingsId adminSettingsId = adminSettings.getId(); + if (adminSettingsId != null) { + builder.setIdMSB(adminSettingsId.getId().getMostSignificantBits()); + builder.setIdLSB(adminSettingsId.getId().getLeastSignificantBits()); + } + return builder.build(); + } + +} diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/init/DefaultSyncEdgeService.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/init/DefaultSyncEdgeService.java index bf20fc2051..9ee5879996 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/init/DefaultSyncEdgeService.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/init/DefaultSyncEdgeService.java @@ -25,6 +25,7 @@ import lombok.extern.slf4j.Slf4j; import org.checkerframework.checker.nullness.qual.Nullable; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.AdminSettings; import org.thingsboard.server.common.data.DashboardInfo; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.Device; @@ -64,6 +65,7 @@ import org.thingsboard.server.dao.edge.EdgeEventService; import org.thingsboard.server.dao.entityview.EntityViewService; import org.thingsboard.server.dao.relation.RelationService; import org.thingsboard.server.dao.rule.RuleChainService; +import org.thingsboard.server.dao.settings.AdminSettingsService; import org.thingsboard.server.dao.user.UserService; import org.thingsboard.server.dao.widget.WidgetTypeService; import org.thingsboard.server.dao.widget.WidgetsBundleService; @@ -119,6 +121,9 @@ public class DefaultSyncEdgeService implements SyncEdgeService { @Autowired private WidgetTypeService widgetTypeService; + @Autowired + private AdminSettingsService adminSettingsService; + @Autowired private DbCallbackExecutorService dbCallbackExecutorService; @@ -132,6 +137,7 @@ public class DefaultSyncEdgeService implements SyncEdgeService { syncEntityViews(edge); syncDashboards(edge); syncWidgetsBundleAndWidgetTypes(edge); + syncAdminSettings(edge); } catch (Exception e) { log.error("Exception during sync process", e); } @@ -291,6 +297,15 @@ public class DefaultSyncEdgeService implements SyncEdgeService { } } + private void syncAdminSettings(Edge edge) { + try { + AdminSettings mailSettings = adminSettingsService.findAdminSettingsByKey(TenantId.SYS_TENANT_ID, "mail"); + saveEdgeEvent(edge.getTenantId(), edge.getId(), EdgeEventType.ADMIN_SETTINGS, ActionType.UPDATED, null, mapper.valueToTree(mailSettings)); + } catch (Exception e) { + log.error("Can't load admin settings", e); + } + } + private void pushUsersToEdge(TextPageData pageData, Edge edge) { if (pageData != null && pageData.getData() != null && !pageData.getData().isEmpty()) { log.trace("[{}] [{}] user(s) are going to be pushed to edge.", edge.getId(), pageData.getData().size()); diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeEventType.java b/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeEventType.java index 12630b0154..cc295546a8 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeEventType.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/edge/EdgeEventType.java @@ -29,5 +29,6 @@ public enum EdgeEventType { RELATION, TENANT, WIDGETS_BUNDLE, - WIDGET_TYPE + WIDGET_TYPE, + ADMIN_SETTINGS } diff --git a/common/edge-api/src/main/proto/edge.proto b/common/edge-api/src/main/proto/edge.proto index 872af2a529..8be4be9956 100644 --- a/common/edge-api/src/main/proto/edge.proto +++ b/common/edge-api/src/main/proto/edge.proto @@ -61,6 +61,7 @@ message EntityUpdateMsg { RelationUpdateMsg relationUpdateMsg = 12; WidgetsBundleUpdateMsg widgetsBundleUpdateMsg = 13; WidgetTypeUpdateMsg widgetTypeUpdateMsg = 14; + AdminSettingsUpdateMsg adminSettingsUpdateMsg = 15; } enum RequestMsgType { @@ -291,6 +292,13 @@ message WidgetTypeUpdateMsg { bool isSystem = 8; } +message AdminSettingsUpdateMsg { + int64 idMSB = 1; + int64 idLSB = 2; + string key = 3; + string jsonValue = 4; +} + message UserCredentialsUpdateMsg { int64 userIdMSB = 1; int64 userIdLSB = 2; From 444681655e7c0be3d0cbaf28b7121e210544a81a Mon Sep 17 00:00:00 2001 From: Bohdan Smetaniuk Date: Fri, 14 Aug 2020 15:43:46 +0300 Subject: [PATCH 2/2] existing license --- .../AdminSettingsUpdateMsgConstructor.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/AdminSettingsUpdateMsgConstructor.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/AdminSettingsUpdateMsgConstructor.java index 97acc749f8..1b0d188198 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/AdminSettingsUpdateMsgConstructor.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/constructor/AdminSettingsUpdateMsgConstructor.java @@ -1,3 +1,18 @@ +/** + * Copyright © 2016-2020 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package org.thingsboard.server.service.edge.rpc.constructor; import lombok.extern.slf4j.Slf4j;