inactivity improvements
This commit is contained in:
parent
aa814b8628
commit
c3293f556e
@ -284,6 +284,7 @@ public class DefaultDeviceStateService extends AbstractPartitionBasedService<Dev
|
||||
log.trace("on Device Activity Timeout Update device id {} inactivityTimeout {}", deviceId, inactivityTimeout);
|
||||
DeviceStateData stateData = getOrFetchDeviceStateData(deviceId);
|
||||
stateData.getState().setInactivityTimeout(inactivityTimeout);
|
||||
checkAndUpdateState(deviceId, stateData);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -398,12 +399,17 @@ public class DefaultDeviceStateService extends AbstractPartitionBasedService<Dev
|
||||
}
|
||||
|
||||
void checkAndUpdateState(@Nonnull DeviceId deviceId, @Nonnull DeviceStateData state) {
|
||||
if (state.getState().isActive()) {
|
||||
var deviceState = state.getState();
|
||||
if (deviceState.isActive()) {
|
||||
updateInactivityStateIfExpired(System.currentTimeMillis(), deviceId, state);
|
||||
} else {
|
||||
//trying to fix activity state
|
||||
if (isActive(System.currentTimeMillis(), state.getState())) {
|
||||
updateActivityState(deviceId, state, state.getState().getLastActivityTime());
|
||||
if (isActive(System.currentTimeMillis(), deviceState)) {
|
||||
updateActivityState(deviceId, state, deviceState.getLastActivityTime());
|
||||
if (deviceState.getLastInactivityAlarmTime() != 0L && deviceState.getLastInactivityAlarmTime() >= deviceState.getLastActivityTime()) {
|
||||
deviceState.setLastInactivityAlarmTime(0L);
|
||||
save(deviceId, INACTIVITY_ALARM_TIME, 0L);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -141,12 +141,12 @@ public class DefaultDeviceStateServiceTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenUpdateInactivityTimeoutAndThenNoStateChange() throws Exception {
|
||||
public void givenIncreaseInactivityTimeoutAndThenStateIsActive() throws Exception {
|
||||
TelemetrySubscriptionService telemetrySubscriptionService = Mockito.mock(TelemetrySubscriptionService.class);
|
||||
ReflectionTestUtils.setField(service, "tsSubService", telemetrySubscriptionService);
|
||||
ReflectionTestUtils.setField(service, "defaultStateCheckIntervalInSec", 60);
|
||||
ReflectionTestUtils.setField(service, "defaultActivityStatsIntervalInSec", 60);
|
||||
ReflectionTestUtils.setField(service, "defaultInactivityTimeoutMs", 60000);
|
||||
ReflectionTestUtils.setField(service, "defaultInactivityTimeoutMs", 1);
|
||||
ReflectionTestUtils.setField(service, "initFetchPackSize", 10);
|
||||
|
||||
Mockito.when(entityQueryRepository.findEntityDataByQueryInternal(Mockito.any())).thenReturn(new PageData<>());
|
||||
@ -178,18 +178,43 @@ public class DefaultDeviceStateServiceTest {
|
||||
|
||||
service.deviceStates.put(deviceId, deviceStateData);
|
||||
|
||||
service.getPartitionedEntities(tpi).add(deviceId);
|
||||
|
||||
service.onDeviceActivity(tenantId, deviceId, System.currentTimeMillis());
|
||||
|
||||
Mockito.verify(telemetrySubscriptionService, Mockito.times(1)).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.eq(true), Mockito.any());
|
||||
|
||||
Thread.sleep(1);
|
||||
|
||||
service.checkStates();
|
||||
|
||||
Mockito.verify(telemetrySubscriptionService, Mockito.times(1)).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.eq(false), Mockito.any());
|
||||
|
||||
Mockito.reset(telemetrySubscriptionService);
|
||||
|
||||
service.onDeviceInactivityTimeoutUpdate(tenantId, deviceId, System.currentTimeMillis() - deviceState.getLastActivityTime() + 1000);
|
||||
|
||||
Mockito.verify(telemetrySubscriptionService, Mockito.times(1)).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.eq(true), Mockito.any());
|
||||
|
||||
Thread.sleep(2000);
|
||||
|
||||
service.checkStates();
|
||||
|
||||
Mockito.verify(telemetrySubscriptionService, Mockito.times(1)).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.eq(false), Mockito.any());
|
||||
|
||||
Mockito.reset(telemetrySubscriptionService);
|
||||
|
||||
service.onDeviceInactivityTimeoutUpdate(tenantId, deviceId, 2000);
|
||||
|
||||
Mockito.verify(telemetrySubscriptionService, Mockito.never()).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.eq(true), Mockito.any());
|
||||
|
||||
service.onDeviceActivity(tenantId, deviceId, System.currentTimeMillis());
|
||||
|
||||
Mockito.verify(telemetrySubscriptionService, Mockito.times(1)).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.eq(true), Mockito.any());
|
||||
|
||||
service.onDeviceInactivityTimeoutUpdate(tenantId, deviceId, 1);
|
||||
|
||||
Mockito.verify(telemetrySubscriptionService, Mockito.never()).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.eq(false), Mockito.any());
|
||||
service.onDeviceInactivityTimeoutUpdate(tenantId, deviceId, 60000);
|
||||
|
||||
Mockito.verify(telemetrySubscriptionService, Mockito.never()).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.eq(true), Mockito.any());
|
||||
Mockito.verify(telemetrySubscriptionService, Mockito.times(1)).saveAttrAndNotify(Mockito.any(), Mockito.eq(deviceId), Mockito.any(), Mockito.eq("active"), Mockito.eq(false), Mockito.any());
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user