package be.swsb.dropwizard.healthchecks;
import com.codahale.metrics.health.HealthCheck;
import com.google.common.base.Joiner;
import com.mongodb.DB;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
//TODO move to a MongoDB Module
public class MongoDBHealthCheck extends HealthCheck {
private static Logger logger = Logger.getLogger(MongoDBHealthCheck.class.getName());
private DB db;
public MongoDBHealthCheck(DB db) {
this.db = db;
}
@Override
protected Result check() throws Exception {
logger.log(Level.INFO, "db was instantiated: {0}", db);
List<String> missingCollections = findMissingCollections("products", "openinghours", "toppings");
if (missingCollections.isEmpty()) {
return Result.healthy("All necessary collections exist");
}
return Result.unhealthy("Expected these Collections to exist but they do not: %s", Joiner.on(", ").join(missingCollections));
}
private List<String> findMissingCollections(String... collectionNames) {
return Arrays.stream(collectionNames).filter(c -> !db.collectionExists(c)).collect(Collectors.toList());
}
}