diff --git a/netbox/core/jobs.py b/netbox/core/jobs.py index b3dfaf1e7..d82ba5886 100644 --- a/netbox/core/jobs.py +++ b/netbox/core/jobs.py @@ -7,7 +7,6 @@ from netbox.jobs import JobRunner, system_job from netbox.search.backends import search_backend from utilities.proxy import resolve_proxies from .choices import DataSourceStatusChoices, JobIntervalChoices -from .exceptions import SyncError from .models import DataSource logger = logging.getLogger(__name__) @@ -23,19 +22,23 @@ class SyncDataSourceJob(JobRunner): def run(self, *args, **kwargs): datasource = DataSource.objects.get(pk=self.job.object_id) + self.logger.debug(f"Found DataSource ID {datasource.pk}") try: + self.logger.info(f"Syncing data source {datasource}") datasource.sync() # Update the search cache for DataFiles belonging to this source + self.logger.debug("Updating search cache for data files") search_backend.cache(datasource.datafiles.iterator()) except Exception as e: + self.logger.error(f"Error syncing data source: {e}") DataSource.objects.filter(pk=datasource.pk).update(status=DataSourceStatusChoices.FAILED) - if type(e) is SyncError: - logging.error(e) raise e + self.logger.info("Syncing completed successfully") + @system_job(interval=JobIntervalChoices.INTERVAL_DAILY) class SystemHousekeepingJob(JobRunner): diff --git a/netbox/core/models/jobs.py b/netbox/core/models/jobs.py index 863034352..285e30ac8 100644 --- a/netbox/core/models/jobs.py +++ b/netbox/core/models/jobs.py @@ -110,6 +110,7 @@ class Job(models.Model): unique=True ) log_entries = ArrayField( + verbose_name=_('log entries'), base_field=models.JSONField( encoder=DjangoJSONEncoder, decoder=JobLogDecoder, @@ -218,6 +219,13 @@ class Job(models.Model): # Send signal job_end.send(self) + def log(self, record: logging.LogRecord): + """ + Record a LogRecord from Python's native logging in the job's log. + """ + entry = JobLogEntry.from_logrecord(record) + self.log_entries.append(asdict(entry)) + @classmethod def enqueue( cls, @@ -284,10 +292,3 @@ class Job(models.Model): transaction.on_commit(callback) return job - - def log(self, record: logging.LogRecord): - """ - Record a Python LogRecord in the job's log. - """ - entry = JobLogEntry.from_logrecord(record) - self.log_entries.append(asdict(entry)) diff --git a/netbox/netbox/jobs.py b/netbox/netbox/jobs.py index f54f61f25..2c904bab1 100644 --- a/netbox/netbox/jobs.py +++ b/netbox/netbox/jobs.py @@ -35,7 +35,9 @@ def system_job(interval): class JobLogHandler(logging.Handler): - + """ + A logging handler which records entries on a Job. + """ def __init__(self, job, *args, **kwargs): super().__init__(*args, **kwargs) self.job = job