Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The following table shows how entities from Conceptual diagram (see Conceptual model page) are mapped to the solution components:

Conceptual diagram entitySolution component
Audit Logs interceptormod-audit-logs-interceptor, Audit logs interceptor library
Audit Log storageKafka
Audit Logs aggregatormod-circulation-audit-logs-aggregator
Materialized viewElasticSearch
Audit Reports providermod-circulation-audit-logs-provider
Folio UIFolio UI


Key decisions

  1. ElasticSearch should be used to store data because of:
         - Audit logs may contain 100s of millions of records
         - Audit data is immutable. Audit records shouldn't be updated. The records should be deleted/archived in batches once they expire.
         - A full-text search is required to be used to find Audit records.
         - It is required to return the total number of records found for a search query. The number should be included in response to the original query. Query response time should be less than a few seconds. 

  2. mod-audit-log-interceptor should be implemented as a separate module. It should be deployed as a side-car with modules that contain Audit data. It should work as a proxy that intercepts these modules requests/responses.

Transient architecture

Drawio
bordertrue
diagramNameCirculation Audit logs (Transient) - High level solution structure
simpleViewerfalse
width
linksauto
tbstyletop
lboxtrue
diagramWidth841
revision1

...

The following table shows how entities from Conceptual diagram (see Conceptual model page) are mapped to the solution components:

Conceptual diagram entitySolution component
Audit Logs interceptorAudit logs interceptor library
Audit Log storagemod-pubsub, Kafka
Audit Logs aggregatormod-circulation-audit-logs-aggregator
Materialized viewPostgreSQL
Audit Reports providermod-circulation-audit-logs-provider
Folio UIFolio UI