Skip to content

Commit

Permalink
Merge pull request #77 from MarcLandis/wireguard
Browse files Browse the repository at this point in the history
Add support for WireGuard VPN
  • Loading branch information
bb-Ricardo committed Dec 1, 2022
2 parents 435ffef + d627c5e commit 4186d5d
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 8 deletions.
88 changes: 83 additions & 5 deletions fritzinfluxdb/classes/fritzbox/service_definitions/vpn_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ def prepare_json_response_data(response):
)

lua_services.append({
"name": "VPN Users",
"name": "VPN Users - IPSec",
"os_min_versions": "7.39",
"method": "POST",
"params": {
Expand All @@ -118,7 +118,7 @@ def prepare_json_response_data(response):
"next": {
"type": str,
"value_function": lambda data: data.get("connected"),
"tags_function": lambda data: {"name": data.get("name")}
"tags_function": lambda data: {"name": data.get("name"), "vpntype": "IPSec"}
},
"exclude_filter_function": lambda data: not isinstance(grab(data, "data.init.userConnections"), dict)
},
Expand All @@ -128,7 +128,7 @@ def prepare_json_response_data(response):
"next": {
"type": str,
"value_function": lambda data: data.get("active"),
"tags_function": lambda data: {"name": data.get("name")}
"tags_function": lambda data: {"name": data.get("name"), "vpntype": "IPSec"}
},
"exclude_filter_function": lambda data: not isinstance(grab(data, "data.init.userConnections"), dict)
},
Expand All @@ -138,7 +138,7 @@ def prepare_json_response_data(response):
"next": {
"type": str,
"value_function": lambda data: data.get("virtualAddress"),
"tags_function": lambda data: {"name": data.get("name")}
"tags_function": lambda data: {"name": data.get("name"), "vpntype": "IPSec"}
},
"exclude_filter_function": lambda data: not isinstance(grab(data, "data.init.userConnections"), dict)
},
Expand All @@ -148,7 +148,7 @@ def prepare_json_response_data(response):
"next": {
"type": str,
"value_function": lambda data: data.get("address"),
"tags_function": lambda data: {"name": data.get("name")}
"tags_function": lambda data: {"name": data.get("name"), "vpntype": "IPSec"}
},
"exclude_filter_function": lambda data: not isinstance(grab(data, "data.init.userConnections"), dict)
},
Expand All @@ -160,8 +160,86 @@ def prepare_json_response_data(response):
if x.get("connected") is True]
)
),
"tags_function": lambda data: {"vpntype": "IPSec"},
"exclude_filter_function": lambda data: not isinstance(grab(data, "data.init.userConnections"), dict)
}
}
}
)

lua_services.append({
"name": "VPN Users - WireGuard",
"os_versions": [
"7.39",
"7.50"
],
"method": "POST",
"params": {
"page": "shareWireguard",
"xhrId": "all",
"xhr": 1,
},
"response_parser": prepare_json_response_data,
"value_instances": {
"myfritz_host_name": {
"data_path": "data.init.server",
"type": str
},
"vpn_type": {
"data_path": "data.init.type", # currently falsely returns "IPSec Xauth PSK"
"type": str
},
"vpn_user_connected": {
"data_path": "data.init.boxConnections",
"type": dict,
"next": {
"type": str,
"value_function": lambda data: data.get("connected"),
"tags_function": lambda data: {"name": data.get("name"), "vpntype": "WireGuard"}
},
"exclude_filter_function": lambda data: not isinstance(grab(data, "data.init.boxConnections"), dict)
},
"vpn_user_active": {
"data_path": "data.init.boxConnections",
"type": dict,
"next": {
"type": str,
"value_function": lambda data: data.get("active"),
"tags_function": lambda data: {"name": data.get("name"), "vpntype": "WireGuard"}
},
"exclude_filter_function": lambda data: not isinstance(grab(data, "data.init.boxConnections"), dict)
},
"vpn_user_virtual_address": {
"data_path": "data.init.boxConnections",
"type": dict,
"next": {
"type": str,
"value_function": lambda data: data.get("remoteNet"),
"tags_function": lambda data: {"name": data.get("name"), "vpntype": "WireGuard"}
},
"exclude_filter_function": lambda data: not isinstance(grab(data, "data.init.boxConnections"), dict)
},
"vpn_user_remote_address": {
"data_path": "data.init.boxConnections",
"type": dict,
"next": {
"type": str,
"value_function": lambda data: data.get("remoteIp"),
"tags_function": lambda data: {"name": data.get("name"), "vpntype": "WireGuard"}
},
"exclude_filter_function": lambda data: not isinstance(grab(data, "data.init.boxConnections"), dict)
},
"vpn_user_num_active": {
"type": int,
"value_function": (lambda data:
len(
[x for x in grab(data, "data.init.boxConnections", fallback=dict()).values()
if x.get("connected") is True]
)
),
"tags_function": lambda data: {"vpntype": "WireGuard"},
"exclude_filter_function": lambda data: not isinstance(grab(data, "data.init.boxConnections"), dict)
}
}
}
)
6 changes: 3 additions & 3 deletions grafana/influx2_dashboards/fritzbox_system_dashboard.json
Original file line number Diff line number Diff line change
Expand Up @@ -4707,7 +4707,7 @@
"measurement": "/^$measurement$/",
"orderByTime": "ASC",
"policy": "default",
"query": "from(bucket: v.defaultBucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r.box == \"${boxtag}\" and r._field == \"vpn_user_num_active\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> drop(columns: [\"box\", \"_measurement\", \"_start\", \"_stop\"])",
"query": "from(bucket: v.defaultBucket)\n |> range(start: v.timeRangeStart, stop: v.timeRangeStop)\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r.box == \"${boxtag}\" and r._field == \"vpn_user_num_active\")\n |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)\n |> drop(columns: [\"box\", \"_measurement\", \"_start\", \"_stop\", \"vpntype\"])",
"refId": "A",
"resultFormat": "time_series",
"select": [
Expand Down Expand Up @@ -4808,7 +4808,7 @@
"measurement": "/^$measurement$/",
"orderByTime": "ASC",
"policy": "default",
"query": "from(bucket: v.defaultBucket)\n |> range(start: -1d)\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r.box == \"${boxtag}\" and\n (\n r._field == \"myfritz_host_name\" or\n r._field == \"vpn_type\" or\n r._field == \"vpn_user_num_active\"\n ) \n )\n |> last()\n |> toString()\n |> drop(columns: [\"box\", \"_measurement\", \"_start\", \"_stop\", \"_time\"])\n |> map(fn: (r) => ({\n r with _field:\n if r._field == \"myfritz_host_name\" then \"MyFritz Hostname\"\n else if r._field == \"vpn_type\" then \"VPN Type\"\n else if r._field == \"vpn_user_num_active\" then \"VPN User Active\"\n else r._field\n })\n )\n",
"query": "from(bucket: v.defaultBucket)\n |> range(start: -1d)\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r.box == \"${boxtag}\" and\n (\n r._field == \"myfritz_host_name\" or\n r._field == \"vpn_type\" or\n r._field == \"vpn_user_num_active\"\n ) \n )\n |> last()\n |> toString()\n |> drop(columns: [\"box\", \"_measurement\", \"_start\", \"_stop\", \"_time\", \"vpntype\"])\n |> map(fn: (r) => ({\n r with _field:\n if r._field == \"myfritz_host_name\" then \"MyFritz Hostname\"\n else if r._field == \"vpn_type\" then \"VPN Type\"\n else if r._field == \"vpn_user_num_active\" then \"VPN User Active\"\n else r._field\n })\n )\n",
"refId": "A",
"resultFormat": "time_series",
"select": [
Expand Down Expand Up @@ -5277,7 +5277,7 @@
"measurement": "/^$measurement$/",
"orderByTime": "ASC",
"policy": "default",
"query": "from(bucket: v.defaultBucket)\n |> range(start: -1d)\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r.box == \"${boxtag}\" and\n (\n r._field == \"vpn_user_active\" or\n r._field == \"vpn_user_connected\" or\n r._field == \"vpn_user_virtual_address\" or\n r._field == \"vpn_user_remote_address\"\n ) \n )\n |> last()\n |> drop(columns: [\"box\", \"_measurement\", \"_start\", \"_stop\", \"_time\"])\n\n",
"query": "from(bucket: v.defaultBucket)\n |> range(start: -1d)\n |> filter(fn: (r) => r._measurement == \"${measurement}\" and r.box == \"${boxtag}\" and\n (\n r._field == \"vpn_user_active\" or\n r._field == \"vpn_user_connected\" or\n r._field == \"vpn_user_virtual_address\" or\n r._field == \"vpn_user_remote_address\"\n ) \n )\n |> last()\n |> drop(columns: [\"box\", \"_measurement\", \"_start\", \"_stop\", \"_time\", \"vpntype\"])\n\n",
"refId": "A",
"resultFormat": "table",
"select": [
Expand Down

0 comments on commit 4186d5d

Please sign in to comment.