Browse Source

Closes #1722: Added VM count to site view

Jeremy Stretch 7 years ago
parent
commit
30df060357

+ 2 - 0
netbox/dcim/views.py

@@ -25,6 +25,7 @@ from utilities.views import (
     BulkComponentCreateView, BulkDeleteView, BulkEditView, BulkImportView, ComponentCreateView, ComponentDeleteView,
     ComponentEditView, ObjectDeleteView, ObjectEditView, ObjectListView,
 )
+from virtualization.models import VirtualMachine
 from . import filters, forms, tables
 from .constants import CONNECTION_STATUS_CONNECTED
 from .models import (
@@ -134,6 +135,7 @@ class SiteView(View):
             'prefix_count': Prefix.objects.filter(site=site).count(),
             'vlan_count': VLAN.objects.filter(site=site).count(),
             'circuit_count': Circuit.objects.filter(terminations__site=site).count(),
+            'vm_count': VirtualMachine.objects.filter(cluster__site=site).count(),
         }
         rack_groups = RackGroup.objects.filter(site=site).annotate(rack_count=Count('racks'))
         topology_maps = TopologyMap.objects.filter(site=site)

+ 4 - 0
netbox/templates/dcim/site.html

@@ -211,6 +211,10 @@
                     <h2><a href="{% url 'circuits:circuit_list' %}?site={{ site.slug }}" class="btn {% if stats.circuit_count %}btn-primary{% else %}btn-default{% endif %} btn-lg">{{ stats.circuit_count }}</a></h2>
                     <p>Circuits</p>
                 </div>
+                <div class="col-md-4 text-center">
+                    <h2><a href="{% url 'virtualization:virtualmachine_list' %}?site={{ site.slug }}" class="btn {% if stats.vm_count %}btn-primary{% else %}btn-default{% endif %} btn-lg">{{ stats.vm_count }}</a></h2>
+                    <p>Virtual Machines</p>
+                </div>
             </div>
         </div>
         <div class="panel panel-default">

+ 11 - 0
netbox/virtualization/filters.py

@@ -88,6 +88,17 @@ class VirtualMachineFilter(CustomFieldFilterSet):
         queryset=Cluster.objects.all(),
         label='Cluster (ID)',
     )
+    site_id = django_filters.ModelMultipleChoiceFilter(
+        name='cluster__site',
+        queryset=Site.objects.all(),
+        label='Site (ID)',
+    )
+    site = django_filters.ModelMultipleChoiceFilter(
+        name='cluster__site__slug',
+        queryset=Site.objects.all(),
+        to_field_name='slug',
+        label='Site (slug)',
+    )
     role_id = django_filters.ModelMultipleChoiceFilter(
         queryset=DeviceRole.objects.all(),
         label='Role (ID)',

+ 5 - 0
netbox/virtualization/forms.py

@@ -344,6 +344,11 @@ class VirtualMachineFilterForm(BootstrapMixin, CustomFieldFilterForm):
         queryset=Cluster.objects.annotate(filter_count=Count('virtual_machines')),
         label='Cluster'
     )
+    site = FilterChoiceField(
+        queryset=Site.objects.annotate(filter_count=Count('clusters__virtual_machines')),
+        to_field_name='slug',
+        null_option=(0, 'None')
+    )
     role = FilterChoiceField(
         queryset=DeviceRole.objects.filter(vm_role=True).annotate(filter_count=Count('virtual_machines')),
         to_field_name='slug',