79 lines
2.4 KiB
Bash
Executable File
79 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
readonly CONTAINER_NAME="nextcloud-fpm-v1"
|
|
readonly OCC_CMD="docker exec --user www-data $CONTAINER_NAME php occ"
|
|
readonly THRESHOLD=95
|
|
readonly SENDER_EMAIL="knusperkerne@posteo.de"
|
|
|
|
USERS=$($OCC_CMD user:list | awk '{print $2}' | tr -d :)
|
|
|
|
for USER in $USERS; do
|
|
EMAIL=$($OCC_CMD user:info "$USER" 2>/dev/null | grep -i "email:" \
|
|
| head -n 1 | sed -E 's/.*email: (.*)/\1/' | tr -d '[:space:]')
|
|
|
|
# Falls die E-Mail ein "null" String oder leer ist
|
|
if [[ -z "$EMAIL" ]] || [[ "$EMAIL" == "null" ]]; then
|
|
echo "Skipping $USER: No valid email found in occ user:info."
|
|
continue
|
|
fi
|
|
|
|
if [ -z "$EMAIL" ] || [ "$EMAIL" == "null" ]; then
|
|
echo "Skipping $USER: No valid email found."
|
|
continue
|
|
fi
|
|
|
|
QUOTA_RAW=$($OCC_CMD user:setting "$USER" files quota 2>/dev/null) || true
|
|
|
|
# Falls Quota auf 'none', leer oder Fehlermeldung
|
|
if [[ -z "$QUOTA_RAW" ]] || [[ "$QUOTA_RAW" == "none" ]] \
|
|
|| [[ "$QUOTA_RAW" =~ "not exist" ]]; then
|
|
echo "Skipping $USER: No quota defined (none/default)."
|
|
continue
|
|
fi
|
|
|
|
# convert quota into bytes
|
|
CLEAN_VALUE=$(echo "$QUOTA_RAW" | grep -oP '^[0-9]+')
|
|
CLEAN_UNIT=$(echo "$QUOTA_RAW" |
|
|
grep -oP '[a-zA-Z]' | head -n 1 | tr '[:lower:]' '[:upper:]')
|
|
|
|
if [[ -z "$CLEAN_UNIT" ]]; then
|
|
QUOTA_BYTES=$CLEAN_VALUE
|
|
else
|
|
# numfmt versteht "50G", "2M" etc.
|
|
QUOTA_BYTES=$(numfmt --from=iec "${CLEAN_VALUE}${CLEAN_UNIT}")
|
|
fi
|
|
|
|
USED_BYTES=$(docker exec $CONTAINER_NAME \
|
|
du -sb /var/www/html/data/"$USER"/files 2>/dev/null \
|
|
| awk '{print $1}')
|
|
|
|
USED_BYTES=${USED_BYTES:-0}
|
|
|
|
if [ "$QUOTA_BYTES" -gt 0 ]; then
|
|
PERCENT=$(( 100 * USED_BYTES / QUOTA_BYTES ))
|
|
|
|
if [ "$PERCENT" -ge "$THRESHOLD" ]; then
|
|
echo "WARNUNG: $USER ist bei $PERCENT% ($EMAIL)"
|
|
|
|
{
|
|
printf "Hallo %s,\n\n" "$USER"
|
|
|
|
printf "Dein Nextcloud-Speicher ist zu %s%% voll.\n\n" \
|
|
"$PERCENT"
|
|
|
|
printf "Belegt: %s von %s.\n\n" \
|
|
"$(numfmt --to=iec $USED_BYTES)" "$QUOTA_RAW"
|
|
|
|
printf "Bitte lösche nicht mehr benötigte Dateien."
|
|
} \
|
|
| mailx -s "Nextcloud-Speicherwarnung ($PERCENT%)" -r "$SENDER_EMAIL" "$EMAIL"
|
|
else
|
|
echo "Quota usage for $USER is OK"
|
|
fi
|
|
fi
|
|
done
|
|
|
|
echo "Done."
|