From 3afec0205581522ba521f5e1114af6c94da12277 Mon Sep 17 00:00:00 2001 From: Arthur Date: Mon, 19 Sep 2022 13:44:37 -0700 Subject: [PATCH] 7016 add search indexes --- netbox/ipam/search_indexes.py | 2 +- netbox/tenancy/search_indexes.py | 31 +++++++++++++++ netbox/virtualization/search_indexes.py | 51 +++++++++++++++++++++++++ netbox/wireless/search_indexes.py | 31 +++++++++++++++ 4 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 netbox/tenancy/search_indexes.py create mode 100644 netbox/virtualization/search_indexes.py create mode 100644 netbox/wireless/search_indexes.py diff --git a/netbox/ipam/search_indexes.py b/netbox/ipam/search_indexes.py index e8f759713..274e603eb 100644 --- a/netbox/ipam/search_indexes.py +++ b/netbox/ipam/search_indexes.py @@ -1,7 +1,7 @@ import dcim.filtersets import dcim.tables -from dcim.models import ASN, VLAN, VRF, Aggregate, IPAddress, Prefix, Service from django.db import models +from ipam.models import ASN, VLAN, VRF, Aggregate, IPAddress, Prefix, Service from search.models import SearchMixin diff --git a/netbox/tenancy/search_indexes.py b/netbox/tenancy/search_indexes.py new file mode 100644 index 000000000..4e73b8d25 --- /dev/null +++ b/netbox/tenancy/search_indexes.py @@ -0,0 +1,31 @@ +import dcim.filtersets +import dcim.tables +from django.db import models +from search.models import SearchMixin +from tenancy.models import Contact, Tenant + + +class TenantIndex(SearchMixin): + def __init__(self): + self.model = Tenant + self.queryset = Tenant.objects.prefetch_related('group') + self.filterset = tenancy.filtersets.TenantFilterSet + self.table = tenancy.tables.TenantTable + self.url = 'tenancy:tenant_list' + + +class ContactIndex(SearchMixin): + def __init__(self): + self.model = Contact + self.queryset = Contact.objects.prefetch_related('group', 'assignments').annotate( + assignment_count=count_related(ContactAssignment, 'contact') + ) + self.filterset = tenancy.filtersets.ContactFilterSet + self.table = tenancy.tables.ContactTable + self.url = 'tenancy:contact_list' + + +TENANCY_SEARCH_TYPES = { + 'tenant': TenancyIndex(), + 'contact': ContactIndex(), +} diff --git a/netbox/virtualization/search_indexes.py b/netbox/virtualization/search_indexes.py new file mode 100644 index 000000000..14d89f830 --- /dev/null +++ b/netbox/virtualization/search_indexes.py @@ -0,0 +1,51 @@ +import dcim.filtersets +import dcim.tables +from dcim.models import ( + Cable, + Device, + DeviceType, + Interface, + Location, + Module, + ModuleType, + PowerFeed, + Rack, + RackReservation, + Site, + VirtualChassis, +) +from django.db import models +from search.models import SearchMixin + + +class ClusterIndex(SearchMixin): + def __init__(self): + self.model = Cluster + self.queryset = Cluster.objects.prefetch_related('type', 'group').annotate( + device_count=count_related(Device, 'cluster'), vm_count=count_related(VirtualMachine, 'cluster') + ) + self.filterset = virtualization.filtersets.ClusterFilterSet + self.table = virtualization.tables.ClusterTable + self.url = 'virtualization:cluster_list' + + +class VirtualMachineIndex(SearchMixin): + def __init__(self): + self.model = VirtualMachine + self.queryset = VirtualMachine.objects.prefetch_related( + 'cluster', + 'tenant', + 'tenant__group', + 'platform', + 'primary_ip4', + 'primary_ip6', + ) + self.filterset = virtualization.filtersets.VirtualMachineFilterSet + self.table = virtualization.tables.VirtualMachineTable + self.url = 'virtualization:virtualmachine_list' + + +VIRTUALIZATION_SEARCH_TYPES = { + 'cluster': ClusterIndex(), + 'virtualmachine': VirtualMachineIndex(), +} diff --git a/netbox/wireless/search_indexes.py b/netbox/wireless/search_indexes.py new file mode 100644 index 000000000..1321e11bc --- /dev/null +++ b/netbox/wireless/search_indexes.py @@ -0,0 +1,31 @@ +import dcim.filtersets +import dcim.tables +from django.db import models +from search.models import SearchMixin +from wireless.models import WirelessLAN, WirelessLink + + +class WirelessLANIndex(SearchMixin): + def __init__(self): + self.model = WirelessLAN + self.queryset = WirelessLAN.objects.prefetch_related('group', 'vlan').annotate( + interface_count=count_related(Interface, 'wireless_lans') + ) + self.filterset = wireless.filtersets.WirelessLANFilterSet + self.table = wireless.tables.WirelessLANTable + self.url = 'wireless:wirelesslan_list' + + +class WirelessLinkIndex(SearchMixin): + def __init__(self): + self.model = WirelessLink + self.queryset = WirelessLink.objects.prefetch_related('interface_a__device', 'interface_b__device') + self.filterset = wireless.filtersets.WirelessLinkFilterSet + self.table = wireless.tables.WirelessLinkTable + self.url = 'wireless:wirelesslink_list' + + +WIRELESS_SEARCH_TYPES = { + 'wirelesslan': WirelessLANIndex(), + 'wirelesslink': WirelessLinkIndex(), +}