s2s_in/out + muc

This commit is contained in:
Martin/Geno 2019-10-17 09:13:00 +02:00
parent 02a9c3cbac
commit 4ceca3f87e
No known key found for this signature in database
GPG Key ID: 9D7D3C6BFF600C6A
2 changed files with 61 additions and 10 deletions

View File

@ -13,9 +13,12 @@ class EjabberdMetrics():
def _cmd(self, command, data): def _cmd(self, command, data):
fn = getattr(self._server, command) fn = getattr(self._server, command)
try:
if self._login is not None: if self._login is not None:
return fn(self._login, data) return fn(self._login, data)
return fn(data) return fn(data)
except:
return {}
def fetch_onlineuser(self): def fetch_onlineuser(self):
data = None data = None
@ -51,6 +54,18 @@ class EjabberdMetrics():
data.append(vhost["vhost"]) data.append(vhost["vhost"])
return data return data
def fetch_s2s_in(self):
result = self._cmd("incoming_s2s_number",{})
if "s2s_incoming" not in result:
return None
return result["s2s_incoming"]
def fetch_s2s_out(self):
result = self._cmd("outgoing_s2s_number",{})
if "s2s_outgoing" not in result:
return None
return result["s2s_outgoing"]
def fetch_registered(self, vhost=None): def fetch_registered(self, vhost=None):
if vhost is None: if vhost is None:
result = self._cmd("stats", {"name":"registeredusers"}) result = self._cmd("stats", {"name":"registeredusers"})
@ -61,6 +76,14 @@ class EjabberdMetrics():
if "stat" in result: if "stat" in result:
return result["stat"] return result["stat"]
def fetch_muc(self, vhost=None):
host = "global"
if vhost is not None:
host = "conference." + vhost
result = self._cmd("muc_online_rooms", {"host": host})
if "rooms" in result:
return len(result["rooms"])
def update(self): def update(self):
# nodes # nodes
self._nodes = self.fetch_nodes() self._nodes = self.fetch_nodes()
@ -70,10 +93,19 @@ class EjabberdMetrics():
if not hasattr(self, "_registered"): if not hasattr(self, "_registered"):
self._registered = {} self._registered = {}
self._registered[None] = self.fetch_registered() self._registered[None] = self.fetch_registered()
# muc
if not hasattr(self, "_muc"):
self._muc = {}
self._muc[None] = self.fetch_muc()
# registered + muc
for vhost in self._vhosts: for vhost in self._vhosts:
self._registered[vhost] = self.fetch_registered(vhost) self._registered[vhost] = self.fetch_registered(vhost)
self._muc[vhost] = self.fetch_muc(vhost)
# online user # online user
self._onlineuser = self.fetch_onlineuser() self._onlineuser = self.fetch_onlineuser()
# s2s
self._s2s_in = self.fetch_s2s_in()
self._s2s_out = self.fetch_s2s_out()
def get_online_by(self, by="node", parse=None, vhost=None, node=None): def get_online_by(self, by="node", parse=None, vhost=None, node=None):
@ -147,14 +179,32 @@ class EjabberdMetrics():
self._registered[vhost] = self.fetch_registered(vhost) self._registered[vhost] = self.fetch_registered(vhost)
return self._registered[vhost] return self._registered[vhost]
def get_muc(self, vhost=None):
if not hasattr(self, "_muc"):
self._muc = {}
if vhost not in self._muc:
self._muc[vhost] = self.fetch_muc(vhost)
return self._muc[vhost]
def get_vhosts(self): def get_vhosts(self):
if not hasattr(self, "_vhosts"): if not hasattr(self, "_vhosts"):
self._vhosts = self.fetch_vhosts() self._vhosts = self.fetch_vhosts()
return self._vhosts return self._vhosts
def get_s2s_in(self):
if not hasattr(self, "_s2s_in"):
self._s2s_in = self.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()
return self._s2s_out
def get_vhost_metrics(self, vhost): def get_vhost_metrics(self, vhost):
data = {} data = {}
data["registered"] = self.get_registered(vhost) data["registered"] = self.get_registered(vhost)
data["muc"] = self.get_muc(vhost)
data["online_by_status"] = self.get_online_by_status(vhost) data["online_by_status"] = self.get_online_by_status(vhost)
data["online_by_client"] = self.get_online_by_client(vhost) data["online_by_client"] = self.get_online_by_client(vhost)
data["online_by_ipversion"] = self.get_online_by_ipversion(vhost) data["online_by_ipversion"] = self.get_online_by_ipversion(vhost)
@ -181,6 +231,7 @@ class EjabberdMetrics():
def get_all(self): def get_all(self):
data = {} data = {}
data["registered"] = self.get_registered() data["registered"] = self.get_registered()
data["muc"] = self.get_muc()
data["online_by_status"] = self.get_online_by_status() data["online_by_status"] = self.get_online_by_status()
data["online_by_client"] = self.get_online_by_client() data["online_by_client"] = self.get_online_by_client()
data["online_by_ipversion"] = self.get_online_by_ipversion() data["online_by_ipversion"] = self.get_online_by_ipversion()
@ -199,6 +250,8 @@ class EjabberdMetrics():
nodes[node] = self.get_node_metrics(node) nodes[node] = self.get_node_metrics(node)
data["nodes"] = nodes data["nodes"] = nodes
data["s2s_in"] = self.get_s2s_in()
data["s2s_out"] = self.get_s2s_out()
return data return data

View File

@ -41,10 +41,14 @@ class Prometheus():
def _get_metrics(self): def _get_metrics(self):
output = "" output = ""
output += self._parse_metric("ejabberd_registered_total", self._metrics.get_registered()) output += self._parse_metric("ejabberd_node_s2s_in", self._metrics.get_s2s_in())
output += self._parse_metric("ejabberd_node_s2s_out", self._metrics.get_s2s_out())
for host in self._metrics.get_vhosts(): for host in self._metrics.get_vhosts():
output += self._parse_metric("ejabberd_registered_vhosts", self._metrics.get_registered(host), {"vhost": host}) output += self._parse_metric("ejabberd_registered_vhosts", self._metrics.get_registered(host), {"vhost": host})
muc = self._metrics.get_muc(host)
if muc is not None:
output += self._parse_metric("ejabberd_muc", muc, {"vhost": host})
for k, v in self._metrics.get_online_by_node(vhost=host).items(): for k, v in self._metrics.get_online_by_node(vhost=host).items():
output += self._parse_metric("ejabberd_online_vhost_node", v, {"vhost": host, "node": k}) output += self._parse_metric("ejabberd_online_vhost_node", v, {"vhost": host, "node": k})
@ -59,12 +63,6 @@ class Prometheus():
for k, v in self._metrics.get_online_by_ipversion(node=node, vhost=host).items(): for k, v in self._metrics.get_online_by_ipversion(node=node, vhost=host).items():
output += self._parse_metric("ejabberd_online_ipversion", v, {"vhost": host, "node": node, "ipversion": str(k)}) output += self._parse_metric("ejabberd_online_ipversion", v, {"vhost": host, "node": node, "ipversion": str(k)})
# next four lines should be dropped - it should be calc by ejabberd_online_vhost_node
for k, v in self._metrics.get_online_by_node().items():
output += self._parse_metric("ejabberd_online_node_total", v, {"node": k})
for k, v in self._metrics.get_online_by_vhost().items():
output += self._parse_metric("ejabberd_online_vhost_total", v, {"vhost": k})
return output return output