Skip to content

Latest commit

 

History

History
35 lines (32 loc) · 2.26 KB

a3m.rst

File metadata and controls

35 lines (32 loc) · 2.26 KB

a3m

This is a system context diagram showing how a3m, the software system, fits into the world around it. It is also a container diagram showing the high-level technical building blocks.

.. uml::

    @startuml
    !theme spacelab
    !include <C4/C4_Container>
    Person(archivist, "Digital Archivist", "A digital archivist utilizing a3m manages, preserves, and curates digital collections, ensuring their long-term accessibility and integrity through systematic archival processes and state-of-the-art digital preservation techniques.")
    System_Boundary(a3m, "a3m") {
        Container(a3m_client, "Client", "Python", "The client can operate as a command-line interface or a gRPC client over the wire.")
        Container(a3m_api, "gRPC API", "Python", "The gRPC server is a core component of the a3m server, providing processing status details and basic actions such as transfer submission.")
        Container(a3m_engine, "Workflow engine", "Python", "The workflow engine is a core component that orchestrates the tasks needed during processing by looking up the workflow document.")
        Container(a3m_workflow, "Workflow document", "JSON-encoded DSL", "It describes the processing steps.")
        Container(a3m_pool, "Thread pool", "Python", "It maintains a pool of system threads used to execute the tasks defined in the workflow document.")
        Container(a3m_client_modules, "Client modules", "Python", "Executable modules, e.g. file format identification, normalization, storage, etc...")
        ContainerDb(a3m_db, "Database", "SQLite", "The database is used to store processing state and information about the packages.")
    }
    System_Ext(blobstore, "S3", "The blobstore used to store AIPs. It can be configured to notify other systems for further work, e.g. reporting.")
    Rel(archivist, a3m_client, "Uses")
    Rel(a3m_client, a3m_api, "Uses", "gRPC")
    Rel(a3m_api, a3m_engine, "Uses", "Internal")
    Rel_Left(a3m_engine, a3m_workflow, "Reads workflow from")
    Rel_Neighbor(a3m_engine, a3m_pool, "Runs tasks with")
    Rel_Neighbor(a3m_engine, a3m_db, "Reads and writes to")
    Rel(a3m_client_modules, a3m_db, "Reads and writes to")
    Rel(a3m_pool, a3m_client_modules, "Executes")
    Rel(a3m_client_modules, blobstore, "Sends AIPs")
    SHOW_LEGEND()
    @enduml