mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-13 19:18:16 -06:00
Added version check based on git
Using local variable to cache the response and only check every 24 hours
This commit is contained in:
parent
f7f6704fc1
commit
36d5d05b72
@ -255,6 +255,23 @@ Enable this option to run the webhook backend. See the docs section on the webho
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## CHECK_UPDATES
|
||||||
|
|
||||||
|
Default: False
|
||||||
|
|
||||||
|
Enable this option to check automatically for updates.
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## CHECK_UPDATES_URL
|
||||||
|
|
||||||
|
Default: https://github.com/digitalocean/netbox.git
|
||||||
|
|
||||||
|
In case if you're using a fork or a self hosted version you can change the version check url.
|
||||||
|
Because we use git to check version updates based on tags.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Date and Time Formatting
|
## Date and Time Formatting
|
||||||
|
|
||||||
You may define custom formatting for date and times. For detailed instructions on writing format strings, please see [the Django documentation](https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date).
|
You may define custom formatting for date and times. For detailed instructions on writing format strings, please see [the Django documentation](https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date).
|
||||||
|
@ -158,3 +158,6 @@ TIME_FORMAT = 'g:i a'
|
|||||||
SHORT_TIME_FORMAT = 'H:i:s'
|
SHORT_TIME_FORMAT = 'H:i:s'
|
||||||
DATETIME_FORMAT = 'N j, Y g:i a'
|
DATETIME_FORMAT = 'N j, Y g:i a'
|
||||||
SHORT_DATETIME_FORMAT = 'Y-m-d H:i'
|
SHORT_DATETIME_FORMAT = 'Y-m-d H:i'
|
||||||
|
|
||||||
|
# Automatically check for updates if enabled. This feature requires a internet connection.
|
||||||
|
CHECK_UPDATES = False
|
||||||
|
@ -337,6 +337,10 @@ INTERNAL_IPS = (
|
|||||||
'::1',
|
'::1',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Automatic update check
|
||||||
|
CHECK_UPDATES = getattr(configuration, 'CHECK_UPDATES', False)
|
||||||
|
CHECK_UPDATES_URL = getattr(configuration, 'CHECK_UPDATES_URL', 'https://github.com/digitalocean/netbox.git')
|
||||||
|
HAS_UPDATES = {'latest_version': '1.0', 'last_updated': None}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
HOSTNAME = socket.gethostname()
|
HOSTNAME = socket.gethostname()
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-xs-4">
|
<div class="col-xs-4">
|
||||||
<p class="text-muted">{{ settings.HOSTNAME }} (v{{ settings.VERSION }})</p>
|
<p class="text-muted">{{ settings.HOSTNAME }} (v{{ settings.VERSION }}) {% check_updates %}</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-xs-4 text-center">
|
<div class="col-xs-4 text-center">
|
||||||
<p class="text-muted">{% now 'Y-m-d H:i:s T' %}</p>
|
<p class="text-muted">{% now 'Y-m-d H:i:s T' %}</p>
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
{% if latest_version %}
|
||||||
|
<a href="{{ url }}" target="_blank"><span class="label label-warning">New version: {{ latest_version }}</span></a>
|
||||||
|
{% endif %}
|
@ -8,7 +8,7 @@ from markdown import markdown
|
|||||||
|
|
||||||
from utilities.forms import unpack_grouped_choices
|
from utilities.forms import unpack_grouped_choices
|
||||||
from utilities.utils import foreground_color
|
from utilities.utils import foreground_color
|
||||||
|
from utilities.version_check import check_newer_version
|
||||||
|
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
@ -208,3 +208,11 @@ def tag(tag, url_name=None):
|
|||||||
'tag': tag,
|
'tag': tag,
|
||||||
'url_name': url_name,
|
'url_name': url_name,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@register.inclusion_tag('utilities/templatetags/checkUpdates.html')
|
||||||
|
def check_updates():
|
||||||
|
"""
|
||||||
|
Display if there is a update
|
||||||
|
"""
|
||||||
|
return check_newer_version()
|
||||||
|
54
netbox/utilities/version_check.py
Normal file
54
netbox/utilities/version_check.py
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
import subprocess
|
||||||
|
import re
|
||||||
|
|
||||||
|
from distutils.version import LooseVersion
|
||||||
|
from django.conf import settings
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
|
||||||
|
def check_newer_version():
|
||||||
|
def _git_get_latest_version():
|
||||||
|
version = '1.0'
|
||||||
|
|
||||||
|
try:
|
||||||
|
ps = subprocess.Popen(('git', 'ls-remote', '--tags', settings.CHECK_UPDATES_URL), stdout=subprocess.PIPE)
|
||||||
|
output = subprocess.check_output(('tail', '-1'), stdin=ps.stdout)
|
||||||
|
ps.wait()
|
||||||
|
except FileNotFoundError:
|
||||||
|
# Command not found, so git not installed
|
||||||
|
settings.CHECK_UPDATES = False
|
||||||
|
return LooseVersion(version)
|
||||||
|
|
||||||
|
output = re.search('refs/tags/v(.*)', output.decode())
|
||||||
|
if output is not None:
|
||||||
|
version = output[1]
|
||||||
|
|
||||||
|
return LooseVersion(version)
|
||||||
|
|
||||||
|
# If check_updates enabled?
|
||||||
|
if not settings.CHECK_UPDATES:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
if type(settings.HAS_UPDATES.get('latest_version')) is str:
|
||||||
|
latest_version = LooseVersion(settings.HAS_UPDATES.get('latest_version'))
|
||||||
|
else:
|
||||||
|
latest_version = settings.HAS_UPDATES.get('latest_version')
|
||||||
|
|
||||||
|
# If dev, remove it
|
||||||
|
cur_version = LooseVersion(settings.VERSION.replace('-dev', ''))
|
||||||
|
|
||||||
|
last_updated = settings.HAS_UPDATES.get('last_updated')
|
||||||
|
|
||||||
|
# Check every 24 hours for updates
|
||||||
|
if last_updated is None or ((datetime.utcnow() - last_updated) > timedelta(1)):
|
||||||
|
latest_version = _git_get_latest_version()
|
||||||
|
settings.HAS_UPDATES = {'latest_version': latest_version, 'last_updated': datetime.utcnow()}
|
||||||
|
|
||||||
|
# Check if this version is older then the newer version
|
||||||
|
if cur_version >= latest_version:
|
||||||
|
return {}
|
||||||
|
|
||||||
|
return {
|
||||||
|
'url': settings.CHECK_UPDATES_URL.replace('.git', ''),
|
||||||
|
'latest_version': latest_version.__str__(),
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user