Skip to content

Latest commit

 

History

History
201 lines (161 loc) · 7.92 KB

README_IT.md

File metadata and controls

201 lines (161 loc) · 7.92 KB

Monitoraggio COVID-19 Italia | #IoRestoACasa

Awesome Open Source Love Made with Pthon

alt_text

English Version here

Una semplice dashboard per la visualizzazione e il monitoraggio dei dati ufficiali sulla pandemia da COVID-19 rilasciati giornalmente dal Dipartimento della Protezione Civile

La WebApp è pubblicata su Heroku qui

Dati ufficiali sulla pandemia: repository ufficiale della proezione civile

Dati ufficiali sui vaccini: repository ufficiale Developers Italia

Per gli sviluppatori

La WebApp gira su Python3.8+, legge i dati da mongoDB e usa un server Flask e gunicorn davanti. Viene usato Flask-babel per la traduzione italiana dell'app, poiché l'inglese è scelto come lingua di default. Lo script make_pot.sh crea i file necessari a babel per le traduzioni. Una versione Batch è fornita per gli utenti Windows. La lingua di visualizzazione dipenderà dalla richiesta effettuata dal client (lingua del browser o del sistema operativo).

Il front-end sta in covidashit/templates e usa JavaScript per costruire la chart che è creata con HighCharts.

Perché l'app funzioni è necessario popolare un database mongo (qui per documentazione mongoDB su creazione cluster Atlas). Inoltre, le collezioni del DB devono essere aggiornate giornalmente. Per questo motivo, l'app contiene delle API che vengono chiamate da un GitHub Webhook che viene lanciato quando il branch master della repository della PC viene aggiornato (vedi GitHub workflow nel mio fork della repo della PC qui). Infine, bisogna settare i vari webhooks sul fork della repo della PC per le seguenti API:

  • POST /update/national
  • POST /update/national/series
  • POST /update/national/trends
  • POST /update/regional
  • POST /update/regional/breakdown
  • POST /update/regional/series
  • POST /update/regional/trends
  • POST /update/provincial
  • POST /update/provincial/breakdown
  • POST /update/provincial/series
  • POST /update/provincial/trends
  • POST /update/vax/
  • POST /update/vax/summary

Setup locale (DEV)

  • creazione e attivazione di un virtual environment (seguire questi passaggi)
  • installazione dei requisiti in requirements.txt

Il file .env contiene una serie di variabile d'ambiente necessarie al funzionamento della webapp.
Prima di avviare il server Flask, ma dopo aver attivato il virtual environment e settato le variabili nel .env file, come ad esempio il MONGO_URI e i vari nomi delle collezioni (a discrezione dello sviluppatore), sarà necessario popolare il DB tramite la Flask CLI inclusa.

Dopo aver clonato la repo e attivato il virtual environment:

flask create-collections

Questa, tramite una semplicissima procedura ETL, creerà e popolerà le collezioni su DB con i dati ufficiali del Dipartimento della Protezione Civile. Successivamente, avviare il worker:

celery -A celery_worker.celery worker

Infine, lanciare l'application server in una nuova shell:

flask run

Flask sarà in ascolto all'url http://127.0.0.1:5000

Setup locale (PROD)

Nel .env file settare il valore di APPLICATION_ENV con production.

Procfile

Per testare la corretta configurazione del Procfile usare la CLI fornita da heroku tramite

heroku local

Flask sarà in ascolto all'url http://127.0.0.1:5000

Docker

Per avviare il container:

docker-compose up -d

Flask sarà in ascolto all'url [http://127.0.0.1:PORT] dove PORT viene settata in .env.

Deployment su Heroku

L'app puo' essere pubblicata su Heroku sia come docker container che semplicemente utilizzando il Procfile.

Plot API

L'app fornisce delle API per produrre i plot delle variabili con matplotlib. Puo' tornare un JSON response con l'immagine codificata in base64 oppure il contenuto in byte per scaricare il file.

Resource URL

https://www.covidash.it/api/plot

Query parameters

Data type

data_type = [national, regional, provincial]

Var name

varname = [nuovi_positivi, ingressi_terapia_intensiva, deceduti_g, tamponi_g,
 totale_ospedalizzati_g, nuovi_positivi_ma, deceduti_g_ma, 
 ingressi_terapia_intensiva_ma, tamponi_g_ma, totale_ospedalizzati_g_ma, 
 totale_positivi, terapia_intensiva, ricoverati_con_sintomi, 
 totale_ospedalizzati, isolamento_domiciliare, totale_casi, deceduti, 
 tamponi, dimessi_guariti]

se data_type = [national, regional]

varname = [nuovi_positivi, nuovi_positivi_ma, totale_casi]

se data_type = [provincial]

Area (regions)

area = [Abruzzo, Basilicata, Calabria, Campania, Emilia-Romagna, Friuli Venezia Giulia,
 Lazio, Liguria, Lombardia, Marche, Molise, Piemonte, Puglia, Sardegna, 
 Sicilia, Toscana, P.A. Bolzano, P.A. Trento, Umbria, Valle d'Aosta, Veneto]

Area (provinces)

area = [Chieti, L'Aquila, Pescara, Teramo, Matera, Potenza, Catanzaro, Cosenza,
Crotone, Reggio di Calabria, Vibo Valentia, Avellino, Benevento, Caserta, 
Napoli, Salerno, Bologna, Ferrara, Forlì-Cesena, Modena, Parma, Piacenza, 
Ravenna, Reggio nell'Emilia, Rimini, Gorizia, Pordenone, Trieste, Udine, 
Frosinone, Latina, Rieti, Roma, Viterbo, Genova, Imperia, La Spezia, Savona, 
Bergamo, Brescia, Como, Cremona, Lecco, Lodi, Mantova, Milano, 
Monza e della Brianza, Pavia, Sondrio, Varese, Ancona, Ascoli Piceno, Fermo, 
Macerata, Pesaro e Urbino, Campobasso, Isernia, Alessandria, Asti, Biella, 
Cuneo, Novara, Torino, Verbano-Cusio-Ossola, Vercelli, Bari, 
Barletta-Andria-Trani, Brindisi, Lecce, Foggia, Taranto, Cagliari, Nuoro, 
Sassari, Sud Sardegna, Agrigento, Caltanissetta, Catania, Enna, Messina, 
Palermo, Ragusa, Siracusa, Trapani, Arezzo, Firenze, Grosseto, Livorno, Lucca,
Massa Carrara, Pisa, Pistoia, Prato, Siena, Perugia, Terni, Aosta, Belluno, 
Padova, Rovigo, Treviso, Venezia, Verona, Vicenza]

Examples

Plot nazionale

GET /api/plot?data_type=national&varname=<varname>

Plot regionale

GET /api/plot?data_type=regional&area=<region>&varname=<varname>

Plot provinciale

GET /api/plot?data_type=provincial&area=<province>&varname=[nuovi_positivi,nuovi_positivi_ma,totale_casi]>

Immagine codififcata in base64-encoded
JSON
Request
curl --request GET \ 
     --url 'https://www.covidash.it/api/plot?data_type=national&varname=totale_casi'
Response
{
    "errors":[],
    "img":"iVBORw0KGgoAA...",
    "status":"ok"
}

Per scaricare il file

Request
curl --request GET \
     --url 'https://www.covidash.it/api/plot?data_type=national&varname=totale_casi&download=true' \
     --output plot.png

Il plot verrà salvato in ./plot.png

Anteprima plot

alt_text

Donazione

Se il progetto ti piace o se ti ho fatto risparmiare qualche linea di codice, sentiti libero di offrirmi un caffé. Grazie!

paypal