package io.fathom.auto.openstack.horizon;
import io.fathom.auto.TimeSpan;
import io.fathom.auto.config.ConfigStore;
import java.io.File;
import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HorizonInstance {
private static final Logger log = LoggerFactory.getLogger(HorizonInstance.class);
private final ConfigStore configStore;
HorizonProcess process;
public HorizonInstance(ConfigStore configStore) {
this.configStore = configStore;
}
public void run() throws IOException {
File instanceDir = new File("/var/horizon");
if (!instanceDir.exists()) {
if (!instanceDir.mkdirs()) {
throw new IOException("Unable to create instance directory");
}
}
// ConfigPath serversPath = configStore.getConfigRoot().child("data");
HorizonConfig config = new HorizonConfig(instanceDir);
while (true) {
try {
HorizonProcess process = HorizonProcess.find(config);
if (process == null) {
log.info("Process not running; starting");
process = HorizonProcess.start(config);
}
// EndpointRegistry registry = new
// EndpointRegistry(configStore);
// InetAddress addr = MachineInfo.INSTANCE.getIp();
// int port = 3306;
// InetSocketAddress socketAddress = new InetSocketAddress(addr,
// port);
// registry.register(ServiceKeys.MYSQL, socketAddress);
//
// ConfigPath mysqlConfig = configStore.getConfigRoot();
while (process.isRunning()) {
log.debug("Process is running");
TimeSpan.seconds(5).sleep();
}
log.warn("Process stopped running / responding");
} catch (Exception e) {
log.warn("Error while monitoring", e);
}
TimeSpan.seconds(10).sleep();
}
}
}