Skip to content

Architecture

Mike Simms edited this page Apr 13, 2022 · 4 revisions

The software architecture makes it possible to use this system with different front-end technologies. Also, computationally expensive analysis tasks are kept separate from the main application, communicating via RabbitMQ.

Being a web app, it requires a web framework. I have tried to keep the design flexible enough to support multiple frameworks, to both appease different audiences and also allow the software to be relevant when the fashion in web frameworks inevitably changes. To this end, it currently supports cherrypy and flask with the implementation details for each being isolated in their own modules. A wsgi front end for cherrypy is also provided.

Notable modules:

  • App.py contains the logic for handling each page and is framework-agnostic. The page handlers for each framework call into this module.
  • Api.py contains all of the API handlers and is also framework-agnostic. Isolating this in its own module also facilitates deploying the API as a microservice.
  • Session.py contains the session management code. It has an abstract base class along with subclasses for cherrypy, flask, as well as a custom session manager.

Computationally expensive tasks are isolated from the main web app by means of the RabbitMQ messaging service. This allows the number of analysis clients to be easily expanded to meet the needs of the application. In the future, analysis clients could also be implemented in other languages, environments, etc. as needs arise.

The software is written in python. It was started in python2 and later converted to python3.

Architecture

Clone this wiki locally