from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from circuits.models import * from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin from netbox.tables import NetBoxTable, columns from .columns import CommitRateColumn __all__ = ( 'CircuitGroupAssignmentTable', 'CircuitGroupTable', 'CircuitTable', 'CircuitTerminationTable', 'CircuitTypeTable', ) CIRCUITTERMINATION_LINK = """ {% if value.termination %} {{ value.termination }} {% endif %} """ class CircuitTypeTable(NetBoxTable): name = tables.Column( linkify=True, verbose_name=_('Name'), ) color = columns.ColorColumn() tags = columns.TagColumn( url_name='circuits:circuittype_list' ) circuit_count = columns.LinkedCountColumn( viewname='circuits:circuit_list', url_params={'type_id': 'pk'}, verbose_name=_('Circuits') ) class Meta(NetBoxTable.Meta): model = CircuitType fields = ( 'pk', 'id', 'name', 'circuit_count', 'color', 'description', 'slug', 'tags', 'created', 'last_updated', 'actions', ) default_columns = ('pk', 'name', 'circuit_count', 'color', 'description') class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): cid = tables.Column( linkify=True, verbose_name=_('Circuit ID') ) provider = tables.Column( verbose_name=_('Provider'), linkify=True ) provider_account = tables.Column( linkify=True, verbose_name=_('Account') ) type = columns.ColoredLabelColumn( verbose_name=_('Type'), ) status = columns.ChoiceFieldColumn() termination_a = columns.TemplateColumn( template_code=CIRCUITTERMINATION_LINK, orderable=False, verbose_name=_('Side A') ) termination_z = columns.TemplateColumn( template_code=CIRCUITTERMINATION_LINK, orderable=False, verbose_name=_('Side Z') ) commit_rate = CommitRateColumn( verbose_name=_('Commit Rate') ) distance = columns.DistanceColumn() comments = columns.MarkdownColumn( verbose_name=_('Comments') ) tags = columns.TagColumn( url_name='circuits:circuit_list' ) assignments = columns.ManyToManyColumn( verbose_name=_('Assignments'), linkify_item=True ) class Meta(NetBoxTable.Meta): model = Circuit fields = ( 'pk', 'id', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'tenant_group', 'termination_a', 'termination_z', 'install_date', 'termination_date', 'commit_rate', 'description', 'comments', 'contacts', 'tags', 'created', 'last_updated', 'assignments', ) default_columns = ( 'pk', 'cid', 'provider', 'type', 'status', 'tenant', 'termination_a', 'termination_z', 'description', ) class CircuitTerminationTable(NetBoxTable): circuit = tables.Column( verbose_name=_('Circuit'), linkify=True ) provider = tables.Column( verbose_name=_('Provider'), linkify=True, accessor='circuit__provider' ) term_side = tables.Column( verbose_name=_('Side') ) termination_type = columns.ContentTypeColumn( verbose_name=_('Termination Type'), ) termination = tables.Column( verbose_name=_('Termination Point'), linkify=True, orderable=False, ) # Termination types site = tables.Column( verbose_name=_('Site'), linkify=True, accessor='_site' ) site_group = tables.Column( verbose_name=_('Site Group'), linkify=True, accessor='_site_group' ) region = tables.Column( verbose_name=_('Region'), linkify=True, accessor='_region' ) location = tables.Column( verbose_name=_('Location'), linkify=True, accessor='_location' ) provider_network = tables.Column( verbose_name=_('Provider Network'), linkify=True, accessor='_provider_network' ) class Meta(NetBoxTable.Meta): model = CircuitTermination fields = ( 'pk', 'id', 'circuit', 'provider', 'term_side', 'termination_type', 'termination', 'site_group', 'region', 'site', 'location', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description', 'created', 'last_updated', 'actions', ) default_columns = ( 'pk', 'id', 'circuit', 'provider', 'term_side', 'termination_type', 'termination', 'description', ) class CircuitGroupTable(NetBoxTable): name = tables.Column( verbose_name=_('Name'), linkify=True ) circuit_group_assignment_count = columns.LinkedCountColumn( viewname='circuits:circuitgroupassignment_list', url_params={'group_id': 'pk'}, verbose_name=_('Circuits') ) tags = columns.TagColumn( url_name='circuits:circuitgroup_list' ) class Meta(NetBoxTable.Meta): model = CircuitGroup fields = ( 'pk', 'name', 'description', 'circuit_group_assignment_count', 'tags', 'created', 'last_updated', 'actions', ) default_columns = ('pk', 'name', 'description', 'circuit_group_assignment_count') class CircuitGroupAssignmentTable(NetBoxTable): group = tables.Column( verbose_name=_('Group'), linkify=True ) provider = tables.Column( accessor='member__provider', verbose_name=_('Provider'), linkify=True ) member_type = columns.ContentTypeColumn( verbose_name=_('Type') ) member = tables.Column( verbose_name=_('Circuit'), linkify=True ) priority = tables.Column( verbose_name=_('Priority'), ) tags = columns.TagColumn( url_name='circuits:circuitgroupassignment_list' ) class Meta(NetBoxTable.Meta): model = CircuitGroupAssignment fields = ( 'pk', 'id', 'group', 'provider', 'member_type', 'member', 'priority', 'created', 'last_updated', 'actions', 'tags', ) default_columns = ('pk', 'group', 'provider', 'member_type', 'member', 'priority')