This is an automated email from the ASF dual-hosted git repository.

fjtiradosarti pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-kogito-apps.git


The following commit(s) were added to refs/heads/main by this push:
     new 7b7e2e44b [Fix apache/incubator-kie-issues#1892] Adding execution 
summary (#2209)
7b7e2e44b is described below

commit 7b7e2e44b0038376651de85798bfca60ee90515c
Author: Francisco Javier Tirado Sarti 
<[email protected]>
AuthorDate: Fri Apr 4 14:18:52 2025 +0200

    [Fix apache/incubator-kie-issues#1892] Adding execution summary (#2209)
---
 .../graphql/AbstractGraphQLSchemaManager.java      | 40 ++++++++++++++++++++++
 .../src/main/resources/basic.schema.graphqls       |  1 +
 .../service/graphql/GraphQLSchemaManagerImpl.java  |  1 +
 .../graphql/GraphQLAddonSchemaManagerImpl.java     |  1 +
 4 files changed, 43 insertions(+)

diff --git 
a/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
 
b/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
index e0464aa32..804c5e49d 100644
--- 
a/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
+++ 
b/data-index/data-index-graphql/src/main/java/org/kie/kogito/index/graphql/AbstractGraphQLSchemaManager.java
@@ -18,8 +18,10 @@
  */
 package org.kie.kogito.index.graphql;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import java.util.ListIterator;
 import java.util.Map;
 import java.util.ServiceLoader;
 import java.util.ServiceLoader.Provider;
@@ -34,12 +36,14 @@ import 
org.kie.kogito.index.graphql.query.GraphQLQueryParser;
 import org.kie.kogito.index.graphql.query.GraphQLQueryParserRegistry;
 import org.kie.kogito.index.model.Job;
 import org.kie.kogito.index.model.Node;
+import org.kie.kogito.index.model.NodeInstance;
 import org.kie.kogito.index.model.ProcessDefinition;
 import org.kie.kogito.index.model.ProcessDefinitionKey;
 import org.kie.kogito.index.model.ProcessInstance;
 import org.kie.kogito.index.model.UserTaskInstance;
 import org.kie.kogito.index.service.DataIndexServiceException;
 import org.kie.kogito.index.storage.DataIndexStorageService;
+import org.kie.kogito.internal.process.runtime.KogitoProcessInstance;
 import org.kie.kogito.persistence.api.StorageFetcher;
 import org.kie.kogito.persistence.api.StorageServiceCapability;
 import org.kie.kogito.persistence.api.query.Query;
@@ -178,6 +182,42 @@ public abstract class AbstractGraphQLSchemaManager 
implements GraphQLSchemaManag
         return cacheService.getProcessDefinitionStorage().get(new 
ProcessDefinitionKey(source.getProcessId(), source.getVersion()));
     }
 
+    private static final String START_MESSAGE = "Workflow started at %s";
+    private static final String FAILED_MESSAGE = "Workflow failed with error 
%s at %s";
+    private static final String RETRIGGERED_MESSAGE = "Workflow retriggered at 
%s";
+    private static final String WAITING_MESSAGE = "Workflow waiting at node %s 
since %s";
+    private static final String COMPLETED_MESSAGE = "Workflow completed at %s";
+
+    public List<String> getExecutionSummary(DataFetchingEnvironment env) {
+        ProcessInstance pi = env.getSource();
+        List<String> summary = new ArrayList<>();
+        List<NodeInstance> nodes = pi.getNodes();
+        nodes.sort((u, v) -> u.getEnter().compareTo(v.getEnter()));
+        ListIterator<NodeInstance> iter = nodes.listIterator();
+        summary.add(String.format(START_MESSAGE, pi.getStart()));
+        while (iter.hasNext()) {
+            NodeInstance item = iter.next();
+            if (Boolean.TRUE.equals(item.isRetrigger())) {
+                summary.add(String.format(RETRIGGERED_MESSAGE, 
item.getEnter()));
+            }
+            if (item.getErrorMessage() != null) {
+                summary.add(String.format(FAILED_MESSAGE, 
item.getErrorMessage(), item.getEnter()));
+            }
+        }
+        if (pi.getState() == KogitoProcessInstance.STATE_ACTIVE) {
+            while (iter.hasPrevious()) {
+                NodeInstance last = iter.previous();
+                if (last.getName() != null && last.getExit() == null) {
+                    summary.add(String.format(WAITING_MESSAGE, last.getName(), 
last.getEnter()));
+                }
+                break;
+            }
+        } else if (pi.getState() == KogitoProcessInstance.STATE_COMPLETED) {
+            summary.add(String.format(COMPLETED_MESSAGE, pi.getEnd()));
+        }
+        return summary;
+    }
+
     protected String getServiceUrl(String endpoint, String processId) {
         return CommonUtils.getServiceUrl(endpoint, processId);
     }
diff --git 
a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls 
b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
index 7e568a493..814d5454a 100644
--- a/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
+++ b/data-index/data-index-graphql/src/main/resources/basic.schema.graphqls
@@ -101,6 +101,7 @@ type ProcessInstance {
     identity: String
     createdBy: String
     updatedBy: String
+    executionSummary: [String]
     slaDueDate: DateTime
 }
 
diff --git 
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java
 
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java
index 03b63f8e7..4da59f5a0 100644
--- 
a/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java
+++ 
b/data-index/data-index-service/data-index-service-common/src/main/java/org/kie/kogito/index/service/graphql/GraphQLSchemaManagerImpl.java
@@ -122,6 +122,7 @@ public class GraphQLSchemaManagerImpl extends 
AbstractGraphQLSchemaManager {
                     builder.dataFetcher("source", 
this::getProcessInstanceSource);
                     builder.dataFetcher("nodeDefinitions", 
this::getProcessInstanceNodes);
                     builder.dataFetcher("definition", 
this::getProcessDefinition);
+                    builder.dataFetcher("executionSummary", 
this::getExecutionSummary);
                     return builder;
                 })
                 .type("UserTaskInstance", builder -> {
diff --git 
a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/runtime/src/main/java/org/kie/kogito/index/addon/graphql/GraphQLAddonSchemaManagerImpl.java
 
b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/runtime/src/main/java/org/kie/kogito/index/addon/graphql/GraphQLAddonSchemaManagerImpl.java
index 31c41815e..d12b09b7c 100644
--- 
a/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/runtime/src/main/java/org/kie/kogito/index/addon/graphql/GraphQLAddonSchemaManagerImpl.java
+++ 
b/data-index/kogito-addons-quarkus-data-index/kogito-addons-quarkus-data-index-common/runtime/src/main/java/org/kie/kogito/index/addon/graphql/GraphQLAddonSchemaManagerImpl.java
@@ -74,6 +74,7 @@ public class GraphQLAddonSchemaManagerImpl extends 
AbstractGraphQLSchemaManager
                     builder.dataFetcher("source", 
this::getProcessInstanceSource);
                     builder.dataFetcher("nodeDefinitions", 
this::getProcessInstanceNodes);
                     builder.dataFetcher("definition", 
this::getProcessDefinition);
+                    builder.dataFetcher("executionSummary", 
this::getExecutionSummary);
                     return builder;
                 })
                 .type("ProcessInstanceState", builder -> {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to