mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-22 20:12:00 -06:00
Move request to background task
This commit is contained in:
parent
22ac9f63a1
commit
8ce106cb4b
40
netbox/utilities/background_tasks.py
Normal file
40
netbox/utilities/background_tasks.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import logging
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from cacheops import cache
|
||||||
|
from django.conf import settings
|
||||||
|
from django_rq import job
|
||||||
|
from packaging import version
|
||||||
|
|
||||||
|
# Get an instance of a logger
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
@job
|
||||||
|
def get_releases(pre_releases=False):
|
||||||
|
url = '{}/releases'.format(settings.UPDATE_REPO_URL)
|
||||||
|
headers = {
|
||||||
|
'Accept': 'application/vnd.github.v3+json',
|
||||||
|
}
|
||||||
|
|
||||||
|
releases = []
|
||||||
|
|
||||||
|
# noinspection PyBroadException
|
||||||
|
try:
|
||||||
|
response = requests.get(url, headers=headers)
|
||||||
|
for release in response.json():
|
||||||
|
if 'tag_name' not in release:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not pre_releases and (release.get('is_devrelease') or release.get('is_prerelease')):
|
||||||
|
continue
|
||||||
|
|
||||||
|
releases.append((version.parse(release['tag_name']), release.get('html_url')))
|
||||||
|
except Exception:
|
||||||
|
logger.exception("Error while fetching {}".format(url))
|
||||||
|
return []
|
||||||
|
|
||||||
|
logger.debug("Found NetBox releases {}".format([str(release) for release, url in releases]))
|
||||||
|
|
||||||
|
cache.set('netbox_releases', releases, settings.UPDATE_CACHE_TIMEOUT)
|
||||||
|
return releases
|
@ -1,35 +1,24 @@
|
|||||||
import requests
|
import logging
|
||||||
from cacheops import cached
|
|
||||||
|
from cacheops import CacheMiss, cache
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from packaging import version
|
|
||||||
|
|
||||||
|
from utilities.background_tasks import get_releases
|
||||||
|
|
||||||
@cached(timeout=settings.UPDATE_CACHE_TIMEOUT, extra=settings.UPDATE_REPO_URL)
|
# Get an instance of a logger
|
||||||
def get_releases(pre_releases=False):
|
logger = logging.getLogger(__name__)
|
||||||
url = '{}/releases'.format(settings.UPDATE_REPO_URL)
|
|
||||||
headers = {
|
|
||||||
'Accept': 'application/vnd.github.v3+json',
|
|
||||||
}
|
|
||||||
try:
|
|
||||||
response = requests.get(url, headers=headers)
|
|
||||||
releases = [(version.parse(release['tag_name']), release.get('html_url'))
|
|
||||||
for release in response.json()
|
|
||||||
if 'tag_name' in release]
|
|
||||||
except Exception:
|
|
||||||
releases = []
|
|
||||||
|
|
||||||
if not pre_releases:
|
|
||||||
releases = [(release, url)
|
|
||||||
for release, url in releases
|
|
||||||
if not release.is_devrelease and not release.is_prerelease]
|
|
||||||
|
|
||||||
return releases
|
|
||||||
|
|
||||||
|
|
||||||
def get_latest_release(pre_releases=False):
|
def get_latest_release(pre_releases=False):
|
||||||
if settings.UPDATE_REPO_URL:
|
if settings.UPDATE_REPO_URL:
|
||||||
releases = get_releases(pre_releases)
|
try:
|
||||||
if releases:
|
releases = cache.get('netbox_releases')
|
||||||
return max(releases)
|
if 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
|
||||||
|
get_releases.delay(pre_releases=pre_releases)
|
||||||
|
|
||||||
return 'unknown', None
|
return 'unknown', None
|
||||||
|
Loading…
Reference in New Issue
Block a user