circuits.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. from django.utils.translation import gettext_lazy as _
  2. import django_tables2 as tables
  3. from circuits.models import *
  4. from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
  5. from netbox.tables import NetBoxTable, columns
  6. from .columns import CommitRateColumn
  7. __all__ = (
  8. 'CircuitGroupAssignmentTable',
  9. 'CircuitGroupTable',
  10. 'CircuitTable',
  11. 'CircuitTerminationTable',
  12. 'CircuitTypeTable',
  13. )
  14. CIRCUITTERMINATION_LINK = """
  15. {% if value.site %}
  16. <a href="{{ value.site.get_absolute_url }}">{{ value.site }}</a>
  17. {% elif value.provider_network %}
  18. <a href="{{ value.provider_network.get_absolute_url }}">{{ value.provider_network }}</a>
  19. {% endif %}
  20. """
  21. class CircuitTypeTable(NetBoxTable):
  22. name = tables.Column(
  23. linkify=True,
  24. verbose_name=_('Name'),
  25. )
  26. color = columns.ColorColumn()
  27. tags = columns.TagColumn(
  28. url_name='circuits:circuittype_list'
  29. )
  30. circuit_count = columns.LinkedCountColumn(
  31. viewname='circuits:circuit_list',
  32. url_params={'type_id': 'pk'},
  33. verbose_name=_('Circuits')
  34. )
  35. class Meta(NetBoxTable.Meta):
  36. model = CircuitType
  37. fields = (
  38. 'pk', 'id', 'name', 'circuit_count', 'color', 'description', 'slug', 'tags', 'created', 'last_updated', 'actions',
  39. )
  40. default_columns = ('pk', 'name', 'circuit_count', 'description', 'slug')
  41. class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
  42. cid = tables.Column(
  43. linkify=True,
  44. verbose_name=_('Circuit ID')
  45. )
  46. provider = tables.Column(
  47. verbose_name=_('Provider'),
  48. linkify=True
  49. )
  50. provider_account = tables.Column(
  51. linkify=True,
  52. verbose_name=_('Account')
  53. )
  54. status = columns.ChoiceFieldColumn()
  55. termination_a = tables.TemplateColumn(
  56. template_code=CIRCUITTERMINATION_LINK,
  57. orderable=False,
  58. verbose_name=_('Side A')
  59. )
  60. termination_z = tables.TemplateColumn(
  61. template_code=CIRCUITTERMINATION_LINK,
  62. orderable=False,
  63. verbose_name=_('Side Z')
  64. )
  65. commit_rate = CommitRateColumn(
  66. verbose_name=_('Commit Rate')
  67. )
  68. comments = columns.MarkdownColumn(
  69. verbose_name=_('Comments')
  70. )
  71. tags = columns.TagColumn(
  72. url_name='circuits:circuit_list'
  73. )
  74. assignments = columns.ManyToManyColumn(
  75. verbose_name=_('Assignments'),
  76. linkify_item=True
  77. )
  78. class Meta(NetBoxTable.Meta):
  79. model = Circuit
  80. fields = (
  81. 'pk', 'id', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'tenant_group',
  82. 'termination_a', 'termination_z', 'install_date', 'termination_date', 'commit_rate', 'description',
  83. 'comments', 'contacts', 'tags', 'created', 'last_updated', 'assignments',
  84. )
  85. default_columns = (
  86. 'pk', 'cid', 'provider', 'type', 'status', 'tenant', 'termination_a', 'termination_z', 'description',
  87. )
  88. class CircuitTerminationTable(NetBoxTable):
  89. circuit = tables.Column(
  90. verbose_name=_('Circuit'),
  91. linkify=True
  92. )
  93. provider = tables.Column(
  94. verbose_name=_('Provider'),
  95. linkify=True,
  96. accessor='circuit.provider'
  97. )
  98. site = tables.Column(
  99. verbose_name=_('Site'),
  100. linkify=True
  101. )
  102. provider_network = tables.Column(
  103. verbose_name=_('Provider Network'),
  104. linkify=True
  105. )
  106. class Meta(NetBoxTable.Meta):
  107. model = CircuitTermination
  108. fields = (
  109. 'pk', 'id', 'circuit', 'provider', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed',
  110. 'xconnect_id', 'pp_info', 'description', 'created', 'last_updated', 'actions',
  111. )
  112. default_columns = ('pk', 'id', 'circuit', 'provider', 'term_side', 'description')
  113. class CircuitGroupTable(NetBoxTable):
  114. name = tables.Column(
  115. verbose_name=_('Name'),
  116. linkify=True
  117. )
  118. circuit_group_assignment_count = columns.LinkedCountColumn(
  119. viewname='circuits:circuitgroupassignment_list',
  120. url_params={'group_id': 'pk'},
  121. verbose_name=_('Circuits')
  122. )
  123. tags = columns.TagColumn(
  124. url_name='circuits:circuitgroup_list'
  125. )
  126. class Meta(NetBoxTable.Meta):
  127. model = CircuitGroup
  128. fields = (
  129. 'pk', 'name', 'description', 'circuit_group_assignment_count', 'tags',
  130. 'created', 'last_updated', 'actions',
  131. )
  132. default_columns = ('pk', 'name', 'description', 'circuit_group_assignment_count')
  133. class CircuitGroupAssignmentTable(NetBoxTable):
  134. group = tables.Column(
  135. verbose_name=_('Group'),
  136. linkify=True
  137. )
  138. provider = tables.Column(
  139. accessor='circuit__provider',
  140. verbose_name=_('Provider'),
  141. linkify=True
  142. )
  143. circuit = tables.Column(
  144. verbose_name=_('Circuit'),
  145. linkify=True
  146. )
  147. priority = tables.Column(
  148. verbose_name=_('Priority'),
  149. )
  150. tags = columns.TagColumn(
  151. url_name='circuits:circuitgroupassignment_list'
  152. )
  153. class Meta(NetBoxTable.Meta):
  154. model = CircuitGroupAssignment
  155. fields = (
  156. 'pk', 'id', 'group', 'provider', 'circuit', 'priority', 'created', 'last_updated', 'actions', 'tags',
  157. )
  158. default_columns = ('pk', 'group', 'provider', 'circuit', 'priority')