diff --git a/.env.example b/.env.example index 17761c5..d569a11 100644 --- a/.env.example +++ b/.env.example @@ -1,5 +1,3 @@ -DUNITER="https://duniter-g1.p2p.legal" # Adresse du noeud Duniter qui sera scanné -DUNITER2="https://g1.duniter.org" # Seconde adresse par sécurité -DUNITER3="https://duniter.g1.1000i100.fr" # Troisième adresse par sécurité -ESNODE="http://g1.data.duniter.fr" # Adresse du noeud ElasticSearch qui sera scanné -WEBPATH="/var/www/g1-stats" # Dossier qui sera créé si vous choisissez l'option web pour la mise en ligne des données (nécessite une configuration apache ou nginx) +DUNITER="https://duniter-g1.p2p.legal" # Adresse du noeud Duniter qui sera scanné +ESNODE="http://g1.data.duniter.fr" # Adresse du noeud ElasticSearch qui sera scanné (Si nécessaire) +WEBPATH="/var/www/g1-stats" # Dossier qui sera créé si vous choisissez l'option web pour la mise en ligne des données (nécessite une configuration apache ou nginx) diff --git a/README.md b/README.md index d48c211..bad89c1 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,50 @@ -# Extraction de quelques chiffres liés à la ḡ1 +# Indexation de la blockchain Duniter/Ḡ1 +## Sous forme d'un fichier JSON journalier et d'outils d'exploitation de ce JSON ### Visible sur: [https://g1-stats.axiom-team.fr/](https://g1-stats.axiom-team.fr/) -*Ce code n'a pas été testé dans un autre environement que le miens (Debian 10), il est publié par simple soucis de transparence et d'audit* - -Utilise l'API BMA pour l'extraction des clés publiques ḡ1 membres et non membres, ainsi que l'API ElasticSearch de Cesium+ pour la récupération des soldes par soucis d'optimisation. - +Utilise l'[API BMA](https://github.com/duniter/duniter-bma/blob/master/doc/API.md) pour l'extraction et l'indexation des données de la [blockchain Duniter/Ḡ1](https://duniter.org). A exécuter dans un environnement Bash Debian/Ubuntu. -## Prérequis - -Copiez le fichier .env.example en .env et adaptez les variables selon votre usage. +*Si vous souhaitez modifier les paramètres par defaut, copiez le fichier .env.example en .env et adaptez les variables selon votre usage.* ## Exécution +Lancer le scan ainsi que tout le processus d'indexation depuis le début de la blockchain jusqu'à aujourd'hui `./g1-stats.sh` +*A la première execution, ce scan peut durer plusieurs heures!* +Pour pourrez suivre la progression du scan en temps réel. +Pour les exécutions ultérieures, un cache est géneré permettant de reprendre le scan là où il s'est arrêté, diminuant drastiquement le temps d'execution. + +Le fichier JSON est alors généré: `db/daily.json` Pour générer la page web static: - `./g1-stats.sh web` + +## Exploration + +Une fois le fichier JSON correctement généré, vous pouvez l'exploiter via la commande: +`./explorer.sh` + +*TODO: Plus détailler cette partie ...* + +## Sauvegarde/Restauration + +Un script de sauvegarde se trouve dans le dossier `scripts`: +`./scripts/backup-cache.sh` +Permettant le faire une copie de votre fichier json actuel ainsi que du cache qui lui correspond + +Pour restaurer le backup le plus récent: +`./scripts/restore-cache.sh` +Pour restaurer un backup à partir d'un bloc précis, par exemple le bloc 4242 (le numéro du bloc se trouve dans le nom du backup du cache): +`./scripts/restore-cache.sh 4242` + ## Automatisation Vous pouvez décider d'exécuter ce script régulièrement grâce à une tache cron. Par exemple pour l'exécuter toutes les 3 heures: -`echo "0 */3 * * * /path/to/script/g1-stats.sh web >> /var/log/g1-stats.log 2>&1" >> /var/spool/cron/crontabs/$USER` +``` +TERM=xterm # Nécessaire pour la gestion tput des sorties log +0 */3 * * * /path/to/script/g1-stats.sh web >> /var/log/g1-stats.log 2>&1 +``` diff --git a/explorer.sh b/explorer.sh index ff99a8a..9c276bd 100755 --- a/explorer.sh +++ b/explorer.sh @@ -5,6 +5,7 @@ GPATH="$( cd "$(dirname "$0")" ; pwd -P )" source $GPATH/.env jsonFile="$GPATH/db/daily.json" +cmd=$1 dateRange=$2 [[ -z $dateRange ]] && dateRange=$(jq -r '.[].date' $jsonFile | tail -n1) lineNbr=$(grep -n "$dateRange" $jsonFile | cut -d : -f 1) @@ -53,4 +54,6 @@ mass() { jq -f lib/sumNbrMembers.jq <<<"$jsonDated" | jq '.UD*.nbrMembers' | awk '{ SUM += $1} END { printf "%.2f", SUM }'; echo } -$1 +[[ -z $cmd ]] && cmd=cumulate + +$cmd diff --git a/g1-stats.sh b/g1-stats.sh index a0f764c..38d0ab0 100755 --- a/g1-stats.sh +++ b/g1-stats.sh @@ -13,7 +13,8 @@ set -e # Récupération du chemin absolut du répertoir du script actuel GPATH="$( cd "$(dirname "$0")" ; pwd -P )" -if [[ -e $GPATH/.env ]]; then source $GPATH/.env; else echo "Veuillez créer votre fichier .env inspiré de .env.example" && exit 1; fi +[[ ! -f $GPATH/.env ]] && cp $GPATH/.env.example $GPATH/.env +source $GPATH/.env ### Initialisation des données ### startTime=$(date +'%H:%M')