lwm2m: comments - 1
This commit is contained in:
parent
aa1991c7b4
commit
cb2ab78186
@ -29,7 +29,7 @@ import org.thingsboard.server.dao.service.DaoSqlTest;
|
||||
import org.thingsboard.server.gen.transport.TransportProtos;
|
||||
import org.thingsboard.server.transport.lwm2m.AbstractLwM2MIntegrationTest;
|
||||
import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportServerHelper;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.ResultUpdateResource;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.ResourceUpdateResult;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
@ -259,7 +259,7 @@ public abstract class AbstractRpcLwM2MIntegrationTest extends AbstractLwM2MInteg
|
||||
.filter(invocation ->
|
||||
invocation.getMethod().getName().equals("updateAttrTelemetry") &&
|
||||
invocation.getArguments().length > 1 &&
|
||||
((ResultUpdateResource)invocation.getArguments()[0]).getPaths().toString().contains(idVerRez)
|
||||
((ResourceUpdateResult)invocation.getArguments()[0]).getPaths().toString().contains(idVerRez)
|
||||
)
|
||||
.count();
|
||||
}
|
||||
|
||||
@ -24,7 +24,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mockito;
|
||||
import org.thingsboard.server.transport.lwm2m.rpc.AbstractRpcLwM2MIntegrationTest;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.ResultUpdateResource;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.ResourceUpdateResult;
|
||||
|
||||
import static org.eclipse.leshan.core.LwM2mId.ACCESS_CONTROL;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
@ -80,7 +80,7 @@ public class RpcLwm2mIntegrationObserveTest extends AbstractRpcLwM2MIntegrationT
|
||||
|
||||
int cntUpdate = 3;
|
||||
verify(defaultUplinkMsgHandlerTest, timeout(10000).atLeast(cntUpdate))
|
||||
.updateAttrTelemetry(Mockito.any(ResultUpdateResource.class), eq(null));
|
||||
.updateAttrTelemetry(Mockito.any(ResourceUpdateResult.class), eq(null));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -95,7 +95,7 @@ public class RpcLwm2mIntegrationObserveTest extends AbstractRpcLwM2MIntegrationT
|
||||
|
||||
int cntUpdate = 3;
|
||||
verify(defaultUplinkMsgHandlerTest, timeout(10000).atLeast(cntUpdate))
|
||||
.updateAttrTelemetry(Mockito.any(ResultUpdateResource.class), eq(null));
|
||||
.updateAttrTelemetry(Mockito.any(ResourceUpdateResult.class), eq(null));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -328,7 +328,7 @@ public class RpcLwm2mIntegrationObserveTest extends AbstractRpcLwM2MIntegrationT
|
||||
|
||||
int cntUpdate = 10;
|
||||
verify(defaultUplinkMsgHandlerTest, timeout(50000).atLeast(cntUpdate))
|
||||
.updateAttrTelemetry(Mockito.any(ResultUpdateResource.class), eq(null));
|
||||
.updateAttrTelemetry(Mockito.any(ResourceUpdateResult.class), eq(null));
|
||||
}
|
||||
|
||||
private void sendRpcObserveWithWithTwoResource(String expectedId_1, String expectedId_2) throws Exception {
|
||||
|
||||
@ -40,7 +40,7 @@ public enum TelemetryObserveStrategy {
|
||||
return strategy;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
throw new IllegalArgumentException("Unknown TelemetryObserveStrategy id: " + description);
|
||||
}
|
||||
|
||||
public static TelemetryObserveStrategy fromId(int id) {
|
||||
|
||||
@ -23,11 +23,11 @@ import java.util.Set;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
public class ResultUpdateResource {
|
||||
LwM2mClient lwM2MClient;
|
||||
Set<String> paths;
|
||||
public class ResourceUpdateResult {
|
||||
private LwM2mClient lwM2MClient;
|
||||
private Set<String> paths;
|
||||
|
||||
public ResultUpdateResource(LwM2mClient lwM2MClient) {
|
||||
public ResourceUpdateResult(LwM2mClient lwM2MClient) {
|
||||
this.lwM2MClient = lwM2MClient;
|
||||
this.paths = new HashSet<>();
|
||||
}
|
||||
@ -78,7 +78,7 @@ import org.thingsboard.server.transport.lwm2m.server.client.LwM2MClientState;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.LwM2MClientStateException;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClientContext;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.ResultUpdateResource;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.ResourceUpdateResult;
|
||||
import org.thingsboard.server.transport.lwm2m.server.client.ResultsAddKeyValueProto;
|
||||
import org.thingsboard.server.transport.lwm2m.server.common.LwM2MExecutorAwareService;
|
||||
import org.thingsboard.server.transport.lwm2m.server.downlink.DownlinkRequestCallback;
|
||||
@ -124,7 +124,6 @@ import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.thingsboard.server.common.data.device.profile.lwm2m.TelemetryObserveStrategy.COMPOSITE_ALL;
|
||||
import static org.thingsboard.server.common.data.device.profile.lwm2m.TelemetryObserveStrategy.COMPOSITE_BY_OBJECT;
|
||||
import static org.thingsboard.server.common.data.device.profile.lwm2m.TelemetryObserveStrategy.SINGLE;
|
||||
import static org.thingsboard.server.common.data.lwm2m.LwM2mConstants.LWM2M_SEPARATOR_PATH;
|
||||
@ -324,7 +323,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
LwM2mClient lwM2MClient = clientContext.getClientByEndpoint(registration.getEndpoint());
|
||||
ObjectModel objectModelVersion = lwM2MClient.getObjectModel(path, modelProvider);
|
||||
if (objectModelVersion != null) {
|
||||
ResultUpdateResource updateResource = new ResultUpdateResource(lwM2MClient);
|
||||
ResourceUpdateResult updateResource = new ResourceUpdateResult(lwM2MClient);
|
||||
int responseCode = response.getCode().getCode();
|
||||
if (content instanceof LwM2mObject) {
|
||||
this.updateObjectResourceValue(updateResource, (LwM2mObject) content, path, responseCode);
|
||||
@ -343,7 +342,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
log.trace("ReadCompositeResponse before onUpdateValueAfterReadCompositeResponse: [{}]", response);
|
||||
if (response.getContent() != null) {
|
||||
LwM2mClient lwM2MClient = clientContext.getClientByEndpoint(registration.getEndpoint());
|
||||
ResultUpdateResource updateResource = new ResultUpdateResource(lwM2MClient);
|
||||
ResourceUpdateResult updateResource = new ResourceUpdateResult(lwM2MClient);
|
||||
response.getContent().forEach((k, v) -> {
|
||||
if (v != null) {
|
||||
int responseCode = response.getCode().getCode();
|
||||
@ -386,7 +385,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
LwM2mClient lwM2MClient = clientContext.getClientByEndpoint(registration.getEndpoint());
|
||||
ObjectModel objectModelVersion = lwM2MClient.getObjectModel(path.toString(), modelProvider);
|
||||
if (objectModelVersion != null) {
|
||||
ResultUpdateResource updateResource = new ResultUpdateResource(lwM2MClient);
|
||||
ResourceUpdateResult updateResource = new ResourceUpdateResult(lwM2MClient);
|
||||
if (node instanceof LwM2mObject) {
|
||||
this.updateObjectResourceValue(updateResource, (LwM2mObject) node, path.toString(), 0);
|
||||
} else if (node instanceof LwM2mObjectInstance) {
|
||||
@ -518,19 +517,30 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
targetIds = targetIds.stream().filter(target -> isSupportedTargetId(supportedObjects, target)).collect(Collectors.toSet());
|
||||
if (!targetIds.isEmpty()) {
|
||||
TelemetryObserveStrategy observeStrategy = profile.getObserveAttr().getObserveStrategy();
|
||||
if (SINGLE.equals(observeStrategy)) {
|
||||
CountDownLatch latch = new CountDownLatch(targetIds.size());
|
||||
targetIds.forEach(targetId -> sendObserveRequest(lwM2MClient, targetId,
|
||||
new TbLwM2MLatchCallback<>(latch, new TbLwM2MObserveCallback(this, logService, lwM2MClient, targetId))));
|
||||
latch.await(config.getTimeout(), TimeUnit.MILLISECONDS);
|
||||
} else if (COMPOSITE_ALL.equals(observeStrategy)) {
|
||||
String[] versionedIds = targetIds.toArray(new String[0]);
|
||||
sendObserveCompositeRequest(lwM2MClient, versionedIds);
|
||||
} else if (COMPOSITE_BY_OBJECT.equals(observeStrategy)) {
|
||||
Map<Integer, String[]> versionedObjectIds = groupByObjectIdVersionedIds(targetIds);
|
||||
CountDownLatch latch = new CountDownLatch(versionedObjectIds.size());
|
||||
versionedObjectIds.forEach((k, v)-> sendObserveCompositeRequest(lwM2MClient, v));
|
||||
latch.await(config.getTimeout(), TimeUnit.MILLISECONDS);
|
||||
long timeoutMs = config.getTimeout();
|
||||
switch (observeStrategy) {
|
||||
case SINGLE -> {
|
||||
CountDownLatch latch = new CountDownLatch(targetIds.size());
|
||||
targetIds.forEach(targetId -> sendObserveRequest(
|
||||
lwM2MClient, targetId,
|
||||
new TbLwM2MLatchCallback<>(latch, new TbLwM2MObserveCallback(this, logService, lwM2MClient, targetId))
|
||||
));
|
||||
boolean completed = latch.await(timeoutMs, TimeUnit.MILLISECONDS);
|
||||
if (!completed) log.trace("[{}] Timeout occurred during SINGLE observe init", lwM2MClient.getEndpoint());
|
||||
}
|
||||
case COMPOSITE_ALL -> {
|
||||
CountDownLatch latch = new CountDownLatch(targetIds.size());
|
||||
sendObserveCompositeRequest(lwM2MClient, targetIds.toArray(new String[0]));
|
||||
boolean completed = latch.await(timeoutMs, TimeUnit.MILLISECONDS);
|
||||
if (!completed) log.trace("[{}] Timeout occurred during COMPOSITE_ALL observe init", lwM2MClient.getEndpoint());
|
||||
}
|
||||
case COMPOSITE_BY_OBJECT -> {
|
||||
Map<Integer, String[]> versionedObjectIds = groupByObjectIdVersionedIds(targetIds);
|
||||
CountDownLatch latch = new CountDownLatch(versionedObjectIds.size());
|
||||
versionedObjectIds.forEach((k, v) -> sendObserveCompositeRequest(lwM2MClient, v));
|
||||
boolean completed = latch.await(timeoutMs, TimeUnit.MILLISECONDS);
|
||||
if (!completed) log.trace("[{}] Timeout occurred during COMPOSITE_BY_OBJECT observe init", lwM2MClient.getEndpoint());
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
@ -586,7 +596,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
defaultLwM2MDownlinkMsgHandler.sendCancelObserveRequest(client, request, new TbLwM2MCancelObserveCallback(logService, client, versionedId));
|
||||
}
|
||||
|
||||
private void updateObjectResourceValue(ResultUpdateResource updateResource, LwM2mObject lwM2mObject, String pathIdVer, int code) {
|
||||
private void updateObjectResourceValue(ResourceUpdateResult updateResource, LwM2mObject lwM2mObject, String pathIdVer, int code) {
|
||||
LwM2mPath pathIds = new LwM2mPath(fromVersionedIdToObjectId(pathIdVer));
|
||||
lwM2mObject.getInstances().forEach((instanceId, instance) -> {
|
||||
String pathInstance = pathIds.toString() + "/" + instanceId;
|
||||
@ -594,7 +604,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
});
|
||||
}
|
||||
|
||||
private void updateObjectInstanceResourceValue(ResultUpdateResource updateResource, LwM2mObjectInstance lwM2mObjectInstance, String pathIdVer, int code) {
|
||||
private void updateObjectInstanceResourceValue(ResourceUpdateResult updateResource, LwM2mObjectInstance lwM2mObjectInstance, String pathIdVer, int code) {
|
||||
lwM2mObjectInstance.getResources().forEach((resourceId, resource) -> {
|
||||
String pathRez = pathIdVer + "/" + resourceId;
|
||||
this.updateResourcesValue(updateResource, resource, pathRez, Mode.UPDATE, code);
|
||||
@ -612,7 +622,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
* @param stringPath - resource
|
||||
* @param mode - Replace, Update
|
||||
*/
|
||||
private void updateResourcesValue(ResultUpdateResource updateResource, LwM2mResource lwM2mResource, String stringPath, Mode mode, int code) {
|
||||
private void updateResourcesValue(ResourceUpdateResult updateResource, LwM2mResource lwM2mResource, String stringPath, Mode mode, int code) {
|
||||
LwM2mClient lwM2MClient = updateResource.getLwM2MClient();
|
||||
String path = convertObjectIdToVersionedId(stringPath, lwM2MClient);
|
||||
if (path != null && lwM2MClient.saveResourceValue(path, lwM2mResource, modelProvider, mode)) {
|
||||
@ -660,7 +670,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
*
|
||||
* @param updateResource - updateResource resource of LwM2M Client
|
||||
*/
|
||||
public void updateAttrTelemetry(ResultUpdateResource updateResource, Instant ts) {
|
||||
public void updateAttrTelemetry(ResourceUpdateResult updateResource, Instant ts) {
|
||||
log.trace("UpdateAttrTelemetry paths [{}]", updateResource.getPaths());
|
||||
try {
|
||||
ResultsAddKeyValueProto results = this.getParametersFromProfile(updateResource);
|
||||
@ -707,7 +717,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
*
|
||||
* @param updateResource - updateResource resource of LwM2M Client
|
||||
*/
|
||||
private ResultsAddKeyValueProto getParametersFromProfile(ResultUpdateResource updateResource) {
|
||||
private ResultsAddKeyValueProto getParametersFromProfile(ResourceUpdateResult updateResource) {
|
||||
Registration registration = updateResource.getLwM2MClient().getRegistration();
|
||||
Set<String> paths = updateResource.getPaths();
|
||||
ResultsAddKeyValueProto results = new ResultsAddKeyValueProto();
|
||||
@ -823,7 +833,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
|
||||
@Override
|
||||
public void onWriteResponseOk(LwM2mClient lwM2MClient, String path, WriteRequest request, int code) {
|
||||
ResultUpdateResource updateResource = new ResultUpdateResource(lwM2MClient);
|
||||
ResourceUpdateResult updateResource = new ResourceUpdateResult(lwM2MClient);
|
||||
if (request.getNode() instanceof LwM2mResource) {
|
||||
this.updateResourcesValue(updateResource, ((LwM2mResource) request.getNode()), path, request.isReplaceRequest() ? Mode.REPLACE : Mode.UPDATE, code);
|
||||
} else if (request.getNode() instanceof LwM2mObjectInstance) {
|
||||
@ -840,7 +850,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
@Override
|
||||
public void onCreatebjectInstancesResponseOk(LwM2mClient lwM2MClient, String versionId, CreateRequest request) {
|
||||
if (request.getObjectInstances() != null && !request.getObjectInstances().isEmpty()) {
|
||||
ResultUpdateResource updateResource = new ResultUpdateResource(lwM2MClient);
|
||||
ResourceUpdateResult updateResource = new ResourceUpdateResult(lwM2MClient);
|
||||
request.getObjectInstances().forEach(instance ->
|
||||
instance.getResources().forEach((resId, lwM2mResource) ->{
|
||||
this.updateResourcesValue(updateResource, lwM2mResource, versionId + "/" + resId, Mode.REPLACE, 0);
|
||||
@ -854,7 +864,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl
|
||||
@Override
|
||||
public void onWriteCompositeResponseOk(LwM2mClient lwM2MClient, WriteCompositeRequest request, int code) {
|
||||
log.trace("ReadCompositeResponse: [{}]", request.getNodes());
|
||||
ResultUpdateResource updateResource = new ResultUpdateResource(lwM2MClient);
|
||||
ResourceUpdateResult updateResource = new ResourceUpdateResult(lwM2MClient);
|
||||
request.getNodes().forEach((k, v) -> {
|
||||
if (v instanceof LwM2mSingleResource) {
|
||||
this.updateResourcesValue(updateResource, (LwM2mResource) v, k.toString(), Mode.REPLACE, code);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user