@Override public void run() { long currentTime = System.currentTimeMillis(); for (Entry<Long, AgentStatusData> entry : agentStatusDataMap.entrySet()) { if (entry.getValue().getAgentConnection() != AgentConnection.CONNECTED) { continue; } long timeToLastSignal = currentTime - entry.getValue().getLastKeepAliveTimestamp(); if (timeToLastSignal > IKeepAliveService.KA_TIMEOUT) { registerKeepAliveTimeout(entry.getKey()); if (log.isInfoEnabled()) { log.info("Platform " + entry.getKey() + " timed out."); } } } } };
/** * {@inheritDoc} */ @Override public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { if (receiver instanceof AgentLeaf) { AgentLeaf agentLeaf = (AgentLeaf) receiver; if ("canDelete".equals(property)) { return (null == agentLeaf.getAgentStatusData()) || (agentLeaf.getAgentStatusData().getAgentConnection() != AgentConnection.CONNECTED); } } return false; }
/** * Registers the time when the last keep-alive was received for a given platform ident. * * @param platformIdent * ID of the platform ident. */ public void handleKeepAliveSignal(long platformIdent) { AgentStatusData agentStatusData = agentStatusDataMap.get(platformIdent); if (null != agentStatusData) { agentStatusData.setLastKeepAliveTimestamp(System.currentTimeMillis()); // Updates the agent status if no keep-alive messages were received before if (agentStatusData.getAgentConnection() == AgentConnection.NO_KEEP_ALIVE) { agentStatusData.setAgentConnection(AgentConnection.CONNECTED); if (log.isInfoEnabled()) { log.info("Platform " + platformIdent + " sending keep-alive signals again."); } } } else { registerConnected(platformIdent); agentStatusDataMap.get(platformIdent).setInstrumentationStatus(InstrumentationStatus.NO_CLASS_CACHE_AVAILABLE); if (log.isInfoEnabled()) { log.info("Platform " + platformIdent + " has been reconnected, but no class cache is available for this agent. Please reconnect the agent, to reload the class cache."); } } }
@Test public void connected() { long platformIdent = 10L; agentStatusDataProvider.registerConnected(platformIdent); agentStatusDataProvider.registerKeepAliveTimeout(platformIdent); AgentStatusData agentStatusData = agentStatusDataProvider.getAgentStatusDataMap().get(platformIdent); assertThat(agentStatusData, is(notNullValue())); assertThat(agentStatusData.getAgentConnection(), is(AgentConnection.NO_KEEP_ALIVE)); } }
@Test public void noTimeout() throws Exception { long platformIdent = 10L; agentStatusDataProvider.registerConnected(platformIdent); agentStatusDataProvider.afterPropertiesSet(); AgentStatusData agentStatusData = agentStatusDataProvider.getAgentStatusDataMap().get(platformIdent); assertThat(agentStatusData, is(notNullValue())); assertThat(agentStatusData.getAgentConnection(), is(AgentConnection.CONNECTED)); }
@Test public void disconnected() { long platformIdent = 10L; agentStatusDataProvider.registerConnected(platformIdent); boolean disconnected = agentStatusDataProvider.registerDisconnected(platformIdent); assertThat(disconnected, is(true)); AgentStatusData agentStatusData = agentStatusDataProvider.getAgentStatusDataMap().get(platformIdent); assertThat(agentStatusData, is(notNullValue())); assertThat(agentStatusData.getAgentConnection(), is(AgentConnection.DISCONNECTED)); } }
@Test public void timeout() throws Exception { long platformIdent = 10L; agentStatusDataProvider.registerConnected(platformIdent); Thread.sleep(IKeepAliveService.KA_TIMEOUT + 1); agentStatusDataProvider.afterPropertiesSet(); AgentStatusData agentStatusData = agentStatusDataProvider.getAgentStatusDataMap().get(platformIdent); assertThat(agentStatusData, is(notNullValue())); assertThat(agentStatusData.getAgentConnection(), is(AgentConnection.NO_KEEP_ALIVE)); }
for (Entry<PlatformIdent, AgentStatusData> entry : agentsOverview.entrySet()) { AgentStatusData agentStatus = entry.getValue(); if ((agentStatus.getAgentConnection() == AgentConnection.CONNECTED) && (agentStatus.getInstrumentationStatus() == InstrumentationStatus.PENDING)) { resultMap.put(entry.getKey(), entry.getValue());
@Test public void disconnected() throws Exception { long platformIdent = 10L; agentStatusDataProvider.registerConnected(platformIdent); agentStatusDataProvider.registerDisconnected(platformIdent); agentStatusDataProvider.afterPropertiesSet(); AgentStatusData agentStatusData = agentStatusDataProvider.getAgentStatusDataMap().get(platformIdent); assertThat(agentStatusData, is(notNullValue())); assertThat(agentStatusData.getAgentConnection(), is(AgentConnection.DISCONNECTED)); } }
@Test public void connectFirstTime() { long platformIdent = 10L; agentStatusDataProvider.registerConnected(platformIdent); assertThat(agentStatusDataProvider.getAgentStatusDataMap().entrySet(), hasSize(1)); AgentStatusData agentStatusData = agentStatusDataProvider.getAgentStatusDataMap().get(platformIdent); assertThat(agentStatusData, is(notNullValue())); assertThat(agentStatusData.getAgentConnection(), is(AgentConnection.CONNECTED)); assertThat(agentStatusData.getConnectionTimestamp(), is(greaterThan(0L))); assertThat(agentStatusData.getLastKeepAliveTimestamp(), is(greaterThan(0L))); assertThat(agentStatusData.getMillisSinceLastData(), is(nullValue())); assertThat(agentStatusData.getInstrumentationStatus(), is(InstrumentationStatus.UP_TO_DATE)); }
@Test public void neverConnected() { long platformIdent = 10L; long currentTimeMillis = System.currentTimeMillis(); agentStatusDataProvider.handleKeepAliveSignal(platformIdent); AgentStatusData agentStatusData = agentStatusDataProvider.getAgentStatusDataMap().get(platformIdent); assertThat(agentStatusData.getAgentConnection(), is(AgentConnection.CONNECTED)); assertThat(agentStatusData.getLastKeepAliveTimestamp(), is(greaterThanOrEqualTo(currentTimeMillis))); assertThat(agentStatusData.getInstrumentationStatus(), is(InstrumentationStatus.NO_CLASS_CACHE_AVAILABLE)); }
if (null != agentStatusData && null != cmrRepositoryDefinition && null != platformIdent) { if (AgentConnection.CONNECTED.equals(agentStatusData.getAgentConnection())) {
@Test public void connected() { long platformIdent = 10L; agentStatusDataProvider.registerConnected(platformIdent); long currentTimeMillis = System.currentTimeMillis(); agentStatusDataProvider.handleKeepAliveSignal(platformIdent); AgentStatusData agentStatusData = agentStatusDataProvider.getAgentStatusDataMap().get(platformIdent); assertThat(agentStatusData.getAgentConnection(), is(AgentConnection.CONNECTED)); assertThat(agentStatusData.getLastKeepAliveTimestamp(), is(greaterThanOrEqualTo(currentTimeMillis))); }
@Test public void connectTwice() { long platformIdent = 10L; agentStatusDataProvider.registerConnected(platformIdent); long currentTimeMillis = System.currentTimeMillis(); agentStatusDataProvider.registerConnected(platformIdent); assertThat(agentStatusDataProvider.getAgentStatusDataMap().entrySet(), hasSize(1)); AgentStatusData agentStatusData = agentStatusDataProvider.getAgentStatusDataMap().get(platformIdent); assertThat(agentStatusData, is(notNullValue())); assertThat(agentStatusData.getAgentConnection(), is(AgentConnection.CONNECTED)); assertThat(agentStatusData.getConnectionTimestamp(), is(greaterThanOrEqualTo(currentTimeMillis))); assertThat(agentStatusData.getLastKeepAliveTimestamp(), is(greaterThanOrEqualTo(currentTimeMillis))); assertThat(agentStatusData.getMillisSinceLastData(), is(nullValue())); assertThat(agentStatusData.getInstrumentationStatus(), is(InstrumentationStatus.UP_TO_DATE)); }
@Test public void afterTimeout() { long platformIdent = 10L; agentStatusDataProvider.registerConnected(platformIdent); agentStatusDataProvider.registerKeepAliveTimeout(platformIdent); long currentTimeMillis = System.currentTimeMillis(); agentStatusDataProvider.handleKeepAliveSignal(platformIdent); AgentStatusData agentStatusData = agentStatusDataProvider.getAgentStatusDataMap().get(platformIdent); assertThat(agentStatusData.getAgentConnection(), is(AgentConnection.CONNECTED)); assertThat(agentStatusData.getLastKeepAliveTimestamp(), is(greaterThanOrEqualTo(currentTimeMillis))); } }
/** * * {@inheritDoc} */ @Override @MethodLog public void deleteAgent(long platformId) throws BusinessException { PlatformIdent platformIdent = platformIdentDao.load(platformId); if (null != platformIdent) { AgentStatusData agentStatusData = agentStatusProvider.getAgentStatusDataMap().get(platformIdent.getId()); // delete is allowed only if agent is disconnected or was never connected if ((null != agentStatusData) && (agentStatusData.getAgentConnection() == AgentConnection.CONNECTED)) { throw new BusinessException("Delete the agent '" + platformIdent.getAgentName() + "'.", AgentManagementErrorCodeEnum.AGENT_CAN_NOT_BE_DELETED); } platformIdentDao.delete(platformIdent); defaultDataDao.deleteAll(platformIdent.getId()); AgentDeletedEvent event = new AgentDeletedEvent(this, platformIdent.getId()); eventPublisher.publishEvent(event); log.info("The Agent '" + platformIdent.getAgentName() + "' with the ID " + platformIdent.getId() + " was successfully deleted from the CMR."); } else { throw new BusinessException("Delete the agent with the ID=" + platformId + ".", AgentManagementErrorCodeEnum.AGENT_DOES_NOT_EXIST); } }
styledString.append(" - "); if (null != agentStatusData) { switch (agentStatusData.getAgentConnection()) { case CONNECTED: if (null != agentStatusData.getMillisSinceLastData()) {
switch (agentStatusData.getAgentConnection()) { case CONNECTED: if (null != agentStatusData.getMillisSinceLastData()) {