package org.axway.grapes.server.webapp.healthcheck;
import com.mongodb.DB;
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;
import org.axway.grapes.server.db.datamodel.DbCollections;
import org.axway.grapes.server.db.datamodel.DbGrapesInfo;
import org.jongo.Jongo;
/**
* 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 DataModelVersionCheck extends HealthCheck{
private final DataBaseConfig config;
public DataModelVersionCheck(final DataBaseConfig dataBaseConfig) {
super("data-model-version");
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 DB db = mongo.getDB(config.getDatastore());
if(config.getUser() != null && config.getPwd() != null){
db.authenticate(config.getUser(), config.getPwd());
}
final Jongo jongo = new Jongo(db);
final DbGrapesInfo info = jongo.getCollection(DbCollections.DB_GRAPES_INFO).findOne().as(DbGrapesInfo.class);
if(info == null){
return Result.healthy("not found\n");
}
return Result.healthy(info.getDatamodelVersion()+'\n');
}
catch (Exception e) {
return Result.unhealthy(e);
}
finally{
if(mongo != null){
mongo.close();
}
}
}
}