package codeine.collectors;
import java.util.Collection;
import javax.inject.Inject;
import org.apache.log4j.Logger;
import codeine.api.NodeInfo;
import codeine.collectors.tags.TagsCollectorRunner;
import codeine.collectors.tags.TagsCollectorRunnerFactory;
import codeine.collectors.version.VersionCollectorRunner;
import codeine.collectors.version.VersionCollectorRunnerFactory;
import codeine.configuration.IConfigurationManager;
import codeine.configuration.PathHelper;
import codeine.executer.Task;
import codeine.jsons.project.ProjectJson;
import codeine.utils.FilesUtils;
import codeine.utils.StringUtils;
import com.google.common.collect.Lists;
import com.google.inject.assistedinject.Assisted;
public class CollectorsRunner implements Task {
private static final Logger log = Logger.getLogger(CollectorsRunner.class);
@Inject private IConfigurationManager configurationManager;
@Inject private PathHelper pathHelper;
@Inject private VersionCollectorRunnerFactory versionCollectorRunnerFactory;
private CollectorsListHolder collectorsListHolder;
private String projectName;
private NodeInfo node;
private VersionCollectorRunner versionCollector;
private TagsCollectorRunner tagsCollector;
@Inject
public CollectorsRunner(@Assisted String projectName, @Assisted NodeInfo node,
CollectorsListHolderFactory collectorsListHolderFactory, TagsCollectorRunnerFactory tagsCollectorRunnerFactory) {
super();
this.projectName = projectName;
this.node = node;
collectorsListHolder = collectorsListHolderFactory.create(projectName, node);
tagsCollector = tagsCollectorRunnerFactory.create(projectName, node);
}
@Override
public void run() {
log.info("starting collection");
ProjectJson project = project();
Collection<IOneCollectorRunner> collectors = Lists.newArrayList();
if (!StringUtils.isEmpty(project.version_detection_script())) {
if (null == versionCollector) {
versionCollector = versionCollectorRunnerFactory.create(project.name(), node);
}
collectors.add(versionCollector);
}
collectors.add(tagsCollector);
collectors.addAll(collectorsListHolder.getCurrentListAndRemoveOldCollectors());
for (IOneCollectorRunner c : collectors) {
c.execute();
}
}
public void init() {
String monitorOutputDirWithNode = pathHelper.getCollectorOutputDirWithNode(project().name(), node.name());
FilesUtils.mkdirs(monitorOutputDirWithNode);
}
private ProjectJson project() {
return configurationManager.getProjectForName(projectName);
}
}