[ 
https://issues.apache.org/jira/browse/NIP-7?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

David Handermann updated NIP-7:
-------------------------------
    Description: 
h1. Motivation

The framework 
[AuditService|https://github.com/apache/nifi/blob/main/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/admin/service/AuditService.java]
 interface supports storage and retrieval of Flow Configuration History Actions 
using a local persistence implementation based on JetBrains Xodus. The 
implementation supports viewing changes within the NiFi application using the 
Flow Configuration History screen, but does not provide an option to send 
Action information to other destinations at the time the Action occurs.

Introducing a new Flow Action Reporter interface as a framework extension 
interface would support external tracking through custom solutions. The Flow 
Action Reporter interface should be limited to receiving flow action objects, 
supporting external export of Flow Configuration History. A new framework 
extension enables low-latency export of security-relevant events with a narrow 
set of application changes required.
h1. Scope

The new Flow Action Reporter interface should be defined in the 
{{nifi-framework-api}} module as opposed to the {{nifi-api}}. The 
{{nifi-framework-api}} does not have the same level of compatibility 
requirements as the public {{nifi-api}}, but provides sufficient stability of 
framework components. The Flow Action Reporter would follow the same pattern as 
the Status History Repository and Authorizer interfaces, both of which are 
located in the {{nifi-framework-api}}. Defining the Flow Action Reporter 
interface as an extension will require changes to extension loading, and 
adjustments to {{AuditService}} references.

The {{Action}} interface includes the authenticated user identity, but does not 
include additional details from the HTTP request, such as the client address or 
user agent. This information is important to provide a complete description of 
the context related to flow configuration changes. The {{nifi-web-security}} 
module builds on Spring Security and makes some of the HTTP information 
available, requiring additional changes to support associating Flow Actions 
with HTTP request attributes.
h1. Compatibility

Introducing the Flow Action Reporter as a new framework extension will maintain 
compatibility with existing deployments and will not require a new major 
version. The default behavior will continue to work based on the JetBrains 
Xodus repository without requiring any new configuration properties.
h1. Description

The Flow Action Reporter interface should be defined in the 
{{nifi-framework-api}} module and support the following minimum methods:

1. void onConfigured(FlowActionReporterConfigurationContext context)
2. void reportFlowActions(Collection<FlowAction> flowActions)
3. void preDestruction()

The {{onConfigured()}} method enables implementations to initialize 
collaborating components, such as network client services. The 
{{preDestruction()}} method enables implementations to close network client 
services or other resources. The {{FlowActionReporterConfigurationContext}} 
should include a method for retrieving an optional {{SSLContext}} loaded from 
application security properties, enabling TLS communication with external 
services when required.

The {{reportFlowActions()}} method serves as the primary method for receiving 
Flow Actions. The method does not return any status or support any checked 
exceptions, indicating that the framework does not support tracking or retrying 
action reporting. The {{FlowAction}} object should be defined in the 
{{nifi-framework-api}} as an interface similar to the {{Action}} interface in 
{{nifi-api}}. The {{FlowAction}} interface should include additional properties 
for relevant HTTP request information, and provide a more generic structure for 
Action Details as opposed to the current class and subclass hierarchy. 
Following an approached based on a Map aligns with other conventions like 
FlowFile attributes, making it easier for implementations to handle new 
properties. The framework implementation will be responsible for translating 
{{Action}} objects to {{FlowAction}} objects prior to calling 
{{reportFlowActions()}}.

Instances of the Flow Action Reporter will be loaded using standard NAR bundle 
packaging.

The Flow Action Reporter will be configured using a new application property in 
{{nifi.properties}} that specifies the full class name to be loaded.
h1. Verification

Verifying the changes should include a combination of unit tests and system 
tests. Unit tests should cover localized behavior changes, and a new system 
test should exercise a custom implementation.
h1. Alternatives

The first alternative to a narrow Flow Action Reporter is a complete Flow 
Action Repository extension. This approach would follow the pattern of other 
Repository extension interfaces, but would require more substantial work to 
implement a custom solution. Managing the lifecycle of Flow Actions requires 
additional resource considerations, outside the scope of simple reporting. 
Although custom repository implementations could chose not to implement certain 
methods, such an approach would break the behavior of the Flow Configuration 
History screen and corresponding REST API. Introducing the scoped Flow Action 
Reporter does not preclude future improvements to support a complete Flow 
Action Repository.

The second alternative to a new Flow Action Reporter is using a custom 
Reporting Task to retrieve flow changes. Although this approach could be 
implemented as an extension within current framework capabilities, it has 
several limitations. The Flow Configuration History allows an authorized user 
to purge the history, which could cause a Reporting Task to miss relevant 
actions. In addition, a Reporting Task requires periodic invocation, 
introducing potential latency for action reporting. Reporting Tasks are also 
user-facing extensions as opposed to framework extensions. With the goal of 
externalized action tracking, a framework extension provides better alignment 
as an infrastructure concern.

  was:
h1. Motivation

The framework 
[AuditService|https://github.com/apache/nifi/blob/main/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/admin/service/AuditService.java]
 interface supports storage and retrieval of Flow Configuration History Actions 
using a local persistence implementation based on JetBrains Xodus. The 
implementation supports viewing changes within the NiFi application using the 
Flow Configuration History screen, but does not provide an option to send 
Action information to other destinations at the time the Action occurs.

Introducing a new Flow Action Reporter interface as a framework extension 
interface would support external tracking through custom solutions. The Flow 
Action Reporter interface should be limited to receiving flow action objects, 
supporting external export of Flow Configuration History. A new framework 
extension enables low-latency export of security-relevant events with a narrow 
set of application changes required.
h1. Scope

The new Flow Action Reporter interface should be defined in the 
{{nifi-framework-api}} module as opposed to the {{{}nifi-api{}}}. The 
{{nifi-framework-api}} does not have the same level of compatibility 
requirements as the public {{{}nifi-api{}}}, but provides sufficient stability 
of framework components. The Flow Action Reporter would follow the same pattern 
as the Status History Repository and Authorizer interfaces, both of which are 
located in the {{{}nifi-framework-api{}}}. Defining the Flow Action Reporter 
interface as an extension will require changes to extension loading, and 
adjustments to {{AuditService}} references.

The {{Action}} interface includes the authenticated user identity, but does not 
include additional details from the HTTP request, such as the client address or 
user agent. This information is important to provide a complete description of 
the context related to flow configuration changes. The {{nifi-web-security}} 
module builds on Spring Security and makes some of the HTTP information 
available, requiring additional changes to support associating Flow Actions 
with HTTP request attributes.
h1. Compatibility

Introducing the Flow Action Reporter as a new framework extension will maintain 
compatibility with existing deployments and will not require a new major 
version. The default behavior will continue to work based on the JetBrains 
Xodus repository without requiring any new configuration properties.
h1. Description

The Flow Action Reporter interface should be defined in the 
{{nifi-framework-api}} module and support the following minimum methods:

1. void onConfigured(FlowActionReporterConfigurationContext context)
2. void reportFlowActions(Collection<FlowAction> flowActions)
3. void preDestruction()

The {{onConfigured()}} method enables implementations to initialize 
collaborating components, such as network client services. The 
{{preDestruction()}} method enables implementations to close network client 
services or other resources. The {{FlowActionReporterConfigurationContext}} 
should include a method for retrieving an optional {{SSLContext}} loaded from 
application security properties, enabling TLS communication with external 
services when required.

The {{reportFlowActions()}} method serves as the primary method for receiving 
Flow Actions. The method does not return any status or support any checked 
exceptions, indicating that the framework does not support tracking or retrying 
action reporting. The {{FlowAction}} object should be defined in the 
{{nifi-framework-api}} as an interface similar to the {{Action}} interface in 
{{{}nifi-api{}}}. The {{FlowAction}} interface should include additional 
properties for relevant HTTP request information, and provide a more generic 
structure for Action Details as opposed to the current class and subclass 
hierarchy. Following an approached based on a Map aligns with other conventions 
like FlowFile attributes, making it easier for implementations to handle new 
properties. The framework implementation will be responsible for translating 
{{Action}} objects to {{FlowAction}} objects prior to calling 
{{{}reportFlowActions(){}}}.

Instances of the Flow Action Reporter will be loaded using standard NAR bundle 
packaging.

The Flow Action Reporter will be configured using a new application property in 
{{nifi.properties}} that specifies the full class name to be loaded.
h1. Verification

Verifying the changes should include a combination of unit tests and system 
tests. Unit tests should cover localized behavior changes, and a new system 
test should exercise a custom implementation.
h1. Alternatives

The first alternative to a narrow Flow Action Reporter is a complete Flow 
Action Repository extension. This approach would follow the pattern of other 
Repository extension interfaces, but would require more substantial work to 
implement a custom solution. Managing the lifecycle of Flow Actions requires 
additional resource considerations, outside the scope of simple reporting. 
Although custom repository implementations could chose not to implement certain 
methods, such an approach would break the behavior of the Flow Configuration 
History screen and corresponding REST API. Introducing the scoped Flow Action 
Reporter does not preclude future improvements to support a complete Flow 
Action Repository.

The second alternative to a new Flow Action Reporter is using a custom 
Reporting Task to retrieve flow changes. Although this approach could be 
implemented as an extension within current framework capabilities, it has 
several limitations. The Flow Configuration History allows an authorized user 
to purge the history, which could cause a Reporting Task to miss relevant 
actions. In addition, a Reporting Task requires periodic invocation, 
introducing potential latency for action reporting. Reporting Tasks are also 
user-facing extensions as opposed to framework extensions. With the goal of 
externalized action tracking, a framework extension provides better alignment 
as an infrastructure concern.


> Add Flow Action Reporter as Framework Extension
> -----------------------------------------------
>
>                 Key: NIP-7
>                 URL: https://issues.apache.org/jira/browse/NIP-7
>             Project: NiFi Improvement Proposal
>          Issue Type: New Feature
>            Reporter: David Handermann
>            Assignee: David Handermann
>            Priority: Major
>
> h1. Motivation
> The framework 
> [AuditService|https://github.com/apache/nifi/blob/main/nifi-framework-bundle/nifi-framework/nifi-administration/src/main/java/org/apache/nifi/admin/service/AuditService.java]
>  interface supports storage and retrieval of Flow Configuration History 
> Actions using a local persistence implementation based on JetBrains Xodus. 
> The implementation supports viewing changes within the NiFi application using 
> the Flow Configuration History screen, but does not provide an option to send 
> Action information to other destinations at the time the Action occurs.
> Introducing a new Flow Action Reporter interface as a framework extension 
> interface would support external tracking through custom solutions. The Flow 
> Action Reporter interface should be limited to receiving flow action objects, 
> supporting external export of Flow Configuration History. A new framework 
> extension enables low-latency export of security-relevant events with a 
> narrow set of application changes required.
> h1. Scope
> The new Flow Action Reporter interface should be defined in the 
> {{nifi-framework-api}} module as opposed to the {{nifi-api}}. The 
> {{nifi-framework-api}} does not have the same level of compatibility 
> requirements as the public {{nifi-api}}, but provides sufficient stability of 
> framework components. The Flow Action Reporter would follow the same pattern 
> as the Status History Repository and Authorizer interfaces, both of which are 
> located in the {{nifi-framework-api}}. Defining the Flow Action Reporter 
> interface as an extension will require changes to extension loading, and 
> adjustments to {{AuditService}} references.
> The {{Action}} interface includes the authenticated user identity, but does 
> not include additional details from the HTTP request, such as the client 
> address or user agent. This information is important to provide a complete 
> description of the context related to flow configuration changes. The 
> {{nifi-web-security}} module builds on Spring Security and makes some of the 
> HTTP information available, requiring additional changes to support 
> associating Flow Actions with HTTP request attributes.
> h1. Compatibility
> Introducing the Flow Action Reporter as a new framework extension will 
> maintain compatibility with existing deployments and will not require a new 
> major version. The default behavior will continue to work based on the 
> JetBrains Xodus repository without requiring any new configuration properties.
> h1. Description
> The Flow Action Reporter interface should be defined in the 
> {{nifi-framework-api}} module and support the following minimum methods:
> 1. void onConfigured(FlowActionReporterConfigurationContext context)
> 2. void reportFlowActions(Collection<FlowAction> flowActions)
> 3. void preDestruction()
> The {{onConfigured()}} method enables implementations to initialize 
> collaborating components, such as network client services. The 
> {{preDestruction()}} method enables implementations to close network client 
> services or other resources. The {{FlowActionReporterConfigurationContext}} 
> should include a method for retrieving an optional {{SSLContext}} loaded from 
> application security properties, enabling TLS communication with external 
> services when required.
> The {{reportFlowActions()}} method serves as the primary method for receiving 
> Flow Actions. The method does not return any status or support any checked 
> exceptions, indicating that the framework does not support tracking or 
> retrying action reporting. The {{FlowAction}} object should be defined in the 
> {{nifi-framework-api}} as an interface similar to the {{Action}} interface in 
> {{nifi-api}}. The {{FlowAction}} interface should include additional 
> properties for relevant HTTP request information, and provide a more generic 
> structure for Action Details as opposed to the current class and subclass 
> hierarchy. Following an approached based on a Map aligns with other 
> conventions like FlowFile attributes, making it easier for implementations to 
> handle new properties. The framework implementation will be responsible for 
> translating {{Action}} objects to {{FlowAction}} objects prior to calling 
> {{reportFlowActions()}}.
> Instances of the Flow Action Reporter will be loaded using standard NAR 
> bundle packaging.
> The Flow Action Reporter will be configured using a new application property 
> in {{nifi.properties}} that specifies the full class name to be loaded.
> h1. Verification
> Verifying the changes should include a combination of unit tests and system 
> tests. Unit tests should cover localized behavior changes, and a new system 
> test should exercise a custom implementation.
> h1. Alternatives
> The first alternative to a narrow Flow Action Reporter is a complete Flow 
> Action Repository extension. This approach would follow the pattern of other 
> Repository extension interfaces, but would require more substantial work to 
> implement a custom solution. Managing the lifecycle of Flow Actions requires 
> additional resource considerations, outside the scope of simple reporting. 
> Although custom repository implementations could chose not to implement 
> certain methods, such an approach would break the behavior of the Flow 
> Configuration History screen and corresponding REST API. Introducing the 
> scoped Flow Action Reporter does not preclude future improvements to support 
> a complete Flow Action Repository.
> The second alternative to a new Flow Action Reporter is using a custom 
> Reporting Task to retrieve flow changes. Although this approach could be 
> implemented as an extension within current framework capabilities, it has 
> several limitations. The Flow Configuration History allows an authorized user 
> to purge the history, which could cause a Reporting Task to miss relevant 
> actions. In addition, a Reporting Task requires periodic invocation, 
> introducing potential latency for action reporting. Reporting Tasks are also 
> user-facing extensions as opposed to framework extensions. With the goal of 
> externalized action tracking, a framework extension provides better alignment 
> as an infrastructure concern.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to