Easily parse BRA (french risks of avalanche news) and create a structured database from PDFs.
Locally, create a .env file containing:
MYSQL_USER=
MYSQL_PWD=
MYSQL_HOST=
MYSQL_PORT=
MYSQL_DB=
MYSQL_TABLE=
By default, the program will use the current date. You can change it by setting the BRA_DATE
environment variable.
export BRA_DATE=20220304
Once dockerised, paths are ensured. Locally, run:
mkdir $PWD/out $PWD/logs $PWD/img
export BRA_PDF_FOLDER=$PWD/out/$BRA_DATE
export BRA_LOG_FOLDER=$PWD/logs
export BRA_IMG_FOLDER=$PWD/img
Build locally:
bash scripts/build.sh
To build it on GCP:
source .env
gcloud builds submit --tag gcr.io/data-baguette/bra-database \
--build-arg MYSQL_USER=$MYSQL_USER \
--build-arg MYSQL_PWD=$MYSQL_PWD \
--build-arg MYSQL_HOST=$MYSQL_HOST \
--build-arg MYSQL_PORT=$MYSQL_PORT \
--build-arg MYSQL_DB=$MYSQL_DB \
--build-arg MYSQL_TABLE=$MYSQL_TABLE
Run every day the following command:
docker run bra/backend:latest
You can also specify the date to use with:
docker run --env BRA_DATE=$BRA_DATE bra/backend:latest
Create a GKE cluster:
gcloud container clusters create-auto bra --region REGION --project=PROJECT
Create a NAT router:
gcloud compute routers create bra-nat-router \
--network default \
--region REGION \
--project=PROJECT
Add an external mapping configuration (to get traffic outside the cluster):
gcloud compute routers nats create bra-nat-router-config \
--region REGION \
--router bra-nat-router \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips \
--project=PROJECT
Log kubectl to the GKE (add the Google source repo first)
sudo apt-get install google-cloud-sdk-gke-gcloud-auth-plugin
export USE_GKE_GCLOUD_AUTH_PLUGIN=True
gcloud container clusters get-credentials CLUSTER_NAME
kubectl get all --all-namespaces
Upload a secret yaml file on GKE containing the DB connection informations:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
MYSQL_USER:
MYSQL_PWD:
MYSQL_HOST:
MYSQL_PORT:
MYSQL_DB:
MYSQL_TABLE:
Note: values should be base64 encoded with
echo -n "MY_VALUE" | base64
.
kubectl apply -f secret.yaml
And apply the cron job to the GKE:
kubectl apply -f $PWD/kubernetes/cronjob.yaml
SELECT `date`, massif, until, departs, declanchements, risk_score, risk_str, stabilite_manteau_bloc, situation_avalancheuse_typique, departs_spontanes, declanchements_provoques, qualite_neige
FROM bra.france
WHERE departs_spontanes IS NULL
ORDER BY `date` DESC;
Some massifs never return the keys from the snow quality because these BRA does not use the same format than others for the keys.
{
"declenchements accidentels": "de rares plaques peuvent encore persister en versant nord d'altitude peux fréquentés en effet, par endroit la vielle poudreuse qui à évolué en faces planes sans cohésion est recouverte par de la neige plus ou moins frittée ce qui forme alors une plaque la surface du manteau étant très hétérogène en ce moment, ces rares plaques sont plutôt de petites surfaces et ne se semblent, de plus, ne pas vouloir se déclencher facilement d'après les derniers tests de stabilité effectués cela reste toutefois possible localement y compris par un seul skieur dans les secteurs peu ou pas tracés",
"departs naturels": "peu probable avec un air sec et froid qui persiste encore, même si une ou deux plaques de fond ont pu être signalées ces derniers temps une corniche peut céder (très rarement, mais observé) et déclencher une plaque en contre bas"
}