@Test public void shouldGetIdleTimeForGivenProcess() { processManager = new ProcessManager(); ProcessWrapper processWrapperOne = mock(ProcessWrapper.class); Process processOne = mock(Process.class); ProcessWrapper processWrapperTwo = mock(ProcessWrapper.class); Process processTwo = mock(Process.class); ConcurrentMap<Process, ProcessWrapper> processMap = processManager.getProcessMap(); processMap.put(processOne, processWrapperOne); processMap.put(processTwo, processWrapperTwo); when(processWrapperOne.getProcessTag()).thenReturn("tag1"); when(processWrapperOne.getIdleTime()).thenReturn(200L); when(processWrapperTwo.getProcessTag()).thenReturn("tag2"); when(processWrapperTwo.getIdleTime()).thenReturn(100L); long timeout = processManager.getIdleTimeFor("tag2"); assertThat(timeout, is(100L)); }
public boolean updateMaterial(Material material) { Date inProgressSince = inProgress.putIfAbsent(material, new Date()); if (inProgressSince == null || !material.isAutoUpdate()) { LOGGER.debug("[Material Update] Starting update of material {}", material); try { long trackingId = mduPerformanceLogger.materialSentToUpdateQueue(material); queueFor(material).post(new MaterialUpdateMessage(material, trackingId)); return true; } catch (RuntimeException e) { inProgress.remove(material); throw e; } } else { LOGGER.warn("[Material Update] Skipping update of material {} which has been in-progress since {}", material, inProgressSince); long idleTime = getProcessManager().getIdleTimeFor(material.getFingerprint()); if (idleTime > getMaterialUpdateInActiveTimeoutInMillis()) { HealthStateScope scope = HealthStateScope.forMaterialUpdate(material); serverHealthService.removeByScope(scope); serverHealthService.update(warning("Material update for " + material.getUriForDisplay() + " hung:", "Material update is currently running but has not shown any activity in the last " + idleTime / 60000 + " minute(s). This may be hung. Details - " + material.getLongDescription(), general(scope))); } return false; } }