Optimize background site/location updates

This commit is contained in:
Jeremy Stretch 2021-03-05 09:56:47 -05:00
parent d3974c9f44
commit 5406e8e2e7

View File

@ -37,7 +37,7 @@ def rebuild_paths(obj):
#
# Site/rack/device assignment
# Location/rack/device assignment
#
@receiver(post_save, sender=Location)
@ -47,18 +47,11 @@ def handle_location_site_change(instance, created, **kwargs):
object instead of calling update() on the QuerySet to ensure the proper change records get created for each.
"""
if not created:
for location in instance.get_children():
location.site = instance.site
location.save()
for rack in Rack.objects.filter(location=instance).exclude(site=instance.site):
rack.site = instance.site
rack.save()
for device in Device.objects.filter(location=instance).exclude(site=instance.site):
device.site = instance.site
device.save()
for powerpanel in PowerPanel.objects.filter(location=instance).exclude(site=instance.site):
powerpanel.site = instance.site
powerpanel.save()
instance.get_descendants().update(site=instance.site)
locations = instance.get_descendants(include_self=True).values_list('pk', flat=True)
Rack.objects.filter(location__in=locations).update(site=instance.site)
Device.objects.filter(location__in=locations).update(site=instance.site)
PowerPanel.objects.filter(location__in=locations).update(site=instance.site)
@receiver(post_save, sender=Rack)
@ -67,10 +60,7 @@ def handle_rack_site_change(instance, created, **kwargs):
Update child Devices if Site or Location assignment has changed.
"""
if not created:
for device in Device.objects.filter(rack=instance).exclude(site=instance.site, location=instance.location):
device.site = instance.site
device.location = instance.location
device.save()
Device.objects.filter(rack=instance).update(site=instance.site, location=instance.location)
#