jobs.py 927 B

123456789101112131415161718192021222324252627282930313233
  1. import logging
  2. from netbox.search.backends import search_backend
  3. from .choices import *
  4. from .exceptions import SyncError
  5. from .models import DataSource
  6. from rq.timeouts import JobTimeoutException
  7. logger = logging.getLogger(__name__)
  8. def sync_datasource(job, *args, **kwargs):
  9. """
  10. Call sync() on a DataSource.
  11. """
  12. datasource = DataSource.objects.get(pk=job.object_id)
  13. try:
  14. job.start()
  15. datasource.sync()
  16. # Update the search cache for DataFiles belonging to this source
  17. search_backend.cache(datasource.datafiles.iterator())
  18. job.terminate()
  19. except Exception as e:
  20. job.terminate(status=JobStatusChoices.STATUS_ERRORED, error=repr(e))
  21. DataSource.objects.filter(pk=datasource.pk).update(status=DataSourceStatusChoices.FAILED)
  22. if type(e) in (SyncError, JobTimeoutException):
  23. logging.error(e)
  24. else:
  25. raise e