3 changed files with 164 additions and 0 deletions
@ -0,0 +1,4 @@
|
||||
# ServiceInfo generator |
||||
|
||||
ServiceInfo is a JSON format for publishing meta-data about fediverse-related |
||||
services available on a DNS domain. |
@ -0,0 +1,82 @@
|
||||
{ |
||||
"version": "1.0", |
||||
"id": "https://xmpp.chapril.org/", |
||||
"name": "Messagerie instantanée Chapril", |
||||
"classifiers": ["xmpp", "instant-messaging"], |
||||
"software": { |
||||
"name": "ejabberd", |
||||
"version": "__EJABBERD_VERSION__", |
||||
"repository": "https://github.com/processone/ejabberd/" |
||||
}, |
||||
"organization": { |
||||
"name": "Chapril", |
||||
"contact": "https://www.chapril.org/contact.html" |
||||
}, |
||||
"protocols": [ |
||||
{ |
||||
"name": "xmpp", |
||||
"capabilities": [ |
||||
{ |
||||
"presence": true, |
||||
"mam": true, |
||||
"in-band-registration": true, |
||||
"web-registration": false, |
||||
"storage-quota": "__USER_QUOTA__", |
||||
"upload-autovaccum": "__UPLOAD_RETENTION__", |
||||
"irc-gateway": false |
||||
} |
||||
] |
||||
} |
||||
], |
||||
"otherServices": { |
||||
"outbound": [ |
||||
"irc" |
||||
], |
||||
"inbound": [] |
||||
}, |
||||
"signups": "open", |
||||
"visibilityPreferences": { |
||||
"allowCrawling": true, |
||||
"preferUnlisted": false |
||||
}, |
||||
"metrics": [ |
||||
{ |
||||
"type": "totalUsers", |
||||
"value": __TOTAL_USER_ACCOUNTS__ |
||||
}, |
||||
{ |
||||
"type": "activeUsers", |
||||
"value": __ACTIVE_USER_WEEK__, |
||||
"periodLength": 604800, |
||||
"startTime": "__STARTTIME_WEEK__" |
||||
}, |
||||
{ |
||||
"type": "activeUsers", |
||||
"value": __ACTIVE_USER_MONTH__, |
||||
"periodLength": 2592000, |
||||
"startTime": "__STARTTIME_MONTH__" |
||||
}, |
||||
{ |
||||
"type": "activeUsers", |
||||
"value": __ACTIVE_USER_HALFYEAR__, |
||||
"periodLength": 15552000, |
||||
"startTime": "__STARTTIME_HALFYEAR__" |
||||
}, |
||||
{ |
||||
"type": "localMessages", |
||||
"value": 60640 |
||||
} |
||||
], |
||||
"features": [ |
||||
{ |
||||
"name": "Movim", |
||||
"type": "UI", |
||||
"description": "Web-based XMPP client" |
||||
}, |
||||
{ |
||||
"name": "biboumi", |
||||
"type": "gateway", |
||||
"description": "XMPP->IRC gateway" |
||||
} |
||||
] |
||||
} |
@ -0,0 +1,78 @@
|
||||
#! /bin/bash |
||||
|
||||
TEMPLATE=/srv/xmpp.chapril.org/tools/serviceinfo/template-serviceinfo.json |
||||
TARGET_FILE=/srv/serviceinfo.json |
||||
|
||||
main() { |
||||
cat "${TEMPLATE}" \ |
||||
| sed "s/__USER_QUOTA__/$(get_hard_quota)/" \ |
||||
| sed "s/__UPLOAD_RETENTION__/1y/" \ |
||||
| sed "s/__TOTAL_USER_ACCOUNTS__/$(count_user_accounts)/" \ |
||||
| sed "s/__EJABBERD_VERSION__/$(get_ejabberd_version)/" \ |
||||
| 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)/" \ |
||||
> ${TARGET_FILE} |
||||
# | 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 username) |
||||
from archive |
||||
where peer not like 'irc%' |
||||
and kind = 'chat' |
||||
and created_at > 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 |
Loading…
Reference in new issue