Shiv Deshpande created FINERACT-2438:
----------------------------------------

             Summary: Add Micrometer Observability to Reporting API
                 Key: FINERACT-2438
                 URL: https://issues.apache.org/jira/browse/FINERACT-2438
             Project: Apache Fineract
          Issue Type: Improvement
          Components: Performance, Reports
            Reporter: Shiv Deshpande


*Problem:*
I have been working on and studying the report generation process, contributing 
to the ASF and Mifos community. In high-volume production environments, report 
generation is often a source of performance bottlenecks. I noticed currently 
operators lack visibility into which specific reports are consuming thread 
resources.

The standard Spring Boot metrics (`http.server.requests`) aggregate all 
reporting traffic under the /runreports/\{reportName} endpoint. This makes it 
impossible to distinguish between a fast "Client Listing" HTML view and a 
resource-intensive "General Ledger" PDF export without parsing verbose text 
logs.

*Proposed Solution*
1. Inject MeterRegistry into RunreportsApiResource.
2. Wrap the `processReportRequest` execution logic in a Timer.
3. Expose a new metric named fineract.report.execution, and apply tags to 
distinguish the execution contexts, e.g. name, format, type, status, etc.

This allows operators to set up Prometheus/Grafana alerts for specific heavy 
reports (e.g., "Alert if General Ledger PDF > 30s") and visualize reporting 
load over time.

This observability is an important prerequisite for future modularization 
efforts, such as extracting reporting into a dedicated microservice or sidecar. 
By establishing a clear baseline of execution costs and concurrency patterns 
currently, the community, and the organisations utilizing this feature can make 
data-driven decisions about which specific workloads justify offloading to an 
asynchronous architecture in the future.



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

Reply via email to