#!/bin/sh # Given the base URLs of two SAP Sailing servers, obtains their /sailingserver/api/v1/leaderboardgroups # service output, sorts it, compares them, and if equal, obtains all corresponding leaderboardgroups/* # documents and compares those in turn. options='cevl' while getopts $options option do case $option in c) continue="1";; e) exitOnError="1";; v) verbose="1";; l) list="1";; \?) echo "Invalid option" exit 4;; esac done shift $((OPTIND-1)) if [ "$verbose" = "1" ]; then WGET_ERR=/dev/stderr WGET_QUIET="" else WGET_ERR=/dev/null WGET_QUIET="--quiet" fi OLDSERVER=$1 NEWSERVER=$2 OLDGROUPS=leaderboardgroups.old.sed NEWGROUPS=leaderboardgroups.new.sed # If we continue, don't download again if [ "$continue" != "1" ]; then wget $WGET_QUIET -O - ${OLDSERVER}/sailingserver/api/v1/leaderboardgroups | sed -e 's/,/\n/g' -e 's/\[/\n/' -e 's/\]/\n/' -e 's/\"//g' | grep -v "^$" | sort >$OLDGROUPS wget $WGET_QUIET -O - ${NEWSERVER}/sailingserver/api/v1/leaderboardgroups | sed -e 's/,/\n/g' -e 's/\[/\n/' -e 's/\]/\n/' -e 's/\"//g' | grep -v "^$" | sort >$NEWGROUPS fi download_and_fix_boatclasses () { wget $WGET_QUIET -O - "$1/sailingserver/api/v1/leaderboardgroups/`echo $OLD_LB | sed -e 's/ /%20/g'`" | sed -e 's/\b470W\b/470/g' -e 's/\b470M\b/470/g' -e 's/\<505\>/5O5/g' -e 's/Laser Int\./Laser/g' -e 's/J-24/J\/24/g' -e 's/\([^ ]\)Radial/\1Laser Radial/g' -e 's/J80/J\/80/g' -e 's/12mR/12 Meter/g' -e 's/Extreme40/Extreme 40/g' -e 's/Drachen/Dragon Int\./g' -e 's/TORNADO/Tornado Catamaran/g' -e 's/Melges24/Melges 24/g' -e 's/RAD W/RADW/g' -e 's/B25/Platu 25/g' -e 's/Europe\([^ ]\)/Europe Int\.\1/g' -e 's/Silbernes Band/SILBERNESBAND/g' -e 's/Laser RAD/Laser Radial/g' -e 's/\/Folkboat/g' -e 's/\/H-Boat/g' -e 's/\/Formula 18/g' -e 's/\/J\/24/g' -e 's/2\.4mR/2\.4 Meter/g' -e 's/\"$2" 2>$WGET_ERR } diff leaderboardgroups.old.sed leaderboardgroups.new.sed if [ "$?" = "0" ]; then exec 3<> $OLDGROUPS exec 4<> $NEWGROUPS read OLD_LB <&3 read NEW_LB <&4 while [ "$OLD_LB" != "" ]; do if [ "$list" = "1" ]; then echo " * $OLD_LB" fi download_and_fix_boatclasses "${OLDSERVER}" "${OLD_LB}.old.json" download_and_fix_boatclasses "${NEWSERVER}" "${NEW_LB}.new.json" diff -b -i -B "${OLD_LB}.old.json" "${NEW_LB}.new.json" DIFFRESULT=$? if [ "$DIFFRESULT" != "0" ]; then echo "Difference detected in leaderboard group $OLD_LB vs. $NEW_LB" if [ "$exitOnError" = "1" ]; then echo "Exiting..." exit $DIFFRESULT fi else # no diff; remove the leaderboards successfully compared from both leaderboardgroups lists in case a later -c invocation occurs sed -i -e '1d' $OLDGROUPS sed -i -e '1d' $NEWGROUPS fi read OLD_LB <&3 read NEW_LB <&4 done else # pass on diff result to caller exit $? fi