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-runtimes.git
The following commit(s) were added to refs/heads/main by this push:
new 64b3242c99 [Fix #3483] Adding state duration summary (#3485)
64b3242c99 is described below
commit 64b3242c9995781bebddd691d3535c12ada4a69b
Author: Francisco Javier Tirado Sarti
<[email protected]>
AuthorDate: Thu Apr 25 18:13:55 2024 +0200
[Fix #3483] Adding state duration summary (#3485)
---
.../process/MetricsProcessEventListener.java | 25 ++++++++++++++++------
.../org/kie/kogito/internal/utils/KogitoTags.java | 2 ++
.../workflow/parser/handlers/StateHandler.java | 4 ++--
3 files changed, 23 insertions(+), 8 deletions(-)
diff --git
a/addons/common/monitoring/core/src/main/java/org/kie/kogito/monitoring/core/common/process/MetricsProcessEventListener.java
b/addons/common/monitoring/core/src/main/java/org/kie/kogito/monitoring/core/common/process/MetricsProcessEventListener.java
index a2fbebf6e1..92ddf1241e 100644
---
a/addons/common/monitoring/core/src/main/java/org/kie/kogito/monitoring/core/common/process/MetricsProcessEventListener.java
+++
b/addons/common/monitoring/core/src/main/java/org/kie/kogito/monitoring/core/common/process/MetricsProcessEventListener.java
@@ -35,6 +35,7 @@ import
org.kie.kogito.internal.process.runtime.KogitoNodeInstance;
import org.kie.kogito.internal.process.runtime.KogitoProcessInstance;
import org.kie.kogito.internal.process.runtime.KogitoWorkItemNodeInstance;
import org.kie.kogito.internal.process.runtime.KogitoWorkflowProcessInstance;
+import org.kie.kogito.internal.utils.KogitoTags;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -120,6 +121,11 @@ public class MetricsProcessEventListener extends
DefaultKogitoProcessEventListen
"Work Items Duration", Tag.of("name", name));
}
+ private DistributionSummary getNodeInstancesDurationSummary(String
processId, String nodeName) {
+ return
buildDistributionSummary("kogito_node_instance_duration_milliseconds",
"Relevant nodes duration in milliseconds", Tag.of("process_id", processId),
+ Tag.of("node_name", nodeName));
+ }
+
protected void recordRunningProcessInstance(String processId) {
getRunningProcessInstancesGauge(processId).incrementAndGet();
}
@@ -164,12 +170,19 @@ public class MetricsProcessEventListener extends
DefaultKogitoProcessEventListen
final KogitoNodeInstance nodeInstance = (KogitoNodeInstance)
event.getNodeInstance();
if (nodeInstance instanceof KogitoWorkItemNodeInstance) {
KogitoWorkItemNodeInstance wi = (KogitoWorkItemNodeInstance)
nodeInstance;
- if (wi.getTriggerTime() != null) {
- final String name = (String)
wi.getWorkItem().getParameters().getOrDefault("TaskName",
wi.getWorkItem().getName());
- final double duration =
millisToSeconds(wi.getLeaveTime().getTime() - wi.getTriggerTime().getTime());
- getWorkItemsDurationSummary(name).record(duration);
- LOGGER.debug("Work Item {}, duration: {}s", name, duration);
- }
+ recordNodeDuration(getWorkItemsDurationSummary((String)
wi.getWorkItem().getParameters().getOrDefault("TaskName",
wi.getWorkItem().getName())), nodeInstance, TimeUnit.SECONDS);
+ }
+ String nodeName = (String)
nodeInstance.getNode().getMetaData().get(KogitoTags.METRIC_NAME_METADATA);
+ if (nodeName != null) {
+
recordNodeDuration(getNodeInstancesDurationSummary(event.getProcessInstance().getProcessId(),
nodeName), nodeInstance, TimeUnit.MILLISECONDS);
+ }
+ }
+
+ private void recordNodeDuration(DistributionSummary summary,
KogitoNodeInstance instance, TimeUnit target) {
+ if (instance.getTriggerTime() != null) {
+ double duration = target.convert(instance.getLeaveTime().getTime()
- instance.getTriggerTime().getTime(), TimeUnit.MILLISECONDS);
+ summary.record(duration);
+ LOGGER.debug("Recorded {} {} because of node {} for summary {}",
duration, target, instance.getNode().getName(), summary.getId().getName());
}
}
diff --git
a/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/KogitoTags.java
b/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/KogitoTags.java
index a514146fb3..431feba23b 100644
--- a/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/KogitoTags.java
+++ b/api/kogito-api/src/main/java/org/kie/kogito/internal/utils/KogitoTags.java
@@ -27,4 +27,6 @@ public class KogitoTags {
public static final String INPUT_TAG = "input";
public static final String OUTPUT_TAG = "output";
+ public static final String METRIC_NAME_METADATA = "MetricName";
+
}
diff --git
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java
index 0c1781d604..599ea4a3dd 100644
---
a/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java
+++
b/kogito-serverless-workflow/kogito-serverless-workflow-builder/src/main/java/org/kie/kogito/serverless/workflow/parser/handlers/StateHandler.java
@@ -189,7 +189,7 @@ public abstract class StateHandler<S extends State> {
protected void handleState(RuleFlowNodeContainerFactory<?, ?> factory) {
MakeNodeResult result = makeNode(factory);
- node = result.getIncomingNode().metaData(SWFConstants.STATE_NAME,
state.getName());
+ node = result.getIncomingNode().metaData(SWFConstants.STATE_NAME,
state.getName()).metaData(KogitoTags.METRIC_NAME_METADATA, state.getName());
outgoingNode =
result.getOutgoingNode().metaData(SWFConstants.STATE_NAME, state.getName());
if (state.getCompensatedBy() != null) {
handleCompensation(factory);
@@ -208,7 +208,7 @@ public abstract class StateHandler<S extends State> {
if (output != null) {
ActionNodeFactory<?> actionNode = handleStateFilter(factory,
output);
factory.connection(outgoingNode.getNode().getId(),
actionNode.getNode().getId());
- outgoingNode = actionNode.metaData(SWFConstants.STATE_NAME,
state.getName());
+ outgoingNode = actionNode.metaData(SWFConstants.STATE_NAME,
state.getName()).metaData(KogitoTags.METRIC_NAME_METADATA, state.getName());
}
}
connectStart(factory);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]