package nl.codecentric.jenkins.appd;
import hudson.model.AbstractBuild;
import hudson.model.Action;
import hudson.util.StreamTaskListener;
import nl.codecentric.jenkins.appd.util.LocalMessages;
import org.kohsuke.stapler.StaplerProxy;
import java.io.IOException;
import java.io.PrintStream;
import java.lang.ref.WeakReference;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* The build action is defined as {@link Action}, and will fail the build
* should the response of the system get too low, or when other conditions are not met.<br />
* <br />
* The {@link AppDynamicsBuildAction} relays output and displaying of the build output results
* to the {@link BuildActionResultsDisplay}.
*/
public class AppDynamicsBuildAction implements Action, StaplerProxy {
private final AbstractBuild<?, ?> build;
private final AppDynamicsReport report;
private transient WeakReference<BuildActionResultsDisplay> buildActionResultsDisplay;
private transient static final Logger logger = Logger.getLogger(AppDynamicsBuildAction.class.getName());
public AppDynamicsBuildAction(AbstractBuild<?, ?> build, AppDynamicsReport report) {
this.build = build;
this.report = report;
}
public String getIconFileName() {
return "graph.gif";
}
public String getDisplayName() {
return LocalMessages.BUILDACTION_DISPLAYNAME.toString();
}
public String getUrlName() {
return "appdynamics-dashboard";
}
public BuildActionResultsDisplay getTarget() {
return getBuildActionResultsDisplay();
}
public AbstractBuild<?, ?> getBuild() {
return build;
}
public AppDynamicsReport getAppDynamicsReport() {
return report;
}
public BuildActionResultsDisplay getBuildActionResultsDisplay() {
BuildActionResultsDisplay buildDisplay = null;
WeakReference<BuildActionResultsDisplay> wr = this.buildActionResultsDisplay;
if (wr != null) {
buildDisplay = wr.get();
if (buildDisplay != null)
return buildDisplay;
}
try {
buildDisplay = new BuildActionResultsDisplay(this, StreamTaskListener.fromStdout());
} catch (IOException e) {
logger.log(Level.SEVERE, "Error creating new BuildActionResultsDisplay()", e);
}
this.buildActionResultsDisplay = new WeakReference<BuildActionResultsDisplay>(buildDisplay);
return buildDisplay;
}
public void setBuildActionResultsDisplay(WeakReference<BuildActionResultsDisplay> buildActionResultsDisplay) {
this.buildActionResultsDisplay = buildActionResultsDisplay;
}
}