Nikita Pande created AMBARI-26318:
-------------------------------------

             Summary: Persist UI console errors
                 Key: AMBARI-26318
                 URL: https://issues.apache.org/jira/browse/AMBARI-26318
             Project: Ambari
          Issue Type: Improvement
          Components: ambari-web
            Reporter: Nikita Pande


Analysis of current code of 'error_handler_controller.js' of ambari-web:

It has *Limited Persistence and Scalability:*
 * Relying heavily on {{localStorage}} is a significant limitation. 
{{localStorage}} has a small storage capacity, is synchronous (potentially 
blocking the UI thread), and is not suitable for complex data structures. This 
makes it unsuitable for production applications where you need to store a large 
volume of error logs.
 * The custom logic to limit the size of {{localStorage}} is fragile and can 
lead to data loss.
 * The current approach lacks a robust, scalable server-side logging mechanism. 
While it sends errors to the server via {{{}postUserPref{}}}, it doesn't 
specify a proper logging infrastructure like a dedicated logging service.

Potential solution to the problem 
 * *Client-Side Persistence: IndexedDB:*

 ** *Why:*
 *** Provides significantly more storage than {{{}localStorage{}}}.
 *** Asynchronous operations prevent UI thread blocking.
 *** Supports structured data storage, ideal for complex error objects.
 ** *Implementation:*
 *** Utilize IndexedDB to store the error queue locally.
 *** Create an object store to hold error objects with relevant metadata 
(timestamp, user ID, etc.).
 *** Implement versioning for the IndexedDB schema to handle future updates.
 *** Use a library to wrap IndexedDB calls, to handle cross browser 
inconsistencies.
 *** Implement a strategy to remove old errors, when the database reaches a 
certain size.
 * *Robust Server-Side Logging Infrastructure:*

 ** *Why:*
 *** Centralized log aggregation for comprehensive analysis.
 *** Scalability to handle large volumes of error logs.
 *** Powerful search and filtering capabilities.
 *** Alerting and monitoring features.
 ** *Implementation:*
 *** *Choose a Logging Service: (Connectors to support this)*
 **** *Cloud-based:* AWS CloudWatch Logs, Google Cloud Logging, Azure Monitor 
Logs, Datadog, Sentry, Rollbar, LogRocket.
 **** *Self-hosted:* ELK stack (Elasticsearch, Logstash, Kibana), Graylog.
 *** *API Endpoint:*
 **** Create a dedicated API endpoint (e.g., {{{}/api/logs/errors{}}}) to 
receive error logs from the client.
 **** Implement proper authentication and authorization for the endpoint.
 **** Implement rate limiting to prevent abuse.
 *** *Log Processing:*
 **** Process incoming error logs and store them in the chosen logging service.
 **** Add metadata to the logs, such as server-side context, environment 
information, and correlation IDs.
 *** *Correlation ID:*
 **** Generate a unique correlation ID on the client-side when an error occurs.
 **** Include the correlation ID in the error log sent to the server.
 **** Store the correlation ID in IndexedDB.
 **** This allows you to link client-side errors with server-side logs for 
comprehensive debugging.

 



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to