|
1 | 1 | import logging
|
| 2 | +import requests |
| 3 | +import sys |
2 | 4 |
|
3 |
| -from netbox.jobs import JobRunner |
| 5 | +from django.conf import settings |
| 6 | +from netbox.jobs import JobRunner, system_job |
4 | 7 | from netbox.search.backends import search_backend
|
5 |
| -from .choices import DataSourceStatusChoices |
| 8 | +from .choices import DataSourceStatusChoices, JobIntervalChoices |
6 | 9 | from .exceptions import SyncError
|
7 | 10 | from .models import DataSource
|
8 | 11 |
|
@@ -31,3 +34,44 @@ def run(self, *args, **kwargs):
|
31 | 34 | if type(e) is SyncError:
|
32 | 35 | logging.error(e)
|
33 | 36 | raise e
|
| 37 | + |
| 38 | + |
| 39 | +@system_job(interval=JobIntervalChoices.INTERVAL_DAILY) |
| 40 | +class SystemHousekeepingJob(JobRunner): |
| 41 | + """ |
| 42 | + Perform daily system housekeeping functions. |
| 43 | + """ |
| 44 | + class Meta: |
| 45 | + name = "System Housekeeping" |
| 46 | + |
| 47 | + def run(self, *args, **kwargs): |
| 48 | + # Skip if running in development or test mode |
| 49 | + if settings.DEBUG or 'test' in sys.argv: |
| 50 | + return |
| 51 | + |
| 52 | + # TODO: Migrate other housekeeping functions from the `housekeeping` management command. |
| 53 | + self.send_census_report() |
| 54 | + |
| 55 | + @staticmethod |
| 56 | + def send_census_report(): |
| 57 | + """ |
| 58 | + Send a census report (if enabled). |
| 59 | + """ |
| 60 | + # Skip if census reporting is disabled |
| 61 | + if settings.ISOLATED_DEPLOYMENT or not settings.CENSUS_REPORTING_ENABLED: |
| 62 | + return |
| 63 | + |
| 64 | + census_data = { |
| 65 | + 'version': settings.RELEASE.full_version, |
| 66 | + 'python_version': sys.version.split()[0], |
| 67 | + 'deployment_id': settings.DEPLOYMENT_ID, |
| 68 | + } |
| 69 | + try: |
| 70 | + requests.get( |
| 71 | + url=settings.CENSUS_URL, |
| 72 | + params=census_data, |
| 73 | + timeout=3, |
| 74 | + proxies=settings.HTTP_PROXIES |
| 75 | + ) |
| 76 | + except requests.exceptions.RequestException: |
| 77 | + pass |
0 commit comments