From 841e105493af54bcdfe2e165184aad49eede0224 Mon Sep 17 00:00:00 2001 From: Dan Lindholm Date: Tue, 24 Mar 2026 21:26:30 +0100 Subject: [PATCH 1/3] fix: annotate config context data on device/vm query sets --- netbox_prometheus_sd/api/views.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/netbox_prometheus_sd/api/views.py b/netbox_prometheus_sd/api/views.py index 8aca18a..2a268b6 100644 --- a/netbox_prometheus_sd/api/views.py +++ b/netbox_prometheus_sd/api/views.py @@ -60,7 +60,7 @@ class VirtualMachineViewSet(NetboxPrometheusSDModelViewSet): "tags", "services", "contacts", - ) + ).annotate_config_context_data() filterset_class = VirtualMachineFilterSet serializer_class = PrometheusVirtualMachineSerializer pagination_class = None @@ -80,7 +80,7 @@ class DeviceViewSet(NetboxPrometheusSDModelViewSet): "primary_ip4__nat_outside", "primary_ip6__nat_outside", "tags", - ) + ).annotate_config_context_data() filterset_class = DeviceFilterSet serializer_class = PrometheusDeviceSerializer pagination_class = None From 0d670819776ff8c8dfac42c48b649e10a249e844 Mon Sep 17 00:00:00 2001 From: Dan Lindholm Date: Tue, 24 Mar 2026 21:47:12 +0100 Subject: [PATCH 2/3] fix: use select_related for fk relations --- netbox_prometheus_sd/api/views.py | 65 ++++++++++++++++++------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/netbox_prometheus_sd/api/views.py b/netbox_prometheus_sd/api/views.py index 2a268b6..edc8703 100644 --- a/netbox_prometheus_sd/api/views.py +++ b/netbox_prometheus_sd/api/views.py @@ -34,9 +34,10 @@ class NetboxPrometheusSDModelViewSet(CustomFieldsMixin, ListModelMixin, BaseView class ServiceViewSet(NetboxPrometheusSDModelViewSet): - queryset = Service.objects.prefetch_related( + queryset = Service.objects.select_related( "device", "virtual_machine", + ).prefetch_related( "ipaddresses", "tags", ) @@ -50,44 +51,54 @@ class VirtualMachineViewSet(NetboxPrometheusSDModelViewSet): cluster_scope = "cluster__scope" else: cluster_scope = "cluster__site" - queryset = VirtualMachine.objects.prefetch_related( - cluster_scope, - "role", - "tenant", - "platform", - "primary_ip4", - "primary_ip6", - "tags", - "services", - "contacts", - ).annotate_config_context_data() + queryset = ( + VirtualMachine.objects.select_related( + "role", + "tenant", + "platform", + "primary_ip4", + "primary_ip6", + ) + .prefetch_related( + cluster_scope, + "tags", + "services", + "contacts", + ) + .annotate_config_context_data() + ) filterset_class = VirtualMachineFilterSet serializer_class = PrometheusVirtualMachineSerializer pagination_class = None class DeviceViewSet(NetboxPrometheusSDModelViewSet): - queryset = Device.objects.prefetch_related( - "device_type__manufacturer", - "role" if hasattr(Device, "role") else "device_role", - "tenant", - "platform", - "site", - "location", - "rack", - "parent_bay", - "virtual_chassis__master", - "primary_ip4__nat_outside", - "primary_ip6__nat_outside", - "tags", - ).annotate_config_context_data() + queryset = ( + Device.objects.select_related( + "device_type__manufacturer", + "role" if hasattr(Device, "role") else "device_role", + "tenant", + "platform", + "site", + "location", + "rack", + "parent_bay", + "virtual_chassis__master", + ) + .prefetch_related( + "primary_ip4__nat_outside", + "primary_ip6__nat_outside", + "tags", + ) + .annotate_config_context_data() + ) filterset_class = DeviceFilterSet serializer_class = PrometheusDeviceSerializer pagination_class = None class IPAddressViewSet(NetboxPrometheusSDModelViewSet): - queryset = IPAddress.objects.prefetch_related("tenant", "tags") + queryset = IPAddress.objects.select_related("tenant").prefetch_related("tags") serializer_class = PrometheusIPAddressSerializer filterset_class = IPAddressFilterSet pagination_class = None From 291aa01862a7c453fa73679ee36e837280113e1b Mon Sep 17 00:00:00 2001 From: Dan Lindholm Date: Tue, 24 Mar 2026 21:55:29 +0100 Subject: [PATCH 3/3] fix: add missing related relations --- netbox_prometheus_sd/api/views.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/netbox_prometheus_sd/api/views.py b/netbox_prometheus_sd/api/views.py index edc8703..0e35165 100644 --- a/netbox_prometheus_sd/api/views.py +++ b/netbox_prometheus_sd/api/views.py @@ -54,16 +54,19 @@ class VirtualMachineViewSet(NetboxPrometheusSDModelViewSet): queryset = ( VirtualMachine.objects.select_related( "role", - "tenant", + "tenant__group", "platform", "primary_ip4", "primary_ip6", ) .prefetch_related( cluster_scope, + "cluster__group", + "cluster__type", "tags", "services", - "contacts", + "contacts__contact", + "contacts__role", ) .annotate_config_context_data() ) @@ -77,18 +80,22 @@ class DeviceViewSet(NetboxPrometheusSDModelViewSet): Device.objects.select_related( "device_type__manufacturer", "role" if hasattr(Device, "role") else "device_role", - "tenant", + "tenant__group", "platform", "site", "location", "rack", "parent_bay", "virtual_chassis__master", + "oob_ip", ) .prefetch_related( "primary_ip4__nat_outside", "primary_ip6__nat_outside", "tags", + "services", + "contacts__contact", + "contacts__role", ) .annotate_config_context_data() ) @@ -98,7 +105,9 @@ class DeviceViewSet(NetboxPrometheusSDModelViewSet): class IPAddressViewSet(NetboxPrometheusSDModelViewSet): - queryset = IPAddress.objects.select_related("tenant").prefetch_related("tags") + queryset = IPAddress.objects.select_related("tenant__group").prefetch_related( + "tags" + ) serializer_class = PrometheusIPAddressSerializer filterset_class = IPAddressFilterSet pagination_class = None