Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add related names to django models (manage - Interface) #2551

Merged
merged 14 commits into from Mar 3, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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