package hudson.plugins.grinder;
import hudson.Extension;
import hudson.Launcher;
import hudson.model.*;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Publisher;
import hudson.tasks.Recorder;
import org.kohsuke.stapler.DataBoundConstructor;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
/**
* The publisher creates the results we want from the Grinder execution.
*
* @author Eivind B Waaler
*/
public class GrinderPublisher extends Recorder {
private String name;
@DataBoundConstructor
public GrinderPublisher(String name) {
this.name = name;
}
public String getName() {
return name;
}
@Override
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener)
throws InterruptedException, IOException {
PrintStream logger = listener.getLogger();
if (build.getWorkspace().child(name).exists()) {
InputStream is = build.getWorkspace().child(name).read();
try {
build.addAction(new GrinderBuildAction(build, is, logger));
} catch (GrinderParseException gpe) {
logger.println("Grinder report failed!");
build.setResult(Result.FAILURE);
}
} else {
logger.println("Grinder out* log file not found!");
build.setResult(Result.FAILURE);
}
return true;
}
@Override
public Action getProjectAction(AbstractProject<?, ?> project) {
return project instanceof Project ? new GrinderProjectAction((Project)project) : null;
}
public BuildStepMonitor getRequiredMonitorService() {
return BuildStepMonitor.NONE;
}
@Extension
public static final class DescriptorImpl extends BuildStepDescriptor<Publisher> {
public DescriptorImpl() {
super(GrinderPublisher.class);
}
public String getDisplayName() {
return GrinderPlugin.DISPLAY_NAME;
}
@Override
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return Project.class.isAssignableFrom(jobType);
}
}
}