diff options
Diffstat (limited to 'metrics.py')
-rwxr-xr-x[-rw-r--r--] | metrics.py | 87 |
1 files changed, 16 insertions, 71 deletions
diff --git a/metrics.py b/metrics.py index 2f6b82b..ad23033 100644..100755 --- a/metrics.py +++ b/metrics.py @@ -2,7 +2,7 @@ # -*- coding: utf-8 -*- import ipaddress -from api import EjabberdApi +from control import EjabberdCtl # rfc6052: IPv6 Addressing of IPv4/IPv6 Translators nat64 = ipaddress.ip_network("64:ff9b::/96") @@ -14,7 +14,7 @@ class EjabberdMetrics: """ def __init__(self, url, login=None, api="rpc", muc_host: str = 'conference'): # init ejabberd api - self.api = EjabberdApi(url, login, api) + self.api = EjabberdCtl(url, login, api) self._cmd = self.api.cmd # variables @@ -55,61 +55,6 @@ class EjabberdMetrics: return 4 return addr.version - 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"] - def fetch_muc(self, vhost=None): host = "global" if vhost is not None: @@ -124,15 +69,15 @@ class EjabberdMetrics: def update(self): # nodes - self._nodes = self.fetch_nodes() + self._nodes = self.api.fetch_nodes() # vhosts - self._vhosts = self.fetch_vhosts() + self._vhosts = self.api.fetch_vhosts() # registered if not hasattr(self, "_registered"): self._registered = {} - self._registered[None] = self.fetch_registered() + self._registered[None] = self.api.fetch_registered() # muc if not hasattr(self, "_muc"): @@ -141,20 +86,20 @@ class EjabberdMetrics: # registered + muc for vhost in self._vhosts: - self._registered[vhost] = self.fetch_registered(vhost) + self._registered[vhost] = self.api.fetch_registered(vhost) self._muc[vhost] = self.fetch_muc(vhost) # online user - self._onlineuser = self.fetch_onlineuser() + self._onlineuser = self.api.fetch_onlineuser() # s2s - self._s2s_in = self.fetch_s2s_in() - self._s2s_out = self.fetch_s2s_out() + self._s2s_in = self.api.fetch_s2s_in() + self._s2s_out = self.api.fetch_s2s_out() def get_online_by(self, by="node", parse=None, vhost=None, node=None): parser = parse or (lambda a: a) if not hasattr(self, "_onlineuser"): - self._onlineuser = self.fetch_onlineuser() + self._onlineuser = self.api.fetch_onlineuser() data = {} for conn in self._onlineuser: @@ -192,7 +137,7 @@ class EjabberdMetrics: def get_online_client_by(self, by="ip", parse=None, vhost=None, node=None): parser = parse or self._ipversion if not hasattr(self, "_onlineuser"): - self._onlineuser = self.fetch_onlineuser() + self._onlineuser = self.api.fetch_onlineuser() data = {} for conn in self._onlineuser: @@ -221,7 +166,7 @@ class EjabberdMetrics: if not hasattr(self, "_registered"): self._registered = {} if vhost not in self._registered: - self._registered[vhost] = self.fetch_registered(vhost) + self._registered[vhost] = self.api.fetch_registered(vhost) return self._registered[vhost] def get_muc(self, vhost=None): @@ -233,17 +178,17 @@ class EjabberdMetrics: def get_vhosts(self): if not hasattr(self, "_vhosts"): - self._vhosts = self.fetch_vhosts() + self._vhosts = self.api.fetch_vhosts() return self._vhosts def get_s2s_in(self): if not hasattr(self, "_s2s_in"): - self._s2s_in = self.fetch_s2s_in() + self._s2s_in = self.api.fetch_s2s_in() return self._s2s_in def get_s2s_out(self): if not hasattr(self, "_s2s_out"): - self._s2s_out = self.fetch_s2s_out() + self._s2s_out = self.api.fetch_s2s_out() return self._s2s_out def get_vhost_metrics(self, vhost): @@ -261,7 +206,7 @@ class EjabberdMetrics: def get_nodes(self): if not hasattr(self, "_nodes"): - self._nodes = self.fetch_nodes() + self._nodes = self.api.fetch_nodes() return self._nodes def get_node_metrics(self, node): |