@Override public List<String> findAllNodes() { logger.info("HealthService::findAllNodes() called"); final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); logger.info("HealthService::findAllNodes() called returns {}", names); return names; }
@Override public List<String> findAllNodesWithStatus(final HealthStatus queryStatus) { final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .filter(serviceHealthStat -> serviceHealthStat.getStatus() == queryStatus) .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); return names; }
@Override public List<String> findHealthyNodes() { logger.info("HealthService::findHealthyNodes() called"); final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .filter(serviceHealthStat -> serviceHealthStat.getStatus() == HealthStatus.PASS) .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); logger.info("HealthService::findHealthyNodes() called returns {}", names); return names; }
@Override public List<String> findNotHealthyNodes() { final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .filter(serviceHealthStat -> serviceHealthStat.getStatus() != HealthStatus.PASS) .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); return names; }
private void checkTTL(final NodeHealthStat nodeHealthStat) { if (debug) logger.debug("HealthService::checkTTL() {}", nodeHealthStat.getName()); if (!nodeHealthStat.isOk()) { return; } if (nodeHealthStat.isForever()) { return; } final long duration = super.time - nodeHealthStat.getLastCheckIn(); /* If the duration is greater than the ttl interval, then mark it as failed. */ if (duration > nodeHealthStat.getTtlInMS()) { logger.error("HealthService::checkTTL() {} FAILED TTL check, duration {}", nodeHealthStat.getName(), duration); nodeHealthStat.setReason(HealthFailReason.FAILED_TTL); nodeHealthStat.setStatus(HealthStatus.FAIL); onFail.ifPresent(checkIn -> checkIn.accept(BeanUtils.copy(nodeHealthStat))); } }
@Test public void testWarn() throws Exception { healthService.register("foo", 1, TimeUnit.SECONDS); healthService.warnWithError("foo", new Exception("FOO")); assertFalse("foo is not found among the healthy ", healthService.findHealthyNodes().stream().anyMatch(s -> s.equals("foo"))); final List<NodeHealthStat> nodeHealthStats = healthService.loadNodes(); assertEquals(1, nodeHealthStats.size()); assertEquals("foo", nodeHealthStats.get(0).getName()); assertEquals(HealthStatus.WARN, nodeHealthStats.get(0).getStatus()); assertEquals(HealthFailReason.ERROR, nodeHealthStats.get(0).getReason()); assertEquals("FOO", nodeHealthStats.get(0).getError().get().getMessage()); }
@Test public void testFail() throws Exception { healthService.register("foo", 1, TimeUnit.SECONDS); healthService.failWithError("foo", new Exception("FOO")); assertFalse("foo is not found among the healthy ", healthService.findHealthyNodes().stream().anyMatch(s -> s.equals("foo"))); final List<NodeHealthStat> nodeHealthStats = healthService.loadNodes(); assertEquals(1, nodeHealthStats.size()); assertEquals("foo", nodeHealthStats.get(0).getName()); assertEquals(HealthStatus.FAIL, nodeHealthStats.get(0).getStatus()); assertEquals(HealthFailReason.ERROR, nodeHealthStats.get(0).getReason()); assertEquals("FOO", nodeHealthStats.get(0).getError().get().getMessage()); }
@Test public void testWarnNoError() throws Exception { healthService.register("foo", 1, TimeUnit.SECONDS); healthService.warnWithReason("foo", HealthFailReason.TIMEOUT); assertFalse("foo is not found among the healthy ", healthService.findHealthyNodes().stream().anyMatch(s -> s.equals("foo"))); final List<NodeHealthStat> nodeHealthStats = healthService.loadNodes(); assertEquals(1, nodeHealthStats.size()); assertEquals("foo", nodeHealthStats.get(0).getName()); assertEquals(HealthStatus.WARN, nodeHealthStats.get(0).getStatus()); assertEquals(HealthFailReason.TIMEOUT, nodeHealthStats.get(0).getReason()); assertEquals(false, nodeHealthStats.get(0).getError().isPresent()); }
@Override public List<String> findAllNodes() { logger.info("HealthService::findAllNodes() called"); final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); logger.info("HealthService::findAllNodes() called returns {}", names); return names; }
@Override public List<String> findAllNodes() { logger.info("HealthService::findAllNodes() called"); final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); logger.info("HealthService::findAllNodes() called returns {}", names); return names; }
@Override public List<String> findNotHealthyNodes() { final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .filter(serviceHealthStat -> serviceHealthStat.getStatus() != HealthStatus.PASS) .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); return names; }
@Override public List<String> findHealthyNodes() { logger.info("HealthService::findHealthyNodes() called"); final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .filter(serviceHealthStat -> serviceHealthStat.getStatus() == HealthStatus.PASS) .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); logger.info("HealthService::findHealthyNodes() called returns {}", names); return names; }
@Override public List<String> findAllNodesWithStatus(final HealthStatus queryStatus) { final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .filter(serviceHealthStat -> serviceHealthStat.getStatus() == queryStatus) .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); return names; }
@Override public List<String> findNotHealthyNodes() { final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .filter(serviceHealthStat -> serviceHealthStat.getStatus() != HealthStatus.PASS) .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); return names; }
@Override public List<String> findHealthyNodes() { logger.info("HealthService::findHealthyNodes() called"); final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .filter(serviceHealthStat -> serviceHealthStat.getStatus() == HealthStatus.PASS) .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); logger.info("HealthService::findHealthyNodes() called returns {}", names); return names; }
@Override public List<String> findAllNodesWithStatus(final HealthStatus queryStatus) { final List<String> names = new ArrayList<>(); serviceHealthStatMap.values() .stream() .filter(serviceHealthStat -> serviceHealthStat.getStatus() == queryStatus) .forEach(serviceHealthStat -> names.add(serviceHealthStat.getName())); return names; }
private void checkTTL(final NodeHealthStat nodeHealthStat) { if (debug) logger.debug("HealthService::checkTTL() {}", nodeHealthStat.getName()); if (!nodeHealthStat.isOk()) { return; } if (nodeHealthStat.isForever()) { return; } final long duration = super.time - nodeHealthStat.getLastCheckIn(); /* If the duration is greater than the ttl interval, then mark it as failed. */ if (duration > nodeHealthStat.getTtlInMS()) { logger.error("HealthService::checkTTL() {} FAILED TTL check, duration {}", nodeHealthStat.getName(), duration); nodeHealthStat.setReason(HealthFailReason.FAILED_TTL); nodeHealthStat.setStatus(HealthStatus.FAIL); onFail.ifPresent(checkIn -> checkIn.accept(BeanUtils.copy(nodeHealthStat))); } }
private void checkTTL(final NodeHealthStat nodeHealthStat) { if (debug) logger.debug("HealthService::checkTTL() {}", nodeHealthStat.getName()); if (! nodeHealthStat.isOk() ) { return; } if (nodeHealthStat.isForever()) { return; } final long duration = super.time - nodeHealthStat.getLastCheckIn(); /* If the duration is greater than the ttl interval, then mark it as failed. */ if (duration > nodeHealthStat.getTtlInMS()) { logger.error("HealthService::checkTTL() {} FAILED TTL check, duration {}", nodeHealthStat.getName(), duration); nodeHealthStat.setReason(HealthFailReason.FAILED_TTL); nodeHealthStat.setStatus(HealthStatus.FAIL); onFail.ifPresent(checkIn -> checkIn.accept(BeanUtils.copy(nodeHealthStat))); } }