Skip to content

Commit

Permalink
Merge pull request #2551 from johannaengland/related-names-10
Browse files Browse the repository at this point in the history
Add related names to django models (manage - Interface)
  • Loading branch information
johannaengland committed Mar 3, 2023
2 parents d3d3261 + 0f6f747 commit 4fe72ca
Show file tree
Hide file tree
Showing 28 changed files with 140 additions and 77 deletions.
2 changes: 1 addition & 1 deletion python/nav/ipdevpoll/neighbor.py
Expand Up @@ -162,7 +162,7 @@ def _netbox_from_ip(self, ip):
if ip in self._invalid_neighbor_ips:
return
return self._netbox_query(Q(ip=ip)) or self._netbox_query(
Q(interface__gwportprefix__gw_ip=ip)
Q(interfaces__gwportprefix__gw_ip=ip)
)

ID_PATTERN = re.compile(r'(.*\()?(?P<sysname>[^\)]+)\)?')
Expand Down
4 changes: 2 additions & 2 deletions python/nav/ipdevpoll/plugins/statports.py
Expand Up @@ -136,8 +136,8 @@ def _log_instance_details(self):
def _get_master_and_instance_list():
netbox = manage.Netbox.objects.get(id=self.netbox.id)

my_ifcs = netbox.interface_set.values_list('ifname', flat=True)
masters_ifcs = netbox.master.interface_set.values_list('ifname', flat=True)
my_ifcs = netbox.interfaces.values_list('ifname', flat=True)
masters_ifcs = netbox.master.interfaces.values_list('ifname', flat=True)
local_ifcs = set(masters_ifcs) - set(my_ifcs)
return netbox.master.sysname, local_ifcs

Expand Down
2 changes: 1 addition & 1 deletion python/nav/ipdevpoll/shadows/__init__.py
Expand Up @@ -567,7 +567,7 @@ def _get_router_count_for_prefix(net_address, include_netboxid=None):
"""
address_filter = Q(
interface__gwportprefix__prefix__net_address=str(net_address)
interfaces__gwportprefix__prefix__net_address=str(net_address)
)
if include_netboxid:
address_filter = address_filter | Q(id=include_netboxid)
Expand Down
6 changes: 3 additions & 3 deletions python/nav/ipdevpoll/shadows/netbox.py
Expand Up @@ -122,8 +122,8 @@ def cleanup_replaced_netbox(cls, netbox_id, new_type):

# Delete interfaces and stored hardware information
netbox.modules.all().delete()
netbox.interface_set.all().delete()
netbox.interfaces.all().delete()
netbox.entities.all().delete()
netbox.sensor_set.all().delete()
netbox.powersupplyorfan_set.all().delete()
netbox.sensors.all().delete()
netbox.power_supplies_or_fans.all().delete()
netbox.info_set.filter(key='poll_times').delete()
119 changes: 92 additions & 27 deletions python/nav/models/manage.py
Expand Up @@ -73,7 +73,7 @@ def get_queryset(self):
return (
super(UpsManager, self)
.get_queryset()
.filter(category='POWER', sensor__internal_name__startswith='ups')
.filter(category='POWER', sensors__internal_name__startswith='ups')
.distinct()
)

Expand Down Expand Up @@ -576,12 +576,12 @@ def get_unresolved_alerts(self, kind=None):
return self.alert_history_set.unresolved(kind)

def get_powersupplies(self):
return self.powersupplyorfan_set.filter(physical_class='powerSupply').order_by(
'name'
)
return self.power_supplies_or_fans.filter(
physical_class='powerSupply'
).order_by('name')

def get_fans(self):
return self.powersupplyorfan_set.filter(physical_class='fan').order_by('name')
return self.power_supplies_or_fans.filter(physical_class='fan').order_by('name')

def get_system_metrics(self):
"""Gets a list of available Graphite metrics related to this Netbox,
Expand Down Expand Up @@ -610,7 +610,7 @@ def get_system_metrics(self):

def has_unignored_unrecognized_neighbors(self):
"""Returns true if this netbox has unignored unrecognized neighbors"""
return self.unrecognizedneighbor_set.filter(ignored_since=None).count() > 0
return self.unrecognized_neighbors.filter(ignored_since=None).count() > 0

def get_chassis(self):
"""Returns a QuerySet of chassis devices seen on this netbox"""
Expand All @@ -621,7 +621,7 @@ def get_chassis(self):

def get_environment_sensors(self):
"""Returns the sensors to be displayed on the Environment Sensor tab"""
return self.sensor_set.filter(
return self.sensors.filter(
Q(unit_of_measurement__icontains='celsius')
| Q(unit_of_measurement__icontains='percent')
)
Expand Down Expand Up @@ -907,8 +907,8 @@ def get_related_objects(self):
entities of a device.
"""
modules = self.modules.all()
power_supplies_or_fans = self.powersupplyorfan_set.all()
netbox_entities = self.entities.all()
power_supplies_or_fans = self.power_supplies_or_fans.all()
netbox_entities = self.entites.all()
return modules or power_supplies_or_fans or netbox_entities

def get_preferred_related_object(self):
Expand Down Expand Up @@ -1930,9 +1930,18 @@ class Interface(models.Model):
)

id = models.AutoField(db_column='interfaceid', primary_key=True)
netbox = models.ForeignKey('Netbox', on_delete=models.CASCADE, db_column='netboxid')
netbox = models.ForeignKey(
'Netbox',
on_delete=models.CASCADE,
db_column='netboxid',
related_name="interfaces",
)
module = models.ForeignKey(
'Module', on_delete=models.CASCADE, db_column='moduleid', null=True
'Module',
on_delete=models.CASCADE,
db_column='moduleid',
null=True,
related_name="interfaces",
)
ifindex = models.IntegerField()
ifname = VarcharField()
Expand Down Expand Up @@ -2195,7 +2204,7 @@ def has_unignored_unrecognized_neighbors(self):
not ignored
"""
return (
self.unrecognizedneighbor_set.filter(ignored_since__isnull=True).count() > 0
self.unrecognized_neighbors.filter(ignored_since__isnull=True).count() > 0
)


Expand Down Expand Up @@ -2255,7 +2264,10 @@ class RoutingProtocolAttribute(models.Model):

id = models.IntegerField(primary_key=True)
interface = models.ForeignKey(
'Interface', on_delete=models.CASCADE, db_column='interfaceid'
'Interface',
on_delete=models.CASCADE,
db_column='interfaceid',
related_name="routing_protocol_attributes",
)
name = VarcharField(db_column='protoname')
metric = models.IntegerField()
Expand All @@ -2278,7 +2290,12 @@ class GatewayPeerSession(models.Model):
)

id = models.AutoField(primary_key=True, db_column='peersessionid')
netbox = models.ForeignKey('Netbox', on_delete=models.CASCADE, db_column='netboxid')
netbox = models.ForeignKey(
'Netbox',
on_delete=models.CASCADE,
db_column='netboxid',
related_name="gateway_peer_sessions",
)
protocol = models.IntegerField(choices=PROTOCOL_CHOICES)
peer = models.GenericIPAddressField()
state = VarcharField()
Expand All @@ -2295,7 +2312,7 @@ def get_peer_as_netbox(self):
:rtype: Netbox
"""
expr = Q(ip=self.peer) | Q(interface__gwportprefix__gw_ip=self.peer)
expr = Q(ip=self.peer) | Q(interfaces__gwportprefix__gw_ip=self.peer)
netboxes = Netbox.objects.filter(expr)
if netboxes:
return netboxes[0]
Expand Down Expand Up @@ -2455,9 +2472,18 @@ class Sensor(models.Model):
)

id = models.AutoField(db_column='sensorid', primary_key=True)
netbox = models.ForeignKey(Netbox, on_delete=models.CASCADE, db_column='netboxid')
netbox = models.ForeignKey(
Netbox,
on_delete=models.CASCADE,
db_column='netboxid',
related_name="sensors",
)
interface = models.ForeignKey(
Interface, on_delete=models.CASCADE, db_column='interfaceid', null=True
Interface,
on_delete=models.CASCADE,
db_column='interfaceid',
null=True,
related_name="sensors",
)
oid = VarcharField(db_column="oid")
unit_of_measurement = VarcharField(
Expand Down Expand Up @@ -2625,8 +2651,18 @@ class PowerSupplyOrFan(models.Model):
PHYSICAL_CLASS_PSU = "powerSupply"

id = models.AutoField(db_column='powersupplyid', primary_key=True)
netbox = models.ForeignKey(Netbox, on_delete=models.CASCADE, db_column='netboxid')
device = models.ForeignKey(Device, on_delete=models.CASCADE, db_column='deviceid')
netbox = models.ForeignKey(
Netbox,
on_delete=models.CASCADE,
db_column='netboxid',
related_name="power_supplies_or_fans",
)
device = models.ForeignKey(
Device,
on_delete=models.CASCADE,
db_column='deviceid',
related_name="power_supplies_or_fans",
)
name = VarcharField(db_column='name')
model = VarcharField(db_column='model', null=True)
descr = VarcharField(db_column='descr', null=True)
Expand Down Expand Up @@ -2667,9 +2703,17 @@ def is_fan(self):

class UnrecognizedNeighbor(models.Model):
id = models.AutoField(primary_key=True)
netbox = models.ForeignKey(Netbox, on_delete=models.CASCADE, db_column='netboxid')
netbox = models.ForeignKey(
Netbox,
on_delete=models.CASCADE,
db_column='netboxid',
related_name="unrecognized_neighbors",
)
interface = models.ForeignKey(
'Interface', on_delete=models.CASCADE, db_column='interfaceid'
'Interface',
on_delete=models.CASCADE,
db_column='interfaceid',
related_name="unrecognized_neighbors",
)
remote_id = VarcharField()
remote_name = VarcharField()
Expand Down Expand Up @@ -2791,9 +2835,18 @@ class POEGroup(models.Model):
"""Model representing a group of power over ethernet ports"""

id = models.AutoField(db_column='poegroupid', primary_key=True)
netbox = models.ForeignKey('Netbox', on_delete=models.CASCADE, db_column='netboxid')
netbox = models.ForeignKey(
'Netbox',
on_delete=models.CASCADE,
db_column='netboxid',
related_name="poe_groups",
)
module = models.ForeignKey(
'Module', on_delete=models.CASCADE, db_column='moduleid', null=True
'Module',
on_delete=models.CASCADE,
db_column='moduleid',
null=True,
related_name="poe_groups",
)
index = models.IntegerField()

Expand All @@ -2813,7 +2866,7 @@ def get_graph_url(self, time_frame='1day'):
return get_simple_graph_url([metric], time_frame=time_frame)

def get_active_ports(self):
return self.poeport_set.filter(
return self.poe_ports.filter(
admin_enable=True, detection_status=POEPort.STATUS_DELIVERING_POWER
)

Expand All @@ -2834,12 +2887,24 @@ class POEPort(models.Model):
"""Model representing a PoE port"""

id = models.AutoField(db_column='poeportid', primary_key=True)
netbox = models.ForeignKey('Netbox', on_delete=models.CASCADE, db_column='netboxid')
netbox = models.ForeignKey(
'Netbox',
on_delete=models.CASCADE,
db_column='netboxid',
related_name="poe_ports",
)
poegroup = models.ForeignKey(
'POEGroup', on_delete=models.CASCADE, db_column='poegroupid'
'POEGroup',
on_delete=models.CASCADE,
db_column='poegroupid',
related_name="poe_ports",
)
interface = models.ForeignKey(
'Interface', on_delete=models.CASCADE, db_column='interfaceid', null=True
'Interface',
on_delete=models.CASCADE,
db_column='interfaceid',
null=True,
related_name="poe_ports",
)
admin_enable = models.BooleanField(default=False)
index = models.IntegerField()
Expand Down
4 changes: 2 additions & 2 deletions python/nav/topology/vlan.py
Expand Up @@ -152,7 +152,7 @@ def _find_netbox_access_vlans(self, netbox, ifcs):
active_vlans = dict((vlan.vlan, vlan) for vlan in vlans)

access_ifcs = (
netbox.interface_set.filter(vlan__isnull=False)
netbox.interfaces.filter(vlan__isnull=False)
.filter(NO_TRUNK)
.exclude(id__in=(ifc.id for ifc in ifcs))
)
Expand Down Expand Up @@ -267,7 +267,7 @@ def _is_vlan_active_on_destination(self, dest, ifc):
if not ifc.trunk:
return self._ifc_has_vlan(ifc)
else:
non_trunks_on_vlan = dest.interface_set.filter(vlan=self.vlan.vlan).filter(
non_trunks_on_vlan = dest.interfaces.filter(vlan=self.vlan.vlan).filter(
NO_TRUNK
)
if ifc.to_interface:
Expand Down
4 changes: 2 additions & 2 deletions python/nav/watchdog/tests.py
Expand Up @@ -245,8 +245,8 @@ class TestAbnormalInterfaceCount(Test):
def _get_errors(self):
"""Fetches netboxes with an abnormal amount of interfaces"""
results = []
for netbox in Netbox.objects.annotate(Count('interface')):
count = netbox.interface__count
for netbox in Netbox.objects.annotate(Count('interfaces')):
count = netbox.interfaces__count
if count > self.abnormal_amount:
descr = "{} has {} interfaces".format(netbox.sysname, count)
results.append(TestResult(descr, netbox))
Expand Down
4 changes: 2 additions & 2 deletions python/nav/web/ajax/views.py
Expand Up @@ -83,7 +83,7 @@ def get_neighbors(_request, netboxid):

netbox = get_object_or_404(Netbox, pk=netboxid)
nodes = [create_object_from(netbox)]
interfaces = netbox.interface_set.filter(to_netbox__isnull=False)
interfaces = netbox.interfaces.filter(to_netbox__isnull=False)
for interface in interfaces:
to_netbox = interface.to_netbox
to_interfacename = (
Expand All @@ -104,7 +104,7 @@ def get_neighbors(_request, netboxid):
# Unrecognized neighbors
unrecognized_nodes = []
un_candidates = {}
for unrecognized in netbox.unrecognizedneighbor_set.filter(
for unrecognized in netbox.unrecognized_neighbors.filter(
ignored_since__isnull=True
):
if unrecognized.remote_id in un_candidates:
Expand Down
6 changes: 3 additions & 3 deletions python/nav/web/info/room/views.py
Expand Up @@ -222,8 +222,8 @@ def render_netboxes(request, roomid):

# Filter interfaces on iftype and add fast last_cam lookup
for netbox in netboxes:
netbox.interfaces = (
netbox.interface_set.filter(iftype__in=Interface.ETHERNET_INTERFACE_TYPES)
netbox.interfaces_list = (
netbox.interfaces.filter(iftype__in=Interface.ETHERNET_INTERFACE_TYPES)
.order_by("ifindex")
.extra(select=cam_query)
)
Expand Down Expand Up @@ -257,7 +257,7 @@ def render_sensors(request, roomid):
netboxes = room.netboxes.filter(category='ENV')

for netbox in netboxes:
netbox.env_sensors = netbox.sensor_set.filter(
netbox.env_sensors = netbox.sensors.filter(
Q(unit_of_measurement__icontains='celsius')
| Q(unit_of_measurement__icontains='percent')
| Q(unit_of_measurement__icontains='degrees')
Expand Down
4 changes: 2 additions & 2 deletions python/nav/web/ipdevinfo/utils.py
Expand Up @@ -305,7 +305,7 @@ def find_children(netbox, netboxes=None):
if not netboxes:
netboxes = [netbox]

interfaces = netbox.interface_set.filter(
interfaces = netbox.interfaces.filter(
to_netbox__isnull=False, swport_vlans__direction=SwPortVlan.DIRECTION_DOWN
)
for interface in interfaces:
Expand All @@ -332,7 +332,7 @@ def find_vlan_organizations(netboxes):
"""Find contacts for the vlans on the downlinks on the netboxes"""
vlans = []
for netbox in netboxes:
interfaces = netbox.interface_set.filter(
interfaces = netbox.interfaces.filter(
to_netbox__isnull=False,
swport_vlans__direction=SwPortVlan.DIRECTION_DOWN,
swport_vlans__vlan__organization__isnull=False,
Expand Down
6 changes: 3 additions & 3 deletions python/nav/web/ipdevinfo/views.py
Expand Up @@ -324,7 +324,7 @@ def get_cam_info(mac):
except GraphiteUnreachableError:
graphite_error = True

for sensor in netbox.sensor_set.all():
for sensor in netbox.sensors.all():
metric_id = sensor.get_metric_name()
metric = {
'id': metric_id,
Expand All @@ -347,7 +347,7 @@ def get_cam_info(mac):
if netbox in task.get_event_subjects():
relevant_future_tasks.append(task)

interfaces = netbox.interface_set.order_by('ifindex') if netbox else []
interfaces = netbox.interfaces.order_by('ifindex') if netbox else []
for interface in interfaces:
interface.combined_data_urls = create_combined_urls(interface, COUNTER_TYPES)

Expand Down Expand Up @@ -604,7 +604,7 @@ def port_details(request, netbox_sysname, port_type=None, port_id=None, port_nam
graphite_error = True

sensor_metrics = []
for sensor in port.sensor_set.all():
for sensor in port.sensors.all():
metric_id = sensor.get_metric_name()
metric = {
'id': metric_id,
Expand Down

0 comments on commit 4fe72ca

Please sign in to comment.