diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/rhizi_api.py | 44 | ||||
| -rw-r--r-- | src/server/rhizi_server.py | 12 | ||||
| -rwxr-xr-x | src/server/rhizi_server_fcgi.py | 13 | ||||
| -rw-r--r-- | src/server/rz_kernel.py | 36 |
4 files changed, 87 insertions, 18 deletions
diff --git a/src/server/rhizi_api.py b/src/server/rhizi_api.py index afa8213f..44edb660 100644 --- a/src/server/rhizi_api.py +++ b/src/server/rhizi_api.py @@ -20,6 +20,8 @@ from flask import url_for from flask import render_template from flask import send_from_directory +from rz_kernel import RZ_Kernel + from model.graph import Topo_Diff from model.graph import Attr_Diff from model.model import Link @@ -186,7 +188,9 @@ def diff_commit__set(): def diff_commit__topo(): """ - commit a graph topology diff + REST API wrapper around diff_commit__topo(): + - extract topo_diff from request + - handle success/error outcomes """ def sanitize_input(req): topo_diff_dict = request.get_json()['topo_diff'] @@ -195,9 +199,20 @@ def diff_commit__topo(): sanitize_input__topo_diff(topo_diff) return topo_diff; - topo_diff = sanitize_input(request) - op = dbc.DBO_topo_diff_commit(topo_diff) - return __common_exec(op) + try: + topo_diff = sanitize_input(request) + except Exception as e: + return __common_resp_handle(error='malformed input') + + try: + kernel = flask.current_app.kernel + topo_diff = kernel.diff_commit__topo(db_ctl, topo_diff) + topo_diff_json = topo_diff.to_json_dict() + return __common_resp_handle(data=topo_diff_json) + except Exception as e: + log.error(e.message) + log.error(traceback.print_exc()) + return __common_resp_handle(error=e) def diff_commit__attr(): """ @@ -210,9 +225,24 @@ def diff_commit__attr(): sanitize_input__attr_diff(attr_diff) return attr_diff; - attr_diff = sanitize_input(request) - op = dbc.DBO_attr_diff_commit(attr_diff) - return __common_exec(op) + def on_error(e): + # handle DB ERRORS, eg. name attr change error + return __common_resp_handle(error='error occurred') + + try: + attr_diff = sanitize_input(request) + _validate_obj__attr_diff(attr_diff) + except Exception as e: + return __common_resp_handle(error='malformed input') + + try: + kernel = flask.current_app.kernel + attr_diff = kernel.diff_commit__attr(db_ctl, attr_diff) + return __common_resp_handle(data=attr_diff) + except Exception as e: + log.error(e.message) + log.error(traceback.print_exc()) + return __common_resp_handle(error=e) def diff_commit__vis(): pass diff --git a/src/server/rhizi_server.py b/src/server/rhizi_server.py index 147976aa..216085fc 100644 --- a/src/server/rhizi_server.py +++ b/src/server/rhizi_server.py @@ -21,6 +21,7 @@ from flask import send_from_directory from functools import wraps from rz_mesh import init_ws_interface +from rz_kernel import RZ_Kernel class Config(object): """ @@ -220,7 +221,7 @@ def init_rest_interface(cfg, flask_webapp): flask_webapp.f = f # assign decorated function -def init_webapp(cfg, db_ctl=None): +def init_webapp(cfg, kernel, db_ctl=None): """ Initialize webapp: - call init_rest_interface() @@ -239,6 +240,7 @@ def init_webapp(cfg, db_ctl=None): rhizi_api.db_ctl = db_ctl webapp.rz_config = cfg + webapp.kernel = kernel init_rest_interface(cfg, webapp) return webapp @@ -272,8 +274,8 @@ if __name__ == "__main__": init_pw_db(cfg, args.htpasswd_init_file) exit(0) - webapp = init_webapp(cfg) - ws_srv = init_ws_interface(cfg, webapp) - ws_srv.serve_forever() - + kernel = RZ_Kernel() + webapp = init_webapp(cfg, kernel) + ws_srv = init_ws_interface(cfg, kernel, webapp) + ws_srv.serve_forever() diff --git a/src/server/rhizi_server_fcgi.py b/src/server/rhizi_server_fcgi.py index f0b9a04b..b3985ee1 100755 --- a/src/server/rhizi_server_fcgi.py +++ b/src/server/rhizi_server_fcgi.py @@ -6,19 +6,20 @@ import sys import cgitb import rhizi_server +from rz_kernel import RZ_Kernel + # sys.path.insert(0, '/srv/www/rhizi/rhizi.net/src-py') # enable debugging cgitb.enable() if __name__ == '__main__': - cfg_dir = '/etc/rhizi' - - cfg = rhizi_server.init_config(os.path.join(cfg_dir, 'rhizi-server.conf')) - log = rhizi_server.init_log() + cfg = rhizi_server.init_config(cfg_dir='/etc/rhizi') + log = rhizi_server.init_log(cfg) - webapp = rhizi_server.init_webapp(cfg) - rhizi_server.init_rest_api(cfg, webapp) + kernel = RZ_Kernel() + webapp = rhizi_server.init_webapp(cfg, kernel) + rhizi_server.init_rest_interface(cfg, webapp) log.info('launching webapp via flup.server.fcgi.WSGIServer') diff --git a/src/server/rz_kernel.py b/src/server/rz_kernel.py new file mode 100644 index 00000000..b2bba38a --- /dev/null +++ b/src/server/rz_kernel.py @@ -0,0 +1,36 @@ +""" +Rhizi kernel, home to core operation login +""" +import db_controller +import logging +import traceback + +log = logging.getLogger('rhizi') + +class RZ_Kernel(object): + + def diff_commit__topo(self, db_ctl, topo_diff): + """ + commit a graph topology diff - this is a common pathway for: + - RESP API calls + - socket.io calls + - future interfaces + """ + op = db_controller.DBO_topo_diff_commit(topo_diff) + try: + op_ret = db_ctl.exec_op(op) + return op_ret + except Exception as e: + log.error(e.message) + log.error(traceback.print_exc()) + raise e + + def diff_commit__attr(self, db_ctl, attr_diff): + op = db_controller.DBO_attr_diff_commit(attr_diff) + try: + op_ret = db_ctl.exec_op(op) + return op_ret + except Exception as e: + log.error(e.message) + log.error(traceback.print_exc()) + raise e |
