Browse Source

Cleanup code

pull/13286/head
ViacheslavKlimov 1 year ago
parent
commit
44a4d9d690
  1. 6
      application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java
  2. 8
      application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java
  3. 105
      application/src/main/java/org/thingsboard/server/service/job/CfReprocessingJobProcessor.java
  4. 57
      application/src/main/java/org/thingsboard/server/service/job/task/CfReprocessingTaskProcessor.java
  5. 43
      common/data/src/main/java/org/thingsboard/server/common/data/job/CfReprocessingJobConfiguration.java
  6. 25
      common/data/src/main/java/org/thingsboard/server/common/data/job/CfReprocessingJobResult.java
  7. 72
      common/data/src/main/java/org/thingsboard/server/common/data/job/CfReprocessingTask.java
  8. 1
      common/data/src/main/java/org/thingsboard/server/common/data/job/Job.java
  9. 1
      common/data/src/main/java/org/thingsboard/server/common/data/job/JobConfiguration.java
  10. 1
      common/data/src/main/java/org/thingsboard/server/common/data/job/JobResult.java
  11. 1
      common/data/src/main/java/org/thingsboard/server/common/data/job/JobType.java
  12. 1
      common/data/src/main/java/org/thingsboard/server/common/data/job/Task.java
  13. 2
      common/data/src/main/java/org/thingsboard/server/common/data/job/TaskFailure.java
  14. 2
      dao/src/main/resources/sql/schema-entities.sql
  15. 3
      rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java
  16. 4
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/util/TenantIdLoader.java
  17. 10
      rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/TenantIdLoaderTest.java

6
application/src/main/java/org/thingsboard/server/actors/ActorSystemContext.java

@ -95,6 +95,7 @@ import org.thingsboard.server.dao.relation.RelationService;
import org.thingsboard.server.dao.resource.ResourceService; import org.thingsboard.server.dao.resource.ResourceService;
import org.thingsboard.server.dao.rule.RuleChainService; import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.rule.RuleNodeStateService; import org.thingsboard.server.dao.rule.RuleNodeStateService;
import org.thingsboard.server.dao.job.JobService;
import org.thingsboard.server.dao.tenant.TbTenantProfileCache; import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
import org.thingsboard.server.dao.tenant.TenantProfileService; import org.thingsboard.server.dao.tenant.TenantProfileService;
import org.thingsboard.server.dao.tenant.TenantService; import org.thingsboard.server.dao.tenant.TenantService;
@ -551,6 +552,11 @@ public class ActorSystemContext {
@Getter @Getter
private CalculatedFieldQueueService calculatedFieldQueueService; private CalculatedFieldQueueService calculatedFieldQueueService;
@Lazy
@Autowired(required = false)
@Getter
private JobService jobService;
@Value("${actors.session.max_concurrent_sessions_per_device:1}") @Value("${actors.session.max_concurrent_sessions_per_device:1}")
@Getter @Getter
private int maxConcurrentSessionsPerDevice; private int maxConcurrentSessionsPerDevice;

8
application/src/main/java/org/thingsboard/server/actors/ruleChain/DefaultTbContext.java

@ -23,6 +23,7 @@ import org.bouncycastle.util.Arrays;
import org.thingsboard.common.util.DebugModeUtil; import org.thingsboard.common.util.DebugModeUtil;
import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.common.util.ListeningExecutor; import org.thingsboard.common.util.ListeningExecutor;
import org.thingsboard.rule.engine.api.DeviceStateManager;
import org.thingsboard.rule.engine.api.MailService; import org.thingsboard.rule.engine.api.MailService;
import org.thingsboard.rule.engine.api.NotificationCenter; import org.thingsboard.rule.engine.api.NotificationCenter;
import org.thingsboard.rule.engine.api.RuleEngineAlarmService; import org.thingsboard.rule.engine.api.RuleEngineAlarmService;
@ -30,7 +31,6 @@ import org.thingsboard.rule.engine.api.RuleEngineApiUsageStateService;
import org.thingsboard.rule.engine.api.RuleEngineAssetProfileCache; import org.thingsboard.rule.engine.api.RuleEngineAssetProfileCache;
import org.thingsboard.rule.engine.api.RuleEngineCalculatedFieldQueueService; import org.thingsboard.rule.engine.api.RuleEngineCalculatedFieldQueueService;
import org.thingsboard.rule.engine.api.RuleEngineDeviceProfileCache; import org.thingsboard.rule.engine.api.RuleEngineDeviceProfileCache;
import org.thingsboard.rule.engine.api.DeviceStateManager;
import org.thingsboard.rule.engine.api.RuleEngineRpcService; import org.thingsboard.rule.engine.api.RuleEngineRpcService;
import org.thingsboard.rule.engine.api.RuleEngineTelemetryService; import org.thingsboard.rule.engine.api.RuleEngineTelemetryService;
import org.thingsboard.rule.engine.api.ScriptEngine; import org.thingsboard.rule.engine.api.ScriptEngine;
@ -107,6 +107,7 @@ import org.thingsboard.server.dao.queue.QueueStatsService;
import org.thingsboard.server.dao.relation.RelationService; import org.thingsboard.server.dao.relation.RelationService;
import org.thingsboard.server.dao.resource.ResourceService; import org.thingsboard.server.dao.resource.ResourceService;
import org.thingsboard.server.dao.rule.RuleChainService; import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.job.JobService;
import org.thingsboard.server.dao.tenant.TenantService; import org.thingsboard.server.dao.tenant.TenantService;
import org.thingsboard.server.dao.timeseries.TimeseriesService; import org.thingsboard.server.dao.timeseries.TimeseriesService;
import org.thingsboard.server.dao.user.UserService; import org.thingsboard.server.dao.user.UserService;
@ -887,6 +888,11 @@ public class DefaultTbContext implements TbContext {
return mainCtx.getCalculatedFieldQueueService(); return mainCtx.getCalculatedFieldQueueService();
} }
@Override
public JobService getJobService() {
return mainCtx.getJobService();
}
@Override @Override
public boolean isExternalNodeForceAck() { public boolean isExternalNodeForceAck() {
return mainCtx.isExternalNodeForceAck(); return mainCtx.isExternalNodeForceAck();

105
application/src/main/java/org/thingsboard/server/service/job/CfReprocessingJobProcessor.java

@ -1,105 +0,0 @@
/**
* 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.service.job;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.cf.CalculatedField;
import org.thingsboard.server.common.data.id.AssetProfileId;
import org.thingsboard.server.common.data.id.DeviceProfileId;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.job.CfReprocessingJobConfiguration;
import org.thingsboard.server.common.data.job.CfReprocessingTask;
import org.thingsboard.server.common.data.job.CfReprocessingTask.CfReprocessingTaskFailure;
import org.thingsboard.server.common.data.job.Job;
import org.thingsboard.server.common.data.job.JobType;
import org.thingsboard.server.common.data.job.Task;
import org.thingsboard.server.common.data.job.TaskFailure;
import org.thingsboard.server.common.data.page.PageDataIterable;
import org.thingsboard.server.dao.asset.AssetService;
import org.thingsboard.server.dao.cf.CalculatedFieldService;
import org.thingsboard.server.dao.device.DeviceService;
import java.util.List;
import java.util.function.Consumer;
@Component
@RequiredArgsConstructor
public class CfReprocessingJobProcessor implements JobProcessor {
private final CalculatedFieldService calculatedFieldService;
private final DeviceService deviceService;
private final AssetService assetService;
@Override
public int process(Job job, Consumer<Task> taskConsumer) throws Exception {
CfReprocessingJobConfiguration configuration = job.getConfiguration();
CalculatedField calculatedField = calculatedFieldService.findById(job.getTenantId(), configuration.getCalculatedFieldId());
EntityId cfEntityId = calculatedField.getEntityId();
int tasksCount = 0;
if (cfEntityId.getEntityType().isOneOf(EntityType.DEVICE, EntityType.ASSET)) {
taskConsumer.accept(createTask(job, configuration, calculatedField, cfEntityId));
tasksCount++;
} else {
PageDataIterable<? extends EntityId> entities;
if (cfEntityId.getEntityType() == EntityType.DEVICE_PROFILE) {
entities = new PageDataIterable<>(pageLink -> deviceService.findDeviceIdsByTenantIdAndDeviceProfileId(job.getTenantId(), (DeviceProfileId) cfEntityId, pageLink), 512);
} else if (cfEntityId.getEntityType() == EntityType.ASSET_PROFILE) {
entities = new PageDataIterable<>(pageLink -> assetService.findAssetIdsByTenantIdAndAssetProfileId(job.getTenantId(), (AssetProfileId) cfEntityId, pageLink), 512);
} else {
throw new IllegalArgumentException("Unsupported CF entity type " + cfEntityId.getEntityType());
}
for (EntityId entityId : entities) {
taskConsumer.accept(createTask(job, configuration, calculatedField, entityId));
tasksCount++;
}
}
return tasksCount;
}
@Override
public void reprocess(Job job, List<TaskFailure> failures, Consumer<Task> taskConsumer) throws Exception {
CfReprocessingJobConfiguration configuration = job.getConfiguration();
CalculatedField calculatedField = calculatedFieldService.findById(job.getTenantId(), configuration.getCalculatedFieldId());
for (TaskFailure failure : failures) {
CfReprocessingTaskFailure taskFailure = (CfReprocessingTaskFailure) failure;
EntityId entityId = taskFailure.getEntityId();
taskConsumer.accept(createTask(job, job.getConfiguration(), calculatedField, entityId));
}
}
private Task createTask(Job job, CfReprocessingJobConfiguration configuration, CalculatedField calculatedField, EntityId entityId) {
return CfReprocessingTask.builder()
.tenantId(job.getTenantId())
.jobId(job.getId())
.retries(2) // 3 attempts in total
.calculatedField(calculatedField)
.entityId(entityId)
.startTs(configuration.getStartTs())
.endTs(configuration.getEndTs())
.build();
}
@Override
public JobType getType() {
return JobType.CF_REPROCESSING;
}
}

57
application/src/main/java/org/thingsboard/server/service/job/task/CfReprocessingTaskProcessor.java

@ -1,57 +0,0 @@
/**
* 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.service.job.task;
import com.google.common.util.concurrent.SettableFuture;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.thingsboard.server.actors.calculatedField.CalculatedFieldReprocessingService;
import org.thingsboard.server.common.data.job.CfReprocessingTask;
import org.thingsboard.server.common.data.job.JobType;
import org.thingsboard.server.common.msg.queue.TbCallback;
import org.thingsboard.server.queue.task.TaskProcessor;
import java.util.concurrent.TimeUnit;
@Component
@RequiredArgsConstructor
public class CfReprocessingTaskProcessor extends TaskProcessor<CfReprocessingTask> {
private final CalculatedFieldReprocessingService cfReprocessingService;
@Override
public void process(CfReprocessingTask task) throws Exception {
SettableFuture<Void> future = SettableFuture.create();
cfReprocessingService.reprocess(task, new TbCallback() {
@Override
public void onSuccess() {
future.set(null);
}
@Override
public void onFailure(Throwable t) {
future.setException(t);
}
});
future.get(1, TimeUnit.MINUTES);
}
@Override
public JobType getJobType() {
return JobType.CF_REPROCESSING;
}
}

43
common/data/src/main/java/org/thingsboard/server/common/data/job/CfReprocessingJobConfiguration.java

@ -1,43 +0,0 @@
/**
* 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.job;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.thingsboard.server.common.data.id.CalculatedFieldId;
@Data
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class CfReprocessingJobConfiguration extends JobConfiguration {
@NotNull
private CalculatedFieldId calculatedFieldId;
private long startTs;
private long endTs;
@Override
public JobType getType() {
return JobType.CF_REPROCESSING;
}
}

25
common/data/src/main/java/org/thingsboard/server/common/data/job/CfReprocessingJobResult.java

@ -1,25 +0,0 @@
/**
* 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.job;
public class CfReprocessingJobResult extends JobResult {
@Override
public JobType getJobType() {
return JobType.CF_REPROCESSING;
}
}

72
common/data/src/main/java/org/thingsboard/server/common/data/job/CfReprocessingTask.java

@ -1,72 +0,0 @@
/**
* 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.job;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.SuperBuilder;
import org.thingsboard.server.common.data.cf.CalculatedField;
import org.thingsboard.server.common.data.id.EntityId;
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@ToString(callSuper = true)
public class CfReprocessingTask extends Task {
private CalculatedField calculatedField;
private EntityId entityId;
private long startTs;
private long endTs;
@Override
public Object getKey() {
return entityId;
}
@Override
public TaskFailure toFailure(Throwable error) {
return new CfReprocessingTaskFailure(entityId, error.getMessage());
}
@Override
public JobType getJobType() {
return JobType.CF_REPROCESSING;
}
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public static class CfReprocessingTaskFailure extends TaskFailure {
private EntityId entityId;
public CfReprocessingTaskFailure(EntityId entityId, String error) {
super(error);
this.entityId = entityId;
}
@Override
public JobType getJobType() {
return JobType.CF_REPROCESSING;
}
}
}

1
common/data/src/main/java/org/thingsboard/server/common/data/job/Job.java

@ -54,7 +54,6 @@ public class Job extends BaseData<JobId> implements HasTenantId {
this.description = description; this.description = description;
this.configuration = configuration; this.configuration = configuration;
this.result = switch (type) { this.result = switch (type) {
case CF_REPROCESSING -> new CfReprocessingJobResult();
case DUMMY -> new DummyJobResult(); case DUMMY -> new DummyJobResult();
}; };
} }

1
common/data/src/main/java/org/thingsboard/server/common/data/job/JobConfiguration.java

@ -27,7 +27,6 @@ import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type") @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({ @JsonSubTypes({
@Type(name = "CF_REPROCESSING", value = CfReprocessingJobConfiguration.class),
@Type(name = "DUMMY", value = DummyJobConfiguration.class), @Type(name = "DUMMY", value = DummyJobConfiguration.class),
}) })
@Data @Data

1
common/data/src/main/java/org/thingsboard/server/common/data/job/JobResult.java

@ -30,7 +30,6 @@ import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "jobType") @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "jobType")
@JsonSubTypes({ @JsonSubTypes({
@Type(name = "CF_REPROCESSING", value = CfReprocessingJobResult.class),
@Type(name = "DUMMY", value = DummyJobResult.class) @Type(name = "DUMMY", value = DummyJobResult.class)
}) })
@Data @Data

1
common/data/src/main/java/org/thingsboard/server/common/data/job/JobType.java

@ -17,7 +17,6 @@ package org.thingsboard.server.common.data.job;
public enum JobType { public enum JobType {
CF_REPROCESSING,
DUMMY; DUMMY;
public String getTasksTopic() { public String getTasksTopic() {

1
common/data/src/main/java/org/thingsboard/server/common/data/job/Task.java

@ -30,7 +30,6 @@ import org.thingsboard.server.common.data.id.TenantId;
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "jobType") @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "jobType")
@JsonSubTypes({ @JsonSubTypes({
@Type(name = "CF_REPROCESSING", value = CfReprocessingTask.class),
@Type(name = "DUMMY", value = DummyTask.class) @Type(name = "DUMMY", value = DummyTask.class)
}) })
@SuperBuilder @SuperBuilder

2
common/data/src/main/java/org/thingsboard/server/common/data/job/TaskFailure.java

@ -22,7 +22,6 @@ import com.fasterxml.jackson.annotation.JsonTypeInfo;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.thingsboard.server.common.data.job.CfReprocessingTask.CfReprocessingTaskFailure;
import org.thingsboard.server.common.data.job.DummyTask.DummyTaskFailure; import org.thingsboard.server.common.data.job.DummyTask.DummyTaskFailure;
@Data @Data
@ -31,7 +30,6 @@ import org.thingsboard.server.common.data.job.DummyTask.DummyTaskFailure;
@JsonIgnoreProperties(ignoreUnknown = true) @JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "jobType") @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "jobType")
@JsonSubTypes({ @JsonSubTypes({
@Type(name = "CF_REPROCESSING", value = CfReprocessingTaskFailure.class),
@Type(name = "DUMMY", value = DummyTaskFailure.class) @Type(name = "DUMMY", value = DummyTaskFailure.class)
}) })
public abstract class TaskFailure { public abstract class TaskFailure {

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

@ -957,6 +957,6 @@ CREATE TABLE IF NOT EXISTS job (
key varchar NOT NULL, key varchar NOT NULL,
description varchar NOT NULL, description varchar NOT NULL,
status varchar NOT NULL, status varchar NOT NULL,
configuration varchar(1000) NOT NULL, configuration varchar(1000000) NOT NULL,
result jsonb result jsonb
); );

3
rule-engine/rule-engine-api/src/main/java/org/thingsboard/rule/engine/api/TbContext.java

@ -77,6 +77,7 @@ import org.thingsboard.server.dao.queue.QueueStatsService;
import org.thingsboard.server.dao.relation.RelationService; import org.thingsboard.server.dao.relation.RelationService;
import org.thingsboard.server.dao.resource.ResourceService; import org.thingsboard.server.dao.resource.ResourceService;
import org.thingsboard.server.dao.rule.RuleChainService; import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.job.JobService;
import org.thingsboard.server.dao.tenant.TenantService; import org.thingsboard.server.dao.tenant.TenantService;
import org.thingsboard.server.dao.timeseries.TimeseriesService; import org.thingsboard.server.dao.timeseries.TimeseriesService;
import org.thingsboard.server.dao.user.UserService; import org.thingsboard.server.dao.user.UserService;
@ -362,6 +363,8 @@ public interface TbContext {
RuleEngineCalculatedFieldQueueService getCalculatedFieldQueueService(); RuleEngineCalculatedFieldQueueService getCalculatedFieldQueueService();
JobService getJobService();
boolean isExternalNodeForceAck(); boolean isExternalNodeForceAck();
/** /**

4
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/util/TenantIdLoader.java

@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.id.DomainId;
import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.id.EdgeId;
import org.thingsboard.server.common.data.id.EntityId; import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.EntityViewId; import org.thingsboard.server.common.data.id.EntityViewId;
import org.thingsboard.server.common.data.id.JobId;
import org.thingsboard.server.common.data.id.MobileAppBundleId; import org.thingsboard.server.common.data.id.MobileAppBundleId;
import org.thingsboard.server.common.data.id.MobileAppId; import org.thingsboard.server.common.data.id.MobileAppId;
import org.thingsboard.server.common.data.id.NotificationRequestId; import org.thingsboard.server.common.data.id.NotificationRequestId;
@ -175,6 +176,9 @@ public class TenantIdLoader {
tenantEntity = null; tenantEntity = null;
} }
break; break;
case JOB:
tenantEntity = ctx.getJobService().findJobById(ctxTenantId, new JobId(id));
break;
default: default:
throw new RuntimeException("Unexpected entity type: " + entityId.getEntityType()); throw new RuntimeException("Unexpected entity type: " + entityId.getEntityType());
} }

10
rule-engine/rule-engine-components/src/test/java/org/thingsboard/rule/engine/util/TenantIdLoaderTest.java

@ -54,6 +54,7 @@ import org.thingsboard.server.common.data.id.EntityIdFactory;
import org.thingsboard.server.common.data.id.NotificationId; import org.thingsboard.server.common.data.id.NotificationId;
import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.id.TenantProfileId; import org.thingsboard.server.common.data.id.TenantProfileId;
import org.thingsboard.server.common.data.job.Job;
import org.thingsboard.server.common.data.mobile.app.MobileApp; import org.thingsboard.server.common.data.mobile.app.MobileApp;
import org.thingsboard.server.common.data.mobile.bundle.MobileAppBundle; import org.thingsboard.server.common.data.mobile.bundle.MobileAppBundle;
import org.thingsboard.server.common.data.notification.NotificationRequest; import org.thingsboard.server.common.data.notification.NotificationRequest;
@ -88,6 +89,7 @@ import org.thingsboard.server.dao.queue.QueueService;
import org.thingsboard.server.dao.queue.QueueStatsService; import org.thingsboard.server.dao.queue.QueueStatsService;
import org.thingsboard.server.dao.resource.ResourceService; import org.thingsboard.server.dao.resource.ResourceService;
import org.thingsboard.server.dao.rule.RuleChainService; import org.thingsboard.server.dao.rule.RuleChainService;
import org.thingsboard.server.dao.job.JobService;
import org.thingsboard.server.dao.user.UserService; import org.thingsboard.server.dao.user.UserService;
import org.thingsboard.server.dao.widget.WidgetTypeService; import org.thingsboard.server.dao.widget.WidgetTypeService;
import org.thingsboard.server.dao.widget.WidgetsBundleService; import org.thingsboard.server.dao.widget.WidgetsBundleService;
@ -160,6 +162,8 @@ public class TenantIdLoaderTest {
private MobileAppBundleService mobileAppBundleService; private MobileAppBundleService mobileAppBundleService;
@Mock @Mock
private CalculatedFieldService calculatedFieldService; private CalculatedFieldService calculatedFieldService;
@Mock
private JobService jobService;
private TenantId tenantId; private TenantId tenantId;
private TenantProfileId tenantProfileId; private TenantProfileId tenantProfileId;
@ -419,6 +423,12 @@ public class TenantIdLoaderTest {
when(ctx.getCalculatedFieldService()).thenReturn(calculatedFieldService); when(ctx.getCalculatedFieldService()).thenReturn(calculatedFieldService);
doReturn(calculatedFieldLink).when(calculatedFieldService).findCalculatedFieldLinkById(eq(tenantId), any()); doReturn(calculatedFieldLink).when(calculatedFieldService).findCalculatedFieldLinkById(eq(tenantId), any());
break; break;
case JOB:
Job job = new Job();
job.setTenantId(tenantId);
when(ctx.getJobService()).thenReturn(jobService);
doReturn(job).when(jobService).findJobById(eq(tenantId), any());
break;
default: default:
throw new RuntimeException("Unexpected originator EntityType " + entityType); throw new RuntimeException("Unexpected originator EntityType " + entityType);
} }

Loading…
Cancel
Save