From 018282d7981533901b555af555b125a28c3e6638 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sat, 19 Nov 2016 16:14:35 +0100 Subject: [PATCH] fill_team: improve script reliability --- admin/fill_teams.sh | 83 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 65 insertions(+), 18 deletions(-) diff --git a/admin/fill_teams.sh b/admin/fill_teams.sh index 92931112..2ff61118 100755 --- a/admin/fill_teams.sh +++ b/admin/fill_teams.sh @@ -1,7 +1,48 @@ -#!/bin/sh +#!/bin/bash -BASEURL="http://localhost:8081" -PART_FILE="Challenge_Liste des participants.csv" +BASEURL="http://127.0.0.1:8081/admin" +GEN_CERTS=0 +EXTRA_TEAMS=0 +CSV_SPLITER="," +CSV_COL_LASTNAME=1 +CSV_COL_FIRSTNAME=2 +CSV_COL_NICKNAME=3 +CSV_COL_COMPANY=7 +CSV_COL_TEAM=7 + +usage() { + echo "$0 [options] csv_file" + echo " -B -baseurl BASEURL URL to administration endpoint (default: $BASEURL)" + echo " -S -csv-spliter SEP CSV separator (default: $CSV_SPLITER)" + echo " -e -extra-teams NBS Number of extra teams to generate (default: ${EXTRA_TEAMS})" + echo " -c -generate-certificate Should team certificates be generated? (default: no)" +} + +# Parse options +while [ "${1:0:1}" = "-" ] +do + case "$1" in + -B|-baseurl) + BASEURL=$2 + shift;; + -S|-csv-spliter) + CSV_SPLITER=$2 + shift;; + -e|-extra-teams) + EXTRA_TEAMS=$2 + shift;; + -c|-generate-certificates) + GEN_CERTS=1;; + *) + echo "Unknown option '$1'" + usage + exit 1;; + esac + shift +done + +[ "$#" -lt 1 ] && { usage; exit 1; } +PART_FILE="$1" new_team() { head -n "$1" team-names.txt | tail -1 | sed -E 's/^.*\|\[\[([^|]+\|)?([^|]+)\]\][^|]*\|([A-Fa-f0-9]{1,2})\|([A-Fa-f0-9]{1,2})\|([A-Fa-f0-9]{1,2})\|([0-9]{1,3})\|([0-9]{1,3})\|([0-9]{1,3})\|.*$/\6 \7 \8 \2/' | @@ -10,7 +51,11 @@ new_team() { R=`echo $line | cut -d " " -f 1` G=`echo $line | cut -d " " -f 2` B=`echo $line | cut -d " " -f 3` - N=`echo $line | cut -d " " -f 4` + if [ -z "$2" ]; then + N=`echo $line | cut -d " " -f 4` + else + N=`echo -n $2 | tr -d '\r\n'` + fi COLOR=$((($R*256 + $G) * 256 + $B)) @@ -20,7 +65,7 @@ new_team() { TNUM=0 -for i in `seq 12` +for i in $(seq $EXTRA_TEAMS) do TNUM=$(($TNUM + 1)) @@ -28,31 +73,32 @@ do TID=`new_team $TNUM` - if ! curl -s -f "${BASEURL}/api/teams/${TID}/certificate" > /dev/null + if [ "${GEN_CERTS}" -eq 1 ] && ! curl -s -f "${BASEURL}/api/teams/${TID}/certificate" > /dev/null then curl -s -f "${BASEURL}/api/teams/${TID}/certificate/generate" fi echo done -TMAX=`sed "1d" "$PART_FILE" | cut -d \; -f 15 | sort | uniq | wc -l` +TMAX=`cat "$PART_FILE" | cut -d "${CSV_SPLITER}" -f $CSV_COL_TEAM | sort | uniq | wc -l` TMAX=$(($TMAX + $TNUM)) -sed "1d" "$PART_FILE" | cut -d \; -f 15 | sort | uniq | while read TEAMID +cat "$PART_FILE" | cut -d "${CSV_SPLITER}" -f $CSV_COL_TEAM | sort | uniq | while read TEAMID do TNUM=$(($TNUM + 1)) echo "Doing team $TNUM/$TMAX ("$(($TNUM*100/$TMAX))"%)..." - TID=`new_team $TNUM` + TID=`new_team "${TNUM}" "${TEAMID}"` - ( + if ! ( echo -n "[" HAS_MEMBER=1 - grep ";$TEAMID\$" "$PART_FILE" | while read MEMBER + grep "${CSV_SPLITER}${TEAMID}\$" "$PART_FILE" | while read MEMBER do - LASTNAME=`echo $MEMBER | cut -d ";" -f 2` - FIRSTNAME=`echo $MEMBER | cut -d ";" -f 3` - COMPANY=`echo $MEMBER | cut -d ";" -f 4` + LASTNAME=`echo $MEMBER | cut -d "${CSV_SPLITER}" -f $CSV_COL_LASTNAME | tr -d "\r\n"` + FIRSTNAME=`echo $MEMBER | cut -d "${CSV_SPLITER}" -f $CSV_COL_FIRSTNAME | tr -d "\r\n"` + NICKNAME=`echo $MEMBER | cut -d "${CSV_SPLITER}" -f $CSV_COL_NICKNAME | tr -d "\r\n"` + COMPANY=`echo $MEMBER | cut -d "${CSV_SPLITER}" -f $CSV_COL_COMPANY | tr -d "\r\n"` if [ $HAS_MEMBER = 0 ] then @@ -65,15 +111,16 @@ do { "firstname": "$FIRSTNAME", "lastname": "$LASTNAME", - "nickname": "", + "nickname": "$NICKNAME", "company": "$COMPANY" } EOF done echo "]" - ) | curl -s -d @- "${BASEURL}/api/teams/${TID}" > /dev/null - - if ! curl -s -f "${BASEURL}/api/teams/${TID}/certificate" > /dev/null + ) | curl -f -s -d @- "${BASEURL}/api/teams/${TID}" + then + echo "An error occured" + elif [ "${GEN_CERTS}" -eq 1 ] && ! curl -s -f "${BASEURL}/api/teams/${TID}/certificate" > /dev/null then curl -s -f "${BASEURL}/api/teams/${TID}/certificate/generate" fi