feat(bot): regroupe les services pour un affichage plus efficace
This commit is contained in:
parent
2b6385b0b4
commit
226fc5bdbf
36
icingabot.py
36
icingabot.py
@ -15,6 +15,7 @@ import json
|
|||||||
import os.path
|
import os.path
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
from itertools import groupby
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
@ -107,7 +108,7 @@ class Icinga2ServiceManager:
|
|||||||
"X-HTTP-Method-Override": "GET",
|
"X-HTTP-Method-Override": "GET",
|
||||||
}
|
}
|
||||||
data = {
|
data = {
|
||||||
"attrs": ["last_check_result"],
|
"attrs": ["last_check_result", "display_name", "host_name"],
|
||||||
"filter": "service.state!=ServiceOK",
|
"filter": "service.state!=ServiceOK",
|
||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
@ -309,18 +310,35 @@ class IcingaBot(Icinga2ServiceManager, irc.bot.SingleServerIRCBot):
|
|||||||
def do_leave(self, c, e):
|
def do_leave(self, c, e):
|
||||||
self.disconnect()
|
self.disconnect()
|
||||||
|
|
||||||
|
def regrouped_ko_services(self):
|
||||||
|
def regroup_key(elem):
|
||||||
|
return elem["attrs"]["display_name"]
|
||||||
|
|
||||||
|
return [
|
||||||
|
(group, [service["attrs"]["host_name"] for service in services])
|
||||||
|
for group, services in groupby(
|
||||||
|
sorted(self.ko_services, key=regroup_key), regroup_key
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
||||||
def do_list(self, c, e):
|
def do_list(self, c, e):
|
||||||
if self.notifications:
|
if self.ko_services:
|
||||||
for srv in self.notifications:
|
host_by_service = [
|
||||||
try:
|
(service, [hostname.split(".")[0] for hostname in hosts])
|
||||||
|
for service, hosts in sorted(
|
||||||
|
self.regrouped_ko_services(), key=lambda x: -len(x[1])
|
||||||
|
)
|
||||||
|
]
|
||||||
self.send(
|
self.send(
|
||||||
"{}: => {}".format(
|
"\n".join(
|
||||||
srv["name"],
|
[
|
||||||
srv["attrs"]["last_check_result"]["output"],
|
"{} ({}): {}".format(
|
||||||
|
service, len(hostnames), ", ".join(hostnames)
|
||||||
|
)
|
||||||
|
for service, hostnames in host_by_service
|
||||||
|
]
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
except Exception:
|
|
||||||
self.send("{}: => No check result.".format(srv["name"]))
|
|
||||||
else:
|
else:
|
||||||
self.send("Nothing particularly exciting.")
|
self.send("Nothing particularly exciting.")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user