Search in sources :

Example 46 with Edge

use of org.thingsboard.server.common.data.edge.Edge in project thingsboard by thingsboard.

the class BaseEdgeTest method testSendAlarmToCloud.

@Test
public void testSendAlarmToCloud() throws Exception {
    Device device = saveDeviceOnCloudAndVerifyDeliveryToEdge();
    UplinkMsg.Builder uplinkMsgBuilder = UplinkMsg.newBuilder();
    AlarmUpdateMsg.Builder alarmUpdateMgBuilder = AlarmUpdateMsg.newBuilder();
    alarmUpdateMgBuilder.setName("alarm from edge");
    alarmUpdateMgBuilder.setStatus(AlarmStatus.ACTIVE_UNACK.name());
    alarmUpdateMgBuilder.setSeverity(AlarmSeverity.CRITICAL.name());
    alarmUpdateMgBuilder.setOriginatorName(device.getName());
    alarmUpdateMgBuilder.setOriginatorType(EntityType.DEVICE.name());
    testAutoGeneratedCodeByProtobuf(alarmUpdateMgBuilder);
    uplinkMsgBuilder.addAlarmUpdateMsg(alarmUpdateMgBuilder.build());
    testAutoGeneratedCodeByProtobuf(uplinkMsgBuilder);
    edgeImitator.expectResponsesAmount(1);
    edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build());
    Assert.assertTrue(edgeImitator.waitForResponses());
    List<AlarmInfo> alarms = doGetTypedWithPageLink("/api/alarm/{entityType}/{entityId}?", new TypeReference<PageData<AlarmInfo>>() {
    }, new PageLink(100), device.getId().getEntityType().name(), device.getUuidId()).getData();
    Optional<AlarmInfo> foundAlarm = alarms.stream().filter(alarm -> alarm.getType().equals("alarm from edge")).findAny();
    Assert.assertTrue(foundAlarm.isPresent());
    AlarmInfo alarmInfo = foundAlarm.get();
    Assert.assertEquals(device.getId(), alarmInfo.getOriginator());
    Assert.assertEquals(AlarmStatus.ACTIVE_UNACK, alarmInfo.getStatus());
    Assert.assertEquals(AlarmSeverity.CRITICAL, alarmInfo.getSeverity());
}
Also used : AbstractControllerTest(org.thingsboard.server.controller.AbstractControllerTest) Edge(org.thingsboard.server.common.data.edge.Edge) AlarmRule(org.thingsboard.server.common.data.device.profile.AlarmRule) AlarmConditionKeyType(org.thingsboard.server.common.data.device.profile.AlarmConditionKeyType) Autowired(org.springframework.beans.factory.annotation.Autowired) TenantId(org.thingsboard.server.common.data.id.TenantId) EntityRelation(org.thingsboard.server.common.data.relation.EntityRelation) UplinkResponseMsg(org.thingsboard.server.gen.edge.v1.UplinkResponseMsg) Map(java.util.Map) JsonConverter(org.thingsboard.server.common.transport.adaptor.JsonConverter) JsonNode(com.fasterxml.jackson.databind.JsonNode) AlarmStatus(org.thingsboard.server.common.data.alarm.AlarmStatus) EntityViewUpdateMsg(org.thingsboard.server.gen.edge.v1.EntityViewUpdateMsg) InvalidProtocolBufferException(com.google.protobuf.InvalidProtocolBufferException) DeviceProfile(org.thingsboard.server.common.data.DeviceProfile) DeviceUpdateMsg(org.thingsboard.server.gen.edge.v1.DeviceUpdateMsg) PageLink(org.thingsboard.server.common.data.page.PageLink) Authority(org.thingsboard.server.common.data.security.Authority) Alarm(org.thingsboard.server.common.data.alarm.Alarm) EdgeEventActionType(org.thingsboard.server.common.data.edge.EdgeEventActionType) EntityView(org.thingsboard.server.common.data.EntityView) AdminSettingsUpdateMsg(org.thingsboard.server.gen.edge.v1.AdminSettingsUpdateMsg) TransportProtos(org.thingsboard.server.gen.transport.TransportProtos) RuleChainId(org.thingsboard.server.common.data.id.RuleChainId) UserCredentialsUpdateMsg(org.thingsboard.server.gen.edge.v1.UserCredentialsUpdateMsg) Awaitility(org.awaitility.Awaitility) EntityKeyValueType(org.thingsboard.server.common.data.query.EntityKeyValueType) DeviceCredentialsUpdateMsg(org.thingsboard.server.gen.edge.v1.DeviceCredentialsUpdateMsg) AlarmSeverity(org.thingsboard.server.common.data.alarm.AlarmSeverity) WidgetType(org.thingsboard.server.common.data.widget.WidgetType) Device(org.thingsboard.server.common.data.Device) AlarmUpdateMsg(org.thingsboard.server.gen.edge.v1.AlarmUpdateMsg) NumericFilterPredicate(org.thingsboard.server.common.data.query.NumericFilterPredicate) ArrayList(java.util.ArrayList) User(org.thingsboard.server.common.data.User) EntityIdFactory(org.thingsboard.server.common.data.id.EntityIdFactory) MockMvcResultMatchers.status(org.springframework.test.web.servlet.result.MockMvcResultMatchers.status) AlarmConditionFilterKey(org.thingsboard.server.common.data.device.profile.AlarmConditionFilterKey) WidgetsBundleUpdateMsg(org.thingsboard.server.gen.edge.v1.WidgetsBundleUpdateMsg) DashboardUpdateMsg(org.thingsboard.server.gen.edge.v1.DashboardUpdateMsg) Before(org.junit.Before) RpcResponseMsg(org.thingsboard.server.gen.edge.v1.RpcResponseMsg) DataConstants(org.thingsboard.server.common.data.DataConstants) FilterPredicateValue(org.thingsboard.server.common.data.query.FilterPredicateValue) RuleChainType(org.thingsboard.server.common.data.rule.RuleChainType) RuleNode(org.thingsboard.server.common.data.rule.RuleNode) RuleChainMetadataRequestMsg(org.thingsboard.server.gen.edge.v1.RuleChainMetadataRequestMsg) UserCredentialsRequestMsg(org.thingsboard.server.gen.edge.v1.UserCredentialsRequestMsg) DeviceCredentials(org.thingsboard.server.common.data.security.DeviceCredentials) AttributesRequestMsg(org.thingsboard.server.gen.edge.v1.AttributesRequestMsg) Test(org.junit.Test) EntityDataProto(org.thingsboard.server.gen.edge.v1.EntityDataProto) DeviceProfileData(org.thingsboard.server.common.data.device.profile.DeviceProfileData) RelationUpdateMsg(org.thingsboard.server.gen.edge.v1.RelationUpdateMsg) TreeMap(java.util.TreeMap) PageData(org.thingsboard.server.common.data.page.PageData) DeviceCredentialsRequestMsg(org.thingsboard.server.gen.edge.v1.DeviceCredentialsRequestMsg) EdgeEvent(org.thingsboard.server.common.data.edge.EdgeEvent) RuleChain(org.thingsboard.server.common.data.rule.RuleChain) AlarmConditionFilter(org.thingsboard.server.common.data.device.profile.AlarmConditionFilter) RelationTypeGroup(org.thingsboard.server.common.data.relation.RelationTypeGroup) Assert(org.junit.Assert) JsonObject(com.google.gson.JsonObject) DeviceProfileUpdateMsg(org.thingsboard.server.gen.edge.v1.DeviceProfileUpdateMsg) EdgeImitator(org.thingsboard.server.edge.imitator.EdgeImitator) DeviceRpcCallMsg(org.thingsboard.server.gen.edge.v1.DeviceRpcCallMsg) Customer(org.thingsboard.server.common.data.Customer) RuleChainMetaData(org.thingsboard.server.common.data.rule.RuleChainMetaData) AssetUpdateMsg(org.thingsboard.server.gen.edge.v1.AssetUpdateMsg) Random(java.util.Random) DefaultTenantProfileConfiguration(org.thingsboard.server.common.data.tenant.profile.DefaultTenantProfileConfiguration) WidgetsBundle(org.thingsboard.server.common.data.widget.WidgetsBundle) Uuids(com.datastax.oss.driver.api.core.uuid.Uuids) WidgetTypeUpdateMsg(org.thingsboard.server.gen.edge.v1.WidgetTypeUpdateMsg) After(org.junit.After) AttributeDeleteMsg(org.thingsboard.server.gen.edge.v1.AttributeDeleteMsg) EntityType(org.thingsboard.server.common.data.EntityType) TypeReference(com.fasterxml.jackson.core.type.TypeReference) EdgeId(org.thingsboard.server.common.data.id.EdgeId) Dashboard(org.thingsboard.server.common.data.Dashboard) EdgeEventService(org.thingsboard.server.dao.edge.EdgeEventService) AlarmCondition(org.thingsboard.server.common.data.device.profile.AlarmCondition) UUID(java.util.UUID) AllowCreateNewDevicesDeviceProfileProvisionConfiguration(org.thingsboard.server.common.data.device.profile.AllowCreateNewDevicesDeviceProfileProvisionConfiguration) UserUpdateMsg(org.thingsboard.server.gen.edge.v1.UserUpdateMsg) RuleChainUpdateMsg(org.thingsboard.server.gen.edge.v1.RuleChainUpdateMsg) List(java.util.List) TbClusterService(org.thingsboard.server.cluster.TbClusterService) Optional(java.util.Optional) RandomStringUtils(org.apache.commons.lang3.RandomStringUtils) UpdateMsgType(org.thingsboard.server.gen.edge.v1.UpdateMsgType) EntityViewsRequestMsg(org.thingsboard.server.gen.edge.v1.EntityViewsRequestMsg) RelationRequestMsg(org.thingsboard.server.gen.edge.v1.RelationRequestMsg) JacksonUtil(org.thingsboard.common.util.JacksonUtil) Tenant(org.thingsboard.server.common.data.Tenant) RuleChainMetadataUpdateMsg(org.thingsboard.server.gen.edge.v1.RuleChainMetadataUpdateMsg) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) TenantProfile(org.thingsboard.server.common.data.TenantProfile) DeviceProfileAlarm(org.thingsboard.server.common.data.device.profile.DeviceProfileAlarm) SimpleAlarmConditionSpec(org.thingsboard.server.common.data.device.profile.SimpleAlarmConditionSpec) EntityId(org.thingsboard.server.common.data.id.EntityId) CustomerUpdateMsg(org.thingsboard.server.gen.edge.v1.CustomerUpdateMsg) AlarmInfo(org.thingsboard.server.common.data.alarm.AlarmInfo) AbstractMessage(com.google.protobuf.AbstractMessage) DeviceCredentialsType(org.thingsboard.server.common.data.security.DeviceCredentialsType) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) EdgeConfiguration(org.thingsboard.server.gen.edge.v1.EdgeConfiguration) TimeUnit(java.util.concurrent.TimeUnit) MessageLite(com.google.protobuf.MessageLite) UplinkMsg(org.thingsboard.server.gen.edge.v1.UplinkMsg) EdgeEventType(org.thingsboard.server.common.data.edge.EdgeEventType) Asset(org.thingsboard.server.common.data.asset.Asset) AlarmUpdateMsg(org.thingsboard.server.gen.edge.v1.AlarmUpdateMsg) Device(org.thingsboard.server.common.data.Device) UplinkMsg(org.thingsboard.server.gen.edge.v1.UplinkMsg) PageLink(org.thingsboard.server.common.data.page.PageLink) AlarmInfo(org.thingsboard.server.common.data.alarm.AlarmInfo) TypeReference(com.fasterxml.jackson.core.type.TypeReference) AbstractControllerTest(org.thingsboard.server.controller.AbstractControllerTest) Test(org.junit.Test)

Example 47 with Edge

use of org.thingsboard.server.common.data.edge.Edge in project thingsboard by thingsboard.

the class BaseEdgeTest method installation.

private void installation() throws Exception {
    edge = doPost("/api/edge", constructEdge("Test Edge", "test"), Edge.class);
    DeviceProfile deviceProfile = this.createDeviceProfile(CUSTOM_DEVICE_PROFILE_NAME, null);
    extendDeviceProfileData(deviceProfile);
    doPost("/api/deviceProfile", deviceProfile, DeviceProfile.class);
    Device savedDevice = saveDevice("Edge Device 1", CUSTOM_DEVICE_PROFILE_NAME);
    doPost("/api/edge/" + edge.getUuidId() + "/device/" + savedDevice.getUuidId(), Device.class);
    Asset savedAsset = saveAsset("Edge Asset 1");
    doPost("/api/edge/" + edge.getUuidId() + "/asset/" + savedAsset.getUuidId(), Asset.class);
}
Also used : DeviceProfile(org.thingsboard.server.common.data.DeviceProfile) Device(org.thingsboard.server.common.data.Device) Asset(org.thingsboard.server.common.data.asset.Asset) Edge(org.thingsboard.server.common.data.edge.Edge)

Example 48 with Edge

use of org.thingsboard.server.common.data.edge.Edge in project thingsboard by thingsboard.

the class EntityViewController method unassignEntityViewFromEdge.

@ApiOperation(value = "Unassign entity view from edge (unassignEntityViewFromEdge)", notes = "Clears assignment of the entity view to the edge. " + EDGE_UNASSIGN_ASYNC_FIRST_STEP_DESCRIPTION + "Second, remote edge service will receive an 'unassign' command to remove entity view " + EDGE_UNASSIGN_RECEIVE_STEP_DESCRIPTION + "Third, once 'unassign' command will be delivered to edge service, it's going to remove entity view locally.", produces = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("hasAuthority('TENANT_ADMIN')")
@RequestMapping(value = "/edge/{edgeId}/entityView/{entityViewId}", method = RequestMethod.DELETE)
@ResponseBody
public EntityView unassignEntityViewFromEdge(@PathVariable(EDGE_ID) String strEdgeId, @PathVariable(ENTITY_VIEW_ID) String strEntityViewId) throws ThingsboardException {
    checkParameter(EDGE_ID, strEdgeId);
    checkParameter(ENTITY_VIEW_ID, strEntityViewId);
    try {
        EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
        Edge edge = checkEdgeId(edgeId, Operation.READ);
        EntityViewId entityViewId = new EntityViewId(toUUID(strEntityViewId));
        EntityView entityView = checkEntityViewId(entityViewId, Operation.READ);
        EntityView savedEntityView = checkNotNull(entityViewService.unassignEntityViewFromEdge(getTenantId(), entityViewId, edgeId));
        logEntityAction(entityViewId, entityView, entityView.getCustomerId(), ActionType.UNASSIGNED_FROM_EDGE, null, strEntityViewId, strEdgeId, edge.getName());
        sendEntityAssignToEdgeNotificationMsg(getTenantId(), edgeId, savedEntityView.getId(), EdgeEventActionType.UNASSIGNED_FROM_EDGE);
        return savedEntityView;
    } catch (Exception e) {
        logEntityAction(emptyId(EntityType.ENTITY_VIEW), null, null, ActionType.UNASSIGNED_FROM_EDGE, e, strEntityViewId, strEdgeId);
        throw handleException(e);
    }
}
Also used : EntityViewId(org.thingsboard.server.common.data.id.EntityViewId) EntityView(org.thingsboard.server.common.data.EntityView) EdgeId(org.thingsboard.server.common.data.id.EdgeId) Edge(org.thingsboard.server.common.data.edge.Edge) IncorrectParameterException(org.thingsboard.server.dao.exception.IncorrectParameterException) ThingsboardException(org.thingsboard.server.common.data.exception.ThingsboardException) ExecutionException(java.util.concurrent.ExecutionException) ApiOperation(io.swagger.annotations.ApiOperation) PreAuthorize(org.springframework.security.access.prepost.PreAuthorize) RequestMapping(org.springframework.web.bind.annotation.RequestMapping) ResponseBody(org.springframework.web.bind.annotation.ResponseBody)

Example 49 with Edge

use of org.thingsboard.server.common.data.edge.Edge in project thingsboard by thingsboard.

the class DefaultEdgeNotificationService method setEdgeRootRuleChain.

@Override
public Edge setEdgeRootRuleChain(TenantId tenantId, Edge edge, RuleChainId ruleChainId) throws IOException {
    edge.setRootRuleChainId(ruleChainId);
    Edge savedEdge = edgeService.saveEdge(edge);
    saveEdgeEvent(tenantId, edge.getId(), EdgeEventType.RULE_CHAIN, EdgeEventActionType.UPDATED, ruleChainId, null);
    return savedEdge;
}
Also used : Edge(org.thingsboard.server.common.data.edge.Edge)

Example 50 with Edge

use of org.thingsboard.server.common.data.edge.Edge in project thingsboard by thingsboard.

the class TenantActor method onComponentLifecycleMsg.

private void onComponentLifecycleMsg(ComponentLifecycleMsg msg) {
    if (msg.getEntityId().getEntityType().equals(EntityType.API_USAGE_STATE)) {
        ApiUsageState old = getApiUsageState();
        apiUsageState = new ApiUsageState(systemContext.getApiUsageStateService().getApiUsageState(tenantId));
        if (old.isReExecEnabled() && !apiUsageState.isReExecEnabled()) {
            log.info("[{}] Received API state update. Going to DISABLE Rule Engine execution.", tenantId);
            destroyRuleChains();
        } else if (!old.isReExecEnabled() && apiUsageState.isReExecEnabled()) {
            log.info("[{}] Received API state update. Going to ENABLE Rule Engine execution.", tenantId);
            initRuleChains();
        }
    } else if (msg.getEntityId().getEntityType() == EntityType.EDGE) {
        EdgeId edgeId = new EdgeId(msg.getEntityId().getId());
        EdgeRpcService edgeRpcService = systemContext.getEdgeRpcService();
        if (msg.getEvent() == ComponentLifecycleEvent.DELETED) {
            edgeRpcService.deleteEdge(tenantId, edgeId);
        } else {
            Edge edge = systemContext.getEdgeService().findEdgeById(tenantId, edgeId);
            if (msg.getEvent() == ComponentLifecycleEvent.UPDATED) {
                edgeRpcService.updateEdge(tenantId, edge);
            }
        }
    } else if (isRuleEngine) {
        TbActorRef target = getEntityActorRef(msg.getEntityId());
        if (target != null) {
            if (msg.getEntityId().getEntityType() == EntityType.RULE_CHAIN) {
                RuleChain ruleChain = systemContext.getRuleChainService().findRuleChainById(tenantId, new RuleChainId(msg.getEntityId().getId()));
                if (ruleChain != null && RuleChainType.CORE.equals(ruleChain.getType())) {
                    visit(ruleChain, target);
                }
            }
            target.tellWithHighPriority(msg);
        } else {
            log.debug("[{}] Invalid component lifecycle msg: {}", tenantId, msg);
        }
    }
}
Also used : ApiUsageState(org.thingsboard.server.common.data.ApiUsageState) RuleChain(org.thingsboard.server.common.data.rule.RuleChain) EdgeId(org.thingsboard.server.common.data.id.EdgeId) TbActorRef(org.thingsboard.server.actors.TbActorRef) RuleChainId(org.thingsboard.server.common.data.id.RuleChainId) EdgeRpcService(org.thingsboard.server.service.edge.rpc.EdgeRpcService) Edge(org.thingsboard.server.common.data.edge.Edge)

Aggregations

Edge (org.thingsboard.server.common.data.edge.Edge)98 Test (org.junit.Test)46 EdgeId (org.thingsboard.server.common.data.id.EdgeId)32 PageLink (org.thingsboard.server.common.data.page.PageLink)31 ArrayList (java.util.ArrayList)25 ThingsboardException (org.thingsboard.server.common.data.exception.ThingsboardException)25 ApiOperation (io.swagger.annotations.ApiOperation)23 PreAuthorize (org.springframework.security.access.prepost.PreAuthorize)23 RequestMapping (org.springframework.web.bind.annotation.RequestMapping)23 ResponseBody (org.springframework.web.bind.annotation.ResponseBody)22 DataValidationException (org.thingsboard.server.dao.exception.DataValidationException)22 CustomerId (org.thingsboard.server.common.data.id.CustomerId)21 Customer (org.thingsboard.server.common.data.Customer)20 IncorrectParameterException (org.thingsboard.server.dao.exception.IncorrectParameterException)20 EntityRelation (org.thingsboard.server.common.data.relation.EntityRelation)16 TypeReference (com.fasterxml.jackson.core.type.TypeReference)15 TenantId (org.thingsboard.server.common.data.id.TenantId)14 Device (org.thingsboard.server.common.data.Device)13 Asset (org.thingsboard.server.common.data.asset.Asset)13 PageData (org.thingsboard.server.common.data.page.PageData)13