updating layout of gn-20 dashboard

This commit is contained in:
dtomlinson
2020-02-20 10:24:14 +00:00
parent e6cc4e59f7
commit 993fe6bfb6
29 changed files with 772 additions and 27933 deletions

View File

@@ -0,0 +1,135 @@
***************************************
Grand National 2020 Countdown Dashboard
***************************************
This repo contains all files for the Grand National 2020 Countdown Dashboard.
.. image:: https://git.nonprod.williamhill.plc/wh_capacity/grandnational-dashboard/uploads/47fdb6cc5b3a6658ee884ab148fb8a29/image.png
:width: 40%
The dashboard is installed on ``sc1uxpremn81`` running in docker.
The dashboard uses ``python`` as an ASGI server, ``css`` for formatting, and ``jQuery`` for front-end scripts.
We use `uvicorn <https://www.uvicorn.org>`_ as an ASGI server and `gunicorn <https://gunicorn.org>`_ to manage the asynchronous workers. We use `bootstrap <https://getbootstrap.com/>`_ for front-end formatting and, `jQuery <https://jquery.com/>`_ for front-end scripts. We use `npm <https://www.npmjs.com>`_, `bower <https://bower.io/>`_ and `poetry <https://python-poetry.org>`_ to manage dependencies.
Optionally we can use `docker <https://www.docker.com/>`_ to orchestrate uvicorn and guvicorn.
Running Locally
===============
Requirements
------------
You will need installed:
- python>=3.6.2
- npm
- docker `(optional)`
on your machine as a pre-requisite. Versions of python lower than 3.6.2 may work, but you will have to delete the ``poetry.lock`` file before installing the python dependencies. Versions lower than 3.6.2 will not come with `venv` - you will need to install an alternative (``virtualenv``) or use ``potery`` to manage the virtual environment for python.
Installation Steps
------------------
Create workspace
^^^^^^^^^^^^^^^^
On your machine clone the repo:
``cd ~``
``git clone https://git.nonprod.williamhill.plc/wh_capacity/grandnational-dashboard.git``
In this folder, create a virtual environment for python:
``cd ~/grandnational-dashboard``
``python3 -m venv gn-dashboard``
Activate this environment:
``source gn-dashboard/bin/activate``
Install Dependencies
^^^^^^^^^^^^^^^^^^^^
Install ``bower`` using ``npm``:
``npm install -g bower``
Install poetry:
``pip install poetry``
Install the node depdencies with ``npm``:
``npm install``
`this reads the dependencies from package.json`.
Install the bower dependencies with ``bower``:
``bower install``
`this reads the dependencies from bower.json`.
Install the python dependencies with poetry:
``poetry install --no-dev``
`this reads the dependencies from pyproject.toml and poetry.lock`
Copy The Large Static Files
^^^^^^^^^^^^^^^^^^^^^^^^^^^
The video used as a banner is too large for gitlab. You should do:
``cd static/assets/videos``
and
``wget http://sc1uxpremn81:9001/static/assets/videos/gn19-short.mp4``.
Alternatively, if the dashboard isn't online, you can download the file manually from confluence:
https://conf.willhillatlas.com/display/CME/Static+Files
Place this video locally in ``static/assets/videos/`` saved as ``gn19-short.mp4``.
Run the Webserver
^^^^^^^^^^^^^^^^^
Manually
""""""""
Running the webserver is done with ``uvicorn``. Go into ``grandnational_dashboard`` and launch uvicorn:
``cd grandnational_dashboard``
``uvicorn main:app``
(The folder name is the same as the repo name. This may be confusing but is intentional when creating a project with poetry without a src folder. The full path you should be in is ``~/grandnational-dashboard/grandnational_dashboard`` and there should be a ``main.py`` file inside this folder.)
Your dashboard should then be available at http://127.0.0.1:8000
Docker
""""""
We can use Docker for deployment. To do this go back to the root of the project and build the docker image from the ``Dockerfile``.
``cd ~/grandnational-dashboard``
``docker build . -t gn-20-dash``
When this has built you can run the container with:
``docker run --rm --name dashboard -p 8000:80 gn-20-dash:latest``
Your dashboard will then be available at http://127.0.0.1:8000.
This docker image runs gunicorn to manage the asynchronous workers. It's scaleable, and will smartly use the resources of the machine it's running on.