un outil de sondage - retour accueil
git clone git://bebou.netlib.re/kun
Log | Files | Refs | README |
commit e5d7f2a01e8d211825643d46f8e4cbdf30afeb39 parent 2844ed72fc8ee3c4ab35a3a3b538f15dc19f5398 Auterice: Arthur Pons <arthur.pons@unistra.fr> Date: Sat, 21 Sep 2024 00:28:11 +0200 Début d'ajout d'un système de log de cmd On sort les commandes d'stdout, à la place ou les met dans un fichier executable. Deux soucis : * Pour le moment les identifiants sont dans les logs donc pas possible de le tester correctement. Trouver un moyen d'anonymiser les id pour créer un fichier de référence similaire à ce qui est fait pour tester stdout et stderr. * Le fichier de log sera créé sur le serveur, il faudrait un moyen de le passer au client. On peut le cat mais c'est un peu nul non ? Peut-être simplement le proposer à la copie en mode scp mais ça nécessite de savoir le faire. Peut-être réfléchir à un moyen de les rendre exec à distance puisque de toute façon tel quel ils ne fonctionneront pas en local chez le client. Implémenter : * la lecture de ce format de fichier dans la stdin pour modifier le fonctionnement du menu (proposer des sondages et réponses) Diffstat:
M | commands.sh | | | 43 | ++++++++++++++++++++++--------------------- |
M | kun.sh | | | 8 | ++++++-- |
M | tests/tests.sh | | | 4 | ++-- |
M | utils.sh | | | 4 | ++++ |
4 files changed, 34 insertions(+), 25 deletions(-)
diff --git a/commands.sh b/commands.sh @@ -2,18 +2,20 @@ # Si text est renseigné il deviendra le contenu du sondage # kun create [text] create() { - local id text + local id folder text text="$1" - id=$(mktemp -d /tmp/kun.XXXXX) \ - || { _die "erreur à la création du dossier de sondage $id";return 1; } + folder=$(mktemp -d /tmp/kun.XXXXX) \ + || { _die "erreur à la création du dossier de sondage $folder";return 1; } + id=${folder##/tmp/kun.} if [ -n "$text" ];then - echo "$text" > $id/question \ + echo "$text" > $folder/question \ || { _die "erreur à l'écriture du sondage $id";return 1; } - else $EDITOR $id/question + else $EDITOR $folder/question fi - if [ -s "$id/question" ];then - _success "id du sondage : {${id##/tmp/kun.}}" - printf "kun create {%s}\n" $(echo "$id" | cut -d'.' -f2) + if [ -s "$folder/question" ];then + _success "Sondage {$id} créé avec succès" + _cmdlog "kun create \"$(< $folder/question sed -z 's,\n,\\\\n,g')\"" + printf "{%s}\n" "$id" else _die "sondage vide, il n'a pas été créé" fi } @@ -24,9 +26,9 @@ addanswer() { local id name idrep repfile text id="${1:?missing parameter}";name="${2:?missing parameter}";text="$3" - _nameexists "$id" "$name" && { _die "Ce nom a déjà été pris";return 1;} + _nameexists "$id" "$name" && { _die "$name est déjà pris pour le sondage {$id}";return 1;} repfile=$(mktemp /tmp/kun.$id/$name-XXXXX) \ - || { _die "erreur à la création du fichier de réponse $name-$idrep";return 1; } + || { _die "erreur à la création du fichier de réponse $refile";return 1; } idrep=$(basename $repfile | cut -d'-' -f2) if [ -n "$text" ];then echo "$text" | grep -f /tmp/kun.$id/question > $repfile @@ -44,8 +46,8 @@ addanswer() { _success "réponse {$idrep} de $name soumise au sondage {$id}" _success "recap de la réponse :" _success "$(cat $repfile)" - printf "kun addanswer {%s} %s {%s}\n" "$id" "$name" "$idrep" - printf "%s\n" $(cat $repfile) + _cmdlog "kun addanswer $id $name \"$(< $repfile sed -z 's,\n,\\\\n,g')\"" + printf "{%s} {%s}\n" "$id" "$idrep" } # modifier une réponse existante @@ -54,7 +56,7 @@ addanswer() { modifyanswer() { local id idrep repfile text id="${1:?missing parameter}";idrep="${2:?missing parameter}";text="$3" - _answerexists "${1:?missing parameter}" "${2:?missing parameter}" || { _die "Réponse n'existe pas";return 1;} + _answerexists "${1:?missing parameter}" "${2:?missing parameter}" || { _die "Réponse {$idrep} n'existe pas";return 1;} name=$(basename /tmp/kun.$id/*-$idrep | cut -d'-' -f1) repfile="/tmp/kun.$id/$name-$idrep" @@ -63,11 +65,10 @@ modifyanswer() { fi [ -f "$repfile" ] || { _die "Erreur dans l'écriture de la réponse";return 1;} - _success "réponse {$idrep} de $name soumise au sondage {$id}" + _success "Modification de la réponse {$idrep} de $name soumise au sondage {$id}" _success "recap de la réponse :" _success "$(cat $repfile)" - printf "kun modifyanswer {%s} %s {%s}\n" "$id" "$name" "$idrep" - printf "%s\n" $(cat $repfile) + _cmdlog "kun modifyanswer $id $idrep \"$(< $repfile sed -z 's,\n,\\\\n,g')\"" } # supprimer un sondage @@ -80,7 +81,7 @@ deletequestion() { rm -rf /tmp/kun.$id || { _die "Erreur dans la suppression de {$id}"; return 1; } _success "Sondage {$id} supprimé" - printf "kun deletequestion {%s}\n" "$id" + _cmdlog "kun deletequestion $id" } # supprimer une réponse @@ -95,7 +96,7 @@ deleteanswer() { || { _die "Erreur dans la suppression de la réponse {$idrep} du sondage {$id}"; return 1; } _success "Question {$idrep} du sondage {$id} supprimée" - printf "kun deleteanswer {%s} {%s}\n" "$id" "$idrep" + _cmdlog "kun deleteanswer $id $idrep" } # voir les résultats d'une question @@ -108,7 +109,7 @@ results() { _ananswerexists "$id" || { _die "Le sondage {$id} n'a pas encore de réponse"; return 1; } answers=$(find /tmp/kun.$id -type f -not -name question) - printf "kun results {%s}\n" "$id" + _cmdlog "kun results $id" cat $answers | sort | uniq -c | sort -rn } @@ -123,7 +124,7 @@ getpeople() { _ananswerexists "$id" || { _die "Le sondage {$id} n'a pas encore de réponse"; return 1; } answers=$(find /tmp/kun.$id -type f -not -name question | sort) - printf "kun getpeople {%s}\n" "$id" + _cmdlog "kun getpeople $id" printf "%s\n" $answers | cut -d'-' -f1 | xargs -n1 basename @@ -137,6 +138,6 @@ getanswer() { _nameexists "$id" "$name" \ || { _die "$name n'a pas répondu à ce sondage";return 1;} - printf "kun getanswer {%s} {%s}\n" "$id" "$name" + _cmdlog "kun getanswer $id $name" cat /tmp/kun.$id/$name-* } diff --git a/kun.sh b/kun.sh @@ -1,5 +1,8 @@ #! /bin/sh +logfile=$(mktemp kun.XXX.log) +exec 3> $logfile + while getopts "h" opt;do case $opt in (h) help=yes;; @@ -85,9 +88,8 @@ while [ ! "$k" = "quitter" ];do results "$id" ;; ("une personne") people=$(getpeople "$id") - echo "$people" | head -n1 while [ ! "$choice" = "quitter" ];do - choice=$(echo "$people" | tail -n+2 | sed '1i\quitter' | fzy) + choice=$(echo "$people" | sed '1i\quitter' | fzy) [ "$choice" != "quitter" ] && getanswer "$id" "$choice" done;choice="";; esac @@ -103,3 +105,5 @@ while [ ! "$k" = "quitter" ];do done +chmod +x $logfile +printf "Fichier de log : %s\n" $logfile diff --git a/tests/tests.sh b/tests/tests.sh @@ -39,8 +39,8 @@ Un scénario : . -id=$(./kun.sh create "lundi\nmardi\nmercredi" | tr -d '{}' | cut -f2) -idrep=$(./kun.sh addanswer "$id" alice "lundi\nmercredi" | tr -d '{}' | head -n1 | cut -f4) +id=$(./kun.sh create "lundi\nmardi\nmercredi" | tr -d '{}') +idrep=$(./kun.sh addanswer "$id" alice "lundi\nmercredi" | tr -d '{}' | cut -f2) ./kun.sh results "$id" ./kun.sh addanswer "$id" alice ./kun.sh addanswer "$id" victor "mercredi" diff --git a/utils.sh b/utils.sh @@ -1,11 +1,14 @@ red="\033[91m" green="\033[92m" +blue="\033[94m" norm="\033[0m" _die() { echo "$red$@$norm" >&2 ;return 1; } _success() echo "$green$@$norm" >&2 +_cmdlog() echo "$@" >&3 + _questionexists() { local id;id="${1:?missing parameter}";[ -d "/tmp/kun.$id" ]; } _nameexists() { @@ -25,3 +28,4 @@ _ananswerexists() { answers=$(find /tmp/kun.$id -type f -not -name question) [ -n "$answers" ] } +