Browse Source

Changes, accroding to comments

pull/8090/head
zbeacon 3 years ago
parent
commit
44dcda3bc5
  1. 2
      application/src/main/data/upgrade/3.4.3/schema_update.sql
  2. 8
      application/src/main/java/org/thingsboard/server/controller/AlarmController.java
  3. 4
      application/src/main/java/org/thingsboard/server/service/action/EntityActionService.java
  4. 29
      application/src/main/java/org/thingsboard/server/service/entitiy/alarm/DefaultTbAlarmService.java
  5. 4
      application/src/main/java/org/thingsboard/server/service/entitiy/alarm/TbAlarmService.java
  6. 4
      application/src/main/java/org/thingsboard/server/service/queue/DefaultTbCoreConsumerService.java
  7. 6
      application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionUtils.java
  8. 24
      application/src/main/java/org/thingsboard/server/service/telemetry/DefaultAlarmSubscriptionService.java
  9. 6
      common/cluster-api/src/main/proto/queue.proto
  10. 4
      common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java
  11. 8
      dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java
  12. 9
      dao/src/main/java/org/thingsboard/server/dao/model/sql/EntityAlarmEntity.java
  13. 1
      dao/src/main/resources/sql/schema-entities.sql
  14. 4
      rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/RuleEngineAlarmService.java

2
application/src/main/data/upgrade/3.4.3/schema_update.sql

@ -20,8 +20,6 @@
ALTER TABLE alarm ADD COLUMN IF NOT EXISTS assign_ts BIGINT;
ALTER TABLE alarm ADD COLUMN IF NOT EXISTS assignee_id UUID;
ALTER TABLE entity_alarm ADD COLUMN IF NOT EXISTS assignee_id UUID;
-- ALARM ASSIGN TO USER END
CREATE TABLE IF NOT EXISTS alarm_comment (

8
application/src/main/java/org/thingsboard/server/controller/AlarmController.java

@ -196,7 +196,7 @@ public class AlarmController extends BaseController {
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
@RequestMapping(value = "/alarm/{alarmId}/assign/{assigneeId}", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK)
public void assignAlarm(@ApiParam(value = ALARM_ID_PARAM_DESCRIPTION)
public Alarm assignAlarm(@ApiParam(value = ALARM_ID_PARAM_DESCRIPTION)
@PathVariable(ALARM_ID) String strAlarmId,
@ApiParam(value = ASSIGN_ID_PARAM_DESCRIPTION)
@PathVariable(ASSIGNEE_ID) String strAssigneeId
@ -214,7 +214,7 @@ public class AlarmController extends BaseController {
} catch (Exception e) {
throw new ThingsboardException("Assignee user doesn't have permission for alarm originator", ThingsboardErrorCode.PERMISSION_DENIED);
}
tbAlarmService.assign(alarm, getCurrentUser(), assigneeId).get();
return tbAlarmService.assign(alarm, getCurrentUser(), assigneeId);
}
@ApiOperation(value = "Unassign Alarm (unassignAlarm)",
@ -224,13 +224,13 @@ public class AlarmController extends BaseController {
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
@RequestMapping(value = "/alarm/{alarmId}/assign", method = RequestMethod.DELETE)
@ResponseStatus(value = HttpStatus.OK)
public void assignAlarm(@ApiParam(value = ALARM_ID_PARAM_DESCRIPTION)
public Alarm assignAlarm(@ApiParam(value = ALARM_ID_PARAM_DESCRIPTION)
@PathVariable(ALARM_ID) String strAlarmId
) throws Exception {
checkParameter(ALARM_ID, strAlarmId);
AlarmId alarmId = new AlarmId(toUUID(strAlarmId));
Alarm alarm = checkAlarmId(alarmId, Operation.WRITE);
tbAlarmService.unassign(alarm, getCurrentUser()).get();
return tbAlarmService.unassign(alarm, getCurrentUser());
}
@ApiOperation(value = "Get Alarms (getAlarms)",

4
application/src/main/java/org/thingsboard/server/service/action/EntityActionService.java

@ -87,10 +87,10 @@ public class EntityActionService {
msgType = DataConstants.ALARM_CLEAR;
break;
case ALARM_ASSIGN:
msgType = DataConstants.ALARM_CLEAR;
msgType = DataConstants.ALARM_ASSIGN;
break;
case ALARM_UNASSIGN:
msgType = DataConstants.ALARM_CLEAR;
msgType = DataConstants.ALARM_UNASSIGN;
break;
case ALARM_DELETE:
msgType = DataConstants.ALARM_DELETE;

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

@ -32,6 +32,7 @@ import org.thingsboard.server.common.data.exception.ThingsboardException;
import org.thingsboard.server.common.data.id.EdgeId;
import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.UserId;
import org.thingsboard.server.dao.alarm.AlarmOperationResult;
import org.thingsboard.server.service.entitiy.AbstractTbEntityService;
import java.util.List;
@ -95,31 +96,19 @@ public class DefaultTbAlarmService extends AbstractTbEntityService implements Tb
}
@Override
public ListenableFuture<Void> assign(Alarm alarm, User user, UserId assigneeId) {
public Alarm assign(Alarm alarm, User user, UserId assigneeId) {
long assignTs = System.currentTimeMillis();
ListenableFuture<Boolean> future = alarmSubscriptionService.assignAlarm(alarm.getTenantId(), alarm.getId(), assigneeId, assignTs);
return Futures.transform(future, result -> {
if (result != null && result) {
alarm.setAssignTs(assignTs);
alarm.setAssigneeId(assigneeId);
notificationEntityService.notifyCreateOrUpdateAlarm(alarm, ActionType.ALARM_ASSIGN, user);
}
return null;
}, MoreExecutors.directExecutor());
Alarm assignedAlarm = alarmSubscriptionService.assignAlarm(alarm.getTenantId(), alarm.getId(), assigneeId, assignTs);
notificationEntityService.notifyCreateOrUpdateAlarm(assignedAlarm, ActionType.ALARM_ASSIGN, user);
return assignedAlarm;
}
@Override
public ListenableFuture<Void> unassign(Alarm alarm, User user) {
public Alarm unassign(Alarm alarm, User user) {
long assignTs = System.currentTimeMillis();
ListenableFuture<Boolean> future = alarmSubscriptionService.unassignAlarm(alarm.getTenantId(), alarm.getId(), assignTs);
return Futures.transform(future, result -> {
if (result != null && result) {
alarm.setAssignTs(assignTs);
alarm.setAssigneeId(null);
notificationEntityService.notifyCreateOrUpdateAlarm(alarm, ActionType.ALARM_UNASSIGN, user);
}
return null;
}, MoreExecutors.directExecutor());
Alarm unassignedAlarm = alarmSubscriptionService.unassignAlarm(alarm.getTenantId(), alarm.getId(), assignTs);
notificationEntityService.notifyCreateOrUpdateAlarm(unassignedAlarm, ActionType.ALARM_UNASSIGN, user);
return unassignedAlarm;
}
@Override

4
application/src/main/java/org/thingsboard/server/service/entitiy/alarm/TbAlarmService.java

@ -29,9 +29,9 @@ public interface TbAlarmService {
ListenableFuture<Void> clear(Alarm alarm, User user);
ListenableFuture<Void> assign(Alarm alarm, User user, UserId assigneeId);
Alarm assign(Alarm alarm, User user, UserId assigneeId);
ListenableFuture<Void> unassign(Alarm alarm, User user);
Alarm unassign(Alarm alarm, User user);
Boolean delete(Alarm alarm, User user);
}

4
application/src/main/java/org/thingsboard/server/service/queue/DefaultTbCoreConsumerService.java

@ -503,13 +503,13 @@ public class DefaultTbCoreConsumerService extends AbstractConsumerService<ToCore
subscriptionManagerService.onAlarmUpdate(
TenantId.fromUUID(new UUID(proto.getTenantIdMSB(), proto.getTenantIdLSB())),
TbSubscriptionUtils.toEntityId(proto.getEntityType(), proto.getEntityIdMSB(), proto.getEntityIdLSB()),
JacksonUtil.fromString(proto.getAlarmInfo(), AlarmInfo.class),callback);
JacksonUtil.fromString(proto.getAlarm(), AlarmInfo.class),callback);
} else if (msg.hasAlarmDelete()) {
TbAlarmDeleteProto proto = msg.getAlarmDelete();
subscriptionManagerService.onAlarmDeleted(
TenantId.fromUUID(new UUID(proto.getTenantIdMSB(), proto.getTenantIdLSB())),
TbSubscriptionUtils.toEntityId(proto.getEntityType(), proto.getEntityIdMSB(), proto.getEntityIdLSB()),
JacksonUtil.fromString(proto.getAlarmInfo(), AlarmInfo.class), callback);
JacksonUtil.fromString(proto.getAlarm(), AlarmInfo.class), callback);
} else {
throwNotHandled(msg, callback);
}

6
application/src/main/java/org/thingsboard/server/service/subscription/TbSubscriptionUtils.java

@ -190,7 +190,7 @@ public class TbSubscriptionUtils {
if (proto.getErrorCode() > 0) {
return new AlarmSubscriptionUpdate(proto.getSubscriptionId(), SubscriptionErrorCode.forCode(proto.getErrorCode()), proto.getErrorMsg());
} else {
AlarmInfo alarmInfo = JacksonUtil.fromString(proto.getAlarmInfo(), AlarmInfo.class);
AlarmInfo alarmInfo = JacksonUtil.fromString(proto.getAlarm(), AlarmInfo.class);
return new AlarmSubscriptionUpdate(proto.getSubscriptionId(), alarmInfo);
}
}
@ -324,7 +324,7 @@ public class TbSubscriptionUtils {
builder.setEntityIdLSB(entityId.getId().getLeastSignificantBits());
builder.setTenantIdMSB(tenantId.getId().getMostSignificantBits());
builder.setTenantIdLSB(tenantId.getId().getLeastSignificantBits());
builder.setAlarmInfo(JacksonUtil.toString(alarmInfo));
builder.setAlarm(JacksonUtil.toString(alarmInfo));
SubscriptionMgrMsgProto.Builder msgBuilder = SubscriptionMgrMsgProto.newBuilder();
msgBuilder.setAlarmUpdate(builder);
return ToCoreMsg.newBuilder().setToSubscriptionMgrMsg(msgBuilder.build()).build();
@ -337,7 +337,7 @@ public class TbSubscriptionUtils {
builder.setEntityIdLSB(entityId.getId().getLeastSignificantBits());
builder.setTenantIdMSB(tenantId.getId().getMostSignificantBits());
builder.setTenantIdLSB(tenantId.getId().getLeastSignificantBits());
builder.setAlarmInfo(JacksonUtil.toString(alarmInfo));
builder.setAlarm(JacksonUtil.toString(alarmInfo));
SubscriptionMgrMsgProto.Builder msgBuilder = SubscriptionMgrMsgProto.newBuilder();
msgBuilder.setAlarmDelete(builder);
return ToCoreMsg.newBuilder().setToSubscriptionMgrMsg(msgBuilder.build()).build();

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

@ -142,17 +142,25 @@ public class DefaultAlarmSubscriptionService extends AbstractSubscriptionService
}
@Override
public ListenableFuture<Boolean> assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTs) {
ListenableFuture<AlarmOperationResult> result = alarmService.assignAlarm(tenantId, alarmId, assigneeId, assignTs);
Futures.addCallback(result, new AlarmUpdateCallback(), wsCallBackExecutor);
return Futures.transform(result, AlarmOperationResult::isSuccessful, wsCallBackExecutor);
public Alarm 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!");
}
return result.getAlarmInfo();
}
@Override
public ListenableFuture<Boolean> unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTs) {
ListenableFuture<AlarmOperationResult> result = alarmService.unassignAlarm(tenantId, alarmId, assignTs);
Futures.addCallback(result, new AlarmUpdateCallback(), wsCallBackExecutor);
return Futures.transform(result, AlarmOperationResult::isSuccessful, wsCallBackExecutor);
public Alarm 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!");
}
return result.getAlarmInfo();
}
@Override

6
common/cluster-api/src/main/proto/queue.proto

@ -560,7 +560,7 @@ message TbAlarmSubscriptionUpdateProto {
int32 subscriptionId = 2;
int32 errorCode = 3;
string errorMsg = 4;
string alarmInfo = 5;
string alarm = 5;
bool deleted = 6;
}
@ -580,7 +580,7 @@ message TbAlarmUpdateProto {
int64 entityIdLSB = 3;
int64 tenantIdMSB = 4;
int64 tenantIdLSB = 5;
string alarmInfo = 6;
string alarm = 6;
}
message TbAlarmDeleteProto {
@ -589,7 +589,7 @@ message TbAlarmDeleteProto {
int64 entityIdLSB = 3;
int64 tenantIdMSB = 4;
int64 tenantIdLSB = 5;
string alarmInfo = 6;
string alarm = 6;
}
message TbAttributeDeleteProto {

4
common/dao-api/src/main/java/org/thingsboard/server/dao/alarm/AlarmService.java

@ -50,9 +50,9 @@ public interface AlarmService extends EntityDaoService {
ListenableFuture<AlarmOperationResult> clearAlarm(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs);
ListenableFuture<AlarmOperationResult> assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTs);
AlarmOperationResult assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTs);
ListenableFuture<AlarmOperationResult> unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTs);
AlarmOperationResult unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTs);
Alarm findAlarmById(TenantId tenantId, AlarmId alarmId);

8
dao/src/main/java/org/thingsboard/server/dao/alarm/BaseAlarmService.java

@ -279,8 +279,8 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
}
@Override
public ListenableFuture<AlarmOperationResult> assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTime) {
return getAndUpdateAsync(tenantId, alarmId, new Function<Alarm, AlarmOperationResult>() {
public AlarmOperationResult assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTime) {
return getAndUpdate(tenantId, alarmId, new Function<>() {
@Nullable
@Override
public AlarmOperationResult apply(@Nullable Alarm alarm) {
@ -298,8 +298,8 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
}
@Override
public ListenableFuture<AlarmOperationResult> unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTime) {
return getAndUpdateAsync(tenantId, alarmId, new Function<Alarm, AlarmOperationResult>() {
public AlarmOperationResult unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTime) {
return getAndUpdate(tenantId, alarmId, new Function<>() {
@Nullable
@Override
public AlarmOperationResult apply(@Nullable Alarm alarm) {

9
dao/src/main/java/org/thingsboard/server/dao/model/sql/EntityAlarmEntity.java

@ -68,9 +68,6 @@ public final class EntityAlarmEntity implements ToData<EntityAlarm> {
@Column(name = CUSTOMER_ID_PROPERTY, columnDefinition = "uuid")
private UUID customerId;
@Column(name = ASSIGNEE_ID_PROPERTY, columnDefinition = "uuid")
private UUID assigneeId;
public EntityAlarmEntity() {
super();
}
@ -85,9 +82,6 @@ public final class EntityAlarmEntity implements ToData<EntityAlarm> {
if (entityAlarm.getCustomerId() != null) {
customerId = entityAlarm.getCustomerId().getId();
}
if (entityAlarm.getAssigneeId() != null) {
assigneeId = entityAlarm.getAssigneeId().getId();
}
}
@Override
@ -101,9 +95,6 @@ public final class EntityAlarmEntity implements ToData<EntityAlarm> {
if (customerId != null) {
result.setCustomerId(new CustomerId(customerId));
}
if (assigneeId != null) {
result.setAssigneeId(new UserId(assigneeId));
}
return result;
}

1
dao/src/main/resources/sql/schema-entities.sql

@ -81,7 +81,6 @@ CREATE TABLE IF NOT EXISTS entity_alarm (
alarm_type varchar(255) NOT NULL,
customer_id uuid,
alarm_id uuid,
assignee_id uuid,
CONSTRAINT entity_alarm_pkey PRIMARY KEY (entity_id, alarm_id),
CONSTRAINT fk_entity_alarm_id FOREIGN KEY (alarm_id) REFERENCES alarm(id) ON DELETE CASCADE
);

4
rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/RuleEngineAlarmService.java

@ -50,9 +50,9 @@ public interface RuleEngineAlarmService {
ListenableFuture<AlarmOperationResult> clearAlarmForResult(TenantId tenantId, AlarmId alarmId, JsonNode details, long clearTs);
ListenableFuture<Boolean> assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTs);
Alarm assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTs);
ListenableFuture<Boolean> unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTs);
Alarm unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTs);
ListenableFuture<Alarm> findAlarmByIdAsync(TenantId tenantId, AlarmId alarmId);

Loading…
Cancel
Save