Skip to content

Commit

Permalink
Work into final build result response
Browse files Browse the repository at this point in the history
  • Loading branch information
thescouser89 committed Jan 28, 2025
1 parent 4f6b636 commit 5c6e104
Show file tree
Hide file tree
Showing 5 changed files with 221 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import org.jboss.pnc.dingrogu.api.dto.adapter.RepositoryDriverSetupDTO;
import org.jboss.pnc.dingrogu.api.dto.adapter.RepourAdjustDTO;
import org.jboss.pnc.dingrogu.api.dto.adapter.ReqourAdjustDTO;
import org.jboss.pnc.spi.executor.BuildExecutionConfiguration;

import java.util.Map;

Expand Down Expand Up @@ -42,7 +41,6 @@ public class BuildWorkDTO {
Map<String, String> genericParameters;
String buildConfigurationId;
String correlationId;
BuildExecutionConfiguration buildExecutionConfiguration;

public RepourAdjustDTO toRepourAdjustDTO() {
String alignmentPreferenceName = null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ public void filter(ContainerRequestContext requestContext) {

UriInfo uriInfo = requestContext.getUriInfo();
Request request = requestContext.getRequest();
log.info("== Request {} {}.", request.getMethod(), uriInfo.getRequestUri());
Map<String, String> mdcContext = getContextMap();
// TODO: can we just create a for loop with a ll the values?
headerToMap(mdcContext, MDCHeaderKeys.PROCESS_CONTEXT, requestContext);
Expand Down Expand Up @@ -65,7 +64,11 @@ public void filter(ContainerRequestContext requestContext, ContainerResponseCont
} else {
took = Long.toString(System.currentTimeMillis() - startTime);
}
log.info("Completed {} with status: {}", requestContext.getUriInfo().getPath(), responseContext.getStatus());
log.info(
"Completed {} with status: {}, took:{}ms",
requestContext.getUriInfo().getPath(),
responseContext.getStatus(),
took);

try (MDC.MDCCloseable mdcTook = MDC.putCloseable(MDCKeys.REQUEST_TOOK, took);
MDC.MDCCloseable mdcStatus = MDC
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.jboss.pnc.api.dto.Request;
import org.jboss.pnc.api.repositorydriver.dto.RepositoryPromoteRequest;
import org.jboss.pnc.api.repositorydriver.dto.RepositoryPromoteResult;
import org.jboss.pnc.dingrogu.api.dto.adapter.RepositoryDriverPromoteDTO;
import org.jboss.pnc.dingrogu.api.endpoint.AdapterEndpoint;
import org.jboss.pnc.dingrogu.api.endpoint.WorkflowEndpoint;
Expand Down Expand Up @@ -78,15 +79,36 @@ public void start(String correlationId, StartRequest startRequest) {
}

/**
* We're not supposed to use this since the start adapter endpoint will send the callback directly to Rex
*
* @param correlationId
* @param object callback object
*/
@Override
public void callback(String correlationId, Object object) {
try {
RepositoryPromoteResult response = objectMapper.convertValue(object, RepositoryPromoteResult.class);

try {
if (response == null || !response.getStatus().isSuccess()) {
callbackEndpoint.fail(getRexTaskName(correlationId), response, null);
} else {
Log.infof("Repository promote response: %s", response.toString());
callbackEndpoint.succeed(getRexTaskName(correlationId), response, null);
}
} catch (Exception e) {
Log.error("Error happened in callback adapter", e);
}
} catch (IllegalArgumentException e) {
// if we cannot cast object to AdjustResponse, it's probably a failure
try {
callbackEndpoint.fail(getRexTaskName(correlationId), object, null);
} catch (Exception ex) {
Log.error("Error happened in callback adapter", ex);
}
}
try {
// RepositoryPromoteResult

callbackEndpoint.succeed(getRexTaskName(correlationId), object, null);
} catch (Exception e) {
Log.error("Error happened in callback adapter", e);
Expand Down
4 changes: 4 additions & 0 deletions rest-workflow/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,9 @@
<groupId>org.jboss.pnc.rex</groupId>
<artifactId>rex-model</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.orm</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
</dependencies>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@
import jakarta.ws.rs.core.Response;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.jboss.pnc.api.dto.Request;
import org.jboss.pnc.api.enums.ArtifactQuality;
import org.jboss.pnc.api.enums.BuildCategory;
import org.jboss.pnc.api.repositorydriver.dto.RepositoryArtifact;
import org.jboss.pnc.api.repositorydriver.dto.RepositoryPromoteResult;
import org.jboss.pnc.api.reqour.dto.AdjustResponse;
import org.jboss.pnc.common.log.MDCUtils;
import org.jboss.pnc.dingrogu.api.dto.workflow.BuildWorkDTO;
import org.jboss.pnc.dingrogu.api.dto.CorrelationId;
Expand All @@ -17,22 +22,31 @@
import org.jboss.pnc.dingrogu.restadapter.adapter.RepourAdjustAdapter;
import org.jboss.pnc.dingrogu.restadapter.adapter.ReqourAdjustAdapter;
import org.jboss.pnc.dingrogu.restadapter.client.GenericClient;
import org.jboss.pnc.enums.RepositoryType;
import org.jboss.pnc.model.Artifact;
import org.jboss.pnc.model.TargetRepository;
import org.jboss.pnc.rex.api.TaskEndpoint;
import org.jboss.pnc.rex.dto.ConfigurationDTO;
import org.jboss.pnc.rex.dto.CreateTaskDTO;
import org.jboss.pnc.rex.dto.EdgeDTO;
import org.jboss.pnc.rex.dto.ServerResponseDTO;
import org.jboss.pnc.rex.dto.TaskDTO;
import org.jboss.pnc.rex.dto.requests.CreateGraphRequest;
import org.jboss.pnc.rex.model.requests.NotificationRequest;
import org.jboss.pnc.rex.model.requests.StartRequest;
import org.jboss.pnc.spi.BuildResult;
import org.jboss.pnc.spi.coordinator.CompletionStatus;
import org.jboss.pnc.spi.repositorymanager.RepositoryManagerResult;
import org.jboss.pnc.spi.repour.RepourResult;

import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;

/**
* Build process workflow implementation
Expand Down Expand Up @@ -246,20 +260,41 @@ private static Map<String, CreateTaskDTO> getVertices(List<CreateTaskDTO> tasks)
return vertices;
}

private static BuildResult generateBuildResult(Set<TaskDTO> tasks, BuildWorkDTO buildWorkDTO) {
// TODO: make it more realistic in the future haa
private BuildResult generateBuildResult(Set<TaskDTO> tasks, BuildWorkDTO buildWorkDTO) {
Optional<RepositoryManagerResult> repoResult = getRepositoryManagerResult(
tasks,
buildWorkDTO.getCorrelationId());
Optional<RepourResult> repourResult = getReqourResult(tasks, buildWorkDTO.getCorrelationId());
CompletionStatus completionStatus = determineCompletionStatus(repoResult, repourResult);
BuildResult buildResult = new BuildResult(
CompletionStatus.SUCCESS,
java.util.Optional.empty(),
Optional.ofNullable(buildWorkDTO.getBuildExecutionConfiguration()),
java.util.Optional.empty(),
java.util.Optional.empty(),
java.util.Optional.empty(),
java.util.Optional.empty());
completionStatus,
Optional.empty(),
Optional.empty(),
Optional.empty(),
repoResult,
Optional.empty(),
repourResult);

return buildResult;
}

private CompletionStatus determineCompletionStatus(
Optional<RepositoryManagerResult> repoResult,
Optional<RepourResult> repourResult) {
if (repoResult.isEmpty() || repourResult.isEmpty()) {
return CompletionStatus.FAILED;
}
if (repourResult.get().getCompletionStatus().isFailed()) {
return repourResult.get().getCompletionStatus();
}
if (repoResult.get().getCompletionStatus().isFailed()) {
return repoResult.get().getCompletionStatus();
}

// if we are here, everything succeeded!
return CompletionStatus.SUCCESS;
}

private void sendRexCallback(StartRequest startRequest, BuildResult buildResult) {
Request callback;
if (buildResult.getCompletionStatus().isFailed()) {
Expand All @@ -276,4 +311,149 @@ private void sendRexCallback(StartRequest startRequest, BuildResult buildResult)
.build();
genericClient.send(toSend);
}

private Optional<RepourResult> getReqourResult(Set<TaskDTO> tasks, String correlationId) {
Optional<TaskDTO> task = findTask(tasks, reqour.getRexTaskName(correlationId));

if (task.isEmpty()) {
return Optional.empty();
}

TaskDTO reqourTask = task.get();
List<ServerResponseDTO> responses = reqourTask.getServerResponses();

if (responses.isEmpty()) {
return Optional.empty();
}

ServerResponseDTO finalResponse = responses.get(responses.size() - 1);
AdjustResponse response = objectMapper.convertValue(finalResponse.getBody(), AdjustResponse.class);

if (response == null) {
return Optional.empty();
}

RepourResult repourResult;
if (response.getCallback().getStatus().isSuccess()) {
repourResult = RepourResult.builder()
.completionStatus(CompletionStatus.valueOf(response.getCallback().getStatus().name()))
.executionRootName(response.getManipulatorResult().getVersioningState().getExecutionRootName())
.executionRootVersion(
response.getManipulatorResult().getVersioningState().getExecutionRootVersion())
.build();
} else {
repourResult = RepourResult.builder()
.completionStatus(CompletionStatus.valueOf(response.getCallback().getStatus().name()))
.build();
}

return Optional.of(repourResult);
}

private Optional<RepositoryManagerResult> getRepositoryManagerResult(Set<TaskDTO> tasks, String correlationId) {

Optional<TaskDTO> task = findTask(tasks, repoPromote.getRexTaskName(correlationId));

if (task.isEmpty()) {
return Optional.empty();
}

TaskDTO repoTask = task.get();
List<ServerResponseDTO> responses = repoTask.getServerResponses();

if (responses.isEmpty()) {
return Optional.empty();
}

ServerResponseDTO finalResponse = responses.get(responses.size() - 1);
RepositoryPromoteResult response = objectMapper
.convertValue(finalResponse.getBody(), RepositoryPromoteResult.class);

if (response == null) {
return Optional.empty();
}
RepositoryManagerResult result = new RepositoryManagerResult() {
@Override
public List<Artifact> getBuiltArtifacts() {
return convertFromRepositoryArtifacts(response.getBuiltArtifacts());
}

@Override
public List<Artifact> getDependencies() {
return convertFromRepositoryArtifacts(response.getDependencies());
}

@Override
public String getBuildContentId() {
return response.getBuildContentId();
}

@Override
public CompletionStatus getCompletionStatus() {
return CompletionStatus.valueOf(response.getStatus().name());
}
};

return Optional.of(result);

}

private Optional<TaskDTO> findTask(Set<TaskDTO> tasks, String name) {
return tasks.stream().filter(task -> task.getName().equals(name)).findFirst();
}

private List<Artifact> convertFromRepositoryArtifacts(List<RepositoryArtifact> builtArtifacts) {
if (builtArtifacts == null) {
return Collections.emptyList();
}
return builtArtifacts.stream()
.map(
ra -> Artifact.builder()
.identifier(ra.getIdentifier())
.purl(ra.getPurl())
.artifactQuality(convertArtifactQuality(ra.getArtifactQuality()))
.buildCategory(convertBuildCategory(ra.getBuildCategory()))
.md5(ra.getMd5())
.sha1(ra.getSha1())
.sha256(ra.getSha256())
.filename(ra.getFilename())
.deployPath(ra.getDeployPath())
.importDate(Date.from(ra.getImportDate()))
.originUrl(ra.getOriginUrl())
.size(ra.getSize())
.targetRepository(convertTargetRepository(ra.getTargetRepository()))
.build())
.collect(Collectors.toList());
}

private org.jboss.pnc.enums.ArtifactQuality convertArtifactQuality(ArtifactQuality quality) {
return quality == null ? null : org.jboss.pnc.enums.ArtifactQuality.valueOf(quality.name());
}

private TargetRepository convertTargetRepository(
org.jboss.pnc.api.repositorydriver.dto.TargetRepository targetRepository) {
if (targetRepository == null) {
return null;
}
return TargetRepository.newBuilder()
.temporaryRepo(targetRepository.getTemporaryRepo())
.identifier(targetRepository.getIdentifier())
.repositoryType(convertRepositoryType(targetRepository.getRepositoryType()))
.repositoryPath(targetRepository.getRepositoryPath())
.build();
}

private RepositoryType convertRepositoryType(org.jboss.pnc.api.enums.RepositoryType repositoryType) {
if (repositoryType == null) {
return null;
}
return RepositoryType.valueOf(repositoryType.name());
}

private org.jboss.pnc.enums.BuildCategory convertBuildCategory(BuildCategory buildCategory) {
if (buildCategory == null) {
return null;
}
return org.jboss.pnc.enums.BuildCategory.valueOf(buildCategory.name());
}
}

0 comments on commit 5c6e104

Please sign in to comment.