package org.ovirt.engine.core.vdsbroker.monitoring;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.ovirt.engine.core.common.businessentities.Cluster;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.dao.ClusterDao;
/**
* This class is responsible for returning the correct service strategy, according to the service the cluster supports
*/
@Singleton
public class MonitoringStrategyFactory {
@Inject
private VirtMonitoringStrategy virtMonitoringStrategy;
@Inject
private GlusterMonitoringStrategy glusterMonitoringStrategy;
private MultipleServicesMonitoringStrategy multipleMonitoringStrategy;
@Inject
private ClusterDao clusterDao;
@PostConstruct
private void init() {
multipleMonitoringStrategy = new MultipleServicesMonitoringStrategy();
multipleMonitoringStrategy.addMonitoringStrategy(virtMonitoringStrategy);
multipleMonitoringStrategy.addMonitoringStrategy(glusterMonitoringStrategy);
}
/**
* This method gets the VDS, and returns the correct service strategy, according to the service the cluster that the VDS belongs to supports
*/
public MonitoringStrategy getMonitoringStrategyForVds(VDS vds) {
Cluster cluster = clusterDao.get(vds.getClusterId());
if (cluster.supportsVirtService() && cluster.supportsGlusterService()) {
return multipleMonitoringStrategy;
}
if (cluster.supportsVirtService()) {
return virtMonitoringStrategy;
}
if (cluster.supportsGlusterService()) {
return glusterMonitoringStrategy;
}
return virtMonitoringStrategy;
}
}