package codeine.collectors.version;
import javax.inject.Inject;
import org.apache.log4j.Logger;
import codeine.PeerStatusChangedUpdater;
import codeine.api.NodeInfo;
import codeine.collectors.IOneCollectorRunner;
import codeine.collectors.OneCollectorRunner;
import codeine.collectors.OneCollectorRunnerFactory;
import codeine.configuration.IConfigurationManager;
import codeine.jsons.collectors.CollectorInfo;
import codeine.jsons.collectors.CollectorInfo.CollectorType;
import codeine.jsons.peer_status.PeerStatus;
import codeine.jsons.project.ProjectJson;
import codeine.model.Constants;
import codeine.utils.MiscUtils;
import codeine.utils.logging.LogUtils;
import com.google.inject.assistedinject.Assisted;
public class VersionCollectorRunner implements IOneCollectorRunner {
private static final Logger log = Logger.getLogger(VersionCollectorRunner.class);
@Inject private PeerStatus projectStatusUpdater;
@Inject private PeerStatusChangedUpdater peerStatusChangedUpdater;
private IConfigurationManager configurationManager;
private OneCollectorRunner runner;
private ProjectJson project;
private String projectName;
private NodeInfo node;
@Inject
public VersionCollectorRunner(@Assisted String projectName, @Assisted NodeInfo node,
OneCollectorRunnerFactory oneCollectorRunnerFactory, IConfigurationManager configurationManager) {
super();
this.projectName = projectName;
this.node = node;
this.configurationManager = configurationManager;
CollectorInfo collectorInfo = initAndGetConf();
runner = oneCollectorRunnerFactory.create(collectorInfo, project, node);
}
private CollectorInfo initAndGetConf() {
project = configurationManager.getProjectForName(projectName);
CollectorInfo collectorInfo = new CollectorInfo(Constants.VERSION_COLLECTOR_NAME, project.version_detection_script(), CollectorType.String);
return collectorInfo;
}
@Override
public void execute() {
CollectorInfo collectorInfo = initAndGetConf();
runner.updateConf(collectorInfo);
runner.execute();
String version = runner.outputFromFile();
log.info("version is " + version);
String prevVersion = projectStatusUpdater.updateVersion(project, node.name(), node.alias(), version);
if (!MiscUtils.equals(version, prevVersion)) {
LogUtils.info(log, "version should update", version, prevVersion);
peerStatusChangedUpdater.pushUpdate("VersionCollectorRunner.execute()");
}
}
}