In this project, I got the chance to demonstrate my proficiency in Python, building a simple web-based dashboard to visualize real-time process data originating from one of the bioreactors.
The data is taken from Bioreactors. These bioreactors are purpose-built for cultivated meat, with a mission to 100x the industry’s capacity by 2035. The Data Systems team in these bioreactors is generally responsible for everything from production, model-based control software to web-based data monitoring applications. This project is to demonstrate my abilities in this domain
In this directory, you'll find a Dockerfile
that defines the image your code will be copied into and installed in. Specifically, your source code will be installed into a Python 3.10 virtual environment as a package via pip, along with any dependencies you've specified in a requirements.txt
file.
You'll also find a compose.yaml
file that defines the container that'll be used to run your code. Specifically, to serve your web-based dashboard in a local browser at http://localhost:8888/, Docker is configured to start the container by executing run-app
, the expected entrypoint for your application.
The data I will be visualizing is in a Postgres database, also configured in compose.yaml
. Credentials to access this database are confidential at the moment. But the file can be used to use another database and configure it.
POSTGRES_HOST
provides the hostPOSTGRES_PORT
provides the portPOSTGRES_USER
provides the userPOSTGRES_PASSWORD
provides the passwordPOSTGRES_DB
provides the database
An example can be found in local.env
. Note that these will be subject to change, so make sure not to hard code these.
The tables in the database:
brx1=# \dt
List of relations
Schema | Name | Type | Owner
--------+--------------------------+-------+------------------
public | CM_HAM_DO_AI1/Temp_value | table | process_trending
public | CM_HAM_PH_AI1/pH_value | table | process_trending
public | CM_PID_DO/Process_DO | table | process_trending
public | CM_PRESSURE/Output | table | process_trending
Each table has the same schema, like so:
brx1=# \d public."CM_HAM_DO_AI1/Temp_value"
Table "public.CM_HAM_DO_AI1/Temp_value"
Column | Type | Collation | Nullable | Default
--------+-----------------------------+-----------+----------+---------
time | timestamp without time zone | | |
value | double precision | | |
Each table contains the following data:
Table | Name | Units |
---|---|---|
CM_HAM_DO_AI1/Temp_value | Temperature | Celsius |
CM_HAM_PH_AI1/pH_value | pH | n/a |
CM_PID_DO/Process_DO | Distilled Oxygen | % |
CM_PRESSURE/Output | Pressure | psi |
Run docker compose up
and navigate your browser to http://localhost:8888/. That's it!
The dashboard allows the user to plot each of these four series (Temperature, pH, Distilled Oxygen, and Pressure) over time.
- Package installs successfully
- Dashboard can be viewed at http://localhost:8888/. It looks good
- Code is high quality, e.g. It follows PEP8. It is it fully type annotated,and there are comments
- User can select the time window
- Added a button to refresh the data without refreshing the page, or auto-refresh the page for the user
- Added a "Download as csv" button for the specific time period