Browse Source

Changes, accroding to comments

pull/8090/head
zbeacon 4 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 assign_ts BIGINT;
ALTER TABLE alarm ADD COLUMN IF NOT EXISTS assignee_id UUID; 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 -- ALARM ASSIGN TO USER END
CREATE TABLE IF NOT EXISTS alarm_comment ( 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')") @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
@RequestMapping(value = "/alarm/{alarmId}/assign/{assigneeId}", method = RequestMethod.POST) @RequestMapping(value = "/alarm/{alarmId}/assign/{assigneeId}", method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK) @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, @PathVariable(ALARM_ID) String strAlarmId,
@ApiParam(value = ASSIGN_ID_PARAM_DESCRIPTION) @ApiParam(value = ASSIGN_ID_PARAM_DESCRIPTION)
@PathVariable(ASSIGNEE_ID) String strAssigneeId @PathVariable(ASSIGNEE_ID) String strAssigneeId
@ -214,7 +214,7 @@ public class AlarmController extends BaseController {
} catch (Exception e) { } catch (Exception e) {
throw new ThingsboardException("Assignee user doesn't have permission for alarm originator", ThingsboardErrorCode.PERMISSION_DENIED); 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)", @ApiOperation(value = "Unassign Alarm (unassignAlarm)",
@ -224,13 +224,13 @@ public class AlarmController extends BaseController {
@PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')")
@RequestMapping(value = "/alarm/{alarmId}/assign", method = RequestMethod.DELETE) @RequestMapping(value = "/alarm/{alarmId}/assign", method = RequestMethod.DELETE)
@ResponseStatus(value = HttpStatus.OK) @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 @PathVariable(ALARM_ID) String strAlarmId
) throws Exception { ) throws Exception {
checkParameter(ALARM_ID, strAlarmId); checkParameter(ALARM_ID, strAlarmId);
AlarmId alarmId = new AlarmId(toUUID(strAlarmId)); AlarmId alarmId = new AlarmId(toUUID(strAlarmId));
Alarm alarm = checkAlarmId(alarmId, Operation.WRITE); Alarm alarm = checkAlarmId(alarmId, Operation.WRITE);
tbAlarmService.unassign(alarm, getCurrentUser()).get(); return tbAlarmService.unassign(alarm, getCurrentUser());
} }
@ApiOperation(value = "Get Alarms (getAlarms)", @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; msgType = DataConstants.ALARM_CLEAR;
break; break;
case ALARM_ASSIGN: case ALARM_ASSIGN:
msgType = DataConstants.ALARM_CLEAR; msgType = DataConstants.ALARM_ASSIGN;
break; break;
case ALARM_UNASSIGN: case ALARM_UNASSIGN:
msgType = DataConstants.ALARM_CLEAR; msgType = DataConstants.ALARM_UNASSIGN;
break; break;
case ALARM_DELETE: case ALARM_DELETE:
msgType = DataConstants.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.EdgeId;
import org.thingsboard.server.common.data.id.TenantId; 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.dao.alarm.AlarmOperationResult;
import org.thingsboard.server.service.entitiy.AbstractTbEntityService; import org.thingsboard.server.service.entitiy.AbstractTbEntityService;
import java.util.List; import java.util.List;
@ -95,31 +96,19 @@ public class DefaultTbAlarmService extends AbstractTbEntityService implements Tb
} }
@Override @Override
public ListenableFuture<Void> assign(Alarm alarm, User user, UserId assigneeId) { public Alarm assign(Alarm alarm, User user, UserId assigneeId) {
long assignTs = System.currentTimeMillis(); long assignTs = System.currentTimeMillis();
ListenableFuture<Boolean> future = alarmSubscriptionService.assignAlarm(alarm.getTenantId(), alarm.getId(), assigneeId, assignTs); Alarm assignedAlarm = alarmSubscriptionService.assignAlarm(alarm.getTenantId(), alarm.getId(), assigneeId, assignTs);
return Futures.transform(future, result -> { notificationEntityService.notifyCreateOrUpdateAlarm(assignedAlarm, ActionType.ALARM_ASSIGN, user);
if (result != null && result) { return assignedAlarm;
alarm.setAssignTs(assignTs);
alarm.setAssigneeId(assigneeId);
notificationEntityService.notifyCreateOrUpdateAlarm(alarm, ActionType.ALARM_ASSIGN, user);
}
return null;
}, MoreExecutors.directExecutor());
} }
@Override @Override
public ListenableFuture<Void> unassign(Alarm alarm, User user) { public Alarm unassign(Alarm alarm, User user) {
long assignTs = System.currentTimeMillis(); long assignTs = System.currentTimeMillis();
ListenableFuture<Boolean> future = alarmSubscriptionService.unassignAlarm(alarm.getTenantId(), alarm.getId(), assignTs); Alarm unassignedAlarm = alarmSubscriptionService.unassignAlarm(alarm.getTenantId(), alarm.getId(), assignTs);
return Futures.transform(future, result -> { notificationEntityService.notifyCreateOrUpdateAlarm(unassignedAlarm, ActionType.ALARM_UNASSIGN, user);
if (result != null && result) { return unassignedAlarm;
alarm.setAssignTs(assignTs);
alarm.setAssigneeId(null);
notificationEntityService.notifyCreateOrUpdateAlarm(alarm, ActionType.ALARM_UNASSIGN, user);
}
return null;
}, MoreExecutors.directExecutor());
} }
@Override @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> 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); 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( subscriptionManagerService.onAlarmUpdate(
TenantId.fromUUID(new UUID(proto.getTenantIdMSB(), proto.getTenantIdLSB())), TenantId.fromUUID(new UUID(proto.getTenantIdMSB(), proto.getTenantIdLSB())),
TbSubscriptionUtils.toEntityId(proto.getEntityType(), proto.getEntityIdMSB(), proto.getEntityIdLSB()), 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()) { } else if (msg.hasAlarmDelete()) {
TbAlarmDeleteProto proto = msg.getAlarmDelete(); TbAlarmDeleteProto proto = msg.getAlarmDelete();
subscriptionManagerService.onAlarmDeleted( subscriptionManagerService.onAlarmDeleted(
TenantId.fromUUID(new UUID(proto.getTenantIdMSB(), proto.getTenantIdLSB())), TenantId.fromUUID(new UUID(proto.getTenantIdMSB(), proto.getTenantIdLSB())),
TbSubscriptionUtils.toEntityId(proto.getEntityType(), proto.getEntityIdMSB(), proto.getEntityIdLSB()), TbSubscriptionUtils.toEntityId(proto.getEntityType(), proto.getEntityIdMSB(), proto.getEntityIdLSB()),
JacksonUtil.fromString(proto.getAlarmInfo(), AlarmInfo.class), callback); JacksonUtil.fromString(proto.getAlarm(), AlarmInfo.class), callback);
} else { } else {
throwNotHandled(msg, callback); 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) { if (proto.getErrorCode() > 0) {
return new AlarmSubscriptionUpdate(proto.getSubscriptionId(), SubscriptionErrorCode.forCode(proto.getErrorCode()), proto.getErrorMsg()); return new AlarmSubscriptionUpdate(proto.getSubscriptionId(), SubscriptionErrorCode.forCode(proto.getErrorCode()), proto.getErrorMsg());
} else { } else {
AlarmInfo alarmInfo = JacksonUtil.fromString(proto.getAlarmInfo(), AlarmInfo.class); AlarmInfo alarmInfo = JacksonUtil.fromString(proto.getAlarm(), AlarmInfo.class);
return new AlarmSubscriptionUpdate(proto.getSubscriptionId(), alarmInfo); return new AlarmSubscriptionUpdate(proto.getSubscriptionId(), alarmInfo);
} }
} }
@ -324,7 +324,7 @@ public class TbSubscriptionUtils {
builder.setEntityIdLSB(entityId.getId().getLeastSignificantBits()); builder.setEntityIdLSB(entityId.getId().getLeastSignificantBits());
builder.setTenantIdMSB(tenantId.getId().getMostSignificantBits()); builder.setTenantIdMSB(tenantId.getId().getMostSignificantBits());
builder.setTenantIdLSB(tenantId.getId().getLeastSignificantBits()); builder.setTenantIdLSB(tenantId.getId().getLeastSignificantBits());
builder.setAlarmInfo(JacksonUtil.toString(alarmInfo)); builder.setAlarm(JacksonUtil.toString(alarmInfo));
SubscriptionMgrMsgProto.Builder msgBuilder = SubscriptionMgrMsgProto.newBuilder(); SubscriptionMgrMsgProto.Builder msgBuilder = SubscriptionMgrMsgProto.newBuilder();
msgBuilder.setAlarmUpdate(builder); msgBuilder.setAlarmUpdate(builder);
return ToCoreMsg.newBuilder().setToSubscriptionMgrMsg(msgBuilder.build()).build(); return ToCoreMsg.newBuilder().setToSubscriptionMgrMsg(msgBuilder.build()).build();
@ -337,7 +337,7 @@ public class TbSubscriptionUtils {
builder.setEntityIdLSB(entityId.getId().getLeastSignificantBits()); builder.setEntityIdLSB(entityId.getId().getLeastSignificantBits());
builder.setTenantIdMSB(tenantId.getId().getMostSignificantBits()); builder.setTenantIdMSB(tenantId.getId().getMostSignificantBits());
builder.setTenantIdLSB(tenantId.getId().getLeastSignificantBits()); builder.setTenantIdLSB(tenantId.getId().getLeastSignificantBits());
builder.setAlarmInfo(JacksonUtil.toString(alarmInfo)); builder.setAlarm(JacksonUtil.toString(alarmInfo));
SubscriptionMgrMsgProto.Builder msgBuilder = SubscriptionMgrMsgProto.newBuilder(); SubscriptionMgrMsgProto.Builder msgBuilder = SubscriptionMgrMsgProto.newBuilder();
msgBuilder.setAlarmDelete(builder); msgBuilder.setAlarmDelete(builder);
return ToCoreMsg.newBuilder().setToSubscriptionMgrMsg(msgBuilder.build()).build(); 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 @Override
public ListenableFuture<Boolean> assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTs) { public Alarm assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTs) {
ListenableFuture<AlarmOperationResult> result = alarmService.assignAlarm(tenantId, alarmId, assigneeId, assignTs); AlarmOperationResult result = alarmService.assignAlarm(tenantId, alarmId, assigneeId, assignTs);
Futures.addCallback(result, new AlarmUpdateCallback(), wsCallBackExecutor); if (result.isSuccessful()) {
return Futures.transform(result, AlarmOperationResult::isSuccessful, wsCallBackExecutor); onAlarmUpdated(result);
} else {
log.warn("Failed to assign alarm!");
}
return result.getAlarmInfo();
} }
@Override @Override
public ListenableFuture<Boolean> unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTs) { public Alarm unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTs) {
ListenableFuture<AlarmOperationResult> result = alarmService.unassignAlarm(tenantId, alarmId, assignTs); AlarmOperationResult result = alarmService.unassignAlarm(tenantId, alarmId, assignTs);
Futures.addCallback(result, new AlarmUpdateCallback(), wsCallBackExecutor); if (result.isSuccessful()) {
return Futures.transform(result, AlarmOperationResult::isSuccessful, wsCallBackExecutor); onAlarmUpdated(result);
} else {
log.warn("Failed to unassign alarm!");
}
return result.getAlarmInfo();
} }
@Override @Override

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

@ -560,7 +560,7 @@ message TbAlarmSubscriptionUpdateProto {
int32 subscriptionId = 2; int32 subscriptionId = 2;
int32 errorCode = 3; int32 errorCode = 3;
string errorMsg = 4; string errorMsg = 4;
string alarmInfo = 5; string alarm = 5;
bool deleted = 6; bool deleted = 6;
} }
@ -580,7 +580,7 @@ message TbAlarmUpdateProto {
int64 entityIdLSB = 3; int64 entityIdLSB = 3;
int64 tenantIdMSB = 4; int64 tenantIdMSB = 4;
int64 tenantIdLSB = 5; int64 tenantIdLSB = 5;
string alarmInfo = 6; string alarm = 6;
} }
message TbAlarmDeleteProto { message TbAlarmDeleteProto {
@ -589,7 +589,7 @@ message TbAlarmDeleteProto {
int64 entityIdLSB = 3; int64 entityIdLSB = 3;
int64 tenantIdMSB = 4; int64 tenantIdMSB = 4;
int64 tenantIdLSB = 5; int64 tenantIdLSB = 5;
string alarmInfo = 6; string alarm = 6;
} }
message TbAttributeDeleteProto { 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> 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); 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 @Override
public ListenableFuture<AlarmOperationResult> assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTime) { public AlarmOperationResult assignAlarm(TenantId tenantId, AlarmId alarmId, UserId assigneeId, long assignTime) {
return getAndUpdateAsync(tenantId, alarmId, new Function<Alarm, AlarmOperationResult>() { return getAndUpdate(tenantId, alarmId, new Function<>() {
@Nullable @Nullable
@Override @Override
public AlarmOperationResult apply(@Nullable Alarm alarm) { public AlarmOperationResult apply(@Nullable Alarm alarm) {
@ -298,8 +298,8 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ
} }
@Override @Override
public ListenableFuture<AlarmOperationResult> unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTime) { public AlarmOperationResult unassignAlarm(TenantId tenantId, AlarmId alarmId, long assignTime) {
return getAndUpdateAsync(tenantId, alarmId, new Function<Alarm, AlarmOperationResult>() { return getAndUpdate(tenantId, alarmId, new Function<>() {
@Nullable @Nullable
@Override @Override
public AlarmOperationResult apply(@Nullable Alarm alarm) { 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") @Column(name = CUSTOMER_ID_PROPERTY, columnDefinition = "uuid")
private UUID customerId; private UUID customerId;
@Column(name = ASSIGNEE_ID_PROPERTY, columnDefinition = "uuid")
private UUID assigneeId;
public EntityAlarmEntity() { public EntityAlarmEntity() {
super(); super();
} }
@ -85,9 +82,6 @@ public final class EntityAlarmEntity implements ToData<EntityAlarm> {
if (entityAlarm.getCustomerId() != null) { if (entityAlarm.getCustomerId() != null) {
customerId = entityAlarm.getCustomerId().getId(); customerId = entityAlarm.getCustomerId().getId();
} }
if (entityAlarm.getAssigneeId() != null) {
assigneeId = entityAlarm.getAssigneeId().getId();
}
} }
@Override @Override
@ -101,9 +95,6 @@ public final class EntityAlarmEntity implements ToData<EntityAlarm> {
if (customerId != null) { if (customerId != null) {
result.setCustomerId(new CustomerId(customerId)); result.setCustomerId(new CustomerId(customerId));
} }
if (assigneeId != null) {
result.setAssigneeId(new UserId(assigneeId));
}
return result; 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, alarm_type varchar(255) NOT NULL,
customer_id uuid, customer_id uuid,
alarm_id uuid, alarm_id uuid,
assignee_id uuid,
CONSTRAINT entity_alarm_pkey PRIMARY KEY (entity_id, alarm_id), 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 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<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); ListenableFuture<Alarm> findAlarmByIdAsync(TenantId tenantId, AlarmId alarmId);

Loading…
Cancel
Save