Skip to content

Commit

Permalink
Merge pull request #17 from fjtirado/Fix_987_prod
Browse files Browse the repository at this point in the history
[9.99.x-prod][OSL-1.32.2] - Update state to error
  • Loading branch information
fjtirado authored Apr 8, 2024
2 parents cf6576d + 7fc7e7d commit 6a7ed94
Show file tree
Hide file tree
Showing 7 changed files with 21 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

public class CommonUtils {

public static final int ERROR_STATE = 5;
private static final Set<String> finalStates = Set.of("Completed", "Aborted");

public static boolean isTaskCompleted(String status) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import org.kie.kogito.event.process.ProcessInstanceDataEvent;
import org.kie.kogito.event.process.ProcessInstanceErrorDataEvent;
import org.kie.kogito.index.CommonUtils;
import org.kie.kogito.index.model.ProcessInstance;
import org.kie.kogito.index.model.ProcessInstanceError;

Expand All @@ -30,12 +31,13 @@ public class ProcessInstanceErrorDataEventMerger extends ProcessInstanceEventMer

@Override
public ProcessInstance merge(ProcessInstance pi, ProcessInstanceDataEvent<?> data) {
pi = getOrNew(pi, data);
ProcessInstanceErrorDataEvent event = (ProcessInstanceErrorDataEvent) data;
pi = getOrNew(pi, data, event.getData().getEventDate());
ProcessInstanceError error = new ProcessInstanceError();
error.setMessage(event.getData().getErrorMessage());
error.setNodeDefinitionId(event.getData().getNodeDefinitionId());
pi.setError(error);
pi.setState(CommonUtils.ERROR_STATE);
return pi;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,20 @@
package org.kie.kogito.index.storage.merger;

import java.util.ArrayList;
import java.util.Date;

import org.kie.kogito.event.process.ProcessInstanceDataEvent;
import org.kie.kogito.index.DateTimeUtils;
import org.kie.kogito.index.model.ProcessInstance;

public abstract class ProcessInstanceEventMerger implements Merger<ProcessInstanceDataEvent<?>, ProcessInstance> {

protected ProcessInstance getOrNew(ProcessInstance pi, ProcessInstanceDataEvent<?> event) {
protected ProcessInstance getOrNew(ProcessInstance pi, ProcessInstanceDataEvent<?> event, Date date) {
if (pi == null) {
pi = new ProcessInstance();
pi.setId(event.getKogitoProcessInstanceId());
pi.setProcessId(event.getKogitoProcessId());
pi.setLastUpdate(DateTimeUtils.toZonedDateTime(date));
pi.setMilestones(new ArrayList<>());
pi.setNodes(new ArrayList<>());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ public class ProcessInstanceNodeDataEventMerger extends ProcessInstanceEventMerg

@Override
public ProcessInstance merge(ProcessInstance pi, ProcessInstanceDataEvent<?> data) {
pi = getOrNew(pi, data);
ProcessInstanceNodeDataEvent event = (ProcessInstanceNodeDataEvent) data;
pi = getOrNew(pi, data, event.getData().getEventDate());

List<NodeInstance> nodeInstances = Optional.ofNullable(pi.getNodes()).orElse(new ArrayList<>());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ public class ProcessInstanceStateDataEventMerger extends ProcessInstanceEventMer

@Override
public ProcessInstance merge(ProcessInstance pi, ProcessInstanceDataEvent<?> data) {
pi = getOrNew(pi, data);
ProcessInstanceStateDataEvent event = (ProcessInstanceStateDataEvent) data;
pi = getOrNew(pi, data, event.getData().getEventDate());
LOGGER.debug("Value before merging: {}", pi);
pi.setId(event.getData().getProcessInstanceId());
pi.setVersion(event.getData().getProcessVersion());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,17 @@
import org.kie.kogito.event.process.ProcessInstanceVariableEventBody;
import org.kie.kogito.index.json.JsonUtils;
import org.kie.kogito.index.model.ProcessInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class ProcessInstanceVariableDataEventMerger extends ProcessInstanceEventMerger {

private static final Logger LOGGER = LoggerFactory.getLogger(ProcessInstanceVariableDataEventMerger.class);

@SuppressWarnings("unchecked")
@Override
public ProcessInstance merge(ProcessInstance pi, ProcessInstanceDataEvent<?> data) {
pi = getOrNew(pi, data);
ProcessInstanceVariableDataEvent event = (ProcessInstanceVariableDataEvent) data;
ProcessInstanceVariableEventBody body = event.getData();
pi = getOrNew(pi, data, body.getEventDate());
pi.setVariables(JsonUtils.mergeVariable(body.getVariableName(), body.getVariableValue(), pi.getVariables()));
return pi;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import java.time.ZonedDateTime;
import java.util.ArrayList;
import java.util.Date;
import java.util.Set;

import org.kie.kogito.event.process.ProcessInstanceErrorDataEvent;
Expand All @@ -32,6 +33,7 @@
import org.kie.kogito.event.process.ProcessInstanceStateEventBody;
import org.kie.kogito.event.process.ProcessInstanceVariableDataEvent;
import org.kie.kogito.event.process.ProcessInstanceVariableEventBody;
import org.kie.kogito.index.CommonUtils;
import org.kie.kogito.index.jpa.mapper.ProcessInstanceEntityMapper;
import org.kie.kogito.index.jpa.model.MilestoneEntity;
import org.kie.kogito.index.jpa.model.NodeInstanceEntity;
Expand Down Expand Up @@ -93,11 +95,12 @@ public void indexVariable(ProcessInstanceVariableDataEvent event) {
indexVariable(event.getData());
}

private ProcessInstanceEntity findOrInit(String processId, String processInstanceId) {
private ProcessInstanceEntity findOrInit(String processId, String processInstanceId, Date date) {
return repository.findByIdOptional(processInstanceId).orElseGet(() -> {
ProcessInstanceEntity pi = new ProcessInstanceEntity();
pi.setProcessId(processId);
pi.setId(processInstanceId);
pi.setLastUpdate(toZonedDateTime(date));
pi.setNodes(new ArrayList<>());
pi.setMilestones(new ArrayList<>());
repository.persist(pi);
Expand All @@ -106,19 +109,20 @@ private ProcessInstanceEntity findOrInit(String processId, String processInstanc
}

private void indexError(ProcessInstanceErrorEventBody error) {
ProcessInstanceEntity pi = findOrInit(error.getProcessId(), error.getProcessInstanceId());
ProcessInstanceEntity pi = findOrInit(error.getProcessId(), error.getProcessInstanceId(), error.getEventDate());
ProcessInstanceErrorEntity errorEntity = pi.getError();
if (errorEntity == null) {
errorEntity = new ProcessInstanceErrorEntity();
pi.setError(errorEntity);
}
errorEntity.setMessage(error.getErrorMessage());
errorEntity.setNodeDefinitionId(error.getNodeDefinitionId());
pi.setState(CommonUtils.ERROR_STATE);
repository.flush();
}

private void indexNode(ProcessInstanceNodeEventBody data) {
ProcessInstanceEntity pi = findOrInit(data.getProcessId(), data.getProcessInstanceId());
ProcessInstanceEntity pi = findOrInit(data.getProcessId(), data.getProcessInstanceId(), data.getEventDate());
pi.getNodes().stream().filter(n -> n.getId().equals(data.getNodeInstanceId())).findAny().ifPresentOrElse(n -> updateNode(n, data), () -> createNode(pi, data));
if ("MilestoneNode".equals(data.getNodeType())) {
pi.getMilestones().stream().filter(n -> n.getId().equals(data.getNodeInstanceId())).findAny().ifPresentOrElse(n -> updateMilestone(n, data), () -> createMilestone(pi, data));
Expand Down Expand Up @@ -171,12 +175,12 @@ private NodeInstanceEntity updateNode(NodeInstanceEntity nodeInstance, ProcessIn
}

private void indexSLA(ProcessInstanceSLAEventBody data) {
findOrInit(data.getProcessId(), data.getProcessInstanceId());
findOrInit(data.getProcessId(), data.getProcessInstanceId(), data.getEventDate());
repository.flush();
}

private void indexState(ProcessInstanceStateEventBody data, Set<String> addons, String endpoint) {
ProcessInstanceEntity pi = findOrInit(data.getProcessId(), data.getProcessInstanceId());
ProcessInstanceEntity pi = findOrInit(data.getProcessId(), data.getProcessInstanceId(), data.getEventDate());
pi.setVersion(data.getProcessVersion());
pi.setProcessName(data.getProcessName());
pi.setRootProcessInstanceId(data.getRootProcessInstanceId());
Expand All @@ -199,7 +203,7 @@ private void indexState(ProcessInstanceStateEventBody data, Set<String> addons,
}

private void indexVariable(ProcessInstanceVariableEventBody data) {
ProcessInstanceEntity pi = findOrInit(data.getProcessId(), data.getProcessInstanceId());
ProcessInstanceEntity pi = findOrInit(data.getProcessId(), data.getProcessInstanceId(), data.getEventDate());
pi.setVariables(JsonUtils.mergeVariable(data.getVariableName(), data.getVariableValue(), pi.getVariables()));
repository.flush();
}
Expand Down

0 comments on commit 6a7ed94

Please sign in to comment.