Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 20 additions & 9 deletions netbox_prometheus_sd/api/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from django.db.models import Prefetch
from ipam.models import IPAddress, Service
from virtualization.models import VirtualMachine
from dcim.models.devices import Device
Expand All @@ -19,6 +20,19 @@
from dcim.filters import DeviceFilterSet
from virtualization.filters import VirtualMachineFilterSet

try:
from tenancy.models import ContactAssignment

# NOTE: consolidate contacts + nested relations into a single prefetch
_CONTACTS_PREFETCH = [
Prefetch(
"contacts",
queryset=ContactAssignment.objects.select_related("contact", "role"),
)
]
except ImportError:
_CONTACTS_PREFETCH = ["contacts__contact", "contacts__role"]

from ..filtersets import ServiceFilterSet
from .serializers import (
PrometheusIPAddressSerializer,
Expand Down Expand Up @@ -65,8 +79,7 @@ class VirtualMachineViewSet(NetboxPrometheusSDModelViewSet):
"cluster__type",
"tags",
"services",
"contacts__contact",
"contacts__role",
*_CONTACTS_PREFETCH,
)
.annotate_config_context_data()
)
Expand All @@ -78,25 +91,23 @@ class VirtualMachineViewSet(NetboxPrometheusSDModelViewSet):
class DeviceViewSet(NetboxPrometheusSDModelViewSet):
queryset = (
Device.objects.select_related(
"device_type__manufacturer",
"device_type",
"role" if hasattr(Device, "role") else "device_role",
"tenant__group",
"platform",
"site",
"location",
"rack",
"parent_bay",
"virtual_chassis__master",
"oob_ip",
"primary_ip4",
"primary_ip6",
)
.prefetch_related(
"primary_ip4__nat_outside",
"primary_ip6__nat_outside",
"tags",
"services",
"contacts__contact",
"contacts__role",
*_CONTACTS_PREFETCH,
)
.defer("comments")
.annotate_config_context_data()
)
filterset_class = DeviceFilterSet
Expand Down