circuits.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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. 'CircuitTable',
  9. 'CircuitTerminationTable',
  10. 'CircuitTypeTable',
  11. )
  12. CIRCUITTERMINATION_LINK = """
  13. {% if value.site %}
  14. <a href="{{ value.site.get_absolute_url }}">{{ value.site }}</a>
  15. {% elif value.provider_network %}
  16. <a href="{{ value.provider_network.get_absolute_url }}">{{ value.provider_network }}</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', 'actions',
  37. )
  38. default_columns = ('pk', 'name', 'circuit_count', 'description', 'slug')
  39. class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
  40. cid = tables.Column(
  41. linkify=True,
  42. verbose_name=_('Circuit ID')
  43. )
  44. provider = tables.Column(
  45. verbose_name=_('Provider'),
  46. linkify=True
  47. )
  48. provider_account = tables.Column(
  49. linkify=True,
  50. verbose_name=_('Account')
  51. )
  52. status = columns.ChoiceFieldColumn()
  53. termination_a = tables.TemplateColumn(
  54. template_code=CIRCUITTERMINATION_LINK,
  55. verbose_name=_('Side A')
  56. )
  57. termination_z = tables.TemplateColumn(
  58. template_code=CIRCUITTERMINATION_LINK,
  59. verbose_name=_('Side Z')
  60. )
  61. commit_rate = CommitRateColumn(
  62. verbose_name=_('Commit Rate')
  63. )
  64. comments = columns.MarkdownColumn(
  65. verbose_name=_('Comments'),
  66. )
  67. tags = columns.TagColumn(
  68. url_name='circuits:circuit_list'
  69. )
  70. class Meta(NetBoxTable.Meta):
  71. model = Circuit
  72. fields = (
  73. 'pk', 'id', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'tenant_group',
  74. 'termination_a', 'termination_z', 'install_date', 'termination_date', 'commit_rate', 'description',
  75. 'comments', 'contacts', 'tags', 'created', 'last_updated',
  76. )
  77. default_columns = (
  78. 'pk', 'cid', 'provider', 'type', 'status', 'tenant', 'termination_a', 'termination_z', 'description',
  79. )
  80. class CircuitTerminationTable(NetBoxTable):
  81. circuit = tables.Column(
  82. verbose_name=_('Circuit'),
  83. linkify=True
  84. )
  85. provider = tables.Column(
  86. verbose_name=_('Provider'),
  87. linkify=True,
  88. accessor='circuit.provider'
  89. )
  90. site = tables.Column(
  91. verbose_name=_('Site'),
  92. linkify=True
  93. )
  94. provider_network = tables.Column(
  95. verbose_name=_('Provider Network'),
  96. linkify=True
  97. )
  98. class Meta(NetBoxTable.Meta):
  99. model = CircuitTermination
  100. fields = (
  101. 'pk', 'id', 'circuit', 'provider', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed',
  102. 'xconnect_id', 'pp_info', 'description', 'created', 'last_updated', 'actions',
  103. )
  104. default_columns = ('pk', 'id', 'circuit', 'provider', 'term_side', 'description')