diff --git a/application/src/main/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmService.java b/application/src/main/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmService.java index 3d27877c6d..f6b327ae42 100644 --- a/application/src/main/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmService.java +++ b/application/src/main/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmService.java @@ -98,17 +98,17 @@ public class DefaultTbAlarmService extends AbstractTbEntityService implements Tb @Override public Alarm assign(Alarm alarm, User user, UserId assigneeId) { long assignTs = System.currentTimeMillis(); - Alarm assignedAlarm = alarmSubscriptionService.assignAlarm(alarm.getTenantId(), alarm.getId(), assigneeId, assignTs); - notificationEntityService.notifyCreateOrUpdateAlarm(assignedAlarm, ActionType.ALARM_ASSIGN, user); - return assignedAlarm; + AlarmOperationResult operationResult = alarmSubscriptionService.assignAlarm(alarm.getTenantId(), alarm.getId(), assigneeId, assignTs); + notificationEntityService.notifyCreateOrUpdateAlarm(operationResult.getAlarm(), ActionType.ALARM_ASSIGN, user); + return operationResult.getAlarm(); } @Override public Alarm unassign(Alarm alarm, User user) { long assignTs = System.currentTimeMillis(); - Alarm unassignedAlarm = alarmSubscriptionService.unassignAlarm(alarm.getTenantId(), alarm.getId(), assignTs); - notificationEntityService.notifyCreateOrUpdateAlarm(unassignedAlarm, ActionType.ALARM_UNASSIGN, user); - return unassignedAlarm; + AlarmOperationResult operationResult = alarmSubscriptionService.unassignAlarm(alarm.getTenantId(), alarm.getId(), assignTs); + notificationEntityService.notifyCreateOrUpdateAlarm(operationResult.getAlarm(), ActionType.ALARM_UNASSIGN, user); + return operationResult.getAlarm(); } @Override diff --git a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbCoreConsumerService.java b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbCoreConsumerService.java index 0b8167dca2..0217322375 100644 --- a/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbCoreConsumerService.java +++ b/application/src/main/java/org/thingsboard/server/service/queue/DefaultTbCoreConsumerService.java @@ -503,13 +503,13 @@ public class DefaultTbCoreConsumerService extends AbstractConsumerService { if (TbSubscriptionType.ALARMS.equals(s.getType())) { @@ -302,15 +302,15 @@ public class DefaultSubscriptionManagerService extends TbApplicationEventListene return null; } }, - s -> alarmInfo.getCreatedTime() >= s.getTs() || alarmInfo.getAssignTs() >= s.getTs(), - s -> alarmInfo, + s -> alarm.getCreatedTime() >= s.getTs() || alarm.getAssignTs() >= s.getTs(), + s -> alarm, false ); callback.onSuccess(); } @Override - public void onAlarmDeleted(TenantId tenantId, EntityId entityId, AlarmInfo alarmInfo, TbCallback callback) { + public void onAlarmDeleted(TenantId tenantId, EntityId entityId, Alarm alarmInfo, TbCallback callback) { onLocalAlarmSubUpdate(entityId, s -> { if (TbSubscriptionType.ALARMS.equals(s.getType())) { @@ -415,19 +415,19 @@ public class DefaultSubscriptionManagerService extends TbApplicationEventListene private void onLocalAlarmSubUpdate(EntityId entityId, Function castFunction, Predicate filterFunction, - Function processFunction, + Function processFunction, boolean deleted) { Set entitySubscriptions = subscriptionsByEntityId.get(entityId); if (entitySubscriptions != null) { entitySubscriptions.stream().map(castFunction).filter(Objects::nonNull).filter(filterFunction).forEach(s -> { - AlarmInfo alarmInfo = processFunction.apply(s); - if (alarmInfo != null) { + Alarm alarm = processFunction.apply(s); + if (alarm != null) { if (serviceId.equals(s.getServiceId())) { - AlarmSubscriptionUpdate update = new AlarmSubscriptionUpdate(s.getSubscriptionId(), alarmInfo, deleted); + AlarmSubscriptionUpdate update = new AlarmSubscriptionUpdate(s.getSubscriptionId(), alarm, deleted); localSubscriptionService.onSubscriptionUpdate(s.getSessionId(), update, TbCallback.EMPTY); } else { TopicPartitionInfo tpi = notificationsTopicService.getNotificationsTopic(ServiceType.TB_CORE, s.getServiceId()); - toCoreNotificationsProducer.send(tpi, toProto(s, alarmInfo, deleted), null); + toCoreNotificationsProducer.send(tpi, toProto(s, alarm, deleted), null); } } }); @@ -564,12 +564,12 @@ public class DefaultSubscriptionManagerService extends TbApplicationEventListene return new TbProtoQueueMsg<>(subscription.getEntityId().getId(), toCoreMsg); } - private TbProtoQueueMsg toProto(TbSubscription subscription, AlarmInfo alarmInfo, boolean deleted) { + private TbProtoQueueMsg toProto(TbSubscription subscription, Alarm alarm, boolean deleted) { TbAlarmSubscriptionUpdateProto.Builder builder = TbAlarmSubscriptionUpdateProto.newBuilder(); builder.setSessionId(subscription.getSessionId()); builder.setSubscriptionId(subscription.getSubscriptionId()); - builder.setAlarm(JacksonUtil.toString(alarmInfo)); + builder.setAlarm(JacksonUtil.toString(alarm)); builder.setDeleted(deleted); ToCoreNotificationMsg toCoreMsg = ToCoreNotificationMsg.newBuilder().setToLocalSubscriptionServiceMsg( diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/SubscriptionManagerService.java b/application/src/main/java/org/thingsboard/server/service/subscription/SubscriptionManagerService.java index 7cb4098bf3..3a5ec5a3d0 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/SubscriptionManagerService.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/SubscriptionManagerService.java @@ -16,6 +16,7 @@ package org.thingsboard.server.service.subscription; import org.springframework.context.ApplicationListener; +import org.thingsboard.server.common.data.alarm.Alarm; import org.thingsboard.server.common.data.alarm.AlarmInfo; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; @@ -42,9 +43,9 @@ public interface SubscriptionManagerService extends ApplicationListener keys, TbCallback callback); - void onAlarmUpdate(TenantId tenantId, EntityId entityId, AlarmInfo alarmInfo, TbCallback callback); + void onAlarmUpdate(TenantId tenantId, EntityId entityId, Alarm alarm, TbCallback callback); - void onAlarmDeleted(TenantId tenantId, EntityId entityId, AlarmInfo alarmInfo, TbCallback callback); + void onAlarmDeleted(TenantId tenantId, EntityId entityId, Alarm alarm, TbCallback callback); } diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/TbAlarmDataSubCtx.java b/application/src/main/java/org/thingsboard/server/service/subscription/TbAlarmDataSubCtx.java index c96bef433d..64592079ee 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/TbAlarmDataSubCtx.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/TbAlarmDataSubCtx.java @@ -211,8 +211,8 @@ public class TbAlarmDataSubCtx extends TbAbstractDataSubCtx { } private void sendWsMsg(String sessionId, AlarmSubscriptionUpdate subscriptionUpdate) { - AlarmInfo alarmInfo = subscriptionUpdate.getAlarm(); - AlarmId alarmId = alarmInfo.getId(); + Alarm alarm = subscriptionUpdate.getAlarm(); + AlarmId alarmId = alarm.getId(); if (subscriptionUpdate.isAlarmDeleted()) { Alarm deleted = alarmsMap.remove(alarmId); if (deleted != null) { @@ -221,10 +221,10 @@ public class TbAlarmDataSubCtx extends TbAbstractDataSubCtx { } else { AlarmData current = alarmsMap.get(alarmId); boolean onCurrentPage = current != null; - boolean matchesFilter = filter(alarmInfo); + boolean matchesFilter = filter(alarm); if (onCurrentPage) { if (matchesFilter) { - AlarmData updated = new AlarmData(alarmInfo, current.getEntityId()); + AlarmData updated = current.update(alarm); updated.getLatest().putAll(current.getLatest()); alarmsMap.put(alarmId, updated); sendWsMsg(new AlarmDataUpdate(cmdId, null, Collections.singletonList(updated), maxEntitiesPerAlarmSubscription, data.getTotalElements())); diff --git a/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionUtils.java b/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionUtils.java index dbd11e22bc..ac6d842501 100644 --- a/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionUtils.java +++ b/application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionUtils.java @@ -190,8 +190,8 @@ public class TbSubscriptionUtils { if (proto.getErrorCode() > 0) { return new AlarmSubscriptionUpdate(proto.getSubscriptionId(), SubscriptionErrorCode.forCode(proto.getErrorCode()), proto.getErrorMsg()); } else { - AlarmInfo alarmInfo = JacksonUtil.fromString(proto.getAlarm(), AlarmInfo.class); - return new AlarmSubscriptionUpdate(proto.getSubscriptionId(), alarmInfo); + Alarm alarm = JacksonUtil.fromString(proto.getAlarm(), Alarm.class); + return new AlarmSubscriptionUpdate(proto.getSubscriptionId(), alarm); } } @@ -317,27 +317,27 @@ public class TbSubscriptionUtils { return entry; } - public static ToCoreMsg toAlarmUpdateProto(TenantId tenantId, EntityId entityId, AlarmInfo alarmInfo) { + public static ToCoreMsg toAlarmUpdateProto(TenantId tenantId, EntityId entityId, Alarm alarm) { TbAlarmUpdateProto.Builder builder = TbAlarmUpdateProto.newBuilder(); builder.setEntityType(entityId.getEntityType().name()); builder.setEntityIdMSB(entityId.getId().getMostSignificantBits()); builder.setEntityIdLSB(entityId.getId().getLeastSignificantBits()); builder.setTenantIdMSB(tenantId.getId().getMostSignificantBits()); builder.setTenantIdLSB(tenantId.getId().getLeastSignificantBits()); - builder.setAlarm(JacksonUtil.toString(alarmInfo)); + builder.setAlarm(JacksonUtil.toString(alarm)); SubscriptionMgrMsgProto.Builder msgBuilder = SubscriptionMgrMsgProto.newBuilder(); msgBuilder.setAlarmUpdate(builder); return ToCoreMsg.newBuilder().setToSubscriptionMgrMsg(msgBuilder.build()).build(); } - public static ToCoreMsg toAlarmDeletedProto(TenantId tenantId, EntityId entityId, AlarmInfo alarmInfo) { + public static ToCoreMsg toAlarmDeletedProto(TenantId tenantId, EntityId entityId, Alarm alarm) { TbAlarmDeleteProto.Builder builder = TbAlarmDeleteProto.newBuilder(); builder.setEntityType(entityId.getEntityType().name()); builder.setEntityIdMSB(entityId.getId().getMostSignificantBits()); builder.setEntityIdLSB(entityId.getId().getLeastSignificantBits()); builder.setTenantIdMSB(tenantId.getId().getMostSignificantBits()); builder.setTenantIdLSB(tenantId.getId().getLeastSignificantBits()); - builder.setAlarm(JacksonUtil.toString(alarmInfo)); + builder.setAlarm(JacksonUtil.toString(alarm)); SubscriptionMgrMsgProto.Builder msgBuilder = SubscriptionMgrMsgProto.newBuilder(); msgBuilder.setAlarmDelete(builder); return ToCoreMsg.newBuilder().setToSubscriptionMgrMsg(msgBuilder.build()).build(); diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultAlarmSubscriptionService.java b/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultAlarmSubscriptionService.java index 77e010d9ff..7c3cda0677 100644 --- a/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultAlarmSubscriptionService.java +++ b/application/src/main/java/org/thingsboard/server/service/telemetry/DefaultAlarmSubscriptionService.java @@ -94,16 +94,16 @@ public class DefaultAlarmSubscriptionService extends AbstractSubscriptionService } @Override - public AlarmInfo createOrUpdateAlarm(Alarm alarm) { + public Alarm createOrUpdateAlarm(Alarm alarm) { AlarmOperationResult result = alarmService.createOrUpdateAlarm(alarm, apiUsageStateService.getApiUsageState(alarm.getTenantId()).isAlarmCreationEnabled()); if (result.isSuccessful()) { onAlarmUpdated(result); AlarmSeverity oldSeverity = result.getOldSeverity(); - if (oldSeverity != null && !oldSeverity.equals(result.getAlarmInfo().getSeverity())) { + if (oldSeverity != null && !oldSeverity.equals(result.getAlarm().getSeverity())) { AlarmComment alarmComment = AlarmComment.builder() .alarmId(alarm.getId()) .type(AlarmCommentType.SYSTEM) - .comment(JacksonUtil.newObjectNode().put("text", String.format("Alarm severity was updated from %s to %s", oldSeverity, result.getAlarmInfo().getSeverity()))) + .comment(JacksonUtil.newObjectNode().put("text", String.format("Alarm severity was updated from %s to %s", oldSeverity, result.getAlarm().getSeverity()))) .build(); alarmCommentService.createOrUpdateAlarmComment(alarm.getTenantId(), alarmComment); } @@ -111,7 +111,7 @@ public class DefaultAlarmSubscriptionService extends AbstractSubscriptionService if (result.isCreated()) { apiUsageClient.report(alarm.getTenantId(), null, ApiUsageRecordKey.CREATED_ALARMS_COUNT); } - return result.getAlarmInfo(); + return result.getAlarm(); } @Override @@ -142,25 +142,25 @@ public class DefaultAlarmSubscriptionService extends AbstractSubscriptionService } @Override - public AlarmInfo assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTs) { + public AlarmOperationResult assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTs) { AlarmOperationResult result = alarmService.assignAlarm(tenantId, alarmId, assigneeId, assignTs); if (result.isSuccessful()) { onAlarmUpdated(result); } else { - log.warn("Failed to assign alarm!"); + log.warn("[{}][{}] Failed to assign alarm.", tenantId, alarmId); } - return result.getAlarmInfo(); + return result; } @Override - public AlarmInfo unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTs) { + public AlarmOperationResult unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTs) { AlarmOperationResult result = alarmService.unassignAlarm(tenantId, alarmId, assignTs); if (result.isSuccessful()) { onAlarmUpdated(result); } else { - log.warn("Failed to unassign alarm!"); + log.warn("[{}][{}] Failed to unassign alarm.", tenantId, alarmId); } - return result.getAlarmInfo(); + return result; } @Override @@ -205,18 +205,18 @@ public class DefaultAlarmSubscriptionService extends AbstractSubscriptionService private void onAlarmUpdated(AlarmOperationResult result) { wsCallBackExecutor.submit(() -> { - AlarmInfo alarmInfo = result.getAlarmInfo(); - TenantId tenantId = alarmInfo.getTenantId(); + Alarm alarm = result.getAlarm(); + TenantId tenantId = alarm.getTenantId(); for (EntityId entityId : result.getPropagatedEntitiesList()) { TopicPartitionInfo tpi = partitionService.resolve(ServiceType.TB_CORE, tenantId, entityId); if (currentPartitions.contains(tpi)) { if (subscriptionManagerService.isPresent()) { - subscriptionManagerService.get().onAlarmUpdate(tenantId, entityId, alarmInfo, TbCallback.EMPTY); + subscriptionManagerService.get().onAlarmUpdate(tenantId, entityId, alarm, TbCallback.EMPTY); } else { log.warn("Possible misconfiguration because subscriptionManagerService is null!"); } } else { - TransportProtos.ToCoreMsg toCoreMsg = TbSubscriptionUtils.toAlarmUpdateProto(tenantId, entityId, alarmInfo); + TransportProtos.ToCoreMsg toCoreMsg = TbSubscriptionUtils.toAlarmUpdateProto(tenantId, entityId, alarm); clusterService.pushMsgToCore(tpi, entityId.getId(), toCoreMsg, null); } } @@ -225,18 +225,18 @@ public class DefaultAlarmSubscriptionService extends AbstractSubscriptionService private void onAlarmDeleted(AlarmOperationResult result) { wsCallBackExecutor.submit(() -> { - AlarmInfo alarmInfo = result.getAlarmInfo(); - TenantId tenantId = alarmInfo.getTenantId(); + Alarm alarm = result.getAlarm(); + TenantId tenantId = alarm.getTenantId(); for (EntityId entityId : result.getPropagatedEntitiesList()) { TopicPartitionInfo tpi = partitionService.resolve(ServiceType.TB_CORE, tenantId, entityId); if (currentPartitions.contains(tpi)) { if (subscriptionManagerService.isPresent()) { - subscriptionManagerService.get().onAlarmDeleted(tenantId, entityId, alarmInfo, TbCallback.EMPTY); + subscriptionManagerService.get().onAlarmDeleted(tenantId, entityId, alarm, TbCallback.EMPTY); } else { log.warn("Possible misconfiguration because subscriptionManagerService is null!"); } } else { - TransportProtos.ToCoreMsg toCoreMsg = TbSubscriptionUtils.toAlarmDeletedProto(tenantId, entityId, alarmInfo); + TransportProtos.ToCoreMsg toCoreMsg = TbSubscriptionUtils.toAlarmDeletedProto(tenantId, entityId, alarm); clusterService.pushMsgToCore(tpi, entityId.getId(), toCoreMsg, null); } } diff --git a/application/src/main/java/org/thingsboard/server/service/telemetry/sub/AlarmSubscriptionUpdate.java b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/AlarmSubscriptionUpdate.java index faf82e7dae..9e2e7c16dc 100644 --- a/application/src/main/java/org/thingsboard/server/service/telemetry/sub/AlarmSubscriptionUpdate.java +++ b/application/src/main/java/org/thingsboard/server/service/telemetry/sub/AlarmSubscriptionUpdate.java @@ -37,15 +37,15 @@ public class AlarmSubscriptionUpdate { @Getter private String errorMsg; @Getter - private AlarmInfo alarm; + private Alarm alarm; @Getter private boolean alarmDeleted; - public AlarmSubscriptionUpdate(int subscriptionId, AlarmInfo alarm) { + public AlarmSubscriptionUpdate(int subscriptionId, Alarm alarm) { this(subscriptionId, alarm, false); } - public AlarmSubscriptionUpdate(int subscriptionId, AlarmInfo alarm, boolean alarmDeleted) { + public AlarmSubscriptionUpdate(int subscriptionId, Alarm alarm, boolean alarmDeleted) { super(); this.subscriptionId = subscriptionId; this.alarm = alarm; diff --git a/application/src/main/java/org/thingsboard/server/service/ttl/AlarmsCleanUpService.java b/application/src/main/java/org/thingsboard/server/service/ttl/AlarmsCleanUpService.java index ad8078d7df..ea059fcb2d 100644 --- a/application/src/main/java/org/thingsboard/server/service/ttl/AlarmsCleanUpService.java +++ b/application/src/main/java/org/thingsboard/server/service/ttl/AlarmsCleanUpService.java @@ -84,8 +84,8 @@ public class AlarmsCleanUpService { PageData toRemove = alarmDao.findAlarmsIdsByEndTsBeforeAndTenantId(expirationTime, tenantId, removalBatchRequest); toRemove.getData().forEach(alarmId -> { relationService.deleteEntityRelations(tenantId, alarmId); - AlarmInfo alarmInfo = alarmService.deleteAlarm(tenantId, alarmId).getAlarmInfo(); - entityActionService.pushEntityActionToRuleEngine(alarmInfo.getOriginator(), alarmInfo, tenantId, null, ActionType.ALARM_DELETE, null); + Alarm alarm = alarmService.deleteAlarm(tenantId, alarmId).getAlarm(); + entityActionService.pushEntityActionToRuleEngine(alarm.getOriginator(), alarm, tenantId, null, ActionType.ALARM_DELETE, null); }); totalRemoved += toRemove.getTotalElements(); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmOperationResult.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmOperationResult.java index 2c0de30801..74675dda91 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmOperationResult.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmOperationResult.java @@ -28,26 +28,22 @@ import java.util.List; @Data @AllArgsConstructor public class AlarmOperationResult { - private final AlarmInfo alarmInfo; + private final Alarm alarm; private final boolean successful; private final boolean created; private final AlarmSeverity oldSeverity; private final List propagatedEntitiesList; public AlarmOperationResult(Alarm alarm, boolean successful) { - this(new AlarmInfo(alarm, null, null, null, null, null), successful, Collections.emptyList()); + this(alarm, successful, Collections.emptyList()); } - public AlarmOperationResult(AlarmInfo alarmInfo, boolean successful) { - this(alarmInfo, successful, Collections.emptyList()); + public AlarmOperationResult(Alarm alarm, boolean successful, List propagatedEntitiesList) { + this(alarm, successful, false, null, propagatedEntitiesList); } - public AlarmOperationResult(AlarmInfo alarmInfo, boolean successful, List propagatedEntitiesList) { - this(alarmInfo, successful, false, null, propagatedEntitiesList); - } - - public AlarmOperationResult(AlarmInfo alarmInfo, boolean successful, boolean created, List propagatedEntitiesList) { - this.alarmInfo = alarmInfo; + public AlarmOperationResult(Alarm alarm, boolean successful, boolean created, List propagatedEntitiesList) { + this.alarm = alarm; this.successful = successful; this.created = created; this.propagatedEntitiesList = propagatedEntitiesList; diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java index b5bee419f5..f2317efa05 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/entity/EntityService.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.dao.entity; -import org.springframework.data.util.Pair; +import org.thingsboard.server.common.data.id.NameLabelAndCustomerDetails; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.TenantId; @@ -34,8 +34,9 @@ public interface EntityService { Optional fetchEntityCustomerId(TenantId tenantId, EntityId entityId); + Optional fetchNameLabelAndCustomerDetails(TenantId tenantId, EntityId entityId); + long countEntitiesByQuery(TenantId tenantId, CustomerId customerId, EntityCountQuery query); PageData findEntityDataByQuery(TenantId tenantId, CustomerId customerId, EntityDataQuery query); - } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/alarm/Alarm.java b/common/data/src/main/java/org/thingsboard/server/common/data/alarm/Alarm.java index e8329bce37..5a291578c8 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/alarm/Alarm.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/alarm/Alarm.java @@ -15,6 +15,7 @@ */ package org.thingsboard.server.common.data.alarm; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.JsonNode; import io.swagger.annotations.ApiModel; @@ -45,6 +46,7 @@ import java.util.List; @EqualsAndHashCode(callSuper = true) @Builder @AllArgsConstructor +@JsonIgnoreProperties(ignoreUnknown = true) public class Alarm extends BaseData implements HasName, HasTenantId, HasCustomerId { @ApiModelProperty(position = 3, value = "JSON object with Tenant Id", accessMode = ApiModelProperty.AccessMode.READ_ONLY) diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/id/NameLabelAndCustomerDetails.java b/common/data/src/main/java/org/thingsboard/server/common/data/id/NameLabelAndCustomerDetails.java new file mode 100644 index 0000000000..8d7413b438 --- /dev/null +++ b/common/data/src/main/java/org/thingsboard/server/common/data/id/NameLabelAndCustomerDetails.java @@ -0,0 +1,27 @@ +/** + * Copyright © 2016-2023 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.common.data.id; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class NameLabelAndCustomerDetails { + private final String name; + private final String label; + private final CustomerId customerId; +} diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/query/AlarmData.java b/common/data/src/main/java/org/thingsboard/server/common/data/query/AlarmData.java index 81c5a1d3b8..59add91784 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/query/AlarmData.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/query/AlarmData.java @@ -35,10 +35,19 @@ public class AlarmData extends AlarmInfo { @Getter private final Map> latest; - public AlarmData(AlarmInfo alarmInfo, EntityId entityId) { - super(alarmInfo); - this.entityId = entityId; - this.latest = new HashMap<>(); + public AlarmData update(Alarm alarm) { + this.setEndTs(alarm.getEndTs()); + this.setSeverity(alarm.getSeverity()); + this.setStatus(alarm.getStatus()); + this.setDetails(alarm.getDetails()); + this.setPropagate(alarm.isPropagate()); + this.setPropagateToOwner(alarm.isPropagateToOwner()); + this.setPropagateToTenant(alarm.isPropagateToTenant()); + this.setPropagateRelationTypes(alarm.getPropagateRelationTypes()); + // This should be changed via separate message? + this.setAckTs(alarm.getAckTs()); + this.setClearTs(alarm.getClearTs()); + return this; } public AlarmData(Alarm alarm, EntityId entityId) { diff --git a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java index 9279abbdb2..814855b2a4 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java @@ -38,6 +38,7 @@ import org.thingsboard.server.common.data.alarm.AlarmStatus; import org.thingsboard.server.common.data.alarm.EntityAlarm; import org.thingsboard.server.common.data.exception.ApiUsageLimitsExceededException; import org.thingsboard.server.common.data.id.AlarmId; +import org.thingsboard.server.common.data.id.NameLabelAndCustomerDetails; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.HasId; @@ -161,8 +162,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ if (alarm == null) { return new AlarmOperationResult(alarm, false); } - AlarmInfo alarmInfo = getAlarmInfo(tenantId, alarm); - AlarmOperationResult result = new AlarmOperationResult(alarmInfo, true, new ArrayList<>(getPropagationEntityIds(alarm))); + AlarmOperationResult result = new AlarmOperationResult(alarm, true, new ArrayList<>(getPropagationEntityIds(alarm))); deleteEntityRelations(tenantId, alarm.getId()); alarmDao.removeById(tenantId, alarm.getUuidId()); return result; @@ -172,8 +172,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ log.debug("New Alarm : {}", alarm); Alarm saved = alarmDao.save(alarm.getTenantId(), alarm); List propagatedEntitiesList = createEntityAlarmRecords(saved); - AlarmInfo alarmInfo = getAlarmInfo(alarm.getTenantId(), saved); - return new AlarmOperationResult(alarmInfo, true, true, propagatedEntitiesList); + return new AlarmOperationResult(saved, true, true, propagatedEntitiesList); } private List createEntityAlarmRecords(Alarm alarm) throws InterruptedException, ExecutionException { @@ -229,8 +228,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ } else { propagatedEntitiesList = new ArrayList<>(getPropagationEntityIds(result)); } - AlarmInfo alarmInfo = getAlarmInfo(newAlarm.getTenantId(), newAlarm); - return new AlarmOperationResult(alarmInfo, true, false, oldAlarmSeverity, propagatedEntitiesList); + return new AlarmOperationResult(result, true, false, oldAlarmSeverity, propagatedEntitiesList); } @Override @@ -247,8 +245,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ alarm.setStatus(newStatus); alarm.setAckTs(ackTime); alarm = alarmDao.save(alarm.getTenantId(), alarm); - AlarmInfo alarmInfo = getAlarmInfo(tenantId, alarm); - return new AlarmOperationResult(alarmInfo, true, new ArrayList<>(getPropagationEntityIds(alarm))); + return new AlarmOperationResult(alarm, true, new ArrayList<>(getPropagationEntityIds(alarm))); } } }); @@ -271,8 +268,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ alarm.setDetails(details); } alarm = alarmDao.save(alarm.getTenantId(), alarm); - AlarmInfo alarmInfo = getAlarmInfo(tenantId, alarm); - return new AlarmOperationResult(alarmInfo, true, new ArrayList<>(getPropagationEntityIds(alarm))); + return new AlarmOperationResult(alarm, true, new ArrayList<>(getPropagationEntityIds(alarm))); } } }); @@ -290,8 +286,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ alarm.setAssigneeId(assigneeId); alarm.setAssignTs(assignTime); alarm = alarmDao.save(alarm.getTenantId(), alarm); - AlarmInfo alarmInfo = getAlarmInfo(tenantId, alarm); - return new AlarmOperationResult(alarmInfo, true, new ArrayList<>(getPropagationEntityIds(alarm))); + return new AlarmOperationResult(alarm, true, new ArrayList<>(getPropagationEntityIds(alarm))); } } }); @@ -309,8 +304,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ alarm.setAssigneeId(null); alarm.setAssignTs(assignTime); alarm = alarmDao.save(alarm.getTenantId(), alarm); - AlarmInfo alarmInfo = getAlarmInfo(tenantId, alarm); - return new AlarmOperationResult(alarmInfo, true, new ArrayList<>(getPropagationEntityIds(alarm))); + return new AlarmOperationResult(alarm, true, new ArrayList<>(getPropagationEntityIds(alarm))); } } }); @@ -359,10 +353,15 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ private ListenableFuture> fetchAlarmsOriginators(TenantId tenantId, PageData alarms) { List> alarmFutures = new ArrayList<>(alarms.getData().size()); for (AlarmInfo alarmInfo : alarms.getData()) { - alarmInfo.setOriginatorName( - entityService.fetchEntityName(tenantId, alarmInfo.getOriginator()).orElse("Deleted")); - alarmInfo.setOriginatorLabel( - entityService.fetchEntityLabel(tenantId, alarmInfo.getOriginator()).orElse(alarmInfo.getOriginatorName())); + Optional detailsOpt = entityService.fetchNameLabelAndCustomerDetails(tenantId, alarmInfo.getOriginator()); + if (detailsOpt.isPresent() && detailsOpt.get().getName() != null) { + NameLabelAndCustomerDetails details = detailsOpt.get(); + alarmInfo.setOriginatorName(details.getName()); + alarmInfo.setOriginatorLabel(details.getLabel()); + } else { + alarmInfo.setOriginatorName("Deleted"); + alarmInfo.setOriginatorLabel("Deleted"); + } alarmFutures.add(Futures.immediateFuture(alarmInfo)); } return Futures.transform(Futures.successfulAsList(alarmFutures), @@ -465,8 +464,15 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ String assigneeLastName = null; String assigneeEmail = null; - originatorName = entityService.fetchEntityName(tenantId, alarm.getOriginator()).orElse("Deleted"); - originatorLabel = entityService.fetchEntityLabel(tenantId, alarm.getOriginator()).orElse(originatorName); + Optional detailsOpt = entityService.fetchNameLabelAndCustomerDetails(tenantId, alarm.getOriginator()); + if (detailsOpt.isPresent() && detailsOpt.get().getName() != null) { + NameLabelAndCustomerDetails details = detailsOpt.get(); + originatorName = details.getName(); + originatorLabel = details.getLabel(); + } else { + originatorName = "Deleted"; + originatorLabel = "Deleted"; + } if (alarm.getAssigneeId() != null) { User assignedUser = userService.findUserById(tenantId, alarm.getAssigneeId()); diff --git a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java index 89e0f28db2..cbce9e48a1 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java @@ -16,9 +16,7 @@ package org.thingsboard.server.dao.entity; import lombok.extern.slf4j.Slf4j; -import org.jetbrains.annotations.Nullable; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.thingsboard.server.common.data.HasCustomerId; @@ -26,6 +24,8 @@ import org.thingsboard.server.common.data.HasEmail; import org.thingsboard.server.common.data.HasLabel; import org.thingsboard.server.common.data.HasName; import org.thingsboard.server.common.data.HasTitle; +import org.thingsboard.server.common.data.StringUtils; +import org.thingsboard.server.common.data.id.NameLabelAndCustomerDetails; import org.thingsboard.server.common.data.id.CustomerId; import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.HasId; @@ -98,6 +98,12 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe return fetchAndConvert(tenantId, entityId, this::getCustomerId); } + @Override + public Optional fetchNameLabelAndCustomerDetails(TenantId tenantId, EntityId entityId) { + log.trace("Executing fetchNameLabelAndCustomerDetails [{}]", entityId); + return fetchAndConvert(tenantId, entityId, this::getNameLabelAndCustomerDetails); + } + private Optional fetchAndConvert(TenantId tenantId, EntityId entityId, Function, T> converter) { EntityDaoService entityDaoService = entityServiceRegistry.getServiceByEntityType(entityId.getEntityType()); Optional> entityOpt = entityDaoService.findEntity(tenantId, entityId); @@ -109,25 +115,24 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe } private String getLabel(HasId entity) { - String entityLabel = null; - if (entity instanceof HasTitle) { - entityLabel = ((HasTitle) entity).getTitle(); + if (entity instanceof HasTitle && StringUtils.isNotEmpty(((HasTitle) entity).getTitle())) { + return ((HasTitle) entity).getTitle(); } - if (entity instanceof HasLabel && entityLabel == null) { - entityLabel = ((HasLabel) entity).getLabel(); + if (entity instanceof HasLabel && StringUtils.isNotEmpty(((HasLabel) entity).getLabel())) { + return ((HasLabel) entity).getLabel(); } - if (entity instanceof HasEmail && entityLabel == null) { - entityLabel = ((HasEmail) entity).getEmail(); + if (entity instanceof HasEmail && StringUtils.isNotEmpty(((HasEmail) entity).getEmail())) { + return ((HasEmail) entity).getEmail(); } - if (entity instanceof HasName && entityLabel == null) { - entityLabel = ((HasName) entity).getName(); + if (entity instanceof HasName && StringUtils.isNotEmpty(((HasName) entity).getName())) { + return ((HasName) entity).getName(); } - return entityLabel; + return null; } - private CustomerId getCustomerId(HasId hasId) { - if (hasId instanceof HasCustomerId) { - HasCustomerId hasCustomerId = (HasCustomerId) hasId; + private CustomerId getCustomerId(HasId entity) { + if (entity instanceof HasCustomerId) { + HasCustomerId hasCustomerId = (HasCustomerId) entity; CustomerId customerId = hasCustomerId.getCustomerId(); if (customerId == null) { customerId = NULL_CUSTOMER_ID; @@ -137,6 +142,10 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe return NULL_CUSTOMER_ID; } + private NameLabelAndCustomerDetails getNameLabelAndCustomerDetails(HasId entity) { + return new NameLabelAndCustomerDetails(getName(entity), getLabel(entity), getCustomerId(entity)); + } + private static void validateEntityCountQuery(EntityCountQuery query) { if (query == null) { throw new IncorrectParameterException("Query must be specified."); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmCommentServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmCommentServiceTest.java index e3dd8fcfb9..00eba295ae 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmCommentServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmCommentServiceTest.java @@ -60,7 +60,7 @@ public abstract class BaseAlarmCommentServiceTest extends AbstractServiceTest { .type(TEST_ALARM) .severity(AlarmSeverity.CRITICAL).status(AlarmStatus.ACTIVE_UNACK) .startTs(System.currentTimeMillis()).build(); - alarm = new Alarm(alarmService.createOrUpdateAlarm(alarm).getAlarmInfo()); + alarm = alarmService.createOrUpdateAlarm(alarm).getAlarm(); user = new User(); user.setAuthority(Authority.TENANT_ADMIN); diff --git a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java index f451b6232b..d9c68ae05f 100644 --- a/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java +++ b/dao/src/test/java/org/thingsboard/server/dao/service/BaseAlarmServiceTest.java @@ -96,7 +96,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .startTs(ts).build(); AlarmOperationResult result = alarmService.createOrUpdateAlarm(alarm); - Alarm created = new Alarm(result.getAlarmInfo()); + Alarm created = result.getAlarm(); Assert.assertNotNull(created); Assert.assertNotNull(created.getId()); @@ -135,7 +135,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .startTs(ts).build(); AlarmOperationResult result = alarmService.createOrUpdateAlarm(alarm); - Alarm created = new Alarm(result.getAlarmInfo()); + Alarm created = result.getAlarm(); // Check child relation PageData alarms = alarmService.findAlarms(tenantId, AlarmQuery.builder() @@ -160,7 +160,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { created.setPropagate(true); result = alarmService.createOrUpdateAlarm(created); - created = new Alarm(result.getAlarmInfo()); + created = result.getAlarm(); // Check child relation alarms = alarmService.findAlarms(tenantId, AlarmQuery.builder() @@ -239,7 +239,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .startTs(ts).build(); AlarmOperationResult result = alarmService.createOrUpdateAlarm(alarm); - AlarmInfo created = result.getAlarmInfo(); + Alarm created = result.getAlarm(); User tenantUser = new User(); tenantUser.setTenantId(tenantId); @@ -252,7 +252,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { Assert.assertNotNull(tenantUser); AlarmOperationResult assignmentResult = alarmService.assignAlarm(tenantId, created.getId(), tenantUser.getId(), ts); - created = assignmentResult.getAlarmInfo(); + created = assignmentResult.getAlarm(); PageData alarms = alarmService.findAlarms(tenantId, AlarmQuery.builder() .assigneeId(tenantUser.getId()) @@ -262,7 +262,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { ).build()).get(); Assert.assertNotNull(alarms.getData()); Assert.assertEquals(1, alarms.getData().size()); - Assert.assertEquals(created, alarms.getData().get(0)); + Assert.assertEquals(created, new Alarm(alarms.getData().get(0))); AlarmDataPageLink pageLink = new AlarmDataPageLink(); pageLink.setPage(0); @@ -272,7 +272,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { PageData assignedAlarms = alarmService.findAlarmDataByQueryForEntities(tenantId, toQuery(pageLink), Collections.singletonList(created.getOriginator())); Assert.assertNotNull(assignedAlarms.getData()); Assert.assertEquals(1, assignedAlarms.getData().size()); - Assert.assertEquals(created, new AlarmInfo(assignedAlarms.getData().get(0))); + Assert.assertEquals(created, new Alarm(assignedAlarms.getData().get(0))); User tenantUser2 = new User(); tenantUser2.setTenantId(tenantId); @@ -319,7 +319,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .severity(AlarmSeverity.CRITICAL).status(AlarmStatus.ACTIVE_UNACK) .startTs(ts).build(); AlarmOperationResult result = alarmService.createOrUpdateAlarm(tenantAlarm); - tenantAlarm = new Alarm(result.getAlarmInfo()); + tenantAlarm = result.getAlarm(); Alarm deviceAlarm = Alarm.builder().tenantId(tenantId) .originator(customerDevice.getId()) @@ -328,7 +328,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .severity(AlarmSeverity.CRITICAL).status(AlarmStatus.ACTIVE_UNACK) .startTs(ts).build(); result = alarmService.createOrUpdateAlarm(deviceAlarm); - deviceAlarm = result.getAlarmInfo(); + deviceAlarm = result.getAlarm(); AlarmDataPageLink pageLink = new AlarmDataPageLink(); pageLink.setPage(0); @@ -346,7 +346,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { PageData customerAlarms = alarmService.findAlarmDataByQueryForEntities(tenantId, toQuery(pageLink), Collections.singletonList(customerDevice.getId())); Assert.assertEquals(1, customerAlarms.getData().size()); - Assert.assertEquals(deviceAlarm, new AlarmInfo(customerAlarms.getData().get(0))); + Assert.assertEquals(deviceAlarm, new Alarm(customerAlarms.getData().get(0))); PageData alarms = alarmService.findAlarms(tenantId, AlarmQuery.builder() .affectedEntityId(tenantDevice.getId()) @@ -395,7 +395,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .severity(AlarmSeverity.CRITICAL).status(AlarmStatus.ACTIVE_UNACK) .startTs(ts).build(); AlarmOperationResult result = alarmService.createOrUpdateAlarm(tenantAlarm); - tenantAlarm = new Alarm(result.getAlarmInfo()); + tenantAlarm = result.getAlarm(); Alarm customerAlarm = Alarm.builder().tenantId(tenantId) .originator(tenantDevice.getId()) @@ -404,7 +404,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .severity(AlarmSeverity.CRITICAL).status(AlarmStatus.ACTIVE_UNACK) .startTs(ts).build(); result = alarmService.createOrUpdateAlarm(customerAlarm); - customerAlarm = new Alarm(result.getAlarmInfo()); + customerAlarm = result.getAlarm(); AlarmDataPageLink pageLink = new AlarmDataPageLink(); pageLink.setPage(0); @@ -445,7 +445,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .severity(AlarmSeverity.CRITICAL).status(AlarmStatus.ACTIVE_UNACK) .startTs(ts).build(); AlarmOperationResult result = alarmService.createOrUpdateAlarm(tenantAlarm); - tenantAlarm = new Alarm(result.getAlarmInfo()); + tenantAlarm = result.getAlarm(); Alarm customerAlarm = Alarm.builder().tenantId(tenantId) .originator(device.getId()) @@ -455,7 +455,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .severity(AlarmSeverity.CRITICAL).status(AlarmStatus.ACTIVE_UNACK) .startTs(ts).build(); result = alarmService.createOrUpdateAlarm(customerAlarm); - customerAlarm = new Alarm(result.getAlarmInfo()); + customerAlarm = result.getAlarm(); AlarmDataPageLink pageLink = new AlarmDataPageLink(); pageLink.setPage(0); @@ -512,7 +512,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .status(AlarmStatus.ACTIVE_UNACK) .startTs(System.currentTimeMillis()) .build(); - alarm1 = alarmService.createOrUpdateAlarm(alarm1).getAlarmInfo(); + alarm1 = alarmService.createOrUpdateAlarm(alarm1).getAlarm(); alarmService.clearAlarm(tenantId, alarm1.getId(), null, System.currentTimeMillis()).get(); Alarm alarm2 = Alarm.builder() @@ -523,7 +523,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .status(AlarmStatus.ACTIVE_ACK) .startTs(System.currentTimeMillis()) .build(); - alarm2 = alarmService.createOrUpdateAlarm(alarm2).getAlarmInfo(); + alarm2 = alarmService.createOrUpdateAlarm(alarm2).getAlarm(); alarmService.clearAlarm(tenantId, alarm2.getId(), null, System.currentTimeMillis()).get(); Alarm alarm3 = Alarm.builder() @@ -534,7 +534,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .status(AlarmStatus.ACTIVE_ACK) .startTs(System.currentTimeMillis()) .build(); - alarm3 = alarmService.createOrUpdateAlarm(alarm3).getAlarmInfo(); + alarm3 = alarmService.createOrUpdateAlarm(alarm3).getAlarm(); Assert.assertEquals(AlarmSeverity.MAJOR, alarmService.findHighestAlarmSeverity(tenantId, customerDevice.getId(), AlarmSearchStatus.UNACK, null, null)); Assert.assertEquals(AlarmSeverity.CRITICAL, alarmService.findHighestAlarmSeverity(tenantId, customerDevice.getId(), null, null, null)); @@ -564,7 +564,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .startTs(ts).build(); AlarmOperationResult result = alarmService.createOrUpdateAlarm(alarm); - AlarmInfo created = result.getAlarmInfo(); + Alarm created = result.getAlarm(); AlarmDataPageLink pageLink = new AlarmDataPageLink(); pageLink.setPage(0); @@ -581,7 +581,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { Assert.assertNotNull(alarms.getData()); Assert.assertEquals(1, alarms.getData().size()); - Assert.assertEquals(created, new AlarmInfo(alarms.getData().get(0))); + Assert.assertEquals(created, new Alarm(alarms.getData().get(0))); pageLink.setPage(0); pageLink.setPageSize(10); @@ -596,18 +596,18 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { alarms = alarmService.findAlarmDataByQueryForEntities(tenantId, toQuery(pageLink), Collections.singletonList(childId)); Assert.assertNotNull(alarms.getData()); Assert.assertEquals(1, alarms.getData().size()); - Assert.assertEquals(created, new AlarmInfo(alarms.getData().get(0))); + Assert.assertEquals(created, new Alarm(alarms.getData().get(0))); pageLink.setSearchPropagatedAlarms(true); alarms = alarmService.findAlarmDataByQueryForEntities(tenantId, toQuery(pageLink), Collections.singletonList(childId)); Assert.assertNotNull(alarms.getData()); Assert.assertEquals(1, alarms.getData().size()); - Assert.assertEquals(created, new AlarmInfo(alarms.getData().get(0))); + Assert.assertEquals(created, new Alarm(alarms.getData().get(0))); // Check child relation created.setPropagate(true); result = alarmService.createOrUpdateAlarm(created); - created = result.getAlarmInfo(); + created = result.getAlarm(); // Check child relation pageLink.setPage(0); @@ -623,7 +623,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { alarms = alarmService.findAlarmDataByQueryForEntities(tenantId, toQuery(pageLink), Collections.singletonList(childId)); Assert.assertNotNull(alarms.getData()); Assert.assertEquals(1, alarms.getData().size()); - Assert.assertEquals(created, new AlarmInfo(alarms.getData().get(0))); + Assert.assertEquals(created, new Alarm(alarms.getData().get(0))); // Check parent relation pageLink.setPage(0); @@ -639,7 +639,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { alarms = alarmService.findAlarmDataByQueryForEntities(tenantId, toQuery(pageLink), Collections.singletonList(parentId)); Assert.assertNotNull(alarms.getData()); Assert.assertEquals(1, alarms.getData().size()); - Assert.assertEquals(created, new AlarmInfo(alarms.getData().get(0))); + Assert.assertEquals(created, new Alarm(alarms.getData().get(0))); PageData alarmsInfoData = alarmService.findAlarms(tenantId, AlarmQuery.builder() .affectedEntityId(childId) @@ -650,7 +650,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { ).build()).get(); Assert.assertNotNull(alarmsInfoData.getData()); Assert.assertEquals(1, alarmsInfoData.getData().size()); - Assert.assertEquals(created, alarmsInfoData.getData().get(0)); + Assert.assertEquals(created, new Alarm(alarmsInfoData.getData().get(0))); alarmsInfoData = alarmService.findAlarms(tenantId, AlarmQuery.builder() .affectedEntityId(parentId) @@ -661,7 +661,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { ).build()).get(); Assert.assertNotNull(alarmsInfoData.getData()); Assert.assertEquals(1, alarmsInfoData.getData().size()); - Assert.assertEquals(created, alarmsInfoData.getData().get(0)); + Assert.assertEquals(created, new Alarm(alarmsInfoData.getData().get(0))); alarmsInfoData = alarmService.findAlarms(tenantId, AlarmQuery.builder() .affectedEntityId(parentId2) @@ -672,7 +672,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { ).build()).get(); Assert.assertNotNull(alarmsInfoData.getData()); Assert.assertEquals(1, alarmsInfoData.getData().size()); - Assert.assertEquals(created, alarmsInfoData.getData().get(0)); + Assert.assertEquals(created, new Alarm(alarmsInfoData.getData().get(0))); pageLink.setPage(0); pageLink.setPageSize(10); @@ -687,9 +687,9 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { alarms = alarmService.findAlarmDataByQueryForEntities(tenantId, toQuery(pageLink), Collections.singletonList(parentId)); Assert.assertNotNull(alarms.getData()); Assert.assertEquals(1, alarms.getData().size()); - Assert.assertEquals(created, new AlarmInfo(alarms.getData().get(0))); + Assert.assertEquals(created, new Alarm(alarms.getData().get(0))); - created = alarmService.ackAlarm(tenantId, created.getId(), System.currentTimeMillis()).get().getAlarmInfo(); + created = alarmService.ackAlarm(tenantId, created.getId(), System.currentTimeMillis()).get().getAlarm(); pageLink.setPage(0); pageLink.setPageSize(10); @@ -704,7 +704,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { alarms = alarmService.findAlarmDataByQueryForEntities(tenantId, toQuery(pageLink), Collections.singletonList(childId)); Assert.assertNotNull(alarms.getData()); Assert.assertEquals(1, alarms.getData().size()); - Assert.assertEquals(created, new AlarmInfo(alarms.getData().get(0))); + Assert.assertEquals(created, new Alarm(alarms.getData().get(0))); } @Test @@ -724,7 +724,7 @@ public abstract class BaseAlarmServiceTest extends AbstractServiceTest { .startTs(ts).build(); AlarmOperationResult result = alarmService.createOrUpdateAlarm(alarm); - Alarm created = new Alarm(result.getAlarmInfo()); + Alarm created = result.getAlarm(); PageData alarms = alarmService.findAlarms(tenantId, AlarmQuery.builder() .affectedEntityId(childId) diff --git a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/RuleEngineAlarmService.java b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/RuleEngineAlarmService.java index e9bcd60c3a..cf35729de7 100644 --- a/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/RuleEngineAlarmService.java +++ b/rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/RuleEngineAlarmService.java @@ -40,7 +40,7 @@ import java.util.Collection; */ public interface RuleEngineAlarmService { - AlarmInfo createOrUpdateAlarm(Alarm alarm); + Alarm createOrUpdateAlarm(Alarm alarm); Boolean deleteAlarm(TenantId tenantId, AlarmId alarmId); @@ -50,9 +50,9 @@ public interface RuleEngineAlarmService { ListenableFuture clearAlarmForResult(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs); - AlarmInfo assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTs); + AlarmOperationResult assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTs); - AlarmInfo unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTs); + AlarmOperationResult unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTs); ListenableFuture findAlarmByIdAsync(TenantId tenantId, AlarmId alarmId); diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmState.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmState.java index e981eebbab..8002ff331f 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmState.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/profile/AlarmState.java @@ -132,7 +132,7 @@ class AlarmState { ); DonAsynchron.withCallback(alarmClearOperationResult, result -> { - pushMsg(ctx, msg, new TbAlarmResult(false, false, true, result.getAlarmInfo()), clearState); + pushMsg(ctx, msg, new TbAlarmResult(false, false, true, result.getAlarm()), clearState); }, throwable -> { throw new RuntimeException(throwable);