#!/bin/bash
PATH=/bin:/usr/bin
if [[ -n $VERBOSE ]]; then echo Verbose On; fi
# add support for multiple wikis -- mutante
declare -a wiki_names
wiki_names="oddwiki dikiwiki kabowiki eartwiki obmwiki"
for wiki_name in $wiki_names
do
echo "backing up $wiki_name..."
# source code location for this file
SOURCE=/home/mattis/bin/maintenance
# where should the archive file end up
ARCHIVE=/var/www/vhosts/${wiki_name}.org/httpdocs
# CGI script directory for faster maintenance
CGI_BIN=/var/www/vhosts/${wiki_name}.org/cgi-bin
# Data dir
DATA_DIR=/var/www/vhosts/${wiki_name}.org/data
# URL of the wiki.
if [ $wiki_name == "oddwiki" ]
then
SCRIPT_NAME=http://www.${wiki_name}.org/odd
else
SCRIPT_NAME=http://www.${wiki_name}.org/hive
fi
# Extract the administrator password from the config file. Should
# look as follows: $AdminPass="foo";
PW=`sed -n 's/\$AdminPass="\(.*\)";/\1/p' < $DATA_DIR/config`
# Find all the namespaces in the "hive".
NS=`find $DATA_DIR/ -maxdepth 1 -type d -name '[A-Z]*' | sort`
# Maintenance action for all namespaces. This code used to sleep
# between calls to give other processes a chance to run. We're running
# perl nice, now, however.
cd $CGI_BIN
if [[ -z $NOMAINT ]]; then
if [[ -n $VERBOSE ]]; then echo Starting Maintenance; fi
MAINT=$DATA_DIR/maintenance
mkdir -p $MAINT
for f in $NS; do
f=`basename $f`
if [[ -n $VERBOSE ]]; then echo $f; fi
nice perl odd.pl action=maintain ns=$f | tail -n +7 > "$MAINT/$f.html"
done
# Run maintenance on the main namespace (same as above without
# namespace). This will make sure that pages marked for deletion that
# are ready to be deleted are in fact deleted. We'll delete the wikis
# without pages down below.
if [[ -n $VERBOSE ]]; then echo Main; fi
nice perl odd.pl action=maintain | tail -n +7 > "$MAINT/Main.html"
if [[ -n $VERBOSE ]]; then echo Done; fi
fi
cd
# Copy the default homepage.
if [[ -n $VERBOSE ]]; then echo Installing DefaultHomePage; fi
wget -O $DATA_DIR/README \
-q "$SCRIPT_NAME/raw/DefaultHomePage"
for hp in `find $DATA_DIR/page/ -name 'DefaultHomePage??.pg'`; do
page=`basename $hp .pg`
lang=`echo $page | sed -n 's/.*\(..\)$/\1/p' | tr '[A-Z]' '[a-z]'`
wget -O $DATA_DIR/README.$lang \
-q "$SCRIPT_NAME/raw/$page"
done
# overwrite the redirect in the english copy
cp -f $DATA_DIR/README $DATA_DIR/README.en
# Status -- find empty wikis by counting the number of page files.
# When counting, ignore symlinks because BannedContent.pg is a symlink
# (see above). Also post the data collected on the Status page. Make
# sure that nothing in the rest of this script visits the wikis lest
# their data directories be recreated.
if [[ -n $VERBOSE ]]; then echo Computing status and deleting empty wikis; fi
STATUS='Current Status:\n'
for f in $NS; do
PG=`(test -d $f/page && find $f/page -name '*.pg' -type f) | wc -l`
NM=`basename $f`
if [[ $PG == '0' ]]; then
if rm -rf "$f"; then
true;
else
STATUS="$STATUS\n* $NM had 0 pages but deletion failed"
fi
else
LAST_FILE=`ls -1 -t $f/page/*/*.pg|head -1`
MOD=`date -r $LAST_FILE --utc '+%Y-%m-%d %H:%M'`
STATUS="$STATUS\n* $NM:HomePage has $PG pages, last modified $MOD"
AGE=`date '+%s' -r $LAST_FILE`
NOW=`date '+%s'`
DAYS=$(( ($NOW-${AGE:-0}) / 60 / 60 / 24 ))
if [ $DAYS -gt 366 ]; then
STATUS="$STATUS, this was more than a year ago"
else
if [ $DAYS -gt 183 ]; then
STATUS="$STATUS, this was more than half a year ago"
fi
fi
fi
done
# Translate \n to newlines and post status
if [[ -n $VERBOSE ]]; then echo Posting status; fi
STATUS=`echo -e $STATUS`
curl -F "summary=Page count for all namespaces" \
-F "title=Status" \
-F "text=$STATUS" \
-F "username=CronJob" \
-F "pwd=$PW" \
$SCRIPT_NAME
# Documenting what we do
if [[ -n $VERBOSE ]]; then echo Installing script and config files; fi
# Upload the maintenance script as a file.
curl -F "summary=Script update" \
-F "title=maintenance" \
-F "text=<$SOURCE" \
-F "username=CronJob" \
-F "pwd=$PW" \
$SCRIPT_NAME
# Upload config but without the password.
CONFIG=`sed -e "s/$PW/*secret*/" < $DATA_DIR/config`;
curl -F "summary=Config update" \
-F "title=config" \
-F "text=$CONFIG" \
-F "username=CronJob" \
-F "pwd=$PW" \
$SCRIPT_NAME
# Write archive in the home directory
if [[ -n $VERBOSE ]]; then echo Creating new archive; fi
cd $DATA_DIR/..
DIR=`basename $DATA_DIR`
DATE=`date "+%Y-%V"`
tar czf $ARCHIVE/${wiki_name}-$DATE.tar.gz $DIR
# add a link to the current .tar.gz - mutante
ln -s $ARCHIVE/${wiki_name}=-$DATE.tar.gz $ARCHIVE/${wiki_name}.tar.gz
done