brasil.io
brasil.io copied to clipboard
import_data async
Atualmente existe um script no servidor onde o backend roda, onde é possível atuaizar dados de uma tabela em um dataset - antes disso é preciso subir os dados para o data.brasil.io (de onde o script baixa) e atualizar o data.brasil.io/dataset/<dataset>/_meta/list.html.
Precisamos, de alguma forma, integrar todos esses processos no backend. Eles são divididos nas seguintes tarefas:
- Coletar novos dados (esse ainda é manual em boa parte dos casos)
- Enviar novos dados para uma pasta temporária em data.brasil.io (ou algum lugar de onde o servidor possa baixar o arquivo)
- Baixar o arquivo e executar o
import_data - Se tudo correr bem, mover o arquivo para o local definitivo e re-gerar o _meta/list.html do dataset (como nessa operação só teremos o arquivo de uma tabela no dataset, para não ter que baixar as outras e re-gerar os SHA512 de todos os arquivos, aqui poderíamos manter um model no backend com os arquivos correspondentes às tabelas, assim seria fácil re-gerar essa listagem)
#!/bin/bash
set -e
APP_NAME="brasilio-web"
DATA_PATH="/root/brasilio-web-data"
#dokku storage:mount $APP_NAME /data:$DATA_PATH
DATASET="$1"
TABLE="$2"
if [ -z "$TABLE" ]; then
echo "ERROR - Usage: $0 <dataset> <table>"
exit 1
fi
filename="$DATA_PATH/${DATASET}/${TABLE}.csv.gz"
mkdir -p $(dirname $filename)
echo "Downloading ${DATASET}/${TABLE}..."
wget -qO "$filename" https://data.brasil.io/dataset/$DATASET/${TABLE}.csv.gz
collect_date=$(TZ=America/Sao_Paulo date +'%Y-%m-%d')
dokku run $APP_NAME python manage.py import_data \
--collect-date="${collect_date}" \
--no-input \
$DATASET \
$TABLE \
/data/$DATASET/${TABLE}.csv.gz
rm -rf "$filename"
# TODO: enviar email para usuário que fez o POST
Exemplo de um script que executa todas as tarefas acima (chamando o script acima no servidor, ao final): https://github.com/turicas/covid19-br/blob/master/deploy.sh