summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormbeierl <mark.beierl@dell.com>2017-09-19 13:30:03 -0400
committermbeierl <mark.beierl@dell.com>2017-09-19 13:30:03 -0400
commit85f0bd5bfe83456a7e73fe12d2e3232c4f58e35b (patch)
treeb3868ffc77cd53910b67d83b5aaf0db0a03c2314
parent390e627182ed2ccf62eacdde9ec7977ca802a205 (diff)
Adding Proxy Path Support
Adds WSGI wrapper to allow the path to be arbitrary as long as it is passed in the reverse proxy Change-Id: I6feca119093a3b3c60ad615f4e4b59bb2c212800 Signed-off-by: mbeierl <mark.beierl@dell.com>
-rw-r--r--docker/storperf-master/rest_server.py35
-rw-r--r--docker/storperf-reporting/src/app.py38
2 files changed, 72 insertions, 1 deletions
diff --git a/docker/storperf-master/rest_server.py b/docker/storperf-master/rest_server.py
index 0634b8f..5be3fb4 100644
--- a/docker/storperf-master/rest_server.py
+++ b/docker/storperf-master/rest_server.py
@@ -20,9 +20,44 @@ from flask_restful_swagger import swagger
from storperf.storperf_master import StorPerfMaster
+class ReverseProxied(object):
+ '''Wrap the application in this middleware and configure the
+ front-end server to add these headers, to let you quietly bind
+ this to a URL other than / and to an HTTP scheme that is
+ different than what is used locally.
+
+ In nginx:
+ location /storperf/ {
+ proxy_pass http://localhost:8085/;
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Scheme $scheme;
+ proxy_set_header X-Script-Name /storperf;
+ }
+
+ :param app: the WSGI application
+ '''
+ def __init__(self, app):
+ self.app = app
+
+ def __call__(self, environ, start_response):
+ script_name = environ.get('HTTP_X_SCRIPT_NAME', '')
+ if script_name:
+ environ['SCRIPT_NAME'] = script_name
+ path_info = environ['PATH_INFO']
+ if path_info.startswith(script_name):
+ environ['PATH_INFO'] = path_info[len(script_name):]
+
+ scheme = environ.get('HTTP_X_SCHEME', '')
+ if scheme:
+ environ['wsgi.url_scheme'] = scheme
+ return self.app(environ, start_response)
+
+
app = Flask(__name__, static_url_path="")
CORS(app)
api = swagger.docs(Api(app), apiVersion='1.0')
+app.wsgi_app = ReverseProxied(app.wsgi_app)
storperf = StorPerfMaster()
diff --git a/docker/storperf-reporting/src/app.py b/docker/storperf-reporting/src/app.py
index 38f1198..79baa33 100644
--- a/docker/storperf-reporting/src/app.py
+++ b/docker/storperf-reporting/src/app.py
@@ -16,7 +16,44 @@ from flask import send_from_directory, flash
import validators
+class ReverseProxied(object):
+ '''Wrap the application in this middleware and configure the
+ front-end server to add these headers, to let you quietly bind
+ this to a URL other than / and to an HTTP scheme that is
+ different than what is used locally.
+
+ In nginx:
+ location /storperf/ {
+ proxy_pass http://localhost:8085/;
+ proxy_set_header Host $host;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Scheme $scheme;
+ proxy_set_header X-Script-Name /storperf;
+ }
+
+ :param app: the WSGI application
+ '''
+ def __init__(self, app):
+ self.app = app
+
+ def __call__(self, environ, start_response):
+ script_name = environ.get('HTTP_X_SCRIPT_NAME', '')
+
+ if script_name:
+ environ['SCRIPT_NAME'] = script_name
+ path_info = environ['PATH_INFO']
+ if path_info.startswith(script_name):
+ environ['PATH_INFO'] = path_info[len(script_name):]
+
+ scheme = environ.get('HTTP_X_SCHEME', '')
+ if scheme:
+ environ['wsgi.url_scheme'] = scheme
+
+ return self.app(environ, start_response)
+
+
app = Flask(__name__)
+app.wsgi_app = ReverseProxied(app.wsgi_app)
app.secret_key = 'storperf_graphing_module'
@@ -47,7 +84,6 @@ def success():
data = urllib.urlopen(URL).read()
data = json.loads(data)
temp = data["job_ids"]
- print temp
if temp:
info = {}
for ID in temp: