From 499436d125728d3b858ae4e315b1e06c526c11f8 Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Tue, 6 Oct 2026 16:22:37 -0400 Subject: [PATCH] fix(FOUR-33645): guard activity execution time metric when ms timestamps are null Prevent task completion failures when recording the Prometheus activity_execution_time_seconds histogram in BpmnSubscriber. Fall back to created_at and completed_at when created_at_ms or completed_at_ms are unavailable, and skip the metric observation when either timestamp is still missing. https://processmaker.atlassian.net/browse/FOUR-33645 --- ProcessMaker/Listeners/BpmnSubscriber.php | 35 ++++++++++++----------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/ProcessMaker/Listeners/BpmnSubscriber.php b/ProcessMaker/Listeners/BpmnSubscriber.php index c7f0f7f810..a4022471ba 100644 --- a/ProcessMaker/Listeners/BpmnSubscriber.php +++ b/ProcessMaker/Listeners/BpmnSubscriber.php @@ -146,22 +146,25 @@ public function onActivityCompleted(ActivityCompletedEvent $event) Log::info('Activity completed: ' . json_encode($token->getProperties())); // Prometheus Metric: Activity Execution Time - $startTime = $token->created_at_ms; - $completedTime = $token->completed_at_ms; - $executionTime = $completedTime->diffInMilliseconds($startTime); - Metrics::histogramObserve( - 'activity_execution_time_seconds', - 'Activity Execution Time', - [ - 'activity_id' => $token->element_id, - 'activity_name' => $token->element_name, - 'element_type' => $token->element_type, - 'process_id' => $token->process_id, - 'request_id' => $token->process_request_id, - ], - [1, 10, 3600, 86400], - $executionTime, - ); + $startTime = $token->created_at_ms ?? $token->created_at; + $completedTime = $token->completed_at_ms ?? $token->completed_at; + + if ($startTime && $completedTime) { + $executionTime = $completedTime->diffInMilliseconds($startTime); + Metrics::histogramObserve( + 'activity_execution_time_seconds', + 'Activity Execution Time', + [ + 'activity_id' => $token->element_id, + 'activity_name' => $token->element_name, + 'element_type' => $token->element_type, + 'process_id' => $token->process_id, + 'request_id' => $token->process_request_id, + ], + [1, 10, 3600, 86400], + $executionTime, + ); + } if ($token->element_type == 'task') { $notifiables = $token->getNotifiables('completed');