Browse Source

introduced AlarmCommentSubType enum

pull/14336/head
dashevchenko 11 months ago
parent
commit
5ab9fa72a2
  1. 10
      application/src/main/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmCommentService.java
  2. 50
      application/src/main/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmService.java
  3. 8
      application/src/main/java/org/thingsboard/server/service/telemetry/DefaultAlarmSubscriptionService.java
  4. 13
      application/src/test/java/org/thingsboard/server/controller/AlarmCommentControllerTest.java
  5. 36
      common/data/src/main/java/org/thingsboard/server/common/data/alarm/AlarmCommentSubType.java

10
application/src/main/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmCommentService.java

@ -30,6 +30,8 @@ import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.dao.alarm.AlarmCommentService; import org.thingsboard.server.dao.alarm.AlarmCommentService;
import org.thingsboard.server.service.entitiy.AbstractTbEntityService; import org.thingsboard.server.service.entitiy.AbstractTbEntityService;
import static org.thingsboard.server.common.data.alarm.AlarmCommentSubType.COMMENT_DELETED;
@Service @Service
@AllArgsConstructor @AllArgsConstructor
public class DefaultTbAlarmCommentService extends AbstractTbEntityService implements TbAlarmCommentService { public class DefaultTbAlarmCommentService extends AbstractTbEntityService implements TbAlarmCommentService {
@ -59,10 +61,10 @@ public class DefaultTbAlarmCommentService extends AbstractTbEntityService implem
if (alarmComment.getType() == AlarmCommentType.OTHER) { if (alarmComment.getType() == AlarmCommentType.OTHER) {
alarmComment.setType(AlarmCommentType.SYSTEM); alarmComment.setType(AlarmCommentType.SYSTEM);
alarmComment.setUserId(null); alarmComment.setUserId(null);
alarmComment.setComment(JacksonUtil.newObjectNode().put("text", alarmComment.setComment(JacksonUtil.newObjectNode()
String.format("User %s deleted his comment", .put("text", String.format(COMMENT_DELETED.getText(), user.getTitle()))
(user.getFirstName() == null || user.getLastName() == null) ? user.getName() : user.getFirstName() + " " + user.getLastName())) .put("subtype", COMMENT_DELETED.name())
.put("subtype", "deleted")); .put("userName", user.getTitle()));
AlarmComment savedAlarmComment = checkNotNull(alarmCommentService.saveAlarmComment(alarm.getTenantId(), alarmComment)); AlarmComment savedAlarmComment = checkNotNull(alarmCommentService.saveAlarmComment(alarm.getTenantId(), alarmComment));
logEntityActionService.logEntityAction(alarm.getTenantId(), alarm.getId(), alarm, alarm.getCustomerId(), ActionType.DELETED_COMMENT, user, savedAlarmComment); logEntityActionService.logEntityAction(alarm.getTenantId(), alarm.getId(), alarm, alarm.getCustomerId(), ActionType.DELETED_COMMENT, user, savedAlarmComment);
} else { } else {

50
application/src/main/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmService.java

@ -27,6 +27,7 @@ import org.thingsboard.server.common.data.alarm.Alarm;
import org.thingsboard.server.common.data.alarm.AlarmApiCallResult; import org.thingsboard.server.common.data.alarm.AlarmApiCallResult;
import org.thingsboard.server.common.data.alarm.AlarmAssignee; import org.thingsboard.server.common.data.alarm.AlarmAssignee;
import org.thingsboard.server.common.data.alarm.AlarmComment; import org.thingsboard.server.common.data.alarm.AlarmComment;
import org.thingsboard.server.common.data.alarm.AlarmCommentSubType;
import org.thingsboard.server.common.data.alarm.AlarmCommentType; import org.thingsboard.server.common.data.alarm.AlarmCommentType;
import org.thingsboard.server.common.data.alarm.AlarmCreateOrUpdateActiveRequest; import org.thingsboard.server.common.data.alarm.AlarmCreateOrUpdateActiveRequest;
import org.thingsboard.server.common.data.alarm.AlarmInfo; import org.thingsboard.server.common.data.alarm.AlarmInfo;
@ -39,9 +40,17 @@ import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.UserId; import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.service.entitiy.AbstractTbEntityService; import org.thingsboard.server.service.entitiy.AbstractTbEntityService;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.UUID; import java.util.UUID;
import static org.thingsboard.server.common.data.alarm.AlarmCommentSubType.ACKED_BY_USER;
import static org.thingsboard.server.common.data.alarm.AlarmCommentSubType.ASSIGNED_TO_USER;
import static org.thingsboard.server.common.data.alarm.AlarmCommentSubType.CLEARED_BY_USER;
import static org.thingsboard.server.common.data.alarm.AlarmCommentSubType.UNASSIGNED_BY_USER;
import static org.thingsboard.server.common.data.alarm.AlarmCommentSubType.UNASSIGNED_FROM_DELETED_USER;
@Service @Service
@AllArgsConstructor @AllArgsConstructor
@Slf4j @Slf4j
@ -102,8 +111,7 @@ public class DefaultTbAlarmService extends AbstractTbEntityService implements Tb
} }
AlarmInfo alarmInfo = result.getAlarm(); AlarmInfo alarmInfo = result.getAlarm();
if (result.isModified()) { if (result.isModified()) {
String systemComment = String.format("Alarm was acknowledged by user %s", user.getTitle()); addSystemAlarmComment(alarmInfo, user, ACKED_BY_USER,"userName", user.getTitle());
addSystemAlarmComment(alarmInfo, user, "ACK", systemComment);
logEntityActionService.logEntityAction(alarm.getTenantId(), alarm.getOriginator(), alarmInfo, logEntityActionService.logEntityAction(alarm.getTenantId(), alarm.getOriginator(), alarmInfo,
alarmInfo.getCustomerId(), ActionType.ALARM_ACK, user); alarmInfo.getCustomerId(), ActionType.ALARM_ACK, user);
} else { } else {
@ -125,8 +133,7 @@ public class DefaultTbAlarmService extends AbstractTbEntityService implements Tb
} }
AlarmInfo alarmInfo = result.getAlarm(); AlarmInfo alarmInfo = result.getAlarm();
if (result.isCleared()) { if (result.isCleared()) {
String systemComment = String.format("Alarm was cleared by user %s", user.getTitle()); addSystemAlarmComment(alarmInfo, user, CLEARED_BY_USER, "userName", user.getTitle());
addSystemAlarmComment(alarmInfo, user, "CLEAR", systemComment);
logEntityActionService.logEntityAction(alarm.getTenantId(), alarm.getOriginator(), alarmInfo, logEntityActionService.logEntityAction(alarm.getTenantId(), alarm.getOriginator(), alarmInfo,
alarmInfo.getCustomerId(), ActionType.ALARM_CLEAR, user); alarmInfo.getCustomerId(), ActionType.ALARM_CLEAR, user);
} else { } else {
@ -144,8 +151,7 @@ public class DefaultTbAlarmService extends AbstractTbEntityService implements Tb
AlarmInfo alarmInfo = result.getAlarm(); AlarmInfo alarmInfo = result.getAlarm();
if (result.isModified()) { if (result.isModified()) {
AlarmAssignee assignee = alarmInfo.getAssignee(); AlarmAssignee assignee = alarmInfo.getAssignee();
String systemComment = String.format("Alarm was assigned by user %s to user %s", user.getTitle(), assignee.getTitle()); addSystemAlarmComment(alarmInfo, user, ASSIGNED_TO_USER,"userName", user.getTitle(), "assigneeName", assignee.getTitle());
addSystemAlarmComment(alarmInfo, user, "ASSIGN", systemComment, assignee.getId());
logEntityActionService.logEntityAction(alarm.getTenantId(), alarm.getOriginator(), alarmInfo, logEntityActionService.logEntityAction(alarm.getTenantId(), alarm.getOriginator(), alarmInfo,
alarmInfo.getCustomerId(), ActionType.ALARM_ASSIGNED, user); alarmInfo.getCustomerId(), ActionType.ALARM_ASSIGNED, user);
} else { } else {
@ -162,8 +168,7 @@ public class DefaultTbAlarmService extends AbstractTbEntityService implements Tb
} }
AlarmInfo alarmInfo = result.getAlarm(); AlarmInfo alarmInfo = result.getAlarm();
if (result.isModified()) { if (result.isModified()) {
String systemComment = String.format("Alarm was unassigned by user %s", user.getTitle()); addSystemAlarmComment(alarmInfo, user, UNASSIGNED_BY_USER, "userName", user.getTitle());
addSystemAlarmComment(alarmInfo, user, "ASSIGN", systemComment);
logEntityActionService.logEntityAction(alarm.getTenantId(), alarm.getOriginator(), alarmInfo, logEntityActionService.logEntityAction(alarm.getTenantId(), alarm.getOriginator(), alarmInfo,
alarmInfo.getCustomerId(), ActionType.ALARM_UNASSIGNED, user); alarmInfo.getCustomerId(), ActionType.ALARM_UNASSIGNED, user);
} else { } else {
@ -182,8 +187,7 @@ public class DefaultTbAlarmService extends AbstractTbEntityService implements Tb
continue; continue;
} }
if (result.isModified()) { if (result.isModified()) {
String comment = String.format("Alarm was unassigned because user %s - was deleted", userTitle); addSystemAlarmComment(result.getAlarm(), null, UNASSIGNED_FROM_DELETED_USER, "userName", userTitle);
addSystemAlarmComment(result.getAlarm(), null, "ASSIGN", comment);
logEntityActionService.logEntityAction(result.getAlarm().getTenantId(), result.getAlarm().getOriginator(), result.getAlarm(), result.getAlarm().getCustomerId(), ActionType.ALARM_UNASSIGNED, null); logEntityActionService.logEntityAction(result.getAlarm().getTenantId(), result.getAlarm().getOriginator(), result.getAlarm(), result.getAlarm().getCustomerId(), ActionType.ALARM_UNASSIGNED, null);
} }
} }
@ -214,20 +218,24 @@ public class DefaultTbAlarmService extends AbstractTbEntityService implements Tb
return ts > 0 ? ts : System.currentTimeMillis(); return ts > 0 ? ts : System.currentTimeMillis();
} }
private void addSystemAlarmComment(Alarm alarm, User user, String subType, String commentText) { private void addSystemAlarmComment(Alarm alarm, User user, AlarmCommentSubType subType, String param, String value) {
addSystemAlarmComment(alarm, user, subType, commentText, null); Map<String, String> params = new LinkedHashMap<>();
params.put(param, value);
addSystemAlarmComment(alarm, user, subType, params);
}
private void addSystemAlarmComment(Alarm alarm, User user, AlarmCommentSubType subType, String param, String value, String param2, String value2) {
Map<String, String> params = new LinkedHashMap<>();
params.put(param, value);
params.put(param2, value2);
addSystemAlarmComment(alarm, user, subType, params);
} }
private void addSystemAlarmComment(Alarm alarm, User user, String subType, String commentText, UserId assigneeId) { private void addSystemAlarmComment(Alarm alarm, User user, AlarmCommentSubType subType, Map<String, String> params) {
ObjectNode commentNode = JacksonUtil.newObjectNode(); ObjectNode commentNode = JacksonUtil.newObjectNode();
commentNode.put("text", commentText) commentNode.put("text", String.format(subType.getText(), params.values()))
.put("subtype", subType); .put("subtype", subType.name());
if (user != null) { params.forEach(commentNode::put);
commentNode.put("userId", user.getId().getId().toString());
}
if (assigneeId != null) {
commentNode.put("assigneeId", assigneeId.getId().toString());
}
AlarmComment alarmComment = AlarmComment.builder() AlarmComment alarmComment = AlarmComment.builder()
.alarmId(alarm.getId()) .alarmId(alarm.getId())
.type(AlarmCommentType.SYSTEM) .type(AlarmCommentType.SYSTEM)

8
application/src/main/java/org/thingsboard/server/service/telemetry/DefaultAlarmSubscriptionService.java

@ -61,6 +61,8 @@ import org.thingsboard.server.service.subscription.TbSubscriptionUtils;
import java.util.Collection; import java.util.Collection;
import static org.thingsboard.server.common.data.alarm.AlarmCommentSubType.SEVERITY_CHANGED;
/** /**
* Created by ashvayka on 27.03.18. * Created by ashvayka on 27.03.18.
*/ */
@ -251,9 +253,9 @@ public class DefaultAlarmSubscriptionService extends AbstractSubscriptionService
AlarmComment.AlarmCommentBuilder alarmComment = AlarmComment.builder() AlarmComment.AlarmCommentBuilder alarmComment = AlarmComment.builder()
.alarmId(alarm.getId()) .alarmId(alarm.getId())
.type(AlarmCommentType.SYSTEM) .type(AlarmCommentType.SYSTEM)
.comment(JacksonUtil.newObjectNode().put("text", .comment(JacksonUtil.newObjectNode()
String.format("Alarm severity was updated from %s to %s", result.getOldSeverity(), alarm.getSeverity())) .put("text", String.format(SEVERITY_CHANGED.getText(), result.getOldSeverity(), alarm.getSeverity()))
.put("subtype", "severityChanged") .put("subtype", SEVERITY_CHANGED.name())
.put("oldSeverity", result.getOldSeverity().name()) .put("oldSeverity", result.getOldSeverity().name())
.put("newSeverity", alarm.getSeverity().name())); .put("newSeverity", alarm.getSeverity().name()));
if (request != null && request.getUserId() != null) { if (request != null && request.getUserId() != null) {

13
application/src/test/java/org/thingsboard/server/controller/AlarmCommentControllerTest.java

@ -48,6 +48,7 @@ import java.util.List;
import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.thingsboard.server.common.data.alarm.AlarmCommentSubType.COMMENT_DELETED;
@Slf4j @Slf4j
@ContextConfiguration(classes = {AlarmCommentControllerTest.Config.class}) @ContextConfiguration(classes = {AlarmCommentControllerTest.Config.class})
@ -207,8 +208,10 @@ public class AlarmCommentControllerTest extends AbstractControllerTest {
AlarmComment expectedAlarmComment = AlarmComment.builder() AlarmComment expectedAlarmComment = AlarmComment.builder()
.alarmId(alarm.getId()) .alarmId(alarm.getId())
.type(AlarmCommentType.SYSTEM) .type(AlarmCommentType.SYSTEM)
.comment(JacksonUtil.newObjectNode().put("text", String.format("User %s deleted his comment", .comment(JacksonUtil.newObjectNode()
CUSTOMER_USER_EMAIL))) .put("text", String.format(COMMENT_DELETED.getText(), CUSTOMER_USER_EMAIL))
.put("subtype", COMMENT_DELETED.name())
.put("userName", CUSTOMER_USER_EMAIL))
.build(); .build();
testLogEntityActionEntityEqClass(alarm, alarm.getId(), tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.DELETED_COMMENT, 1, expectedAlarmComment); testLogEntityActionEntityEqClass(alarm, alarm.getId(), tenantId, customerId, customerUserId, CUSTOMER_USER_EMAIL, ActionType.DELETED_COMMENT, 1, expectedAlarmComment);
} }
@ -226,8 +229,10 @@ public class AlarmCommentControllerTest extends AbstractControllerTest {
AlarmComment expectedAlarmComment = AlarmComment.builder() AlarmComment expectedAlarmComment = AlarmComment.builder()
.alarmId(alarm.getId()) .alarmId(alarm.getId())
.type(AlarmCommentType.SYSTEM) .type(AlarmCommentType.SYSTEM)
.comment(JacksonUtil.newObjectNode().put("text", String.format("User %s deleted his comment", .comment(JacksonUtil.newObjectNode()
TENANT_ADMIN_EMAIL))) .put("text", String.format(COMMENT_DELETED.getText(), TENANT_ADMIN_EMAIL))
.put("subtype", COMMENT_DELETED.name())
.put("userName", TENANT_ADMIN_EMAIL))
.build(); .build();
testLogEntityActionEntityEqClass(alarm, alarm.getId(), tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.DELETED_COMMENT, 1, expectedAlarmComment); testLogEntityActionEntityEqClass(alarm, alarm.getId(), tenantId, customerId, tenantAdminUserId, TENANT_ADMIN_EMAIL, ActionType.DELETED_COMMENT, 1, expectedAlarmComment);
} }

36
common/data/src/main/java/org/thingsboard/server/common/data/alarm/AlarmCommentSubType.java

@ -0,0 +1,36 @@
/**
* Copyright © 2016-2025 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.alarm;
import lombok.Getter;
public enum AlarmCommentSubType {
ACKED_BY_USER("Alarm was acknowledged by user %s"),
CLEARED_BY_USER("Alarm was cleared by user %s"),
ASSIGNED_TO_USER("Alarm was assigned by user %s to user %s"),
UNASSIGNED_BY_USER("Alarm was unassigned by user %s"),
UNASSIGNED_FROM_DELETED_USER("Alarm was unassigned because user %s - was deleted"),
COMMENT_DELETED("User %s deleted his comment"),
SEVERITY_CHANGED("Alarm severity was changed by user %s from %s to %s");
@Getter
private final String text;
AlarmCommentSubType(String text) {
this.text = text;
}
}
Loading…
Cancel
Save