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' )