diff --git a/dev_setup/README.md b/dev_setup/README.md
index 2021676..b44aef7 100644
--- a/dev_setup/README.md
+++ b/dev_setup/README.md
@@ -1,6 +1,7 @@
# Setup Dev
+ install docker
+ install docker compose
+ + install npm
+ clone netbox repo
+ clone netbox_topology_views repo
+ create venv: `/usr/bin/python3 -m venv venv`
@@ -8,9 +9,10 @@
+ install deps: `pip3 install -r requirements.txt`
+ install build tools: `python3 -m pip install --upgrade build setuptools wheel`
+
# Build
- + in the root of the netbox_topology_views folder run `python3 -m build`
- + install the package: `python3 -m pip install ../netbox-topology-views/dist/netbox_topology_views-X.Y.Z-py3-none-any.whl` where X,Y & Z are the version
+ + build the package: `python3 setup.py develop`
+ + build the resources `npm run resources`
# Test
+ copy configuration.py from dev_setup to the netbox/netbox/ folder
diff --git a/netbox_topology_views/__init__.py b/netbox_topology_views/__init__.py
index 8247616..9aa2c13 100644
--- a/netbox_topology_views/__init__.py
+++ b/netbox_topology_views/__init__.py
@@ -4,7 +4,7 @@ class TopologyViewsConfig(PluginConfig):
name = 'netbox_topology_views'
verbose_name = 'Topology views'
description = 'An plugin to render topology maps'
- version = '0.5.0'
+ version = '0.5.1'
author = 'Mattijs Vanhaverbeke'
author_email = 'author@example.com'
base_url = 'topology-views'
diff --git a/netbox_topology_views/api/views.py b/netbox_topology_views/api/views.py
index 9e673b5..07ca7b5 100644
--- a/netbox_topology_views/api/views.py
+++ b/netbox_topology_views/api/views.py
@@ -115,6 +115,13 @@ class SearchViewSet(ReadOnlyModelViewSet):
if regions == []:
regions = None
+ hide_unconnected = request.query_params.get('hide_unconnected', None)
+ if hide_unconnected == "":
+ hide_unconnected = None
+ print(hide_unconnected)
+ if hide_unconnected == 'false':
+ print("ok")
+
devices = self._filter(sites, devicerole, name, tags, regions)
nodes = []
@@ -124,41 +131,21 @@ class SearchViewSet(ReadOnlyModelViewSet):
circuit_ids = []
for device in devices:
cables = device.get_cables()
- for cable in cables:
- if cable.termination_a_type.name != "circuit termination" and cable.termination_b_type.name != "circuit termination":
- if cable.id not in cable_ids:
- if cable.termination_a_type.name not in ignore_cable_type and cable.termination_b_type.name not in ignore_cable_type:
- cable_ids.append(cable.id)
- edge_ids += 1
-
- cable_a_dev_name = cable.termination_a.device.name
- if cable_a_dev_name is None:
- cable_a_dev_name = "device A name unknown"
- cable_a_name = cable.termination_a.name
- if cable_a_name is None:
- cable_a_name = "cable A name unknown"
- cable_b_dev_name = cable.termination_b.device.name
- if cable_b_dev_name is None:
- cable_b_dev_name = "device B name unknown"
- cable_b_name = cable.termination_b.name
- if cable_b_name is None:
- cable_b_name = "cable B name unknown"
-
- edge = {}
- edge["id"] = edge_ids
- edge["from"] = cable.termination_a.device.id
- edge["to"] = cable.termination_b.device.id
- edge["title"] = "Cable between
" + cable_a_dev_name + " [" + cable_a_name + "]
" + cable_b_dev_name + " [" + cable_b_name + "]"
- if cable.color != "":
- edge["color"] = "#" + cable.color
- edges.append(edge)
- else:
- if cable.termination_a_type.name == "circuit termination":
- if settings.PLUGINS_CONFIG["netbox_topology_views"]["enable_circuit_terminations"]:
- if cable.termination_a.circuit.id not in circuit_ids:
- circuit_ids.append(cable.termination_a.circuit.id)
+ if cables.exists():
+ device_has_connections = True
+ for cable in cables:
+ if cable.termination_a_type.name != "circuit termination" and cable.termination_b_type.name != "circuit termination":
+ if cable.id not in cable_ids:
+ if cable.termination_a_type.name not in ignore_cable_type and cable.termination_b_type.name not in ignore_cable_type:
+ cable_ids.append(cable.id)
edge_ids += 1
+ cable_a_dev_name = cable.termination_a.device.name
+ if cable_a_dev_name is None:
+ cable_a_dev_name = "device A name unknown"
+ cable_a_name = cable.termination_a.name
+ if cable_a_name is None:
+ cable_a_name = "cable A name unknown"
cable_b_dev_name = cable.termination_b.device.name
if cable_b_dev_name is None:
cable_b_dev_name = "device B name unknown"
@@ -168,86 +155,112 @@ class SearchViewSet(ReadOnlyModelViewSet):
edge = {}
edge["id"] = edge_ids
+ edge["from"] = cable.termination_a.device.id
edge["to"] = cable.termination_b.device.id
- edge["dashes"] = True
- title = ""
+ edge["title"] = "Cable between
" + cable_a_dev_name + " [" + cable_a_name + "]
" + cable_b_dev_name + " [" + cable_b_name + "]"
+ if cable.color != "":
+ edge["color"] = "#" + cable.color
+ edges.append(edge)
+ else:
+ if cable.termination_a_type.name == "circuit termination":
+ if settings.PLUGINS_CONFIG["netbox_topology_views"]["enable_circuit_terminations"]:
+ if cable.termination_a.circuit.id not in circuit_ids:
+ circuit_ids.append(cable.termination_a.circuit.id)
+ edge_ids += 1
- title += "Circuit provider: " + cable.termination_a.circuit.provider.name + "
"
- title += "Termination between
"
- title += cable_b_dev_name + " [" + cable_b_name + "]
"
- # To Many if's
- if cable.termination_a.circuit.termination_a is not None:
- if cable.termination_a.circuit.termination_a.cable is not None:
- if cable.termination_a.circuit.termination_a.cable.id != cable.id:
- if cable.termination_a.circuit.termination_a.cable.termination_b is not None:
- if cable.termination_a.circuit.termination_a.cable.termination_b.device is not None:
- edge["from"] = cable.termination_a.circuit.termination_a.cable.termination_b.device.id
+ cable_b_dev_name = cable.termination_b.device.name
+ if cable_b_dev_name is None:
+ cable_b_dev_name = "device B name unknown"
+ cable_b_name = cable.termination_b.name
+ if cable_b_name is None:
+ cable_b_name = "cable B name unknown"
- cable_a_dev_name = cable.termination_a.circuit.termination_a.cable.termination_b.device.name
- if cable_a_dev_name is None:
- cable_a_dev_name = "device B name unknown"
- cable_b_name = cable.termination_a.circuit.termination_a.cable.termination_b.name
- if cable_a_name is None:
- cable_a_name = "cable B name unknown"
- title += cable_a_dev_name + " [" + cable_a_name + "]
"
- edge["title"] = title
- edges.append(edge)
- # To Many if's
- if cable.termination_a.circuit.termination_z is not None:
- if cable.termination_a.circuit.termination_z.cable is not None:
- if cable.termination_a.circuit.termination_z.cable.id != cable.id:
- if cable.termination_a.circuit.termination_z.cable.termination_b is not None:
- if cable.termination_a.circuit.termination_z.cable.termination_b.device is not None:
- edge["from"] = cable.termination_a.circuit.termination_z.cable.termination_b.device.id
+ edge = {}
+ edge["id"] = edge_ids
+ edge["to"] = cable.termination_b.device.id
+ edge["dashes"] = True
+ title = ""
- cable_a_dev_name = cable.termination_a.circuit.termination_z.cable.termination_b.device.name
- if cable_a_dev_name is None:
- cable_a_dev_name = "device B name unknown"
- cable_a_name = cable.termination_a.circuit.termination_z.cable.termination_b.name
- if cable_a_name is None:
- cable_a_name = "cable B name unknown"
- title += cable_a_dev_name + " [" + cable_a_name + "]
"
- edge["title"] = title
- edges.append(edge)
- dev_name = device.name
- if dev_name is None:
- dev_name = "device name unknown"
+ title += "Circuit provider: " + cable.termination_a.circuit.provider.name + "
"
+ title += "Termination between
"
+ title += cable_b_dev_name + " [" + cable_b_name + "]
"
+ # To Many if's
+ if cable.termination_a.circuit.termination_a is not None:
+ if cable.termination_a.circuit.termination_a.cable is not None:
+ if cable.termination_a.circuit.termination_a.cable.id != cable.id:
+ if cable.termination_a.circuit.termination_a.cable.termination_b is not None:
+ if cable.termination_a.circuit.termination_a.cable.termination_b.device is not None:
+ edge["from"] = cable.termination_a.circuit.termination_a.cable.termination_b.device.id
- node_content = ""
+ cable_a_dev_name = cable.termination_a.circuit.termination_a.cable.termination_b.device.name
+ if cable_a_dev_name is None:
+ cable_a_dev_name = "device B name unknown"
+ cable_b_name = cable.termination_a.circuit.termination_a.cable.termination_b.name
+ if cable_a_name is None:
+ cable_a_name = "cable B name unknown"
+ title += cable_a_dev_name + " [" + cable_a_name + "]
"
+ edge["title"] = title
+ edges.append(edge)
+ # To Many if's
+ if cable.termination_a.circuit.termination_z is not None:
+ if cable.termination_a.circuit.termination_z.cable is not None:
+ if cable.termination_a.circuit.termination_z.cable.id != cable.id:
+ if cable.termination_a.circuit.termination_z.cable.termination_b is not None:
+ if cable.termination_a.circuit.termination_z.cable.termination_b.device is not None:
+ edge["from"] = cable.termination_a.circuit.termination_z.cable.termination_b.device.id
- if device.device_type.display_name is not None:
- node_content += "