Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fixed JENKINS-20222
  • Loading branch information
MadsNielsen committed Nov 26, 2013
1 parent a83206c commit 9bc958e
Show file tree
Hide file tree
Showing 8 changed files with 514 additions and 514 deletions.
428 changes: 208 additions & 220 deletions src/main/java/net/praqma/jenkins/plugin/drmemory/DrMemoryBuildAction.java

Large diffs are not rendered by default.

175 changes: 98 additions & 77 deletions src/main/java/net/praqma/jenkins/plugin/drmemory/DrMemoryBuilder.java
@@ -1,5 +1,6 @@
package net.praqma.jenkins.plugin.drmemory;

import hudson.AbortException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.logging.Logger;
Expand All @@ -17,86 +18,106 @@
import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.BuildListener;
import hudson.model.Result;
import hudson.tasks.BuildStepDescriptor;
import hudson.tasks.Builder;
import java.io.File;

public class DrMemoryBuilder extends Builder {

private static final Logger logger = Logger.getLogger( DrMemoryBuilder.class.getName() );

private String executable;
private String arguments;
private String logPath;

private String finalLogPath;

@DataBoundConstructor
public DrMemoryBuilder( String executable, String arguments, String logPath ) {
this.executable = executable;
this.arguments = arguments;
this.logPath = logPath;
}

@Override
public boolean perform( AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener ) throws InterruptedException {
PrintStream out = listener.getLogger();
//DrMemory.enableLogging();

/* Add the action */
DrMemoryBuildAction dba = new DrMemoryBuildAction( build, this );
build.addAction( dba );

String version = Jenkins.getInstance().getPlugin( "drmemory-plugin" ).getWrapper().getVersion();
out.println( "Dr Memory Plugin version " + version );

try {
finalLogPath = logPath += ( logPath.endsWith( File.separator ) ? "" : File.separator );
finalLogPath += build.getNumber();
build.getWorkspace().act( new DrMemoryRemoteBuilder( executable, arguments, finalLogPath, listener ) );
return true;
} catch( IOException e ) {
out.println( "Unable to execute Dr. Memory: " + e.getMessage() );
return false;
}
}

public String getExecutable() {
return executable;
}

public String getArguments() {
return arguments;
}

public String getLogPath() {
return logPath;
}

public String getFinalLogPath() {
return finalLogPath;
}

@Extension
public static class DescriptorImpl extends BuildStepDescriptor<Builder> {

@Override
public DrMemoryBuilder newInstance( StaplerRequest req, JSONObject data ) {

DrMemoryBuilder instance = req.bindJSON( DrMemoryBuilder.class, data );

save();
return instance;
}

@Override
public boolean isApplicable( Class<? extends AbstractProject> jobType ) {
return true;
}

@Override
public String getDisplayName() {
return "Execute with Dr. Memory";
}
}

private static final Logger logger = Logger.getLogger(DrMemoryBuilder.class.getName());
private String executable;
private String arguments;
private String logPath;
private boolean treatFailed;
private String finalLogPath;

@DataBoundConstructor
public DrMemoryBuilder(String executable, String arguments, String logPath, boolean treatFailed) {
this.executable = executable;
this.arguments = arguments;
this.logPath = logPath;
this.treatFailed = treatFailed;
}

@Override
public boolean perform(AbstractBuild<?, ?> build, Launcher launcher, BuildListener listener) throws InterruptedException {
PrintStream out = listener.getLogger();

/* Add the action */
DrMemoryBuildAction dba = new DrMemoryBuildAction(build, this);
build.addAction(dba);

String version = Jenkins.getInstance().getPlugin("drmemory-plugin").getWrapper().getVersion();
out.println("Dr Memory Plugin version " + version);

try {
finalLogPath = logPath += (logPath.endsWith(File.separator) ? "" : File.separator);
finalLogPath += build.getNumber();
build.getWorkspace().act(new DrMemoryRemoteBuilder(executable, arguments, finalLogPath, listener));
return true;
} catch (IOException e) {
if (isTreatFailed()) {
out.println("Dr. Memory command line program returned with error code. Continuing anyway.");
out.println("The message was:");
out.println(e.getMessage());
build.setResult(Result.UNSTABLE);
return true;
} else {
out.println("Unable to execute Dr. Memory: " + e.getMessage());
return false;
}
}
}

public String getExecutable() {
return executable;
}

public String getArguments() {
return arguments;
}

public String getLogPath() {
return logPath;
}

public String getFinalLogPath() {
return finalLogPath;
}

/**
* @return the treatFailed
*/
public boolean isTreatFailed() {
return treatFailed;
}

/**
* @param treatFailed the treatFailed to set
*/
public void setTreatFailed(boolean treatFailed) {
this.treatFailed = treatFailed;
}

@Extension
public static class DescriptorImpl extends BuildStepDescriptor<Builder> {

@Override
public DrMemoryBuilder newInstance(StaplerRequest req, JSONObject data) {
DrMemoryBuilder instance = req.bindJSON(DrMemoryBuilder.class, data);
save();
return instance;
}

@Override
public boolean isApplicable(Class<? extends AbstractProject> jobType) {
return true;
}

@Override
public String getDisplayName() {
return "Execute with Dr. Memory";
}
}
}
@@ -1,61 +1,69 @@
package net.praqma.jenkins.plugin.drmemory;

import java.util.logging.*;
import java.io.IOException;

import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;

import hudson.model.AbstractBuild;
import hudson.model.AbstractProject;
import hudson.model.Actionable;
import hudson.model.ProminentProjectAction;
import hudson.model.Result;

public class DrMemoryProjectAction extends Actionable implements ProminentProjectAction {
private final AbstractProject<?, ?> project;

public DrMemoryProjectAction( AbstractProject<?, ?> project ) {
this.project = project;
}
private final AbstractProject<?, ?> project;
private static final Logger log = Logger.getLogger(DrMemoryProjectAction.class.toString());

public String getDisplayName() {
return "DrMemory";
}
public DrMemoryProjectAction(AbstractProject<?, ?> project) {
this.project = project;
}

public String getSearchUrl() {
return getUrlName();
}
@Override
public String getDisplayName() {
return "DrMemory";
}

public String getIconFileName() {
return "graph.gif";
}
@Override
public String getSearchUrl() {
return getUrlName();
}

@Override
public String getIconFileName() {
return "graph.gif";
}

@Override
public String getUrlName() {
return "drmemory";
}


public String getUrlName() {
return "drmemory";
}

public void doGraph(StaplerRequest req, StaplerResponse rsp) throws IOException {
if (getLastResult() != null) {
getLastResult().doGraph(req, rsp);
}
}

public DrMemoryBuildAction getLastResult() {
for( AbstractBuild<?, ?> b = getLastBuildToBeConsidered(); b != null; b = b.getPreviousNotFailedBuild() ) {
if( b.getResult() == Result.FAILURE || ( b.getResult() != Result.SUCCESS ) ) {
continue;
}

DrMemoryBuildAction r = b.getAction( DrMemoryBuildAction.class );
if( r != null ) {
return r;
}
}
return null;
}

private AbstractBuild<?, ?> getLastBuildToBeConsidered() {
return project.getLastSuccessfulBuild();
}
public DrMemoryBuildAction getLastResult() {
for (AbstractBuild<?, ?> b = getLastBuildToBeConsidered(); b != null; b = b.getPreviousNotFailedBuild()) {
if (b.getResult().isBetterOrEqualTo(Result.UNSTABLE)) {
log.fine( String.format( "Using build %s to draw graph", b.number) ) ;
DrMemoryBuildAction r = b.getAction(DrMemoryBuildAction.class);
if (r != null) {
return r;
}
} else {
continue;
}
}
log.fine( String.format( "Found no results to draw graphs with") ) ;
return null;
}

private AbstractBuild<?, ?> getLastBuildToBeConsidered() {
return project.getLastSuccessfulBuild();
}
}

0 comments on commit 9bc958e

Please sign in to comment.