diff --git a/netbox/netbox/utils.py b/netbox/netbox/utils.py index f8f6bcc65..f27d1b5f7 100644 --- a/netbox/netbox/utils.py +++ b/netbox/netbox/utils.py @@ -24,22 +24,3 @@ def register_data_backend(): return cls return _wrapper - - -def convert_byte_size(value, unit="mega"): - """ - Convert a size value to unit. - """ - factors = { - "kilo": 1024, - "mega": 1024 ** 2, - "giga": 1024 ** 3, - "tera": 1024 ** 4, - } - if value: - # If the value is less than 6 digits, it understands the value is expressed according to the unit. - if len(str(value)) < 6: - return value - value_converted = float(value) / factors[unit] - return value_converted - return 0 diff --git a/netbox/templates/virtualization/cluster.html b/netbox/templates/virtualization/cluster.html index d74ead0fa..7628bf876 100644 --- a/netbox/templates/virtualization/cluster.html +++ b/netbox/templates/virtualization/cluster.html @@ -59,7 +59,7 @@ {% trans "Memory" %} {% if memory_sum %} - {{ memory_sum }} {% trans "MB" context "Abbreviation for megabyte" %} + {{ memory_sum|humanize_megabytes }} {% else %} {{ ''|placeholder }} {% endif %} diff --git a/netbox/utilities/templatetags/helpers.py b/netbox/utilities/templatetags/helpers.py index e8686f8c6..175d283a3 100644 --- a/netbox/utilities/templatetags/helpers.py +++ b/netbox/utilities/templatetags/helpers.py @@ -96,11 +96,13 @@ def humanize_megabytes(mb): """ if not mb: return '' + if len(str(mb)) < 6: + return mb if not mb % 1048576: # 1024^2 return f'{int(mb / 1048576)} TB' if not mb % 1024: return f'{int(mb / 1024)} GB' - return f'{mb} MB' + return f'{float(mb)/(1048576):.2f} MB' @register.filter() diff --git a/netbox/virtualization/views.py b/netbox/virtualization/views.py index 064a362ca..1ddd2c92d 100644 --- a/netbox/virtualization/views.py +++ b/netbox/virtualization/views.py @@ -16,7 +16,6 @@ from extras.views import ObjectConfigContextView from ipam.models import IPAddress from ipam.tables import InterfaceVLANTable from netbox.constants import DEFAULT_ACTION_PERMISSIONS -from netbox.utils import convert_byte_size from netbox.views import generic from tenancy.views import ObjectContactsView from utilities.query import count_related @@ -173,17 +172,7 @@ class ClusterView(generic.ObjectView): queryset = Cluster.objects.all() def get_extra_context(self, request, instance): - vm_memory = [convert_byte_size(item.memory, 'mega') for item in instance.virtual_machines.all() if item.memory] - vm_disk = [convert_byte_size(item.disk, 'giga') for item in instance.virtual_machines.all() if item.disk] - - memory_sum = sum(vm_memory) - disk_sum = sum(vm_disk) - - extra_content = instance.virtual_machines.aggregate(vcpus_sum=Sum('vcpus')) - extra_content['memory_sum'] = f"{memory_sum:.2f}" - extra_content['disk_sum'] = f"{disk_sum:.2f}" - - return extra_content + return instance.virtual_machines.aggregate(vcpus_sum=Sum('vcpus'), memory_sum=Sum('memory'), disk_sum=Sum('disk')) @register_model_view(Cluster, 'virtualmachines', path='virtual-machines')