package hudson.plugins.performance.actions;
import hudson.model.Action;
import hudson.model.Run;
import hudson.plugins.performance.Messages;
import hudson.plugins.performance.PerformanceReportMap;
import hudson.plugins.performance.parsers.PerformanceReportParser;
import hudson.util.StreamTaskListener;
import org.kohsuke.stapler.StaplerProxy;
import java.io.IOException;
import java.io.PrintStream;
import java.lang.ref.WeakReference;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
public class PerformanceBuildAction implements Action, StaplerProxy {
private final Run<?, ?> build;
/**
* Configured parsers used to parse reports in this build.
* For compatibility reasons, this can be null.
*/
private final List<PerformanceReportParser> parsers;
private transient final PrintStream hudsonConsoleWriter;
private transient WeakReference<PerformanceReportMap> performanceReportMap;
private static final Logger logger = Logger.getLogger(PerformanceBuildAction.class.getName());
public PerformanceBuildAction(Run<?, ?> pBuild, PrintStream logger,
List<PerformanceReportParser> parsers) {
build = pBuild;
hudsonConsoleWriter = logger;
this.parsers = parsers;
}
public PerformanceReportParser getParserByDisplayName(String displayName) {
if (parsers != null)
for (PerformanceReportParser parser : parsers)
if (parser.getDescriptor().getDisplayName().equals(displayName))
return parser;
return null;
}
public String getDisplayName() {
return Messages.BuildAction_DisplayName();
}
public String getIconFileName() {
return "graph.gif";
}
public String getUrlName() {
return "performance";
}
public PerformanceReportMap getTarget() {
return getPerformanceReportMap();
}
public Run<?, ?> getBuild() {
return build;
}
public PrintStream getHudsonConsoleWriter() {
return hudsonConsoleWriter;
}
public PerformanceReportMap getPerformanceReportMap() {
PerformanceReportMap reportMap = null;
WeakReference<PerformanceReportMap> wr = this.performanceReportMap;
if (wr != null) {
reportMap = wr.get();
if (reportMap != null)
return reportMap;
}
try {
reportMap = new PerformanceReportMap(this, StreamTaskListener.fromStderr());
} catch (IOException e) {
logger.log(Level.SEVERE, "Error creating new PerformanceReportMap()", e);
}
this.performanceReportMap = new WeakReference<PerformanceReportMap>(
reportMap);
return reportMap;
}
public void setPerformanceReportMap(WeakReference<PerformanceReportMap> performanceReportMap) {
this.performanceReportMap = performanceReportMap;
}
}