circuits.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  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.termination %}
  16. <a href="{{ value.termination.get_absolute_url }}">{{ value.termination }}</a>
  17. {% endif %}
  18. """
  19. class CircuitTypeTable(NetBoxTable):
  20. name = tables.Column(
  21. linkify=True,
  22. verbose_name=_('Name'),
  23. )
  24. color = columns.ColorColumn()
  25. tags = columns.TagColumn(
  26. url_name='circuits:circuittype_list'
  27. )
  28. circuit_count = columns.LinkedCountColumn(
  29. viewname='circuits:circuit_list',
  30. url_params={'type_id': 'pk'},
  31. verbose_name=_('Circuits')
  32. )
  33. class Meta(NetBoxTable.Meta):
  34. model = CircuitType
  35. fields = (
  36. 'pk', 'id', 'name', 'circuit_count', 'color', 'description', 'slug', 'tags', 'created', 'last_updated',
  37. 'actions',
  38. )
  39. default_columns = ('pk', 'name', 'circuit_count', 'color', 'description')
  40. class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
  41. cid = tables.Column(
  42. linkify=True,
  43. verbose_name=_('Circuit ID')
  44. )
  45. provider = tables.Column(
  46. verbose_name=_('Provider'),
  47. linkify=True
  48. )
  49. provider_account = tables.Column(
  50. linkify=True,
  51. verbose_name=_('Account')
  52. )
  53. type = tables.Column(
  54. verbose_name=_('Type'),
  55. linkify=True
  56. )
  57. status = columns.ChoiceFieldColumn()
  58. termination_a = columns.TemplateColumn(
  59. template_code=CIRCUITTERMINATION_LINK,
  60. orderable=False,
  61. verbose_name=_('Side A')
  62. )
  63. termination_z = columns.TemplateColumn(
  64. template_code=CIRCUITTERMINATION_LINK,
  65. orderable=False,
  66. verbose_name=_('Side Z')
  67. )
  68. commit_rate = CommitRateColumn(
  69. verbose_name=_('Commit Rate')
  70. )
  71. distance = columns.DistanceColumn()
  72. comments = columns.MarkdownColumn(
  73. verbose_name=_('Comments')
  74. )
  75. tags = columns.TagColumn(
  76. url_name='circuits:circuit_list'
  77. )
  78. assignments = columns.ManyToManyColumn(
  79. verbose_name=_('Assignments'),
  80. linkify_item=True
  81. )
  82. class Meta(NetBoxTable.Meta):
  83. model = Circuit
  84. fields = (
  85. 'pk', 'id', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'tenant_group',
  86. 'termination_a', 'termination_z', 'install_date', 'termination_date', 'commit_rate', 'description',
  87. 'comments', 'contacts', 'tags', 'created', 'last_updated', 'assignments',
  88. )
  89. default_columns = (
  90. 'pk', 'cid', 'provider', 'type', 'status', 'tenant', 'termination_a', 'termination_z', 'description',
  91. )
  92. class CircuitTerminationTable(NetBoxTable):
  93. circuit = tables.Column(
  94. verbose_name=_('Circuit'),
  95. linkify=True
  96. )
  97. provider = tables.Column(
  98. verbose_name=_('Provider'),
  99. linkify=True,
  100. accessor='circuit__provider'
  101. )
  102. term_side = tables.Column(
  103. verbose_name=_('Side')
  104. )
  105. termination_type = columns.ContentTypeColumn(
  106. verbose_name=_('Termination Type'),
  107. )
  108. termination = tables.Column(
  109. verbose_name=_('Termination Point'),
  110. linkify=True
  111. )
  112. # Termination types
  113. site = tables.Column(
  114. verbose_name=_('Site'),
  115. linkify=True,
  116. accessor='_site'
  117. )
  118. site_group = tables.Column(
  119. verbose_name=_('Site Group'),
  120. linkify=True,
  121. accessor='_sitegroup'
  122. )
  123. region = tables.Column(
  124. verbose_name=_('Region'),
  125. linkify=True,
  126. accessor='_region'
  127. )
  128. location = tables.Column(
  129. verbose_name=_('Location'),
  130. linkify=True,
  131. accessor='_location'
  132. )
  133. provider_network = tables.Column(
  134. verbose_name=_('Provider Network'),
  135. linkify=True,
  136. accessor='_provider_network'
  137. )
  138. class Meta(NetBoxTable.Meta):
  139. model = CircuitTermination
  140. fields = (
  141. 'pk', 'id', 'circuit', 'provider', 'term_side', 'termination_type', 'termination', 'site_group', 'region',
  142. 'site', 'location', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info',
  143. 'description', 'created', 'last_updated', 'actions',
  144. )
  145. default_columns = (
  146. 'pk', 'id', 'circuit', 'provider', 'term_side', 'termination_type', 'termination', 'description',
  147. )
  148. class CircuitGroupTable(NetBoxTable):
  149. name = tables.Column(
  150. verbose_name=_('Name'),
  151. linkify=True
  152. )
  153. circuit_group_assignment_count = columns.LinkedCountColumn(
  154. viewname='circuits:circuitgroupassignment_list',
  155. url_params={'group_id': 'pk'},
  156. verbose_name=_('Circuits')
  157. )
  158. tags = columns.TagColumn(
  159. url_name='circuits:circuitgroup_list'
  160. )
  161. class Meta(NetBoxTable.Meta):
  162. model = CircuitGroup
  163. fields = (
  164. 'pk', 'name', 'description', 'circuit_group_assignment_count', 'tags',
  165. 'created', 'last_updated', 'actions',
  166. )
  167. default_columns = ('pk', 'name', 'description', 'circuit_group_assignment_count')
  168. class CircuitGroupAssignmentTable(NetBoxTable):
  169. group = tables.Column(
  170. verbose_name=_('Group'),
  171. linkify=True
  172. )
  173. provider = tables.Column(
  174. accessor='member__provider',
  175. verbose_name=_('Provider'),
  176. linkify=True
  177. )
  178. member_type = columns.ContentTypeColumn(
  179. verbose_name=_('Type')
  180. )
  181. member = tables.Column(
  182. verbose_name=_('Circuit'),
  183. linkify=True
  184. )
  185. priority = tables.Column(
  186. verbose_name=_('Priority'),
  187. )
  188. tags = columns.TagColumn(
  189. url_name='circuits:circuitgroupassignment_list'
  190. )
  191. class Meta(NetBoxTable.Meta):
  192. model = CircuitGroupAssignment
  193. fields = (
  194. 'pk', 'id', 'group', 'provider', 'member_type', 'member', 'priority', 'created', 'last_updated', 'actions',
  195. 'tags',
  196. )
  197. default_columns = ('pk', 'group', 'provider', 'member_type', 'member', 'priority')