#!/bin/bash SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SSH_IP="127.0.0.1" SSHPORT="2322" SSH_USER="command" SSH_SUCCESS_FILE="/tmp/chch-status_ssh-success" JSON_FILE="/var/www/chch_api/chch.json" JSON_FILE_TEMPL="$SCRIPT_DIR/include/chch.json.template" JSON_FILE_TMP="$(mktemp)" STATUS_FILE="/tmp/chch-status" STATUS_OPEN="geöffnet" STATUS_CLOSED="geschlossen" STATUS_NULL="unbekannt" STATUS_NULL_DELAY_MINUTES=10 STATUS_NULL_TIMEOUT_MINUTES=180 STATUS_MSG_CLOSED="Geschlossen | Closed" STATUS_MSG_OPEN="Geöffnet | Open" YAMMAT_JSON_URL="http://localhost:9991/backup/inventory.json" BEVERAGE_SUPPLY_TMP="/tmp/chch-beverage-supply-tmp" WIKI_PATH="/var/www/chch/" WIKI_IMAGE_CLOSED="ChCh_closed.png" WIKI_IMAGE_OPEN="ChCh_open.png" WIKI_MAIN_PAGE="Hauptseite" WIKI_STATUS_PAGE="Aktueller_ChCh-Öffnungsstatus" find "$SSH_SUCCESS_FILE" -mmin +$STATUS_NULL_TIMEOUT_MINUTES -exec rm "$STATUS_FILE" \; 2>/dev/null OLD_STATUS="$(cat "$STATUS_FILE" 2>/dev/null)" STATUS="$(echo status | ssh -q -p $SSHPORT $SSH_USER@$SSH_IP 2>/dev/null)" if [ -z "$STATUS" ]; then if [ -f "$SSH_SUCCESS_FILE" ] && test "$(find "$SSH_SUCCESS_FILE" -mmin -$STATUS_NULL_DELAY_MINUTES -mmin +0)"; then STATUS="$OLD_STATUS" [ -z "$STATUS" ] && STATUS="$STATUS_NULL" else STATUS="$STATUS_NULL" fi else touch "$SSH_SUCCESS_FILE" fi TIMESTAMP_LASTCHANGE=$(stat -c '%Y' "$STATUS_FILE" 2>/dev/null) || TIMESTAMP_LASTCHANGE=$(date +%s) [ "$STATUS" != "$STATUS_NULL" ] && printf "%s\n" "$STATUS" > "$STATUS_FILE" if [ "$STATUS" == "$OLD_STATUS" ] || [ "$STATUS" == "$STATUS_NULL" ]; then touch --date=@"$TIMESTAMP_LASTCHANGE" "$STATUS_FILE" else TIMESTAMP_LASTCHANGE=$(stat -c '%Y' "$STATUS_FILE" 2>/dev/null) fi TIMESTAMP_LASTCHANGE_DATE="$(date -d "@$TIMESTAMP_LASTCHANGE" "+%H:%M (%d.%m.%Y)")" API_STATUS="null" API_STATUS_MSG="$STATUS_MSG_CLOSED" WIKI_STATUS="{{Noframeright|[[File:$WIKI_IMAGE_CLOSED|link=]]|'''unbekannt'''}}" case $STATUS in $STATUS_OPEN) API_STATUS="true" WIKI_STATUS="{{Noframeright|[[File:$WIKI_IMAGE_OPEN|link=]]|'''$STATUS'''
seit $TIMESTAMP_LASTCHANGE_DATE}}" API_STATUS_MSG="$STATUS_MSG_OPEN" ;; $STATUS_CLOSED) API_STATUS="false" API_STATUS_MSG="$STATUS_MSG_CLOSED" WIKI_STATUS="{{Noframeright|[[File:$WIKI_IMAGE_CLOSED|link=]]|'''$STATUS'''
seit $TIMESTAMP_LASTCHANGE_DATE}}" ;; $STATUS_NULL) API_STATUS="null" STATUS_="'''Öffnungsstatus unbekannt'''" IMAGE="$WIKI_IMAGE_CLOSED" WIKI_STATUS_SINCE="" if [ -f "$STATUS_FILE" ]; then case $(head -n1 "$STATUS_FILE") in $STATUS_OPEN) STATUS_="'''unbekannt'''
zuletzt war $STATUS_OPEN" IMAGE="$WIKI_IMAGE_OPEN" WIKI_STATUS_SINCE="
seit $TIMESTAMP_LASTCHANGE_DATE" ;; $STATUS_CLOSED) STATUS_="'''unbekannt'''
zuletzt war $STATUS_CLOSED" IMAGE="$WIKI_IMAGE_CLOSED" WIKI_STATUS_SINCE="
seit $TIMESTAMP_LASTCHANGE_DATE" ;; esac fi API_STATUS_MSG="$STATUS_MSG_CLOSED" WIKI_STATUS="{{Noframeright|[[File:$IMAGE|link=]]|${STATUS_}$WIKI_STATUS_SINCE}}" ;; esac BEVERAGE_SUPPLY="$(wget -O- "$YAMMAT_JSON_URL" 2>/dev/null | jq -rc "[ .[] | select( . | .amount > 0 ) | { value: .amount, unit: \"btl\", name: .name, description: ([(.price/100), \"€\"]|join(\" \")) } ]")" if [ -z "$BEVERAGE_SUPPLY" ]; then BEVERAGE_SUPPLY="$(cat $BEVERAGE_SUPPLY_TMP)" else echo "$BEVERAGE_SUPPLY" > "$BEVERAGE_SUPPLY_TMP" fi # The status file for spaceapi.ccc.de and for our IRC bot. sed "s/%%STATUS%%/${API_STATUS}/;s/%%MESSAGE%%/${API_STATUS_MSG}/;s/%%LASTCHANGE%%/${TIMESTAMP_LASTCHANGE}/;s/%%BEVERAGE_SUPPLY%%/${BEVERAGE_SUPPLY}/" "$JSON_FILE_TEMPL" | jq . > "$JSON_FILE_TMP" chown --reference="$JSON_FILE_TEMPL" "$JSON_FILE_TMP" chmod --reference="$JSON_FILE_TEMPL" "$JSON_FILE_TMP" mv "$JSON_FILE_TMP" "$JSON_FILE" echo -n "$WIKI_STATUS" | php "$WIKI_PATH/maintenance/edit.php" -m -b --no-rc -s "$STATUS" "$WIKI_STATUS_PAGE" >> /dev/null 2>&1 echo "$WIKI_MAIN_PAGE" | php "$WIKI_PATH/maintenance/purgeList.php" --purge >> /dev/null 2>&1