Skip to content

Commit

Permalink
#605 Simplify comparison REST API, improve logging
Browse files Browse the repository at this point in the history
  • Loading branch information
adiherzog committed Oct 5, 2017
1 parent b2886cd commit a565bc9
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -142,14 +142,18 @@ public synchronized void submitBuildForReimport(AvailableBuildsList availableBui
saveBuildImportSummaries(buildImportSummaries);
}

public synchronized ArrayList<Future<ComparisonResult>> importBuild(AvailableBuildsList availableBuilds,
BuildIdentifier buildIdentifier, BuildIdentifier comparisonBuildIdentifier, String comparisonName) {
removeImportedBuildAndDerivedData(availableBuilds, buildIdentifier);
submitBuildForImport(availableBuilds, buildIdentifier);
ArrayList<Future<ComparisonResult>> futureList = submitBuildForSingleComparison(buildIdentifier, comparisonBuildIdentifier, comparisonName);
public synchronized Future<ComparisonResult> importBuildAndCreateComparison(AvailableBuildsList availableBuilds,
BuildIdentifier baseBuild, BuildIdentifier comparisonBuild, String comparisonName) {

removeImportedBuildAndDerivedData(availableBuilds, baseBuild);
submitBuildForImport(availableBuilds, baseBuild);

Future<ComparisonResult> comparisonResult =
comparisonExecutor.submitBuildForSingleComparison(baseBuild, comparisonBuild, comparisonName);

saveBuildImportSummaries(buildImportSummaries);

return futureList;
return comparisonResult;
}

/**
Expand Down Expand Up @@ -183,7 +187,7 @@ private synchronized void submitBuildForImport(final AvailableBuildsList availab
return;
}

LOGGER.info(" Submitting build for import: " + buildIdentifier.getBranchName() + "/"
LOGGER.info("Submitting build for import: " + buildIdentifier.getBranchName() + "/"
+ buildIdentifier.getBuildName());
buildsInProcessingQueue.add(buildIdentifier);
summary.setStatus(BuildImportStatus.QUEUED_FOR_PROCESSING);
Expand All @@ -203,10 +207,6 @@ private void submitBuildForComparison(BuildIdentifier buildIdentifier) {
comparisonExecutor.doComparison(buildIdentifier.getBranchName(), buildIdentifier.getBuildName());
}

private ArrayList<Future<ComparisonResult>> submitBuildForSingleComparison(BuildIdentifier buildIdentifier, BuildIdentifier compareBuildIdentifier, String comparisonName) {
return comparisonExecutor.doComparison(buildIdentifier.getBranchName(), buildIdentifier.getBuildName(), compareBuildIdentifier.getBranchName(), compareBuildIdentifier.getBuildName(), comparisonName);
}

private void importBuild(AvailableBuildsList availableBuilds, BuildImportSummary summary) {

ThreadLogAppender buildImportLog = null;
Expand All @@ -220,10 +220,9 @@ private void importBuild(AvailableBuildsList availableBuilds, BuildImportSummary
long startTime = System.currentTimeMillis();
buildsBeeingImported.add(summary.getIdentifier());

LOGGER.info(" ============= START OF BUILD IMPORT ================");
LOGGER.info(" Importing build: " + summary.getIdentifier().getBranchName() + "/"
LOGGER.info("=== START OF BUILD IMPORT ===");
LOGGER.info("Importing build: " + summary.getIdentifier().getBranchName() + "/"
+ summary.getIdentifier().getBuildName());
LOGGER.info(" This might take a while ...");

summary = buildImportSummaries.get(summary.getIdentifier());
summary.setStatus(BuildImportStatus.PROCESSING);
Expand All @@ -233,21 +232,21 @@ private void importBuild(AvailableBuildsList availableBuilds, BuildImportSummary
aggregator.calculateAggregatedDataForBuild();
addSuccessfullyImportedBuild(availableBuilds, summary);
lastSuccessfulScenarioBuild.updateLastSuccessfulScenarioBuild(summary, this, availableBuilds);
LOGGER.info(" SUCCESS on importing build: " + summary.getIdentifier().getBranchName() + "/"
LOGGER.info("SUCCESS on importing build: " + summary.getIdentifier().getBranchName() + "/"
+ summary.getIdentifier().getBuildName());
} else {
addSuccessfullyImportedBuild(availableBuilds, summary);
LOGGER.info(" ADDED ALREADY IMPORTED build: " + summary.getIdentifier().getBranchName() + "/"
LOGGER.info("ADDED ALREADY IMPORTED build: " + summary.getIdentifier().getBranchName() + "/"
+ summary.getIdentifier().getBuildName());
}

logDuration(startTime);
LOGGER.info(" ============= END OF BUILD IMPORT (success) ===========");
LOGGER.info("=== END OF BUILD IMPORT (success) ===");
} catch (Throwable e) {
recordBuildImportFinished(summary, BuildImportStatus.FAILED, e.getMessage());
LOGGER.error(" FAILURE on importing build " + summary.getIdentifier().getBranchName() + "/"
LOGGER.error("FAILURE on importing build " + summary.getIdentifier().getBranchName() + "/"
+ summary.getBuildDescription().getName(), e);
LOGGER.info(" ============= END OF BUILD IMPORT (failed) ===========");
LOGGER.info("=== END OF BUILD IMPORT (failed) ===");
} finally {
if (buildImportLog != null) {
buildImportLog.unregisterAndFlush();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,11 @@ public void reimportBuild(final BuildIdentifier buildIdentifier) {
buildImporter.submitBuildForReimport(availableBuilds, buildIdentifier);
}

public ArrayList<Future<ComparisonResult>> importBuild(final BuildIdentifier buildIdentifier, final BuildIdentifier comparisonBuildIdentifier, String comparisonName) {
return buildImporter.importBuild(availableBuilds, buildIdentifier, comparisonBuildIdentifier, comparisonName);
public Future<ComparisonResult> importBuildAndCreateComparison(final BuildIdentifier buildIdentifier,
final BuildIdentifier comparisonBuildIdentifier, String comparisonName) {

return buildImporter.importBuildAndCreateComparison(availableBuilds, buildIdentifier, comparisonBuildIdentifier,
comparisonName);
}

public LongObjectNamesResolver getLongObjectNameResolver(final BuildIdentifier buildIdentifier) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@
import org.scenarioo.utils.ThreadLogAppender;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
Expand Down Expand Up @@ -72,41 +71,41 @@ public ComparisonExecutor(ExecutorService executorService) {
* Submits all comparisons for the given build.
*/
public synchronized void doComparison(String baseBranchName, String baseBuildName) {
docuBuildsManager = ScenarioDocuBuildsManager.INSTANCE;
List<ComparisonConfiguration> comparisonConfigurationsForBaseBranch = getComparisonConfigurationsForBaseBranch(
baseBranchName);
List<ComparisonConfiguration> comparisonConfigurationsForBaseBranch =
getComparisonConfigurationsForBaseBranch(baseBranchName);

for (ComparisonConfiguration comparisonConfiguration : comparisonConfigurationsForBaseBranch) {
submitBuildForComparison(baseBranchName, baseBuildName, comparisonConfiguration);
}
}

public ArrayList<Future<ComparisonResult>> doComparison(String baseBranchName, String baseBuildName, String comparisonBranchName, String comparisonBuildName, String comparisonName) {
public Future<ComparisonResult> submitBuildForSingleComparison(BuildIdentifier baseBuild,
BuildIdentifier comparisonBuild, String comparisonName) {

ArrayList<Future<ComparisonResult>> futureList = new ArrayList<Future<ComparisonResult>>();
ComparisonConfiguration comparisonConfiguration = getComparisonConfiguration(baseBuild, comparisonBuild, comparisonName);

docuBuildsManager = ScenarioDocuBuildsManager.INSTANCE;
return submitBuildForComparison(baseBuild.getBranchName(), baseBuild.getBuildName(),
comparisonConfiguration);
}

private ComparisonConfiguration getComparisonConfiguration(BuildIdentifier baseBuild,
BuildIdentifier comparisonBuild, String comparisonName) {
ComparisonConfiguration comparisonConfiguration = new ComparisonConfiguration();
comparisonConfiguration.setName(comparisonName);
comparisonConfiguration.setBaseBranchName(baseBranchName);
comparisonConfiguration.setComparisonBranchName(comparisonBranchName);
comparisonConfiguration.setComparisonBuildName(comparisonBuildName);


Future<ComparisonResult> result = submitBuildForComparison(baseBranchName, baseBuildName, comparisonConfiguration);
futureList.add(result);
return futureList;
comparisonConfiguration.setBaseBranchName(baseBuild.getBranchName());
comparisonConfiguration.setComparisonBranchName(comparisonBuild.getBranchName());
comparisonConfiguration.setComparisonBuildName(comparisonBuild.getBuildName());
return comparisonConfiguration;
}

/**
* Executes a comparison for the given build and comparison configuration in a separate thread.
*/
private synchronized Future<ComparisonResult> submitBuildForComparison(final String baseBranchName, final String baseBuildName,
final ComparisonConfiguration comparisonConfiguration) {
private synchronized Future<ComparisonResult> submitBuildForComparison(final String baseBranchName,
final String baseBuildName, final ComparisonConfiguration comparisonConfiguration) {

LOGGER.info("Submitting build for Comparison. Base build [" + baseBranchName + "/"
+ baseBuildName + "] and comparison build [" + comparisonConfiguration.getComparisonBranchName() + "/"
+ comparisonConfiguration.getComparisonBuildName() + "]");
LOGGER.info("Submitting build for comparison:");
logBaseBuildAndComparisonConfiguration(baseBranchName, baseBuildName, comparisonConfiguration);

return asyncComparisonExecutor.submit(new Callable<ComparisonResult>() {
@Override
Expand All @@ -116,7 +115,8 @@ public ComparisonResult call() {
});
}

private ComparisonResult runComparison(String baseBranchName, String baseBuildName,
private ComparisonResult runComparison(String baseBranchName,
String baseBuildName,
ComparisonConfiguration comparisonConfiguration) {

BuildDiffInfo buildDiffInfo = null;
Expand All @@ -125,14 +125,11 @@ private ComparisonResult runComparison(String baseBranchName, String baseBuildNa
ThreadLogAppender comparisonLog = null;

try {

comparisonLog = registerLogFile(baseBranchName, baseBuildName, comparisonConfiguration);
long startTime = System.currentTimeMillis();

LOGGER.info("============= START OF BUILD COMPARISON ================");
LOGGER.info("Comparing base build: " + baseBranchName + "/"
+ baseBuildName + " with defined comparison: " + comparisonConfiguration.getName());
LOGGER.info("This might take a while ...");
LOGGER.info("=== START OF BUILD COMPARISON ===");
logBaseBuildAndComparisonConfiguration(baseBranchName, baseBuildName, comparisonConfiguration);

ComparisonConfiguration resolvedComparisonConfiguration = resolveComparisonConfiguration(
comparisonConfiguration,
Expand All @@ -149,26 +146,25 @@ private ComparisonResult runComparison(String baseBranchName, String baseBuildNa
LOGGER.info("SUCCESS on comparing base build: " + baseBranchName + "/"
+ baseBuildName + " with defined comparison: " + comparisonConfiguration.getName());
logDuration(startTime);
LOGGER.info("============= END OF BUILD COMPARISON (success) ===========");
LOGGER.info("=== END OF BUILD COMPARISON (success) ===");
} catch (Throwable e) {
LOGGER.error("FAILURE on comparing build " + baseBranchName + "/"
+ baseBuildName + " with defined comparison: " + comparisonConfiguration.getName(), e);
LOGGER.info("============= END OF BUILD COMPARISON (failed) ===========");
LOGGER.info("=== END OF BUILD COMPARISON (failed) ===");
} finally {
if (comparisonLog != null) {
comparisonLog.unregisterAndFlush();
}
}


ComparisonResult comparisonResult = new ComparisonResult();
comparisonResult.setBaseBuild(new BuildIdentifier(baseBranchName, baseBuildName));

String comparisonBranchName = comparisonConfiguration.getComparisonBranchName();
String comparisonBuildName = comparisonConfiguration.getComparisonBuildName();
BuildIdentifier resolvedBuildIdentifier = docuBuildsManager.resolveBranchAndBuildAliases(comparisonBranchName, comparisonBuildName);

comparisonResult.setCompareBuild(resolvedBuildIdentifier);
comparisonResult.setComparisonBuild(resolvedBuildIdentifier);

comparisonResult.setComparisonConfiguration(comparisonConfiguration);
if (buildDiffInfo != null) {
Expand All @@ -178,6 +174,12 @@ private ComparisonResult runComparison(String baseBranchName, String baseBuildNa
return comparisonResult;
}

private void logBaseBuildAndComparisonConfiguration(String baseBranchName, String baseBuildName, ComparisonConfiguration comparisonConfiguration) {
LOGGER.info("Base build: " + baseBranchName + "/" + baseBuildName);
LOGGER.info("Comparison configuration: " + comparisonConfiguration.getName());
LOGGER.info("Comparison build: " + comparisonConfiguration.getComparisonBranchName() + "/" + comparisonConfiguration.getComparisonBuildName());
}

private void logDuration(long startTime) {
long duration = (System.currentTimeMillis() - startTime) / 1000;
long minutes = duration / 60;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
public class ComparisonResult {

private BuildIdentifier baseBuild;
private BuildIdentifier compareBuild;
private BuildIdentifier comparisonBuild;

ComparisonConfiguration comparisonConfiguration;

Expand All @@ -43,12 +43,12 @@ public void setBaseBuild(BuildIdentifier baseBuild) {
this.baseBuild = baseBuild;
}

public BuildIdentifier getCompareBuild() {
return compareBuild;
public BuildIdentifier getComparisonBuild() {
return comparisonBuild;
}

public void setCompareBuild(BuildIdentifier compareBuild) {
this.compareBuild = compareBuild;
public void setComparisonBuild(BuildIdentifier comparisonBuild) {
this.comparisonBuild = comparisonBuild;
}

public ComparisonConfiguration getComparisonConfiguration() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Future;

Expand Down Expand Up @@ -95,6 +94,9 @@ public void reimportBuild(@PathParam("branchName") final String branchName,
ScenarioDocuBuildsManager.INSTANCE.reimportBuild(buildIdentifier);
}

/**
* Import a specific build and create the diff data for a specific comparison build.
*/
@GET
@Path("importBuild/{branchName}/{buildName}/{comparisonBranchName}/{comparisonBuildName}/{comparisonName}")
@Produces({"application/xml", "application/json"})
Expand All @@ -108,20 +110,18 @@ public Response importBuild(
BuildIdentifier buildIdentifier = new BuildIdentifier(branchName, buildName);
BuildIdentifier comparisonBuildIdentifier = new BuildIdentifier(comparisonBranchName, comparisonBuildName);

ArrayList<Future<ComparisonResult>> futureList = ScenarioDocuBuildsManager.INSTANCE.importBuild(buildIdentifier, comparisonBuildIdentifier, comparisonName);
Future<ComparisonResult> comparisonResultFuture =
ScenarioDocuBuildsManager.INSTANCE.importBuildAndCreateComparison(buildIdentifier,
comparisonBuildIdentifier, comparisonName);

List<ComparisonResult> comparisonResultList = new ArrayList<>();
for (Future<ComparisonResult> comparisonResultFuture : futureList) {
try {
comparisonResultList.add(comparisonResultFuture.get());
} catch (Exception e) {
throw new RuntimeException(e);
}
ComparisonResult comparisonResult;
try {
comparisonResult = comparisonResultFuture.get();
} catch (Exception e) {
throw new RuntimeException(e);
}

ComparisonResult[] results = comparisonResultList.toArray(new ComparisonResult[comparisonResultList.size()]);

return Response.ok(results).build();
return Response.ok(comparisonResult).build();
}

@POST
Expand Down

0 comments on commit a565bc9

Please sign in to comment.