mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
Add diagnoser example for ip
This commit is contained in:
parent
b42bd20311
commit
7fb694dbcc
2 changed files with 69 additions and 1 deletions
55
data/hooks/diagnosis/10-ip.py
Normal file
55
data/hooks/diagnosis/10-ip.py
Normal file
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
from moulinette import m18n
|
||||
from moulinette.utils.network import download_text
|
||||
from yunohost.diagnosis import Diagnoser
|
||||
|
||||
class IPDiagnoser(Diagnoser):
|
||||
|
||||
def validate_args(self, args):
|
||||
if "version" not in args.keys():
|
||||
return { "versions" : [4, 6] }
|
||||
else:
|
||||
if str(args["version"]) not in ["4", "6"]:
|
||||
raise MoulinetteError(1, "Invalid version, should be 4 or 6.")
|
||||
return { "versions" : [int(args["version"])] }
|
||||
|
||||
def run(self):
|
||||
|
||||
versions = self.args["versions"]
|
||||
|
||||
if 4 in versions:
|
||||
ipv4 = self.get_public_ip(4)
|
||||
yield dict(meta = {"version": "4"},
|
||||
result = ipv4,
|
||||
report = ("SUCCESS", m18n.n("diagnosis_network_connected_ipv4")) if ipv4 \
|
||||
else ("ERROR", m18n.n("diagnosis_network_no_ipv4")))
|
||||
|
||||
if 6 in versions:
|
||||
ipv6 = self.get_public_ip(6)
|
||||
yield dict(meta = {"version": "6"},
|
||||
result = ipv6,
|
||||
report = ("SUCCESS", m18n.n("diagnosis_network_connected_ipv6")) if ipv6 \
|
||||
else ("WARNING", m18n.n("diagnosis_network_no_ipv6")))
|
||||
|
||||
|
||||
def get_public_ip(self, protocol=4):
|
||||
|
||||
if protocol == 4:
|
||||
url = 'https://ip.yunohost.org'
|
||||
elif protocol == 6:
|
||||
url = 'https://ip6.yunohost.org'
|
||||
else:
|
||||
raise ValueError("invalid protocol version")
|
||||
|
||||
try:
|
||||
return download_text(url, timeout=30).strip()
|
||||
except Exception as e:
|
||||
self.logger_debug("Could not get public IPv%s : %s" % (str(protocol), str(e)))
|
||||
return None
|
||||
|
||||
|
||||
def main(args, env, loggers):
|
||||
|
||||
return IPDiagnoser(args, env, loggers).report()
|
||||
|
|
@ -71,7 +71,7 @@ def diagnosis_run(categories=[], force=False, args=None):
|
|||
path = [p for n, p in all_categories if n == category ][0]
|
||||
|
||||
# TODO : get the return value and do something with it
|
||||
hook_exec(path, args=args, env=None)
|
||||
return {"report": hook_exec(path, args=args, env=None) }
|
||||
|
||||
|
||||
def diagnosis_ignore(category, args="", unignore=False):
|
||||
|
@ -79,6 +79,19 @@ def diagnosis_ignore(category, args="", unignore=False):
|
|||
|
||||
############################################################
|
||||
|
||||
class Diagnoser():
|
||||
|
||||
def __init__(self, args, env, loggers):
|
||||
|
||||
self.logger_debug, self.logger_warning, self.logger_info = loggers
|
||||
self.env = env
|
||||
self.args = self.validate_args(args)
|
||||
|
||||
def report(self):
|
||||
|
||||
# TODO : implement some caching mecanism in there
|
||||
return list(self.run())
|
||||
|
||||
def _list_diagnosis_categories():
|
||||
hooks_raw = hook_list("diagnosis", list_by="priority", show_info=True)["hooks"]
|
||||
hooks = []
|
||||
|
|
Loading…
Add table
Reference in a new issue