bullish/README.md

161 lines
4.2 KiB
Markdown
Raw Permalink Normal View History

<div align="center">
<img src="./frontend/src/assets/logo.png" width="250">
<h1>
Bullish
</h1>
<h4>A simple webapp to explore Bhav Copy Equity data</h4>
</div>
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
Backend:
[![Docker Pulls - Backend](https://img.shields.io/docker/pulls/codingcoffee/bullish-backend)](https://hub.docker.com/r/codingcoffee/bullish-backend)
[![Docker Image Size Backend (tag)](https://img.shields.io/docker/image-size/codingcoffee/bullish-backend?sort=date)](https://hub.docker.com/r/codingcoffee/bullish-backend/tags?name=latest)
Frontend
[![Docker Pulls - Frontend](https://img.shields.io/docker/pulls/codingcoffee/bullish-frontend)](https://hub.docker.com/r/codingcoffee/bullish-frontend)
[![Docker Image Size Frontend (tag)](https://img.shields.io/docker/image-size/codingcoffee/bullish-frontend?sort=date)](https://hub.docker.com/r/codingcoffee/bullish-frontend/tags?name=latest)
## Usage
- Local setup is supported via Docker Compose
![Development Architecture](.assets/images/bullish-dev-2021-02-12.png "Development Architecture")
```sh
docker-compose up -d
```
### Build
- Build images for dev
```sh
docker-compose build
```
- Build images for prod
```sh
./prod-build.sh
```
### Logging
To get the logs of all containers
```sh
docker logs -f
```
To get the logs of a particular container
```sh
docker logs -f container-name
```
Here `container-name` can be either of `backend`, `frontend`, `redis`,
`postgresql`, `rqworker` or `rqscheduler`.
### Debugging
- To goto Django's shell to debug you may use
```sh
docker-compose exec backend python manage.py shell
```
- To create migrations
```sh
docker-compose exec backend python manage.py makemigrations
```
- To run migrate
```sh
docker-compose exec backend python manage.py migrate
```
- To run unit tests
```sh
docker-compose exec backend python manage.py test
```
Similarly all django commands can be run this way.
## Endpoints
There are 5 available endpoints:
1. Empty Response Endpoint - to intentionally get an empty response from the server
2. Directly from BSE - fetchs the data directly from the BSE website
3. Postgres Endpoint - fetches the data from Postgres
4. Redis Cache and Redis Cache v2 - both fetch data from redis, however there is
a slight differece in the way they store data.
- In the 1st case a LIST is stored maintainig the list of stocks for a given
day, and a HASHMAP for every stock is stored
- In the v2 endpoint, the entire JSON response for a day is stringified and
stored
The reason for implemnting two different endpoints, was to just check the
response times.
## Deploy
The recommended way for deploy is on Kubernetes. You can find the related files
![Production Architecture](.assets/images/bullish-prod-2021-02-12.png "Production Architecture")
in `k8s` directory.
Before deploy create a `secret.yaml` file in `k8s/app`, with base 64 encoded
secrets. A sample file named `sample-secret.yaml` has been committed listing all
the required variables. Change the secrets preset in the file before using it.
- One time deploy
```sh
# Deploy ingress
kubectl apply -f k8s/ingress/ingress-https.yaml
# Deploy secrets
kubectl apply -f k8s/app/secret.yaml
# Deploy Postgres and Redis DB
kubectl apply -f k8s/app/redis.yaml
kubectl apply -f k8s/app/postgres.yaml
# Deploy Backend
kubectl apply -f k8s/app/backend.yaml
kubectl apply -f k8s/app/rqworker.yaml
kubectl apply -f k8s/app/rqscheduler.yaml
# Deploy Frontend
kubectl apply -f k8s/app/frontend.yaml
```
- Subsequent deploys can be done by rolloing out a restart since all pods have a `imagePullPolicy` set to `Always`
```sh
# Push containers to Docker Hub and Deploy to K8s
./prod-deploy.sh
```
## Contribution
Have better suggestions to optimize the image? Found some typos? Go ahead and send in a Pull Request! Contributions of any kind welcome!
## License
The code in this repository has been released under the [GNU Affero General Public License v3](https://www.gnu.org/licenses/agpl-3.0.en.html)
## Attributions
- [Bullish icon](https://www.flaticon.com/free-icon/bull-side-view-black-animal-shape_30480) made by [Freepik](https://www.freepik.com) from [Flaticon](https://www.flaticon.com)