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

exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 410dec6323 NIFI-14254 Fixed Event Time Sorting for Provenance Events 
(#10809)
410dec6323 is described below

commit 410dec632303b3327b3c8ce22cca50b560cf0f2c
Author: pkelly-nifi <[email protected]>
AuthorDate: Tue Feb 3 15:07:20 2026 -0500

    NIFI-14254 Fixed Event Time Sorting for Provenance Events (#10809)
    
    - Added eventTimestamp field to ProvenanceEventDTO
    
    Co-authored-by: David Handermann <[email protected]>
    Signed-off-by: David Handermann <[email protected]>
---
 .../nifi/web/api/dto/provenance/ProvenanceEventDTO.java  | 16 ++++++++++++++++
 .../org/apache/nifi/web/controller/ControllerFacade.java |  6 +++++-
 .../provenance-event-table.component.ts                  |  5 ++---
 .../frontend/apps/nifi/src/app/state/shared/index.ts     |  1 +
 4 files changed, 24 insertions(+), 4 deletions(-)

diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/provenance/ProvenanceEventDTO.java
 
b/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/provenance/ProvenanceEventDTO.java
index 05a52524a1..071ccf01be 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/provenance/ProvenanceEventDTO.java
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/provenance/ProvenanceEventDTO.java
@@ -19,8 +19,10 @@ package org.apache.nifi.web.api.dto.provenance;
 import io.swagger.v3.oas.annotations.media.Schema;
 import jakarta.xml.bind.annotation.XmlType;
 import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import org.apache.nifi.web.api.dto.util.InstantAdapter;
 import org.apache.nifi.web.api.dto.util.TimestampAdapter;
 
+import java.time.Instant;
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
@@ -36,6 +38,7 @@ public class ProvenanceEventDTO {
     // in search results table
     private Long eventId;
     private Date eventTime;
+    private Instant eventTimestamp;
     private Long eventDuration;
     private Long lineageDuration;
     private String eventType;
@@ -123,6 +126,19 @@ public class ProvenanceEventDTO {
         this.eventTime = eventTime;
     }
 
+    @XmlJavaTypeAdapter(InstantAdapter.class)
+    @Schema(
+            description = "Event Timestamp formatted using ISO8601",
+            type = "string"
+    )
+    public Instant getEventTimestamp() {
+        return eventTimestamp;
+    }
+
+    public void setEventTimestamp(final Instant eventTimestamp) {
+        this.eventTimestamp = eventTimestamp;
+    }
+
     /**
      * @return UUID of the FlowFile for this event
      */
diff --git 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerFacade.java
 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerFacade.java
index c2fbae3f27..def4295456 100644
--- 
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerFacade.java
+++ 
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/controller/ControllerFacade.java
@@ -1664,7 +1664,11 @@ public class ControllerFacade implements Authorizable {
         final ProvenanceEventDTO dto = new ProvenanceEventDTO();
         dto.setId(String.valueOf(event.getEventId()));
         dto.setEventId(event.getEventId());
-        dto.setEventTime(new Date(event.getEventTime()));
+
+        final Date eventTime = new Date(event.getEventTime());
+        dto.setEventTime(eventTime);
+        dto.setEventTimestamp(eventTime.toInstant());
+
         dto.setEventType(event.getEventType().name());
         dto.setFlowFileUuid(event.getFlowFileUuid());
         dto.setFileSize(FormatUtils.formatDataSize(event.getFileSize()));
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/ui/provenance-event-listing/provenance-event-table/provenance-event-table.component.ts
 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/ui/provenance-event-listing/provenance-event-table/provenance-event-table.component.ts
index da2469c7d9..e2df47bb35 100644
--- 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/ui/provenance-event-listing/provenance-event-table/provenance-event-table.component.ts
+++ 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/ui/provenance-event-listing/provenance-event-table/provenance-event-table.component.ts
@@ -262,9 +262,8 @@ export class ProvenanceEventTable implements AfterViewInit {
             let retVal = 0;
             switch (sort.active) {
                 case 'eventTime':
-                    // event ideas are increasing, so we can use this simple 
number for sorting purposes
-                    // since we don't surface the timestamp as millis
-                    retVal = this.nifiCommon.compareNumber(a.eventId, 
b.eventId);
+                    // Compare Event Timestamp with ISO8601 formatting
+                    retVal = this.nifiCommon.compareString(a.eventTimestamp, 
b.eventTimestamp);
                     break;
                 case 'eventType':
                     retVal = this.nifiCommon.compareString(a.eventType, 
b.eventType);
diff --git 
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts 
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts
index 505dbb8364..cf594c663c 100644
--- a/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts
+++ b/nifi-frontend/src/main/frontend/apps/nifi/src/app/state/shared/index.ts
@@ -146,6 +146,7 @@ export interface ProvenanceEventSummary {
     id: string;
     eventId: number;
     eventTime: string;
+    eventTimestamp: string;
     eventType: string;
     flowFileUuid: string;
     fileSize: string;

Reply via email to