#! /bin/bash TEMPLATE=/srv/xmpp.chapril.org/tools/chatonsinfos/template-chatonsinfos.properties TARGET_FILE=/srv/chatonsinfos/well-known/xmppchaprilorg.properties main() { cat "${TEMPLATE}" \ | sed "s/__EJABBERD_VERSION__/$(get_ejabberd_version)/" \ | sed "s/__LAST_UPDATE__/$(date -Iminutes)/" \ | sed "s/__TOTAL_USER_ACCOUNTS__/$(count_user_accounts)/" \ | sed "s/__ACTIVE_USER_WEEK__/$(user_activity 7)/" \ | sed "s/__ACTIVE_USER_MONTH__/$(user_activity 30)/" \ | sed "s/__ACTIVE_USER_YEAR__/$(user_activity 365)/" \ > ${TARGET_FILE} # | sed "s/__USER_QUOTA__/$(get_hard_quota)/" \ # | sed "s/__UPLOAD_RETENTION__/1y/" \ # | sed "s/__STARTTIME_WEEK__/$(starttime 7)/" \ # | sed "s/__STARTTIME_MONTH__/$(starttime 30)/" \ # | sed "s/__STARTTIME_HALFYEAR__/$(starttime 180)/" \ # | sed "s/__ACTIVE_USER_WEEK__/$(user_activity 7)/" \ # | sed "s/__ACTIVE_USER_MONTH__/$(user_activity 30)/" \ # | sed "s/__ACTIVE_USER_HALFYEAR__/$(user_activity 180)/" \ # | sed "s/__POSTS_COUNT__/$(count_archived_messages)/" \ # | sed "s/__AVG_DISK_USED_PER_USER__/$(TODO)/" \ } get_ejabberd_version() { dpkg -l ejabberd | grep ejabberd | awk '{print $3}' } count_user_accounts() { # exclude special accounts like r.giskard (for compliance tester) an bart and lisa for testing. sudo -u ejabberd ejabberdctl registered_users chapril.org | egrep -v -e 'r\.giskard' -e '(lisa|bart)\.simpson' | wc -l } get_hard_quota() { grep hard_quota /etc/ejabberd/ejabberd.yml -A2 | grep all | sed -r 's/^\s*-\s([0-9]+).*/\1/' } per_account_storage_usage() { STORAGE_DIR="/srv/ejabberd/chapril.org/upload/" # TODO Directories to ignore because they are used for tests accounts (bart and lisa simpsons) IGNORE_DIRS="35eae3ddc83d72e4d3fad3160a400db688d7d936 9be859c77649f33d207cbe0d74a126b2fd31cb33" echo "Per user disk usage:" tmp="$(du -sh ${STORAGE_DIR}* | sort -hr | awk '{print $1}')" echo "** Max: "$(echo "${tmp}" | head -n 1) # echo " Min: "$(echo "${tmp}" | tail -n 1) subfolders_count=$(find ${STORAGE_DIR} -mindepth 1 -maxdepth 1 -type d | wc -l) total_size=$(du -s ${STORAGE_DIR} | awk '{print $1}') avg=$(((${total_size} / 1024) / ${subfolders_count})) echo "** Avg: ${avg}M" } starttime() { days_back=${1:-30} date -u +%Y-%m-%dT%H:%M:%SZ --date="08:42 ${days_back} days ago" } user_activity() { days_back=${1:-30} sql="select count(distinct l.username) from last l where to_timestamp(cast(l.seconds as int)) > current_timestamp - interval '${days_back} days' and username not in ('r.giskard', 'lisa.simpson', 'bart.simpson')" psql -U ejabberd -h localhost ejabberd -c "${sql}" -t | grep -v '^$' | awk '{print $1}' } count_archived_messages() { sql="select count(*) from archive where peer not like 'irc%' and username not in ('r.giskard', 'lisa.simpson', 'bart.simpson')" psql -U ejabberd -h localhost ejabberd -c "${sql}" -t | grep -v '^$' | awk '{print $1}' } main