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 b468145961 NIFI-15494 Added Component Type in Provenance Lineage
Display (#10800)
b468145961 is described below
commit b46814596160ec9b9d2bbdf8ceeafb1306ae3be3
Author: Pierre Villard <[email protected]>
AuthorDate: Fri Feb 6 16:40:44 2026 +0100
NIFI-15494 Added Component Type in Provenance Lineage Display (#10800)
Signed-off-by: David Handermann <[email protected]>
---
.../apache/nifi/provenance/lineage/EventNode.java | 5 +++
.../lineage/ProvenanceEventLineageNode.java | 5 +++
.../dto/provenance/lineage/ProvenanceNodeDTO.java | 14 ++++++++
.../org/apache/nifi/web/api/dto/DtoFactory.java | 1 +
.../app/pages/provenance/state/lineage/index.ts | 1 +
.../lineage/lineage.component.ts | 37 ++++++++++++++--------
6 files changed, 49 insertions(+), 14 deletions(-)
diff --git
a/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/lineage/EventNode.java
b/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/lineage/EventNode.java
index 18977b0f44..0c82f95349 100644
---
a/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/lineage/EventNode.java
+++
b/nifi-commons/nifi-data-provenance-utils/src/main/java/org/apache/nifi/provenance/lineage/EventNode.java
@@ -44,6 +44,11 @@ public class EventNode implements ProvenanceEventLineageNode
{
return record.getEventType();
}
+ @Override
+ public String getComponentType() {
+ return record.getComponentType();
+ }
+
@Override
public long getTimestamp() {
return record.getEventTime();
diff --git
a/nifi-framework-api/src/main/java/org/apache/nifi/provenance/lineage/ProvenanceEventLineageNode.java
b/nifi-framework-api/src/main/java/org/apache/nifi/provenance/lineage/ProvenanceEventLineageNode.java
index e69cac5a13..e94b74dc82 100644
---
a/nifi-framework-api/src/main/java/org/apache/nifi/provenance/lineage/ProvenanceEventLineageNode.java
+++
b/nifi-framework-api/src/main/java/org/apache/nifi/provenance/lineage/ProvenanceEventLineageNode.java
@@ -24,6 +24,11 @@ public interface ProvenanceEventLineageNode extends
LineageNode {
ProvenanceEventType getEventType();
+ /**
+ * @return the type of the component that generated this event
+ */
+ String getComponentType();
+
long getEventIdentifier();
List<String> getParentUuids();
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/provenance/lineage/ProvenanceNodeDTO.java
b/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/provenance/lineage/ProvenanceNodeDTO.java
index e94d86dbbb..1576e6ccbc 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/provenance/lineage/ProvenanceNodeDTO.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-client-dto/src/main/java/org/apache/nifi/web/api/dto/provenance/lineage/ProvenanceNodeDTO.java
@@ -37,6 +37,7 @@ public class ProvenanceNodeDTO {
private String clusterNodeIdentifier;
private String type;
private String eventType;
+ private String componentType;
private Long millis;
private Date timestamp;
@@ -132,6 +133,19 @@ public class ProvenanceNodeDTO {
this.eventType = eventType;
}
+ /**
+ * @return if this is an event node, this is the type of the component
that generated this event
+ */
+ @Schema(description = "If the type is EVENT, this is the type of the
component that generated the event."
+ )
+ public String getComponentType() {
+ return componentType;
+ }
+
+ public void setComponentType(String componentType) {
+ this.componentType = componentType;
+ }
+
/**
* @return timestamp of this node
*/
diff --git
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
index a67a904ff5..9f097b1667 100644
---
a/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
+++
b/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-api/src/main/java/org/apache/nifi/web/api/dto/DtoFactory.java
@@ -3544,6 +3544,7 @@ public final class DtoFactory {
dto.setId(node.getIdentifier());
dto.setType("EVENT");
dto.setEventType(node.getEventType().toString());
+ dto.setComponentType(node.getComponentType());
dto.setTimestamp(new Date(node.getTimestamp()));
dto.setMillis(node.getTimestamp());
dto.setFlowFileUuid(node.getFlowFileUuid());
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/state/lineage/index.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/state/lineage/index.ts
index b59d1eb6cd..cb066e92cf 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/state/lineage/index.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/state/lineage/index.ts
@@ -36,6 +36,7 @@ export interface LineageNode {
clusterNodeIdentifier: string;
type: string;
eventType: string;
+ componentType?: string;
millis: number;
timestamp: string;
}
diff --git
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/ui/provenance-event-listing/provenance-event-table/lineage/lineage.component.ts
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/ui/provenance-event-listing/provenance-event-table/lineage/lineage.component.ts
index 747d02491c..490375fd25 100644
---
a/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/ui/provenance-event-listing/provenance-event-table/lineage/lineage.component.ts
+++
b/nifi-frontend/src/main/frontend/apps/nifi/src/app/pages/provenance/ui/provenance-event-listing/provenance-event-table/lineage/lineage.component.ts
@@ -851,29 +851,38 @@ export class LineageComponent implements OnInit {
})
.each(function (this: any, d: any) {
const label: any = d3.select(this);
+ const lines: string[] = [];
+
if (d.eventType === 'CONTENT_MODIFIED' || d.eventType ===
'ATTRIBUTES_MODIFIED') {
- const lines: string[] = [];
if (d.eventType === 'CONTENT_MODIFIED') {
lines.push('CONTENT');
} else {
lines.push('ATTRIBUTES');
}
lines.push('MODIFIED');
-
- // append each line
- lines.forEach((line) => {
- label
- .append('tspan')
- .attr('x', '0')
- .attr('dy', '1.2em')
- .text(function () {
- return line;
- });
- });
- label.attr('transform', 'translate(10,-14)');
} else {
- label.text(d.eventType).attr('x', 10).attr('y', 4);
+ lines.push(d.eventType);
+ }
+
+ // add component type if available
+ if (d.componentType) {
+ lines.push(d.componentType);
}
+
+ // append each line
+ lines.forEach((line) => {
+ label
+ .append('tspan')
+ .attr('x', '0')
+ .attr('dy', '1.2em')
+ .text(function () {
+ return line;
+ });
+ });
+
+ // adjust vertical position based on number of lines
+ const yOffset = lines.length > 1 ? -7 * lines.length : -4;
+ label.attr('transform', `translate(10,${yOffset})`);
});
}