import argparse import rest_arrays import sys import os import logging from logging import Formatter from logging.handlers import RotatingFileHandler from flask import Flask, send_from_directory from gevent.wsgi import WSGIServer app = Flask(__name__) # Registering blueprints app.register_blueprint(rest_arrays.arrays, url_prefix='/rest/arrays') # As initialized upon program startup, the first item of this list (sys.path), path[0], # is the directory containing the script that was used to invoke the Python interpreter. # This app may not always be started from the script's folder. We need to use the base_dir # when loading static content from a relative path. app.base_dir = sys.path[0] app.static_folder = os.path.join(app.base_dir, 'static') @app.route('/') def index(): return send_from_directory(app.static_folder, "index.html") @app.route('/css/<path:filename>') def css(filename): return send_from_directory(os.path.join(app.static_folder, 'css'), filename) @app.route('/fonts/<path:filename>') def fonts(filename): return send_from_directory(os.path.join(app.static_folder, 'fonts'), filename) @app.route('/js/<path:filename>') def js(filename): return send_from_directory(os.path.join(app.static_folder, 'js'), filename) @app.route('/img/<path:filename>') def img(filename): return send_from_directory(os.path.join(app.static_folder, 'img'), filename) @app.route('/webapp/<path:filename>') def webapp(filename): return send_from_directory(os.path.join(app.static_folder, 'webapp'), filename) if __name__ == '__main__': parser = argparse.ArgumentParser(description='Runs the pureelk web server.') parser.add_argument('-a', '--array-configs', dest="array_configs", required=True, help="Path to the folder containing the array config files.") parser.add_argument('-p', '--port', type=int, default=8080, dest='port') parser.add_argument('-l', '--logfile', dest='logfile') args = parser.parse_args() handler = RotatingFileHandler(args.logfile, maxBytes=20*1024*1024, backupCount=1) handler.setLevel(logging.INFO) handler.setFormatter(Formatter("%(asctime)s [%(levelname)s] %(message)s")) app.logger.addHandler(handler) app.logger.setLevel(logging.INFO) if not os.path.exists(args.array_configs): raise ValueError("Array config path doesn't exists: '{}'".format(args.array_configs)) app.config["array-configs"] = args.array_configs http_server = WSGIServer(('', args.port), app) http_server.serve_forever()