Просмотр исходного кода

Remove release checkng background task

jeremystretch 4 лет назад
Родитель
Сommit
fa99263918

+ 0 - 32
netbox/netbox/releases.py

@@ -1,32 +0,0 @@
-import logging
-
-from django.conf import settings
-from django.core.cache import cache
-from django_rq import get_queue
-
-from utilities.background_tasks import get_releases
-
-logger = logging.getLogger('netbox.releases')
-
-
-def get_latest_release(pre_releases=False):
-    if settings.RELEASE_CHECK_URL:
-        logger.debug("Checking for most recent release")
-        latest_release = cache.get('latest_release')
-        if latest_release:
-            logger.debug(f"Found cached release: {latest_release}")
-            return latest_release
-        else:
-            # Check for an existing job. This can happen if the RQ worker process is not running.
-            queue = get_queue('check_releases')
-            if queue.jobs:
-                logger.warning("Job to check for new releases is already queued; skipping")
-            else:
-                # Get the releases in the background worker, it will fill the cache
-                logger.info("Initiating background task to retrieve updated releases list")
-                get_releases.delay(pre_releases=pre_releases)
-
-    else:
-        logger.debug("Skipping release check; RELEASE_CHECK_URL not defined")
-
-    return 'unknown', None

+ 0 - 138
netbox/netbox/tests/test_releases.py

@@ -1,138 +0,0 @@
-from io import BytesIO
-from logging import ERROR
-from unittest.mock import Mock, patch
-
-import requests
-from django.conf import settings
-from django.core.cache import cache
-from django.test import SimpleTestCase, override_settings
-from packaging.version import Version
-from requests import Response
-
-from utilities.background_tasks import get_releases
-
-
-def successful_github_response(url, *_args, **_kwargs):
-    r = Response()
-    r.url = url
-    r.status_code = 200
-    r.reason = 'OK'
-    r.headers = {
-        'Content-Type': 'application/json; charset=utf-8',
-    }
-    r.raw = BytesIO(b'''[
-        {
-            "html_url": "https://github.com/netbox-community/netbox/releases/tag/v2.7.8",
-            "tag_name": "v2.7.8",
-            "prerelease": false
-        },
-        {
-            "html_url": "https://github.com/netbox-community/netbox/releases/tag/v2.6-beta1",
-            "tag_name": "v2.6-beta1",
-            "prerelease": true
-        },
-        {
-            "html_url": "https://github.com/netbox-community/netbox/releases/tag/v2.5.9",
-            "tag_name": "v2.5.9",
-            "prerelease": false
-        }
-    ]
-    ''')
-    return r
-
-
-def unsuccessful_github_response(url, *_args, **_kwargs):
-    r = Response()
-    r.url = url
-    r.status_code = 404
-    r.reason = 'Not Found'
-    r.headers = {
-        'Content-Type': 'application/json; charset=utf-8',
-    }
-    r.raw = BytesIO(b'''{
-        "message": "Not Found",
-        "documentation_url": "https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository"
-    }
-    ''')
-    return r
-
-
-@override_settings(RELEASE_CHECK_URL='https://localhost/unittest/releases', RELEASE_CHECK_TIMEOUT=160876)
-class GetReleasesTestCase(SimpleTestCase):
-    @patch.object(requests, 'get')
-    @patch.object(cache, 'set')
-    def test_pre_releases(self, dummy_cache_set: Mock, dummy_request_get: Mock):
-        dummy_request_get.side_effect = successful_github_response
-
-        releases = get_releases(pre_releases=True)
-
-        # Check result
-        self.assertListEqual(releases, [
-            (Version('2.7.8'), 'https://github.com/netbox-community/netbox/releases/tag/v2.7.8'),
-            (Version('2.6b1'), 'https://github.com/netbox-community/netbox/releases/tag/v2.6-beta1'),
-            (Version('2.5.9'), 'https://github.com/netbox-community/netbox/releases/tag/v2.5.9')
-        ])
-
-        # Check if correct request is made
-        dummy_request_get.assert_called_once_with(
-            'https://localhost/unittest/releases',
-            headers={'Accept': 'application/vnd.github.v3+json'},
-            proxies=settings.HTTP_PROXIES
-        )
-
-        # Check if result is put in cache
-        dummy_cache_set.assert_called_once_with(
-            'latest_release',
-            max(releases),
-            160876
-        )
-
-    @patch.object(requests, 'get')
-    @patch.object(cache, 'set')
-    def test_no_pre_releases(self, dummy_cache_set: Mock, dummy_request_get: Mock):
-        dummy_request_get.side_effect = successful_github_response
-
-        releases = get_releases(pre_releases=False)
-
-        # Check result
-        self.assertListEqual(releases, [
-            (Version('2.7.8'), 'https://github.com/netbox-community/netbox/releases/tag/v2.7.8'),
-            (Version('2.5.9'), 'https://github.com/netbox-community/netbox/releases/tag/v2.5.9')
-        ])
-
-        # Check if correct request is made
-        dummy_request_get.assert_called_once_with(
-            'https://localhost/unittest/releases',
-            headers={'Accept': 'application/vnd.github.v3+json'},
-            proxies=settings.HTTP_PROXIES
-        )
-
-        # Check if result is put in cache
-        dummy_cache_set.assert_called_once_with(
-            'latest_release',
-            max(releases),
-            160876
-        )
-
-    @patch.object(requests, 'get')
-    def test_failed_request(self, dummy_request_get: Mock):
-        dummy_request_get.side_effect = unsuccessful_github_response
-
-        with self.assertLogs(level=ERROR) as cm:
-            releases = get_releases()
-
-        # Check log entry
-        self.assertEqual(len(cm.output), 1)
-        log_output = cm.output[0]
-        last_log_line = log_output.split('\n')[-1]
-        self.assertRegex(last_log_line, '404 .* Not Found')
-
-        # Check result
-        self.assertListEqual(releases, [])
-
-        # Check if correct request is made
-        dummy_request_get.assert_called_once_with(
-            'https://localhost/unittest/releases',
-            headers={'Accept': 'application/vnd.github.v3+json'},
-            proxies=settings.HTTP_PROXIES
-        )

+ 5 - 5
netbox/netbox/views/__init__.py

@@ -3,6 +3,7 @@ import sys
 
 
 from django.conf import settings
 from django.conf import settings
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.models import ContentType
+from django.core.cache import cache
 from django.db.models import F
 from django.db.models import F
 from django.http import HttpResponseServerError
 from django.http import HttpResponseServerError
 from django.shortcuts import redirect, render
 from django.shortcuts import redirect, render
@@ -23,7 +24,6 @@ from extras.models import ObjectChange, JobResult
 from ipam.models import Aggregate, IPAddress, Prefix, VLAN, VRF
 from ipam.models import Aggregate, IPAddress, Prefix, VLAN, VRF
 from netbox.constants import SEARCH_MAX_RESULTS, SEARCH_TYPES
 from netbox.constants import SEARCH_MAX_RESULTS, SEARCH_TYPES
 from netbox.forms import SearchForm
 from netbox.forms import SearchForm
-from netbox.releases import get_latest_release
 from tenancy.models import Tenant
 from tenancy.models import Tenant
 from virtualization.models import Cluster, VirtualMachine
 from virtualization.models import Cluster, VirtualMachine
 
 
@@ -119,10 +119,10 @@ class HomeView(View):
         # Check whether a new release is available. (Only for staff/superusers.)
         # Check whether a new release is available. (Only for staff/superusers.)
         new_release = None
         new_release = None
         if request.user.is_staff or request.user.is_superuser:
         if request.user.is_staff or request.user.is_superuser:
-            latest_release, release_url = get_latest_release()
-            if isinstance(latest_release, version.Version):
-                current_version = version.parse(settings.VERSION)
-                if latest_release > current_version:
+            latest_release = cache.get('latest_release')
+            if latest_release:
+                release_version, release_url = latest_release
+                if release_version > version.parse(settings.VERSION):
                     new_release = {
                     new_release = {
                         'version': str(latest_release),
                         'version': str(latest_release),
                         'url': release_url,
                         'url': release_url,

+ 0 - 42
netbox/utilities/background_tasks.py

@@ -1,42 +0,0 @@
-import logging
-
-import requests
-from django.conf import settings
-from django.core.cache import cache
-from django_rq import job
-from packaging import version
-
-# Get an instance of a logger
-logger = logging.getLogger('netbox.releases')
-
-
-@job('check_releases')
-def get_releases(pre_releases=False):
-    url = settings.RELEASE_CHECK_URL
-    headers = {
-        'Accept': 'application/vnd.github.v3+json',
-    }
-    releases = []
-
-    try:
-        logger.info(f"Fetching new releases from {url}")
-        response = requests.get(url, headers=headers, proxies=settings.HTTP_PROXIES)
-        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(f"Found {total_releases} releases; {len(releases)} usable")
-
-    except requests.exceptions.RequestException as exc:
-        logger.exception(f"Error while fetching latest release from {url}: {exc}")
-        return []
-
-    # Cache the most recent release
-    cache.set('latest_release', max(releases), settings.RELEASE_CHECK_TIMEOUT)
-
-    return releases