6347 connect the counters

This commit is contained in:
Arthur 2023-05-16 13:35:08 -07:00
parent 2e6bc7b53a
commit acb58f0a31
3 changed files with 109 additions and 14 deletions

View File

@ -9,18 +9,45 @@ class DCIMConfig(AppConfig):
def ready(self):
from . import signals, search
from .models import CableTermination
from .models import (
CableTermination, ConsolePort, ConsoleServerPort, DeviceBay, FrontPort,
Interface, InventoryItem, PowerOutlet, PowerPort, RearPort,
)
from utilities.counter import connect_counter
# Register denormalized fields
denormalized.register(CableTermination, '_device', {
'_rack': 'rack',
'_location': 'location',
'_site': 'site',
})
denormalized.register(CableTermination, '_rack', {
'_location': 'location',
'_site': 'site',
})
denormalized.register(CableTermination, '_location', {
'_site': 'site',
})
denormalized.register(
CableTermination,
'_device',
{
'_rack': 'rack',
'_location': 'location',
'_site': 'site',
},
)
denormalized.register(
CableTermination,
'_rack',
{
'_location': 'location',
'_site': 'site',
},
)
denormalized.register(
CableTermination,
'_location',
{
'_site': 'site',
},
)
connect_counter('_console_port_count', ConsolePort.device)
connect_counter('_console_server_port_count', ConsoleServerPort.device)
connect_counter('_interface_count', Interface.device)
connect_counter('_front_port_count', FrontPort.device)
connect_counter('_rear_port_count', RearPort.device)
connect_counter('_device_bay_count', DeviceBay.device)
connect_counter('_inventory_item_count', InventoryItem.device)
connect_counter('_power_port_count', PowerPort.device)
connect_counter('_power_outlet_count', PowerOutlet.device)

View File

@ -0,0 +1,58 @@
# Generated by Django 4.1.8 on 2023-05-16 20:18
from django.db import migrations
import utilities.fields
class Migration(migrations.Migration):
dependencies = [
('dcim', '0173_remove_napalm_fields'),
]
operations = [
migrations.AddField(
model_name='device',
name='_console_port_count',
field=utilities.fields.CounterCacheField(default=0),
),
migrations.AddField(
model_name='device',
name='_console_server_port_count',
field=utilities.fields.CounterCacheField(default=0),
),
migrations.AddField(
model_name='device',
name='_device_bay_count',
field=utilities.fields.CounterCacheField(default=0),
),
migrations.AddField(
model_name='device',
name='_front_port_count',
field=utilities.fields.CounterCacheField(default=0),
),
migrations.AddField(
model_name='device',
name='_interface_count',
field=utilities.fields.CounterCacheField(default=0),
),
migrations.AddField(
model_name='device',
name='_inventory_item_count',
field=utilities.fields.CounterCacheField(default=0),
),
migrations.AddField(
model_name='device',
name='_power_outlet_count',
field=utilities.fields.CounterCacheField(default=0),
),
migrations.AddField(
model_name='device',
name='_power_port_count',
field=utilities.fields.CounterCacheField(default=0),
),
migrations.AddField(
model_name='device',
name='_rear_port_count',
field=utilities.fields.CounterCacheField(default=0),
),
]

View File

@ -21,7 +21,7 @@ from extras.querysets import ConfigContextModelQuerySet
from netbox.config import ConfigItem
from netbox.models import OrganizationalModel, PrimaryModel
from utilities.choices import ColorChoices
from utilities.fields import ColorField, NaturalOrderingField
from utilities.fields import ColorField, CounterCacheField, NaturalOrderingField
from .device_components import *
from .mixins import WeightMixin
@ -625,6 +625,16 @@ class Device(PrimaryModel, ConfigContextModel):
null=True
)
_console_port_count = CounterCacheField()
_console_server_port_count = CounterCacheField()
_power_port_count = CounterCacheField()
_power_outlet_count = CounterCacheField()
_interface_count = CounterCacheField()
_front_port_count = CounterCacheField()
_rear_port_count = CounterCacheField()
_device_bay_count = CounterCacheField()
_inventory_item_count = CounterCacheField()
# Generic relations
contacts = GenericRelation(
to='tenancy.ContactAssignment'