diff --git a/netbox/core/constants.py b/netbox/core/constants.py
index 3c3382dcc..582768186 100644
--- a/netbox/core/constants.py
+++ b/netbox/core/constants.py
@@ -4,23 +4,31 @@ from django.utils.translation import gettext_lazy as _
from rq.job import JobStatus
__all__ = (
+ 'JOB_LOG_ENTRY_LEVELS',
'RQ_TASK_STATUSES',
)
@dataclass
-class Status:
+class Badge:
label: str
color: str
RQ_TASK_STATUSES = {
- JobStatus.QUEUED: Status(_('Queued'), 'cyan'),
- JobStatus.FINISHED: Status(_('Finished'), 'green'),
- JobStatus.FAILED: Status(_('Failed'), 'red'),
- JobStatus.STARTED: Status(_('Started'), 'blue'),
- JobStatus.DEFERRED: Status(_('Deferred'), 'gray'),
- JobStatus.SCHEDULED: Status(_('Scheduled'), 'purple'),
- JobStatus.STOPPED: Status(_('Stopped'), 'orange'),
- JobStatus.CANCELED: Status(_('Cancelled'), 'yellow'),
+ JobStatus.QUEUED: Badge(_('Queued'), 'cyan'),
+ JobStatus.FINISHED: Badge(_('Finished'), 'green'),
+ JobStatus.FAILED: Badge(_('Failed'), 'red'),
+ JobStatus.STARTED: Badge(_('Started'), 'blue'),
+ JobStatus.DEFERRED: Badge(_('Deferred'), 'gray'),
+ JobStatus.SCHEDULED: Badge(_('Scheduled'), 'purple'),
+ JobStatus.STOPPED: Badge(_('Stopped'), 'orange'),
+ JobStatus.CANCELED: Badge(_('Cancelled'), 'yellow'),
+}
+
+JOB_LOG_ENTRY_LEVELS = {
+ 'debug': Badge(_('Debug'), 'gray'),
+ 'info': Badge(_('Info'), 'blue'),
+ 'warning': Badge(_('Warning'), 'orange'),
+ 'error': Badge(_('Error'), 'red'),
}
diff --git a/netbox/core/tables/columns.py b/netbox/core/tables/columns.py
index f3d985bc3..84187b0fa 100644
--- a/netbox/core/tables/columns.py
+++ b/netbox/core/tables/columns.py
@@ -1,12 +1,11 @@
import django_tables2 as tables
from django.utils.safestring import mark_safe
-from core.constants import RQ_TASK_STATUSES
from netbox.registry import registry
__all__ = (
'BackendTypeColumn',
- 'RQJobStatusColumn',
+ 'BadgeColumn',
)
@@ -23,14 +22,21 @@ class BackendTypeColumn(tables.Column):
return value
-class RQJobStatusColumn(tables.Column):
+class BadgeColumn(tables.Column):
"""
- Render a colored label for the status of an RQ job.
+ Render a colored badge for a value.
+
+ Args:
+ badges: A dictionary mapping of values to core.constants.Badge instances.
"""
+ def __init__(self, badges, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.badges = badges
+
def render(self, value):
- status = RQ_TASK_STATUSES.get(value)
- return mark_safe(f'{status.label}')
+ badge = self.badges.get(value)
+ return mark_safe(f'{badge.label}')
def value(self, value):
- status = RQ_TASK_STATUSES.get(value)
- return status.label
+ badge = self.badges.get(value)
+ return badge.label
diff --git a/netbox/core/tables/jobs.py b/netbox/core/tables/jobs.py
index d3c536953..00032057f 100644
--- a/netbox/core/tables/jobs.py
+++ b/netbox/core/tables/jobs.py
@@ -2,7 +2,9 @@ import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from netbox.tables import BaseTable, NetBoxTable, columns
-from ..models import Job
+from core.constants import JOB_LOG_ENTRY_LEVELS
+from core.models import Job
+from core.tables.columns import BadgeColumn
class JobTable(NetBoxTable):
@@ -66,7 +68,8 @@ class JobLogEntryTable(BaseTable):
timespec='milliseconds',
verbose_name=_('Time'),
)
- level = tables.Column(
+ level = BadgeColumn(
+ badges=JOB_LOG_ENTRY_LEVELS,
verbose_name=_('Level'),
)
message = tables.Column(
diff --git a/netbox/core/tables/tasks.py b/netbox/core/tables/tasks.py
index f53e598b5..64641b282 100644
--- a/netbox/core/tables/tasks.py
+++ b/netbox/core/tables/tasks.py
@@ -2,7 +2,8 @@ import django_tables2 as tables
from django.utils.translation import gettext_lazy as _
from django_tables2.utils import A
-from core.tables.columns import RQJobStatusColumn
+from core.constants import RQ_TASK_STATUSES
+from core.tables.columns import BadgeColumn
from netbox.tables import BaseTable, columns
@@ -84,7 +85,8 @@ class BackgroundTaskTable(BaseTable):
ended_at = columns.DateTimeColumn(
verbose_name=_("Ended")
)
- status = RQJobStatusColumn(
+ status = BadgeColumn(
+ badges=RQ_TASK_STATUSES,
verbose_name=_("Status"),
accessor='get_status'
)