diff --git a/netbox/netbox/views.py b/netbox/netbox/views.py index bae6f44ff..541757742 100644 --- a/netbox/netbox/views.py +++ b/netbox/netbox/views.py @@ -1,7 +1,7 @@ from collections import OrderedDict from django.conf import settings -from django.db.models import Count, F, OuterRef, Subquery +from django.db.models import Count, F from django.shortcuts import render from django.views.generic import View from packaging import version diff --git a/netbox/utilities/background_tasks.py b/netbox/utilities/background_tasks.py index 2accc5d03..9254c39f7 100644 --- a/netbox/utilities/background_tasks.py +++ b/netbox/utilities/background_tasks.py @@ -7,7 +7,7 @@ from django_rq import job from packaging import version # Get an instance of a logger -logger = logging.getLogger(__name__) +logger = logging.getLogger('netbox.releases') @job @@ -27,25 +27,27 @@ def get_releases(pre_releases=False): releases = [] - # noinspection PyBroadException try: + logger.debug("Fetching new releases from {}".format(url)) response = requests.get(url, headers=headers) response.raise_for_status() + total_releases = len(response.json()) for release in response.json(): if 'tag_name' not in release: continue - if not pre_releases and (release.get('devrelease') or release.get('prerelease')): continue - releases.append((version.parse(release['tag_name']), release.get('html_url'))) + logger.debug("Found {} releases; {} usable".format(total_releases, len(releases))) + except Exception: # Don't retry this URL for 15 minutes - cache.set('netbox_releases_no_retry', url, 900) - logger.exception("Error while fetching {}".format(url)) + cache.set('netbox_releases_no_retry', url, 900) return [] + # Cache the releases list cache.set('netbox_releases', releases, settings.UPDATE_CACHE_TIMEOUT) + return releases diff --git a/netbox/utilities/releases.py b/netbox/utilities/releases.py index 1374957a2..f557cc433 100644 --- a/netbox/utilities/releases.py +++ b/netbox/utilities/releases.py @@ -5,20 +5,23 @@ from django.conf import settings from utilities.background_tasks import get_releases -# Get an instance of a logger -logger = logging.getLogger(__name__) +logger = logging.getLogger('netbox.releases') def get_latest_release(pre_releases=False): if settings.UPDATE_REPO_URL: + logger.debug("Checking for most recent release") try: releases = cache.get('netbox_releases') if releases: + logger.debug("Found {} cached releases. Latest: {}".format(len(releases), max(releases))) return max(releases) except CacheMiss: - logger.debug("Starting background task to get releases") - # Get the releases in the background worker, it will fill the cache + logger.debug("Initiating background task to retrieve updated releases list") get_releases.delay(pre_releases=pre_releases) + else: + logger.debug("Skipping release check; UPDATE_REPO_URL not defined") + return 'unknown', None