mirror of
https://github.com/getredash/redash.git
synced 2025-12-25 01:03:20 -05:00
Move all version check logic into a module of its own
This commit is contained in:
@@ -38,3 +38,6 @@ mail.init_mail(settings.all_settings())
|
||||
statsd_client = StatsClient(host=settings.STATSD_HOST, port=settings.STATSD_PORT, prefix=settings.STATSD_PREFIX)
|
||||
|
||||
import_query_runners(settings.QUERY_RUNNERS)
|
||||
|
||||
from redash.version_check import reset_new_version_status
|
||||
reset_new_version_status()
|
||||
|
||||
@@ -6,6 +6,7 @@ from flask_login import current_user, login_required
|
||||
|
||||
from redash import settings, __version__, redis_connection
|
||||
from redash.wsgi import app
|
||||
from redash.version_check import get_latest_version
|
||||
|
||||
|
||||
@app.route('/admin/<anything>/<whatever>')
|
||||
@@ -42,7 +43,7 @@ def index(**kwargs):
|
||||
'highChartsTurboThreshold': settings.HIGHCHARTS_TURBO_THRESHOLD,
|
||||
'dateFormat': settings.DATE_FORMAT,
|
||||
'dateTimeFormat': "{0} HH:mm".format(settings.DATE_FORMAT),
|
||||
'newVersionAvailable': redis_connection.get('new_version_available'),
|
||||
'newVersionAvailable': get_latest_version(),
|
||||
'version': __version__
|
||||
}
|
||||
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
import time
|
||||
import logging
|
||||
import signal
|
||||
import requests
|
||||
import semver
|
||||
from flask.ext.mail import Message
|
||||
import redis
|
||||
from celery import Task
|
||||
from celery.result import AsyncResult
|
||||
from celery.utils.log import get_task_logger
|
||||
from redash import redis_connection, models, statsd_client, settings, utils, mail
|
||||
from redash.utils import gen_query_hash, json_dumps
|
||||
from redash.utils import gen_query_hash
|
||||
from redash.worker import celery
|
||||
from redash.query_runner import get_query_runner, InterruptException
|
||||
from redash import __version__ as current_version
|
||||
from version_check import run_version_check
|
||||
|
||||
logger = get_task_logger(__name__)
|
||||
|
||||
@@ -330,28 +328,4 @@ def record_event(event):
|
||||
|
||||
@celery.task(base=BaseTask)
|
||||
def version_check():
|
||||
logger.info("Performing version check.")
|
||||
logger.info("Current version: %s", current_version)
|
||||
|
||||
data = json_dumps({
|
||||
'current_version': current_version
|
||||
})
|
||||
headers = {'content-type': 'application/json'}
|
||||
|
||||
try:
|
||||
response = requests.post('https://version.redash.io/api/report?channel=stable',
|
||||
data=data, headers=headers, timeout=3.0)
|
||||
latest_version = response.json()['release']['version']
|
||||
# TODO: support alpha channel (allow setting which channel to check & parse build number)
|
||||
is_newer = semver.compare(current_version, latest_version) == -1
|
||||
logger.info("Latest version: %s (newer: %s)", latest_version, is_newer)
|
||||
|
||||
if is_newer:
|
||||
redis_connection.set("new_version_available", latest_version)
|
||||
else:
|
||||
redis_connection.delete("new_version_available")
|
||||
except requests.RequestException:
|
||||
logging.exception("Failed checking for new version.")
|
||||
except (ValueError, KeyError):
|
||||
logging.exception("Failed checking for new version (probably bad/non-JSON response).")
|
||||
|
||||
run_version_check()
|
||||
|
||||
51
redash/version_check.py
Normal file
51
redash/version_check.py
Normal file
@@ -0,0 +1,51 @@
|
||||
import logging
|
||||
import requests
|
||||
import semver
|
||||
|
||||
from redash import __version__ as current_version
|
||||
from redash import redis_connection
|
||||
from redash.utils import json_dumps
|
||||
|
||||
REDIS_KEY = "new_version_available"
|
||||
|
||||
|
||||
def run_version_check():
|
||||
logging.info("Performing version check.")
|
||||
logging.info("Current version: %s", current_version)
|
||||
|
||||
data = json_dumps({
|
||||
'current_version': current_version
|
||||
})
|
||||
headers = {'content-type': 'application/json'}
|
||||
|
||||
try:
|
||||
response = requests.post('https://version.redash.io/api/report?channel=stable',
|
||||
data=data, headers=headers, timeout=3.0)
|
||||
latest_version = response.json()['release']['version']
|
||||
|
||||
_compare_and_update(latest_version)
|
||||
except requests.RequestException:
|
||||
logging.exception("Failed checking for new version.")
|
||||
except (ValueError, KeyError):
|
||||
logging.exception("Failed checking for new version (probably bad/non-JSON response).")
|
||||
|
||||
|
||||
def reset_new_version_status():
|
||||
latest_version = get_latest_version()
|
||||
if latest_version:
|
||||
_compare_and_update(latest_version)
|
||||
|
||||
|
||||
def get_latest_version():
|
||||
return redis_connection.get(REDIS_KEY)
|
||||
|
||||
|
||||
def _compare_and_update(latest_version):
|
||||
# TODO: support alpha channel (allow setting which channel to check & parse build number)
|
||||
is_newer = semver.compare(current_version, latest_version) == -1
|
||||
logging.info("Latest version: %s (newer: %s)", latest_version, is_newer)
|
||||
|
||||
if is_newer:
|
||||
redis_connection.set(REDIS_KEY, latest_version)
|
||||
else:
|
||||
redis_connection.delete(REDIS_KEY)
|
||||
Reference in New Issue
Block a user