package org.axway.grapes.server.webapp.healthcheck;
import com.mongodb.Mongo;
import com.mongodb.MongoClient;
import com.mongodb.ServerAddress;
import com.yammer.metrics.core.HealthCheck;
import org.axway.grapes.server.config.DataBaseConfig;
/**
* Database Check
*
* <p>Implements Metrics health checks. Thanks to it, it is possible to know via Grapes admin webapp if the database connection is available. </p>
*
* @author jdcoffre
*/
public class DataBaseCheck extends HealthCheck{
private final DataBaseConfig config;
public DataBaseCheck(final DataBaseConfig dataBaseConfig) {
super("database");
this.config = dataBaseConfig;
}
@Override
protected Result check() {
Mongo mongo = null;
try{
final ServerAddress adress = new ServerAddress(config.getHost() , config.getPort());
mongo = new MongoClient(adress);
final StringBuilder sb = new StringBuilder();
sb.append("MogoDb version " + mongo.getVersion() + '\n');
sb.append(" Available databases: ");
for(String dbName: mongo.getDatabaseNames()){
sb.append(dbName);
sb.append(' ');
}
sb.append('\n');
return Result.healthy(sb.toString());
}
catch (Exception e) {
return Result.unhealthy(e);
}
finally{
if(mongo != null){
mongo.close();
}
}
}
}