Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,23 @@ private static List<PipelineDetails> getAllBuilds(BrowserStackCredentials browse
long endTimeInMillis = build.getTimeInMillis();
Timestamp endTime = new Timestamp(endTimeInMillis);
String result = overallResult != null ? overallResult.toString() : null;
PipelineDetails pipelineDetail = new PipelineDetails(pipelineName, buildNumber, duration, result, endTime);

// Get root upstream project information for QEI with build number (returns in format "project#build")
String rootUpstreamProject = "";
String immediateParentProject = "";
try {
rootUpstreamProject = UpstreamPipelineResolver.resolveRootUpstreamProject(build, browserStackCredentials);
immediateParentProject = UpstreamPipelineResolver.resolveImmediateUpstreamProjectForQEI(build, browserStackCredentials);
} catch (Exception e) {
try {
apiUtil.logToQD(browserStackCredentials, "Failed to resolve root upstream project for build " + buildNumber + ": " + e.getMessage());
} catch (JsonProcessingException ex) {
System.err.println("Error logging upstream project resolution failure for build " + buildNumber + ": " + ex.getMessage());
ex.printStackTrace();
}
}
PipelineDetails pipelineDetail = new PipelineDetails(pipelineName, buildNumber, duration, result,
endTime, rootUpstreamProject, immediateParentProject);
allBuildResults.add(pipelineDetail);
}
);
Expand Down Expand Up @@ -307,13 +323,22 @@ class PipelineDetails {

@JsonProperty("endTime")
private Timestamp endTime;

public PipelineDetails(String pipelineName, Integer buildNumber, Long buildDuration, String buildStatus, Timestamp endTime) {

@JsonProperty("rootProject")
private String rootProject;

@JsonProperty("immediateParentProject")
private String immediateParentProject;

public PipelineDetails(String pipelineName, Integer buildNumber, Long buildDuration, String buildStatus,
Timestamp endTime, String rootProject, String immediateParentProject) {
this.pipelineName = pipelineName;
this.buildNumber = buildNumber;
this.buildDuration = buildDuration;
this.buildStatus = buildStatus;
this.endTime = endTime;
this.rootProject = rootProject;
this.immediateParentProject = immediateParentProject;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import java.nio.file.Path;
import java.nio.file.Paths;
import java.sql.Timestamp;
import java.util.List;

@Extension
public class QualityDashboardPipelineTracker extends RunListener<Run> {
Expand Down Expand Up @@ -101,9 +100,23 @@ private void sendBuildDataToQD(Run run, Result overallResult, String finalZipPat
if(rootUrl != null) {
jobUrl = rootUrl + run.getUrl();
}

// Get root upstream project information for QEI with build number (returns in format "project#build")
String rootUpstreamProject = "";
String immediateParentProject = "";
try {
rootUpstreamProject = UpstreamPipelineResolver.resolveRootUpstreamProject(run, browserStackCredentials);
immediateParentProject = UpstreamPipelineResolver.resolveImmediateUpstreamProjectForQEI(run, browserStackCredentials);
} catch (Exception e) {
try {
apiUtil.logToQD(browserStackCredentials, "Failed to resolve root upstream project for build " + buildNumber + ": " + e.getMessage());
} catch (JsonProcessingException ex) {
System.err.println("Error logging upstream project resolution failure for build " + buildNumber + ": " + ex.getMessage());
ex.printStackTrace();
}
}
Timestamp endTime = new Timestamp(endTimeInMillis);
PipelineResults pipelineResultsReqObj = new PipelineResults(buildNumber, pipelineDuration, overallResult.toString(), finalZipPath, jobName, endTime, jobUrl);
PipelineResults pipelineResultsReqObj = new PipelineResults(buildNumber, pipelineDuration, overallResult.toString(),
finalZipPath, jobName, endTime, jobUrl, rootUpstreamProject, immediateParentProject);
ObjectMapper objectMapper = new ObjectMapper();
String jsonBody = objectMapper.writeValueAsString(pipelineResultsReqObj);

Expand Down Expand Up @@ -243,7 +256,7 @@ private String uploadZipToQd(String pathToZip, BrowserStackCredentials browserSt

private void copyDirectoryToParentIfRequired(Run run, String finalParentPathFrom, BrowserStackCredentials browserStackCredentials) throws IOException {
String finalParentPathTo = null;
String upStreamProj = upStreamPipelineUrl(run);
String upStreamProj = UpstreamPipelineResolver.resolveImmediateUpstreamProject(run, browserStackCredentials);
if(StringUtils.isNotEmpty(upStreamProj)) {
String parentResultDir = getResultDirForPipeline(upStreamProj, browserStackCredentials, run.getNumber());
if(StringUtils.isNotEmpty(parentResultDir) && checkIfPathIsFound(parentResultDir)) {
Expand All @@ -268,18 +281,6 @@ private void copyDirectoryToParentIfRequired(Run run, String finalParentPathFrom
}
}
}

private String upStreamPipelineUrl(Run run) {
String upstreamProjectName = null;
List<Cause> causes = run.getCauses();
for (Cause cause : causes) {
if (cause instanceof Cause.UpstreamCause) {
Cause.UpstreamCause upstreamCause = (Cause.UpstreamCause) cause;
upstreamProjectName = upstreamCause.getUpstreamProject();
}
}
return upstreamProjectName;
}
}

class QualityDashboardGetDetailsForPipeline implements Serializable {
Expand Down Expand Up @@ -310,14 +311,24 @@ class PipelineResults implements Serializable {

@JsonProperty("zipFile")
private String zipFile;

public PipelineResults(Integer buildNumber, Long buildDuration, String buildStatus, String zipFile, String pipelineName, Timestamp endTime, String jobUrl) {

@JsonProperty("rootProject")
private String rootProject;

@JsonProperty("immediateParentProject")
private String immediateParentProject;

public PipelineResults(Integer buildNumber, Long buildDuration, String buildStatus, String zipFile,
String pipelineName, Timestamp endTime, String jobUrl, String rootProject,
String immediateParentProject) {
this.buildNumber = buildNumber;
this.buildDuration = buildDuration;
this.buildStatus = buildStatus;
this.zipFile = zipFile;
this.pipelineName = pipelineName;
this.endTime = endTime;
this.jobUrl = jobUrl;
this.rootProject = rootProject;
this.immediateParentProject = immediateParentProject;
}
}
Loading