tasks.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. import django_tables2 as tables
  2. from django.utils.translation import gettext_lazy as _
  3. from django_tables2.utils import A
  4. from core.constants import RQ_TASK_STATUSES
  5. from core.tables.columns import BadgeColumn
  6. from netbox.tables import BaseTable, columns
  7. class BackgroundQueueTable(BaseTable):
  8. name = tables.Column(
  9. verbose_name=_("Name")
  10. )
  11. jobs = tables.Column(
  12. linkify=("core:background_task_list", [A("index"), "queued"]),
  13. verbose_name=_("Queued")
  14. )
  15. oldest_job_timestamp = tables.Column(
  16. verbose_name=_("Oldest Task")
  17. )
  18. started_jobs = tables.Column(
  19. linkify=("core:background_task_list", [A("index"), "started"]),
  20. verbose_name=_("Active")
  21. )
  22. deferred_jobs = tables.Column(
  23. linkify=("core:background_task_list", [A("index"), "deferred"]),
  24. verbose_name=_("Deferred")
  25. )
  26. finished_jobs = tables.Column(
  27. linkify=("core:background_task_list", [A("index"), "finished"]),
  28. verbose_name=_("Finished")
  29. )
  30. failed_jobs = tables.Column(
  31. linkify=("core:background_task_list", [A("index"), "failed"]),
  32. verbose_name=_("Failed")
  33. )
  34. scheduled_jobs = tables.Column(
  35. linkify=("core:background_task_list", [A("index"), "scheduled"]),
  36. verbose_name=_("Scheduled")
  37. )
  38. workers = tables.Column(
  39. linkify=("core:worker_list", [A("index")]),
  40. verbose_name=_("Workers")
  41. )
  42. host = tables.Column(
  43. accessor="connection_kwargs__host",
  44. verbose_name=_("Host")
  45. )
  46. port = tables.Column(
  47. accessor="connection_kwargs__port",
  48. verbose_name=_("Port")
  49. )
  50. db = tables.Column(
  51. accessor="connection_kwargs__db",
  52. verbose_name=_("DB")
  53. )
  54. pid = tables.Column(
  55. accessor="scheduler__pid",
  56. verbose_name=_("Scheduler PID")
  57. )
  58. class Meta(BaseTable.Meta):
  59. empty_text = _('No queues found')
  60. fields = (
  61. 'name', 'jobs', 'oldest_job_timestamp', 'started_jobs', 'deferred_jobs', 'finished_jobs', 'failed_jobs',
  62. 'scheduled_jobs', 'workers', 'host', 'port', 'db', 'pid',
  63. )
  64. default_columns = (
  65. 'name', 'jobs', 'started_jobs', 'deferred_jobs', 'finished_jobs', 'failed_jobs', 'scheduled_jobs',
  66. 'workers',
  67. )
  68. class BackgroundTaskTable(BaseTable):
  69. id = tables.Column(
  70. linkify=("core:background_task", [A("id")]),
  71. verbose_name=_("ID")
  72. )
  73. created_at = columns.DateTimeColumn(
  74. verbose_name=_("Created")
  75. )
  76. enqueued_at = columns.DateTimeColumn(
  77. verbose_name=_("Enqueued")
  78. )
  79. ended_at = columns.DateTimeColumn(
  80. verbose_name=_("Ended")
  81. )
  82. status = BadgeColumn(
  83. badges=RQ_TASK_STATUSES,
  84. verbose_name=_("Status"),
  85. accessor='get_status'
  86. )
  87. callable = tables.Column(
  88. empty_values=(),
  89. verbose_name=_("Callable")
  90. )
  91. class Meta(BaseTable.Meta):
  92. empty_text = _('No tasks found')
  93. fields = (
  94. 'id', 'created_at', 'enqueued_at', 'ended_at', 'status', 'callable',
  95. )
  96. default_columns = (
  97. 'id', 'created_at', 'enqueued_at', 'ended_at', 'status', 'callable',
  98. )
  99. def render_callable(self, value, record):
  100. try:
  101. return record.func_name
  102. except Exception as e:
  103. return repr(e)
  104. class WorkerTable(BaseTable):
  105. name = tables.Column(
  106. linkify=("core:worker", [A("name")]),
  107. verbose_name=_("Name")
  108. )
  109. state = tables.Column(
  110. verbose_name=_("State")
  111. )
  112. birth_date = columns.DateTimeColumn(
  113. verbose_name=_("Birth")
  114. )
  115. pid = tables.Column(
  116. verbose_name=_("PID")
  117. )
  118. class Meta(BaseTable.Meta):
  119. empty_text = _('No workers found')
  120. fields = (
  121. 'name', 'state', 'birth_date', 'pid',
  122. )
  123. default_columns = (
  124. 'name', 'state', 'birth_date', 'pid',
  125. )