package hudson.plugins.performance; import hudson.model.AbstractBuild; import hudson.model.Action; import hudson.util.StreamTaskListener; import java.util.logging.Level; import java.util.logging.Logger; import org.kohsuke.stapler.StaplerProxy; import java.io.IOException; import java.io.PrintStream; import java.lang.ref.WeakReference; import java.util.List; public class PerformanceBuildAction implements Action, StaplerProxy { private final AbstractBuild<?, ?> 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(AbstractBuild<?, ?> pBuild, PrintStream logger, List<PerformanceReportParser> parsers) { build = pBuild; hudsonConsoleWriter = logger; this.parsers = parsers; } public PerformanceReportParser getParserById(String id) { if (parsers!=null) for (PerformanceReportParser parser : parsers) if (parser.getDescriptor().getId().equals(id)) 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 AbstractBuild<?, ?> getBuild() { return build; } 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, new StreamTaskListener(System.err)); } 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; } }