add quota checker
This commit is contained in:
78
tools/nextcloud_quotacheck.sh
Executable file
78
tools/nextcloud_quotacheck.sh
Executable file
@@ -0,0 +1,78 @@
|
||||
#!/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."
|
||||
Reference in New Issue
Block a user