diff --git a/rapport_activite/rapport_activites.sh b/rapport_activite/rapport_activites.sh index a6810ee..31396e8 100755 --- a/rapport_activite/rapport_activites.sh +++ b/rapport_activite/rapport_activites.sh @@ -6,17 +6,21 @@ main() { echo "h2. ## Global info" echo "" echo "* Total accounts: $(sudo -u ejabberd ejabberdctl registered_users chapril.org | egrep -v -e 'r\.giskard' -e '(lisa|bart)\.simpson' | wc -l)" + echo "** Active: $(count_active_accounts)" + echo "** Inactive: $(count_inactive_accounts '1 MONTH')" + echo "** Removable: $(count_removable_accounts '6 MONTHS')" echo "* Total messages stored (MAM): $(count_archived_messages) " echo "* Total rooms active: $(sudo -u ejabberd ejabberdctl muc_online_rooms global | wc -l)" -# echo "Active users: $(sudo -u ejabberd ejabberdctl connected_users_number)" + echo "" + echo "_* Inactive accounts:_ no connection during last month" + echo "_* Removable accounts:_ no connection in the last 6 months *and* didn't read the welcome message" + echo "" echo "h2. ## HTTP upload storage:" echo "" echo "* User quota: $(get_hard_quota)M" echo "* Total disk usage: $(du -sh ${STORAGE_DIR} | awk '{print $1}')" per_account_storage_usage -# echo "s2s outgoing connections: $(sudo -u ejabberd ejabberdctl incoming_s2s_number)" -# echo "s2s incoming connections: $(sudo -u ejabberd ejabberdctl outgoing_s2s_number)" } get_hard_quota() { @@ -38,6 +42,44 @@ per_account_storage_usage() { echo "** Avg: ${avg}M" } +count_active_accounts() { + since=${1:-'1 MONTH'} + sql="select count(distinct l.username) + from last l + join users u on l.username = u.username + where to_timestamp(cast(l.seconds as int)) > current_timestamp - interval '${since}' + and l.username not in ('r.giskard', 'lisa.simpson', 'bart.simpson')" + + psql -U ejabberd -h localhost ejabberd -c "${sql}" -t | grep -v '^$' | awk '{print $1}' +} + +count_inactive_accounts() { + since=${1:-'1 MONTH'} + sql="select count(distinct l.username) + from last l + join users u on l.username = u.username + where to_timestamp(cast(l.seconds as int)) < current_timestamp - interval '${since}' + and l.username not in ('r.giskard', 'lisa.simpson', 'bart.simpson')" + + psql -U ejabberd -h localhost ejabberd -c "${sql}" -t | grep -v '^$' | awk '{print $1}' +} + + +count_removable_accounts() { + # Accounts inactive *and* who never read the welcome message. + since=${1:-'6 MONTHS'} + sql="select count(distinct l.username) + from last l + join users u on l.username = u.username + join spool s on l.username = s.username + where to_timestamp(cast(l.seconds as int)) < current_timestamp - interval '${since}' + and s.xml like '%from=''chapril.org'' xmlns=''jabber:client''%Bienvenue sur le serveur%' + and s.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() { psql -U ejabberd -h localhost ejabberd -c "select count(*) from archive where peer not like 'irc%' and username not in ('r.giskard', 'lisa.simpson', 'bart.simpson')" -t | grep -v '^$' | awk '{print $1}' }