Skip to content

Commit

Permalink
feat: setup backend (#14)
Browse files Browse the repository at this point in the history
* feat: setup backend

* feat: fetch data from db

* update compose and git workflow

* fix: add health check

* feat: add .env to gitignore

* feat: add backend to greenframe benchmark

* docs: update readme

---------

Co-authored-by: evebrnd <[email protected]>
Co-authored-by: Eflii <[email protected]>
  • Loading branch information
3 people authored Nov 26, 2024
1 parent e88a58d commit 1fbe480
Show file tree
Hide file tree
Showing 11 changed files with 378 additions and 261 deletions.
2 changes: 2 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
COUCHDB_USER=TO_BE_CHANGED
COUCHDB_PASSWORD=TO_BE_CHANGED
2 changes: 2 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@ jobs:
npm run build
- name: Start frontend
run: |
export COUCHDB_USER="TO_BE_CHANGED"
export COUCHDB_PASSWORD="TO_BE_CHANGED"
docker compose up --detach
- name: Wait for frontend
uses: docker://benel/wait-for-response:1
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
GreenIT-Analysis-cli/
GreenIT-Analysis-cli/
.env
3 changes: 2 additions & 1 deletion .greenframe.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ scenarios:
- path: ./benchmark/consulterMeteo/scenario1.js
name: Consulter la meteo
containers:
- helios-static_hosting-1
- helios-static_hosting-1
- helios-backend-1
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# HELIOS : Réduction de l'impact écologique du service numérique d'un établissement de météorologie et de climatologie
# HELIOS : Réduction de l'impact écologique du service numérique d'un établissement de météorologie et de climatologie

## Choix du sujet
Nous revenons tous deux d'un semestre à l'étranger dans deux pays avec une météo très distincte. En Norvège la météo était particulièrement changeante et extrême par moments. Consulter la météo chaque jour est devenu une habitude, de même que la programmation journalière d'une notification récapitulative.
Expand Down Expand Up @@ -180,3 +180,22 @@ Par ailleurs, nous remarquons que cette consommation ne compte que pour 3% de la
![Impact du prototype](./benchmark/helios_homepage.png)
__Fig.6__ : Consommation de ressources par le navigateur lors de la consultation de la météo dans notre prototype.


## Prototype n°3 : Fonctionnalités pour le scénario prioritaire avec données stockées dans une base de données

Pour la troisième version du prototype, les données sont désormais stockées dans un système de base de données interrogeable à travers une API Web (*CouchDB*).
L'intérêt d'une source de données dynamique est d'une part, à terme, de pouvoir ajouter ou modifier la météo plus facilement, et d'autre part de déporter sur le serveur le filtrage des données pertinentes.

Sur ce deuxième enjeu, on observe dans les mesures (cf. Fig.7) que la charge du réseau entre les deux prototypes concernant la consultation de la météo est sensiblement la même. Ceci est dû à la simplicité de notre application qui ne contient qu'une page à charger. Néanmoins, en supposant que notre application contiendra à terme plusieurs pages et d'autres lots de données, on peut s'attendre à une baisse de la charge du réseau pour l'aff

![](./benchmark/helios_v2.png)
![](./benchmark/helios_v3.png)
__Fig.7__ : Comparaison de l'impact de la consultation de la page de la météo entre les prototypes 2 (en haut) et (3 en bas).

De plus, on peut constater une utilisation du CPU par la base de données, utilisation qui semble par ailleurs continue et plus important qu'auparavant. (cf. Fig.8).

![](./benchmark/helios_backend_v3.png)
__Fig.8__ : Profil dans le temps de l'impact de la base de données lors de la consultation de la météo.

De ces différentes mesures, nous pouvons retenir que l'effet de l'introduction d'une base de données, quoique négligeable, est, pour l'instant, plutôt défavorable d'un point de vue écologique.
Le bilan de ce changement devrait cependant rapidement s'inverser avec l'augmentation de la quantité de données gérées.
Binary file added benchmark/helios_backend_v3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmark/helios_v2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added benchmark/helios_v3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 39 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,42 @@ services:
- ./frontend/dist:/usr/share/nginx/html:ro
- ./settings/nginx.conf:/etc/nginx/conf.d/default.conf:ro
ports:
- 80:80
- 80:80

backend:
image: couchdb:3
ports:
- 5984:5984
environment:
- COUCHDB_USER
- COUCHDB_PASSWORD
healthcheck:
test: curl -f http://localhost:5984/_up || exit 1
interval: 2s
timeout: 3s

accessible_backend:
image: curlimages/curl
entrypoint: ["/bin/sh","-c"]
command:
- |
alias put="curl -X PUT -u '${COUCHDB_USER}:${COUCHDB_PASSWORD}'"
put backend:5984/_node/nonode@nohost/_config/chttpd/enable_cors --data '"true"'
put backend:5984/_node/nonode@nohost/_config/cors/origins --data '"*"'
put backend:5984/helios
put backend:5984/helios/_security --data '{"members":{"roles":[]},"admins":{"roles":["_admin"]}}'
depends_on:
backend:
condition: service_healthy

updated_samples:
image: curlimages/curl
entrypoint: ["/bin/sh","-c"]
volumes:
- ./frontend/public/sample_data.json:/sample_data.json
command:
- |
curl -X POST http://backend:5984/helios/_bulk_docs -H "Content-Type: application/json" -d @/sample_data.json
depends_on:
accessible_backend:
condition: service_completed_successfully
Loading

0 comments on commit 1fbe480

Please sign in to comment.