#!/bin/bash # (c) Copyright by authors of the Tiki Wiki CMS Groupware Project # # All Rights Reserved. See copyright.txt for details and a complete list of authors. # Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details. # # Looks up actionlog content and allow trimming because it could grow forever # TODO: non-interactive silent mode for crontab # TODO: allow more flexible choices, such as "keep last NNN entries" etc. usage() { echo "Usage: $0 [path/to/local.php]" } if [[ "$1" = "" ]] then # If no parameter was given, try to guess if [[ -f db/local.php ]] then LOCALFILE="db/local.php" echo "Detected: $LOCALFILE" else usage exit 1 fi else # Use the one provided LOCALFILE="$1" fi echo "Using: $LOCALFILE" if [[ -f "$LOCALFILE" ]] then DB_DETECTED=$(grep "^\$dbs_tiki" "$LOCALFILE" | cut -d"'" -f2| tail -n 1); USER_DETECTED=$(grep "^\$user_tiki" "$LOCALFILE" | cut -d"'" -f2| tail -n 1); PASS_DETECTED=$(grep "^\$pass_tiki" "$LOCALFILE" | cut -d"'" -f2| tail -n 1); else echo "ERROR: local.php file not found" usage exit 1 fi #mysql -u "${USER_DETECTED}" --password="${PASS_DETECTED}" "${DB_DETECTED}" -e "SHOW TABLES;" COUNT=$(mysql --skip-column-names --silent -u "${USER_DETECTED}" --password="${PASS_DETECTED}" "${DB_DETECTED}" -e "SELECT COUNT(*) FROM tiki_actionlog ; ") #mysql -u "${USER_DETECTED}" --password="${PASS_DETECTED}" "${DB_DETECTED}" -e "SELECT * FROM tiki_actionlog ORDER by lastModif DESC LIMIT 4; " COUNT_OLDER_THAN_1_YEAR=$(mysql --skip-column-names --silent -u "${USER_DETECTED}" --password="${PASS_DETECTED}" "${DB_DETECTED}" -e "SELECT COUNT(*) FROM tiki_actionlog WHERE FROM_UNIXTIME(lastModif) < DATE_SUB(NOW(),INTERVAL 1 YEAR) ; ") COUNT_OLDER_THAN_2_YEARS=$(mysql --skip-column-names --silent -u "${USER_DETECTED}" --password="${PASS_DETECTED}" "${DB_DETECTED}" -e "SELECT COUNT(*) FROM tiki_actionlog WHERE FROM_UNIXTIME(lastModif) < DATE_SUB(NOW(),INTERVAL 2 YEAR) ; ") TIME_OLDEST=$(mysql --skip-column-names --silent -u "${USER_DETECTED}" --password="${PASS_DETECTED}" "${DB_DETECTED}" -e "SELECT lastModif FROM tiki_actionlog ORDER BY lastModif ASC LIMIT 1; ") TIME_OLDEST_FRIENDLY=$(date "+%F %H:%M %Z" --date="@${TIME_OLDEST}") TIME_LATEST=$(mysql --skip-column-names --silent -u "${USER_DETECTED}" --password="${PASS_DETECTED}" "${DB_DETECTED}" -e "SELECT lastModif FROM tiki_actionlog ORDER BY lastModif DESC LIMIT 1; ") TIME_LATEST_FRIENDLY=$(date "+%F %H:%M %Z" --date="@${TIME_LATEST}") echo "Number of entries in table tiki_actionlog: ${COUNT}" echo "Number of entries older than 1 year: ${COUNT_OLDER_THAN_1_YEAR}" echo "Number of entries older than 2 years: ${COUNT_OLDER_THAN_2_YEARS}" echo "Oldest entry is dated: ${TIME_OLDEST_FRIENDLY}" echo "Latest entry is dated: ${TIME_LATEST_FRIENDLY}" echo "Delete entries older than 1 year? (y/N)" read delete if [ "$delete" = "y" ] then mysql -u "${USER_DETECTED}" --password="${PASS_DETECTED}" "${DB_DETECTED}" -e "DELETE FROM tiki_actionlog WHERE FROM_UNIXTIME(lastModif) < DATE_SUB(NOW(),INTERVAL 1 YEAR) ; " else echo "Delete entries older than 2 years? (y/N)" read delete if [ "$delete" = "y" ] then mysql -u "${USER_DETECTED}" --password="${PASS_DETECTED}" "${DB_DETECTED}" -e "DELETE FROM tiki_actionlog WHERE FROM_UNIXTIME(lastModif) < DATE_SUB(NOW(),INTERVAL 2 YEAR) ; " fi fi