Some functionalities in MongooseIM are provided by "services". A service is similar to a module, but while a module is started for every virtual host and may have global or host-specific configuration, a service is started only once with global configuration. Service configuration is similar to a module configuration, e.g.:
{services, [
{service_admin_extra, [{submods, [node, accounts, sessions]}]}
]
}.
As of version 2.2, only one module is a "service provider". Eventually the modules which are not host-specific will be refactored to be services.
Provides additional commands to mongooseimctl script.
submods
(default: all submodules): List of function groups added byservice_admin_extra
. Allowed elements:accounts
: Addschange_password
,check_password_hash
,delete_old_users
,delete_old_users_vhost
,ban_account
,num_active_users
,check_account
,check_password
last
: Addsset_last
node
: Addsload_config
,get_cookie
,remove_node
private
: Addsprivate_get
,private_set
roster
: Addsadd_rosteritem
,delete_rosteritem
,process_rosteritems
,get_roster
,push_roster
,push_roster_all
,push_roster_alltoall
sessions
: Addsnum_resources
,resource_num
,kick_session
,status_num_host
,status_num
,status_list_host
,status_list
,connected_users_info
,connected_users_vhost
,user_sessions_info
,set_presence
stanza
: Addssend_message_chat
,send_message_headline
,send_stanza_c2s
stats
: Addsstats
,stats_host
vcard
: Addsget_vcard
,get_vcard2
,get_vcard2_multi
,set_vcard
,set_vcard2
,set_vcard2_multi
gdpr
: Addsretrieve_personal_data
{service_admin_extra, [{submods, [node, accounts, sessions]}]}
The service_admin_extra
module depends on the service_cache
(see below) as the cache speeds up GDPR data retrieval and removal.
The implementation of cache storage.
The module exposes a function lookup/2
with parameters Key
and Fun
.
When the function is called and the key Key
exists in cache, the related value is returned.
Otherwise, it evaluates Fun
and stores the result under Key
.
Function Fun
is expected to return either {ok, Value}
or error
.
{service_cache, []}
LookupFN = fun() -> {ok, find_implementations(Behaviour)} end,
{ok, Modules} = service_cache:lookup({behaviour, Behaviour}, LookupFN),