2023-07-25 20:39:05 +07:00
|
|
|
from django.db import migrations
|
|
|
|
from django.db.models import Count
|
|
|
|
|
|
|
|
import utilities.fields
|
|
|
|
|
|
|
|
|
|
|
|
def recalculate_device_counts(apps, schema_editor):
|
|
|
|
Device = apps.get_model("dcim", "Device")
|
|
|
|
devices = list(Device.objects.all().annotate(
|
|
|
|
_console_port_count=Count('consoleports', 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),
|
|
|
|
_front_port_count=Count('frontports', distinct=True),
|
|
|
|
_rear_port_count=Count('rearports', distinct=True),
|
|
|
|
_device_bay_count=Count('devicebays', distinct=True),
|
|
|
|
_module_bay_count=Count('modulebays', distinct=True),
|
|
|
|
_inventory_item_count=Count('inventoryitems', distinct=True),
|
|
|
|
))
|
|
|
|
|
|
|
|
for device in devices:
|
|
|
|
device.console_port_count = device._console_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.front_port_count = device._front_port_count
|
|
|
|
device.rear_port_count = device._rear_port_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.objects.bulk_update(devices, [
|
2023-07-25 16:17:58 -04:00
|
|
|
'console_port_count',
|
|
|
|
'console_server_port_count',
|
|
|
|
'power_port_count',
|
|
|
|
'power_outlet_count',
|
|
|
|
'interface_count',
|
|
|
|
'front_port_count',
|
|
|
|
'rear_port_count',
|
|
|
|
'device_bay_count',
|
|
|
|
'module_bay_count',
|
|
|
|
'inventory_item_count',
|
2023-07-25 20:39:05 +07:00
|
|
|
])
|
|
|
|
|
|
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
|
dependencies = [
|
2023-07-25 19:40:40 +01:00
|
|
|
('dcim', '0175_device_oob_ip'),
|
2023-07-25 20:39:05 +07:00
|
|
|
]
|
|
|
|
|
|
|
|
operations = [
|
|
|
|
migrations.AddField(
|
|
|
|
model_name='device',
|
|
|
|
name='console_port_count',
|
|
|
|
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.ConsolePort'),
|
|
|
|
),
|
|
|
|
migrations.AddField(
|
|
|
|
model_name='device',
|
|
|
|
name='console_server_port_count',
|
|
|
|
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.ConsoleServerPort'),
|
|
|
|
),
|
|
|
|
migrations.AddField(
|
|
|
|
model_name='device',
|
|
|
|
name='power_port_count',
|
|
|
|
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.PowerPort'),
|
|
|
|
),
|
|
|
|
migrations.AddField(
|
|
|
|
model_name='device',
|
|
|
|
name='power_outlet_count',
|
|
|
|
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.PowerOutlet'),
|
|
|
|
),
|
|
|
|
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='front_port_count',
|
|
|
|
field=utilities.fields.CounterCacheField(default=0, to_field='device', to_model='dcim.FrontPort'),
|
|
|
|
),
|
|
|
|
migrations.AddField(
|
|
|
|
model_name='device',
|
|
|
|
name='rear_port_count',
|
|
|
|
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(
|
|
|
|
recalculate_device_counts,
|
|
|
|
reverse_code=migrations.RunPython.noop
|
|
|
|
),
|
|
|
|
]
|