mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-26 09:16:10 -06:00
consolidated queryset for utilization
This commit is contained in:
parent
43e29c746e
commit
4ce2bec8a8
@ -147,10 +147,7 @@ class FHRPGroupAssignmentViewSet(NetBoxModelViewSet):
|
|||||||
|
|
||||||
|
|
||||||
class VLANGroupViewSet(NetBoxModelViewSet):
|
class VLANGroupViewSet(NetBoxModelViewSet):
|
||||||
queryset = VLANGroup.objects.annotate(
|
queryset = VLANGroup.objects.get_utilization().prefetch_related('tags')
|
||||||
vlan_count=count_related(VLAN, 'group'),
|
|
||||||
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
|
|
||||||
).prefetch_related('tags')
|
|
||||||
serializer_class = serializers.VLANGroupSerializer
|
serializer_class = serializers.VLANGroupSerializer
|
||||||
filterset_class = filtersets.VLANGroupFilterSet
|
filterset_class = filtersets.VLANGroupFilterSet
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ from django.utils.translation import gettext as _
|
|||||||
from dcim.models import Interface
|
from dcim.models import Interface
|
||||||
from ipam.choices import *
|
from ipam.choices import *
|
||||||
from ipam.constants import *
|
from ipam.constants import *
|
||||||
from ipam.querysets import VLANQuerySet
|
from ipam.querysets import VLANQuerySet, VLANGroupQuerySet
|
||||||
from netbox.models import OrganizationalModel, PrimaryModel
|
from netbox.models import OrganizationalModel, PrimaryModel
|
||||||
from virtualization.models import VMInterface
|
from virtualization.models import VMInterface
|
||||||
|
|
||||||
@ -63,6 +63,8 @@ class VLANGroup(OrganizationalModel):
|
|||||||
help_text=_('Highest permissible ID of a child VLAN')
|
help_text=_('Highest permissible ID of a child VLAN')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
objects = VLANGroupQuerySet.as_manager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ('name', 'pk') # Name may be non-unique
|
ordering = ('name', 'pk') # Name may be non-unique
|
||||||
constraints = (
|
constraints = (
|
||||||
|
@ -1,8 +1,10 @@
|
|||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.db.models import Q
|
from django.db.models import F, Q
|
||||||
from django.db.models.expressions import RawSQL
|
from django.db.models.expressions import RawSQL
|
||||||
|
from django.db.models.functions import Round
|
||||||
|
|
||||||
from utilities.querysets import RestrictedQuerySet
|
from utilities.querysets import RestrictedQuerySet
|
||||||
|
from utilities.utils import count_related
|
||||||
|
|
||||||
|
|
||||||
class PrefixQuerySet(RestrictedQuerySet):
|
class PrefixQuerySet(RestrictedQuerySet):
|
||||||
@ -30,6 +32,17 @@ class PrefixQuerySet(RestrictedQuerySet):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class VLANGroupQuerySet(RestrictedQuerySet):
|
||||||
|
def get_utilization(self, *args, **kwargs):
|
||||||
|
from .models import VLAN
|
||||||
|
|
||||||
|
return self.annotate(
|
||||||
|
vlan_count=count_related(VLAN, 'group'),
|
||||||
|
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class VLANQuerySet(RestrictedQuerySet):
|
class VLANQuerySet(RestrictedQuerySet):
|
||||||
|
|
||||||
def get_for_device(self, device):
|
def get_for_device(self, device):
|
||||||
|
@ -887,10 +887,7 @@ class IPAddressRelatedIPsView(generic.ObjectChildrenView):
|
|||||||
#
|
#
|
||||||
|
|
||||||
class VLANGroupListView(generic.ObjectListView):
|
class VLANGroupListView(generic.ObjectListView):
|
||||||
queryset = VLANGroup.objects.annotate(
|
queryset = VLANGroup.objects.get_utilization().prefetch_related('tags')
|
||||||
vlan_count=count_related(VLAN, 'group'),
|
|
||||||
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
|
|
||||||
).prefetch_related('tags')
|
|
||||||
filterset = filtersets.VLANGroupFilterSet
|
filterset = filtersets.VLANGroupFilterSet
|
||||||
filterset_form = forms.VLANGroupFilterForm
|
filterset_form = forms.VLANGroupFilterForm
|
||||||
table = tables.VLANGroupTable
|
table = tables.VLANGroupTable
|
||||||
@ -898,10 +895,7 @@ class VLANGroupListView(generic.ObjectListView):
|
|||||||
|
|
||||||
@register_model_view(VLANGroup)
|
@register_model_view(VLANGroup)
|
||||||
class VLANGroupView(generic.ObjectView):
|
class VLANGroupView(generic.ObjectView):
|
||||||
queryset = VLANGroup.objects.annotate(
|
queryset = VLANGroup.objects.get_utilization().prefetch_related('tags')
|
||||||
vlan_count=count_related(VLAN, 'group'),
|
|
||||||
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
|
|
||||||
).prefetch_related('tags')
|
|
||||||
|
|
||||||
def get_extra_context(self, request, instance):
|
def get_extra_context(self, request, instance):
|
||||||
related_models = (
|
related_models = (
|
||||||
@ -943,20 +937,14 @@ class VLANGroupBulkImportView(generic.BulkImportView):
|
|||||||
|
|
||||||
|
|
||||||
class VLANGroupBulkEditView(generic.BulkEditView):
|
class VLANGroupBulkEditView(generic.BulkEditView):
|
||||||
queryset = VLANGroup.objects.annotate(
|
queryset = VLANGroup.objects.get_utilization().prefetch_related('tags')
|
||||||
vlan_count=count_related(VLAN, 'group'),
|
|
||||||
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
|
|
||||||
).prefetch_related('tags')
|
|
||||||
filterset = filtersets.VLANGroupFilterSet
|
filterset = filtersets.VLANGroupFilterSet
|
||||||
table = tables.VLANGroupTable
|
table = tables.VLANGroupTable
|
||||||
form = forms.VLANGroupBulkEditForm
|
form = forms.VLANGroupBulkEditForm
|
||||||
|
|
||||||
|
|
||||||
class VLANGroupBulkDeleteView(generic.BulkDeleteView):
|
class VLANGroupBulkDeleteView(generic.BulkDeleteView):
|
||||||
queryset = VLANGroup.objects.annotate(
|
queryset = VLANGroup.objects.get_utilization().prefetch_related('tags')
|
||||||
vlan_count=count_related(VLAN, 'group'),
|
|
||||||
utilization=Round(F('vlan_count') / (F('max_vid') - F('min_vid') + 1.0) * 100, 2)
|
|
||||||
).prefetch_related('tags')
|
|
||||||
filterset = filtersets.VLANGroupFilterSet
|
filterset = filtersets.VLANGroupFilterSet
|
||||||
table = tables.VLANGroupTable
|
table = tables.VLANGroupTable
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user