Add missing counter for module bays

This commit is contained in:
Jeremy Stretch 2023-07-25 08:35:54 -04:00
parent c295a5e196
commit 84779312ea
4 changed files with 44 additions and 37 deletions

View File

@ -678,6 +678,7 @@ class DeviceSerializer(NetBoxModelSerializer):
front_port_count = serializers.IntegerField(read_only=True) front_port_count = serializers.IntegerField(read_only=True)
rear_port_count = serializers.IntegerField(read_only=True) rear_port_count = serializers.IntegerField(read_only=True)
device_bay_count = serializers.IntegerField(read_only=True) device_bay_count = serializers.IntegerField(read_only=True)
module_bay_count = serializers.IntegerField(read_only=True)
inventory_item_count = serializers.IntegerField(read_only=True) inventory_item_count = serializers.IntegerField(read_only=True)
class Meta: class Meta:
@ -689,7 +690,7 @@ class DeviceSerializer(NetBoxModelSerializer):
'vc_priority', 'description', 'comments', 'config_template', 'local_context_data', 'tags', 'custom_fields', 'vc_priority', 'description', 'comments', 'config_template', 'local_context_data', 'tags', 'custom_fields',
'created', 'last_updated', 'console_port_count', 'console_server_port_count', 'power_port_count', 'created', 'last_updated', 'console_port_count', 'console_server_port_count', 'power_port_count',
'power_outlet_count', 'interface_count', 'front_port_count', 'rear_port_count', 'device_bay_count', 'power_outlet_count', 'interface_count', 'front_port_count', 'rear_port_count', 'device_bay_count',
'inventory_item_count', 'module_bay_count', 'inventory_item_count',
] ]
@extend_schema_field(NestedDeviceSerializer) @extend_schema_field(NestedDeviceSerializer)
@ -715,7 +716,7 @@ class DeviceWithConfigContextSerializer(DeviceSerializer):
'comments', 'local_context_data', 'tags', 'custom_fields', 'config_context', 'config_template', 'comments', 'local_context_data', 'tags', 'custom_fields', 'config_context', 'config_template',
'created', 'last_updated', 'console_port_count', 'console_server_port_count', 'power_port_count', 'created', 'last_updated', 'console_port_count', 'console_server_port_count', 'power_port_count',
'power_outlet_count', 'interface_count', 'front_port_count', 'rear_port_count', 'device_bay_count', 'power_outlet_count', 'interface_count', 'front_port_count', 'rear_port_count', 'device_bay_count',
'inventory_item_count', 'module_bay_count', 'inventory_item_count',
] ]
@extend_schema_field(serializers.JSONField(allow_null=True)) @extend_schema_field(serializers.JSONField(allow_null=True))

View File

@ -9,38 +9,32 @@ def recalculate_device_counts(apps, schema_editor):
devices = list(Device.objects.all().annotate( devices = list(Device.objects.all().annotate(
_console_port_count=Count('consoleports', distinct=True), _console_port_count=Count('consoleports', distinct=True),
_console_server_port_count=Count('consoleserverports', distinct=True), _console_server_port_count=Count('consoleserverports', distinct=True),
_power_port_count=Count('powerports', distinct=True),
_power_outlet_count=Count('poweroutlets', distinct=True),
_interface_count=Count('interfaces', distinct=True), _interface_count=Count('interfaces', distinct=True),
_front_port_count=Count('frontports', distinct=True), _front_port_count=Count('frontports', distinct=True),
_rear_port_count=Count('rearports', distinct=True), _rear_port_count=Count('rearports', distinct=True),
_device_bay_count=Count('devicebays', distinct=True), _device_bay_count=Count('devicebays', distinct=True),
_module_bay_count=Count('modulebays', distinct=True),
_inventory_item_count=Count('inventoryitems', distinct=True), _inventory_item_count=Count('inventoryitems', distinct=True),
_power_port_count=Count('powerports', distinct=True),
_power_outlet_count=Count('poweroutlets', distinct=True),
)) ))
for device in devices: for device in devices:
device.console_port_count = device._console_port_count device.console_port_count = device._console_port_count
device.console_server_port_count = device._console_server_port_count device.console_server_port_count = device._console_server_port_count
device.power_port_count = device._power_port_count
device.power_outlet_count = device._power_outlet_count
device.interface_count = device._interface_count device.interface_count = device._interface_count
device.front_port_count = device._front_port_count device.front_port_count = device._front_port_count
device.rear_port_count = device._rear_port_count device.rear_port_count = device._rear_port_count
device.device_bay_count = device._device_bay_count device.device_bay_count = device._device_bay_count
device.module_bay_count = device._module_bay_count
device.inventory_item_count = device._inventory_item_count device.inventory_item_count = device._inventory_item_count
device.power_port_count = device._power_port_count
device.power_outlet_count = device._power_outlet_count
Device.objects.bulk_update( Device.objects.bulk_update(devices, [
devices, 'console_port_count', 'console_server_port_count', 'power_port_count', 'power_outlet_count', 'interface_count',
['console_port_count', 'front_port_count', 'rear_port_count', 'device_bay_count', 'module_bay_count', 'inventory_item_count',
'console_server_port_count', ])
'interface_count',
'front_port_count',
'rear_port_count',
'device_bay_count',
'inventory_item_count',
'power_port_count',
'power_outlet_count'],
)
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -61,23 +55,8 @@ class Migration(migrations.Migration):
), ),
migrations.AddField( migrations.AddField(
model_name='device', model_name='device',
name='device_bay_count', name='power_port_count',
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.DeviceBay'), field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.PowerPort'),
),
migrations.AddField(
model_name='device',
name='front_port_count',
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.FrontPort'),
),
migrations.AddField(
model_name='device',
name='interface_count',
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.Interface'),
),
migrations.AddField(
model_name='device',
name='inventory_item_count',
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.InventoryItem'),
), ),
migrations.AddField( migrations.AddField(
model_name='device', model_name='device',
@ -86,14 +65,34 @@ class Migration(migrations.Migration):
), ),
migrations.AddField( migrations.AddField(
model_name='device', model_name='device',
name='power_port_count', name='interface_count',
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.PowerPort'), field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.Interface'),
),
migrations.AddField(
model_name='device',
name='front_port_count',
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.FrontPort'),
), ),
migrations.AddField( migrations.AddField(
model_name='device', model_name='device',
name='rear_port_count', name='rear_port_count',
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.RearPort'), field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.RearPort'),
), ),
migrations.AddField(
model_name='device',
name='device_bay_count',
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.DeviceBay'),
),
migrations.AddField(
model_name='device',
name='module_bay_count',
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.ModuleBay'),
),
migrations.AddField(
model_name='device',
name='inventory_item_count',
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.InventoryItem'),
),
migrations.RunPython( migrations.RunPython(
recalculate_device_counts, recalculate_device_counts,
reverse_code=migrations.RunPython.noop reverse_code=migrations.RunPython.noop

View File

@ -672,6 +672,10 @@ class Device(PrimaryModel, ConfigContextModel):
to_model='dcim.DeviceBay', to_model='dcim.DeviceBay',
to_field='device' to_field='device'
) )
module_bay_count = CounterCacheField(
to_model='dcim.ModuleBay',
to_field='device'
)
inventory_item_count = CounterCacheField( inventory_item_count = CounterCacheField(
to_model='dcim.InventoryItem', to_model='dcim.InventoryItem',
to_field='device' to_field='device'

View File

@ -254,6 +254,9 @@ class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
device_bay_count = tables.Column( device_bay_count = tables.Column(
verbose_name=_('Device bays') verbose_name=_('Device bays')
) )
module_bay_count = tables.Column(
verbose_name=_('Module bays')
)
inventory_item_count = tables.Column( inventory_item_count = tables.Column(
verbose_name=_('Inventory items') verbose_name=_('Inventory items')
) )