Source code for openquake.server.utils
# -*- coding: utf-8 -*-
# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
# Copyright (C) 2015-2017 GEM Foundation
#
# OpenQuake is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenQuake is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with OpenQuake. If not, see <http://www.gnu.org/licenses/>.
import getpass
import requests
import logging
from time import sleep
from django.conf import settings
from openquake.engine import __version__ as oqversion
[docs]def get_user_data(request):
"""
Returns the real username if authentication support is enabled and user is
authenticated, otherwise it returns "platform" as user for backward
compatibility.
Returns also if the user is 'superuser' or not.
"""
acl_on = settings.ACL_ON
if settings.LOCKDOWN and hasattr(request, 'user'):
if request.user.is_authenticated():
name = request.user.username
if request.user.is_superuser:
acl_on = False
else:
name = (settings.DEFAULT_USER if
hasattr(settings, 'DEFAULT_USER') else getpass.getuser())
return {'name': name, 'acl_on': acl_on}
[docs]def oq_server_context_processor(request):
"""
A custom context processor which allows injection of additional
context variables.
"""
context = {}
context['oq_engine_server_url'] = ('//' +
request.META.get('HTTP_HOST',
'localhost:8800'))
context['oq_engine_version'] = oqversion
return context
[docs]def check_webserver_running(url="http://localhost:8800", max_retries=30):
"""
Returns True if a given URL is responding within a given timeout.
"""
retry = 0
response = ''
success = False
while response != requests.codes.ok and retry < max_retries:
try:
response = requests.head(url, allow_redirects=True).status_code
success = True
except:
sleep(1)
retry += 1
if not success:
logging.warn('Unable to connect to %s within %s retries'
% (url, max_retries))
return success