From 34fe3e91b9a729129d08833752ee4be360cf65a7 Mon Sep 17 00:00:00 2001 From: Giacomo Sanchietti Date: Fri, 10 May 2024 15:34:10 +0200 Subject: [PATCH] ns-api: dashboard, add ovpn-tunnels counter (#513) --- packages/ns-api/README.md | 17 +++++++++++++++++ packages/ns-api/files/ns.dashboard | 24 +++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/packages/ns-api/README.md b/packages/ns-api/README.md index 6d0862aee..6edec688c 100644 --- a/packages/ns-api/README.md +++ b/packages/ns-api/README.md @@ -2255,6 +2255,23 @@ Response example: } ``` +### ovpn-tunnels + +Count enabled and connected OpenVPN tunnels: +``` +api-cli ns.dashboard ovpn-tunnels +``` + +Response example: +```json +{ + "result": { + "enabled": 2, + "connected": 1 + } +} +``` + ## ns.subscription Manage server subscription for [my.nethesis.it](https://my.nethesis.it) and [my.nethserver.com](https://my.nethserver.com). diff --git a/packages/ns-api/files/ns.dashboard b/packages/ns-api/files/ns.dashboard index 3291f2c11..61fcf366f 100644 --- a/packages/ns-api/files/ns.dashboard +++ b/packages/ns-api/files/ns.dashboard @@ -265,7 +265,6 @@ def ipsec_is_connected(id): return False return False - def ipsec_tunnels(): ret = {"enabled": 0, "connected": 0} u = EUci() @@ -276,6 +275,27 @@ def ipsec_tunnels(): ret["connected"] += 1 return {"result": ret} +def ovpn_tunnels(): + u = EUci() + ret = {"enabled": 0, "connected": 0} + for section in u.get_all('openvpn'): + vpn = u.get_all("openvpn", section) + # skip custom config and roadwarrior + if not section.startswith("ns_") or 'ns_auth_mode' in vpn: + continue + if vpn.get("enabled", "0") == "1": + ret["enabled"] += 1 + + if vpn.get("client", "0") == "1" or vpn.get("ns_client", "0") == "1": + connected = ovpn.list_connected_clients(section, 'p2p') + if 'stats' in connected: + ret["connected"] += 1 + else: + connected = ovpn.list_connected_clients(section, vpn.get("topology", "subnet")) + if len(connected) > 0: + ret["connected"] += 1 + return ret + def service_status(service): ret = {"status": "disabled"} if service == "internet": @@ -346,5 +366,7 @@ elif cmd == 'call': ret = interface_traffic(args["interface"]) elif action == "ipsec-tunnels": ret = ipsec_tunnels() + elif action == "ovpn-tunnels": + ret = ovpn_tunnels() print(json.dumps({"result": ret}))