Merge "Add onap log spec 1.2 for osdf"
[optf/osdf.git] / osdfapp.py
index a83adb7..1cfb8a3 100755 (executable)
@@ -21,19 +21,25 @@ OSDF Manager Main Flask Application
 """
 
 import json
+import ssl
 import sys
+import time
 import traceback
 from optparse import OptionParser
 from threading import Thread  # for scaling up, may need celery with RabbitMQ or redis
 
 import pydevd
+import yaml
 from flask import Flask, request, Response, g
 from requests import RequestException
 from schematics.exceptions import DataError
 
+yaml.warnings({'YAMLLoadWarning': False})
+
 import osdf.adapters.aaf.sms as sms
 import osdf.operation.responses
 from osdf.adapters.policy.interface import get_policies
+from osdf.adapters.policy.interface import upload_policy_models
 from osdf.config.base import osdf_config
 from osdf.logging.osdf_logging import MH, audit_log, error_log, debug_log
 from osdf.models.api.pciOptimizationRequest import PCIOptimizationAPI
@@ -45,6 +51,7 @@ from osdf.optimizers.pciopt.pci_opt_processor import process_pci_optimation
 from osdf.optimizers.placementopt.conductor.remote_opt_processor import process_placement_opt
 from osdf.optimizers.routeopt.simple_route_opt import RouteOpt
 from osdf.utils import api_data_utils
+from osdf.utils.mdc_utils import clear_mdc, mdc_from_json
 from osdf.webapp.appcontroller import auth_basic
 
 ERROR_TEMPLATE = osdf.ERROR_TEMPLATE
@@ -94,6 +101,20 @@ def handle_data_error(e):
     return response
 
 
+@app.before_request
+def log_request():
+    g.request_start = time.clock()
+    request_json = request.get_json()
+    g.request_id = request_json['requestInfo']['requestId']
+    mdc_from_json(request_json)
+
+
+@app.after_request
+def log_response(response):
+    clear_mdc()
+    return response
+
+
 @app.route("/api/oof/v1/healthcheck", methods=["GET"])
 def do_osdf_health_check():
     """Simple health check"""
@@ -101,6 +122,15 @@ def do_osdf_health_check():
     return "OK"
 
 
+@app.route("/api/oof/loadmodels/v1", methods=["GET"])
+def do_osdf_load_policies():
+    audit_log.info("Uploading policy models")
+    """Upload policy models"""
+    response = upload_policy_models()
+    audit_log.info(response)
+    return "OK"
+
+
 @app.route("/api/oof/v1/placement", methods=["POST"])
 @auth_basic.login_required
 def do_placement_opt():
@@ -192,6 +222,13 @@ def get_options(argv):
     return opts
 
 
+def build_ssl_context():
+    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
+    ssl_context.set_ciphers('ECDHE-RSA-AES128-SHA256:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH')
+    ssl_context.load_cert_chain(sys_conf['ssl_context'][0], sys_conf['ssl_context'][1])
+    return ssl_context
+
+
 if __name__ == "__main__":
 
     sys_conf = osdf_config['core']['osdf_system']
@@ -203,7 +240,7 @@ if __name__ == "__main__":
 
     ssl_opts = sys_conf.get('ssl_context')
     if ssl_opts:
-        common_app_opts.update({'ssl_context': tuple(ssl_opts)})
+        common_app_opts.update({'ssl_context': build_ssl_context()})
 
     opts = get_options(sys.argv)
     # Load secrets from SMS