85 lines
2.4 KiB
Python
85 lines
2.4 KiB
Python
|
#!/usr/bin/env python3
|
||
|
# -*- coding: utf-8 -*-
|
||
|
import re
|
||
|
import logging
|
||
|
|
||
|
from packaging import version
|
||
|
from api import EjabberdApi
|
||
|
|
||
|
class EjabberdCtl(EjabberdApi):
|
||
|
|
||
|
|
||
|
@property
|
||
|
def verstring(self):
|
||
|
if self._login is not None:
|
||
|
ver_str = re.compile('([1-9][0-9.]+(?![.a-z]))\\b')
|
||
|
status = self.cmd('status', {})
|
||
|
|
||
|
# matches
|
||
|
try:
|
||
|
tmp = ver_str.findall(status)[0]
|
||
|
# raise SystemExit code 17 if no status message is received
|
||
|
except TypeError:
|
||
|
raise SystemExit(17)
|
||
|
|
||
|
# return parsed version string
|
||
|
logging.debug(f"fetch version: {tmp}")
|
||
|
return version.parse(tmp)
|
||
|
|
||
|
return None
|
||
|
|
||
|
def fetch_onlineuser(self):
|
||
|
tmp = self.cmd("connected_users_info", {})
|
||
|
if "connected_users_info" not in tmp:
|
||
|
return tmp
|
||
|
data = []
|
||
|
for c in tmp["connected_users_info"]:
|
||
|
if "session" not in c:
|
||
|
continue
|
||
|
user = {}
|
||
|
for attrs in c["session"]:
|
||
|
for k, v in attrs.items():
|
||
|
user[k] = v
|
||
|
data.append(user)
|
||
|
return data
|
||
|
|
||
|
def fetch_nodes(self):
|
||
|
result = self.cmd("list_cluster", {})
|
||
|
if "nodes" not in result:
|
||
|
return result
|
||
|
data = []
|
||
|
for node in result["nodes"]:
|
||
|
data.append(node["node"])
|
||
|
return data
|
||
|
|
||
|
def fetch_vhosts(self):
|
||
|
result = self.cmd("registered_vhosts", {})
|
||
|
if "vhosts" not in result:
|
||
|
return result
|
||
|
data = []
|
||
|
for vhost in result["vhosts"]:
|
||
|
data.append(vhost["vhost"])
|
||
|
return data
|
||
|
|
||
|
def fetch_s2s_in(self):
|
||
|
result = self.cmd("incoming_s2s_number", {})
|
||
|
if "s2s_incoming" not in result:
|
||
|
return result
|
||
|
return result["s2s_incoming"]
|
||
|
|
||
|
def fetch_s2s_out(self):
|
||
|
result = self.cmd("outgoing_s2s_number", {})
|
||
|
if "s2s_outgoing" not in result:
|
||
|
return result
|
||
|
return result["s2s_outgoing"]
|
||
|
|
||
|
def fetch_registered(self, vhost=None):
|
||
|
if vhost is None:
|
||
|
result = self.cmd("stats", {"name":"registeredusers"})
|
||
|
if "stat" in result:
|
||
|
return result["stat"]
|
||
|
else:
|
||
|
result = self.cmd("stats_host", {"name":"registeredusers", "host": vhost})
|
||
|
if "stat" in result:
|
||
|
return result["stat"]
|