X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=it%2Fotf.git;a=blobdiff_plain;f=o1-vth%2Fo1_vth.py;fp=o1-vth%2Fo1_vth.py;h=3732d759128666e3d6a500d163475af6aa4ddaf0;hp=0000000000000000000000000000000000000000;hb=e3ba96506390ab3ad630d2dfc4967fd49527615d;hpb=c6475102d3d75ea00d5be548492eba544cf4f535 diff --git a/o1-vth/o1_vth.py b/o1-vth/o1_vth.py new file mode 100644 index 0000000..3732d75 --- /dev/null +++ b/o1-vth/o1_vth.py @@ -0,0 +1,145 @@ +# Copyright (c) 2019 AT&T Intellectual Property. # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); # +# you may not use this file except in compliance with the License. # +# You may obtain a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +################################################################################ +# File name: o1-vth.py # +# Description: Mainly used to get alarm list # +# Date created: 04/14/2020 # +# Python Version: 3.7 # +# Author: Jackie Chen (jv246a) # +# Email: jv246a@att.com # +################################################################################ + +import datetime +from configparser import ConfigParser +import os +import logging +from logging import FileHandler +import requests +from flask import Flask, request, jsonify + +# redirect http to https +app = Flask(__name__) + +# Prevents print statement every time an endpoint is triggered. +logging.getLogger("werkzeug").setLevel(logging.WARNING) + + +def sendCallback(url, data): + try: + if type(data) is not dict: + data = {"msg": data} + app.logger.info("sending callback") + requests.post(url, json= data) + except Exception as e: + app.logger.info(e) + return + +def unix_time_millis(dt): + epoch = datetime.datetime.utcfromtimestamp(0) + return (dt - epoch).total_seconds() * 1000.0 + + +def _get_config(config_file_name): + config = ConfigParser(os.environ) + config.read(config_file_name) + return config + + +def _build_url(config): + return config['resource']['base_address'] + config['resource']['get_config_alarms_list'] + + +def _send_request(url, config): + # setup default values + proxy_enabled = config.getboolean('resource', 'proxy_enabled') + auth_enabled = config.getboolean('auth', 'auth_enabled') + username = '' + password = '' + + req_proxies = { + 'http': None, + 'https': None + } + # place proxy information + if proxy_enabled: + req_proxies['http'] = config['resource']['http_proxy'] + req_proxies['https'] = config['resource']['https_proxy'] + if auth_enabled: + username = config['auth']['username'] + password = config['auth']['password'] + # get call for alarm list + return requests.get(url, + auth=(username, password) if auth_enabled else None, + proxies=req_proxies if proxy_enabled else None) + +def _parse_resposne(response): + try: + return response.json() + except ValueError: + return response.text + +@app.route('/otf/vth/oran/smo/v1/alarm-list' , methods=['POST']) +def get_alarm_list(): + response_data = { + 'vthResponse': { + 'testDuration': '', + 'dateTimeUTC': str(datetime.datetime.now()), + 'abstractMessage': '', + 'resultData': {} + } + } + ret_url = request.args.get('retURL') + startTime = unix_time_millis(datetime.datetime.now()) + try: + # setup phase + config = _get_config('config.ini') + alarm_list_url = _build_url(config) + + # build initial response + app.logger.info('Sending GET for alarm list') + res = _send_request(alarm_list_url, config) + app.logger.info('Status code from GET: {}'.format(res.status_code)) + app.logger.info('Response received from GET alarm-list: {}'.format(res.content)) + response_data['vthResponse']['abstractMessage'] = 'Result from GET alarm list request' + response_data['vthResponse']['resultData']['status_code'] = res.status_code + response_data['vthResponse']['resultData']['result_output'] = _parse_resposne(res) + except Exception as ex: + endTime = unix_time_millis(datetime.datetime.now()) + totalTime = endTime - startTime + response_data['vthResponse']['testDuration'] = totalTime + response_data['vthResponse']['abstractMessage'] = 'error: ' + str(ex) + app.logger.error('ERROR:{}'.format(str(ex))) + return jsonify(response_data) + + #finish up building response + endTime = unix_time_millis(datetime.datetime.now()) + totalTime = endTime - startTime + response_data['vthResponse']['testDuration'] = totalTime + if ret_url is not None: + sendCallback(ret_url, response_data) + return '', 200 + return jsonify(response_data), 200 + +@app.route("/otf/vth/oran/smo/v1/health", methods=['GET']) +def getHealth(): + return 'UP' + +if __name__ == '__main__': + logHandler = FileHandler('o1-vth.log', mode='a') + logHandler.setLevel(logging.INFO) + app.logger.setLevel(logging.INFO) + app.logger.addHandler(logHandler) + # context = ('opt/cert/otf.pem', 'opt/cert/privateKey.pem') + # app.run(debug = False, host = '0.0.0.0', port = 5000, ssl_context = context) + app.run(debug=False, host='0.0.0.0', port=5000)