aboutsummaryrefslogtreecommitdiffstats
path: root/miss_htbt_service
diff options
context:
space:
mode:
Diffstat (limited to 'miss_htbt_service')
-rw-r--r--miss_htbt_service/check_health.py4
-rw-r--r--miss_htbt_service/db_monitoring.py208
-rw-r--r--miss_htbt_service/htbtworker.py5
-rwxr-xr-x[-rw-r--r--]miss_htbt_service/misshtbtd.py2
-rw-r--r--miss_htbt_service/mod/trapd_get_cbs_config.py10
-rw-r--r--miss_htbt_service/mod/trapd_vnf_table.py117
6 files changed, 224 insertions, 122 deletions
diff --git a/miss_htbt_service/check_health.py b/miss_htbt_service/check_health.py
index fb99584..5732749 100644
--- a/miss_htbt_service/check_health.py
+++ b/miss_htbt_service/check_health.py
@@ -62,6 +62,6 @@ class GetHandler(BaseHTTPRequestHandler):
if __name__ == '__main__':
from http.server import HTTPServer
#from BaseHTTPServer import HTTPServer
- server = HTTPServer(("", 10001), GetHandler)
- print('Starting server at http://localhost:10001')
+ server = HTTPServer(("", 10002), GetHandler)
+ print('Starting server at http://localhost:10002')
server.serve_forever()
diff --git a/miss_htbt_service/db_monitoring.py b/miss_htbt_service/db_monitoring.py
index 6113be2..26eba98 100644
--- a/miss_htbt_service/db_monitoring.py
+++ b/miss_htbt_service/db_monitoring.py
@@ -34,6 +34,100 @@ import get_logger
_logger = get_logger.get_logger(__name__)
+def sendControlLoopEvent(CLType, pol_url, policy_version, policy_name, policy_scope, target_type, srcName, epoc_time, closed_control_loop_name, version, target):
+ msg="DBM:Time to raise Control Loop Event for Control loop typ /target type - ",CLType, target_type
+ _logger.info(msg)
+ if(CLType == "ONSET"):
+ _logger.info("DBM:Heartbeat not received, raising alarm event")
+ if(target_type == "VNF"):
+ json_object = json.dumps({
+ "closedLoopEventClient": "DCAE_Heartbeat_MS",
+ "policyVersion": policy_version,
+ "policyName": policy_name,
+ "policyScope": policy_scope,
+ "target_type": target_type,
+ "AAI": { "generic-vnf.vnf-name": srcName} ,
+ "closedLoopAlarmStart": epoc_time,
+ "closedLoopEventStatus": "ONSET",
+ "closedLoopControlName": closed_control_loop_name,
+ "version": version,
+ "target": target,
+ "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc",
+ "from": "DCAE"
+ });
+ elif(target_type == "VM"):
+ json_object = json.dumps({
+ "closedLoopEventClient": "DCAE_Heartbeat_MS",
+ "policyVersion": policy_version,
+ "policyName": policy_name,
+ "policyScope": policy_scope,
+ "target_type": target_type,
+ "AAI": { "vserver.vserver-name": srcName} ,
+ "closedLoopAlarmStart": epoc_time,
+ "closedLoopEventStatus": "ONSET",
+ "closedLoopControlName": closed_control_loop_name,
+ "version": version,
+ "target": target,
+ "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc",
+ "from": "DCAE"
+ });
+ else:
+ return True
+ elif(CLType == "ABATED"):
+ _logger.info("DBM:Heartbeat received, clearing alarm event")
+ #last_date_time = datetime.datetime.now()
+ if(target_type == "VNF"):
+ json_object = json.dumps({
+ "closedLoopEventClient": "DCAE_Heartbeat_MS",
+ "policyVersion": policy_version,
+ "policyName": policy_name,
+ "policyScope": policy_scope,
+ "target_type": target_type,
+ "AAI": { "generic-vnf.vnf-name": srcName} ,
+ "closedLoopAlarmStart": epoc_time,
+ "closedLoopEventStatus": "ABATED",
+ "closedLoopControlName": closed_control_loop_name,
+ "version": version,
+ "target": target,
+ "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc",
+ "from": "DCAE"
+ });
+ elif(target_type == "VM"):
+ json_object = json.dumps({
+ "closedLoopEventClient": "DCAE_Heartbeat_MS",
+ "policyVersion": policy_version,
+ "policyName": policy_name,
+ "policyScope": policy_scope,
+ "target_type": target_type,
+ "AAI": { "vserver.vserver-name": srcName} ,
+ "closedLoopAlarmStart": epoc_time,
+ "closedLoopEventStatus": "ABATED",
+ "closedLoopControlName": closed_control_loop_name,
+ "version": version,
+ "target": target,
+ "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc",
+ "from": "DCAE"
+ });
+ else:
+ return True
+ else:
+ return True
+ payload = json_object
+ msg="DBM: CL Json object is", json_object
+ _logger.info(msg)
+ #psend_url = pol_url+'DefaultGroup/1?timeout=15000'
+ psend_url = pol_url
+ msg="DBM:",psend_url
+ _logger.info(msg)
+ #Send response for policy on output topic
+ r = requests.post(psend_url, data=payload)
+ msg="DBM:",r.status_code, r.reason
+ _logger.info(msg)
+ ret = r.status_code
+ msg="DBM:Status code for sending the control loop event is",ret
+ _logger.info(msg)
+ return True
+
def db_monitoring(current_pid,json_file,user_name,password,ip_address,port_num,db_name):
while(True):
time.sleep(20)
@@ -89,119 +183,14 @@ def db_monitoring(current_pid,json_file,user_name,password,ip_address,port_num,d
epoc_time_sec = row[0][0]
srcName = row[0][1]
cl_flag = row[0][2]
- vnfName = event_name
if((epoc_time-epoc_time_sec)>comparision_time and cl_flag ==0):
- msg="DBM:Time to raise Control Loop Event for target type - ", target_type
- _logger.info(msg)
- if(target_type == "VNF"):
- json_object = json.dumps({
- "closedLoopEventClient": "DCAE_Heartbeat_MS",
- "policyVersion": policy_version,
- "policyName": policy_name,
- "policyScope": policy_scope,
- "target_type": target_type,
- "AAI": { "generic-vnf.vnf-name": srcName} ,
- "closedLoopAlarmStart": epoc_time,
- "closedLoopEventStatus": "ONSET",
- "closedLoopControlName": closed_control_loop_name,
- "version": version,
- "target": target,
- "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc",
- "from": "DCAE"
- });
- elif(target_type == "VM"):
- json_object = json.dumps({
- "closedLoopEventClient": "DCAE_Heartbeat_MS",
- "policyVersion": policy_version,
- "policyName": policy_name,
- "policyScope": policy_scope,
- "target_type": target_type,
- "AAI": { "vserver.vserver-name": srcName} ,
- "closedLoopAlarmStart": epoc_time,
- "closedLoopEventStatus": "ONSET",
- "closedLoopControlName": closed_control_loop_name,
- "version": version,
- "target": target,
- "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc",
- "from": "DCAE"
- });
- else:
- continue
- payload = json_object
- msg="DBM: CL Json object is", json_object
- _logger.info(msg)
- #psend_url = pol_url+'DefaultGroup/1?timeout=15000'
- psend_url = pol_url
- msg="DBM:",psend_url
- _logger.info(msg)
- msg="DBM:DB monitoring raising alarm event "+psend_url
- _logger.info(msg)
- #Send response for policy on output topic
- r = requests.post(psend_url, data=payload)
- msg="DBM:",r.status_code, r.reason
- _logger.info(msg)
- ret = r.status_code
- msg="DBM:Status code after raising the control loop event is",ret
- _logger.info(msg)
+ sendControlLoopEvent("ONSET", pol_url, policy_version, policy_name, policy_scope, target_type, srcName, epoc_time, closed_control_loop_name, version, target)
cl_flag = 1
update_query = "UPDATE vnf_table_2 SET CL_FLAG=%d where EVENT_NAME ='%s' and source_name_key=%d" %(cl_flag,event_name,(source_name_key+1))
cur.execute(update_query)
connection_db.commit()
elif((epoc_time - epoc_time_sec) < comparision_time and cl_flag ==1):
- msg="DBM:Time to clear Control Loop Event for target type - ", target_type
- _logger.info(msg)
- epoc_time = int(round(time.time()))
- #last_date_time = datetime.datetime.now()
- if(target_type == "VNF"):
- json_object = json.dumps({
- "closedLoopEventClient": "DCAE_Heartbeat_MS",
- "policyVersion": policy_version,
- "policyName": policy_name,
- "policyScope": policy_scope,
- "target_type": target_type,
- "AAI": { "generic-vnf.vnf-name": srcName} ,
- "closedLoopAlarmStart": epoc_time,
- "closedLoopEventStatus": "ABATED",
- "closedLoopControlName": closed_control_loop_name,
- "version": version,
- "target": target,
- "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc",
- "from": "DCAE"
- });
- elif(target_type == "VM"):
- json_object = json.dumps({
- "closedLoopEventClient": "DCAE_Heartbeat_MS",
- "policyVersion": policy_version,
- "policyName": policy_name,
- "policyScope": policy_scope,
- "target_type": target_type,
- "AAI": { "vserver.vserver-name": srcName} ,
- "closedLoopAlarmStart": epoc_time,
- "closedLoopEventStatus": "ABATED",
- "closedLoopControlName": closed_control_loop_name,
- "version": version,
- "target": target,
- "requestID": "8c1b8bd8-06f7-493f-8ed7-daaa4cc481bc",
- "from": "DCAE"
- });
- else:
- continue
- payload = json_object
- msg="DBM: CL Json object is", json_object
- _logger.info(msg)
- #psend_url = pol_url+'DefaultGroup/1?timeout=15000'
- psend_url = pol_url
- msg="DBM:",psend_url
- _logger.info(msg)
- msg="DBM:Heartbeat Dead raising alarm event "+psend_url
- _logger.info(msg)
- #Send response for policy on output topic
- r = requests.post(psend_url, data=payload)
- msg="DBM:",r.status_code, r.reason
- _logger.info(msg)
- ret = r.status_code
- msg="DBM:Status code after raising the control loop event is",ret
- _logger.info(msg)
+ sendControlLoopEvent("ABATED", pol_url, policy_version, policy_name, policy_scope, target_type, srcName, epoc_time, closed_control_loop_name, version, target)
cl_flag = 0
update_query = "UPDATE vnf_table_2 SET CL_FLAG=%d where EVENT_NAME ='%s' and source_name_key=%d" %(cl_flag,event_name,(source_name_key+1))
cur.execute(update_query)
@@ -211,9 +200,8 @@ def db_monitoring(current_pid,json_file,user_name,password,ip_address,port_num,d
msg="DBM:DB Monitoring is ignored for %s since validity flag is 0" %(event_name)
_logger.info(msg)
- for source_name_key in range(source_name_count):
- delete_query_table2 = "DELETE FROM vnf_table_2 WHERE EVENT_NAME = '%s' and source_name_key=%d;" %(event_name,source_name_key)
- cur.execute(delete_query_table2)
+ delete_query_table2 = "DELETE FROM vnf_table_2 WHERE EVENT_NAME = '%s';" %(event_name)
+ cur.execute(delete_query_table2)
delete_query = "DELETE FROM vnf_table_1 WHERE EVENT_NAME = '%s';" %(event_name)
cur.execute(delete_query)
connection_db.commit()
diff --git a/miss_htbt_service/htbtworker.py b/miss_htbt_service/htbtworker.py
index 5b62943..6000e1b 100644
--- a/miss_htbt_service/htbtworker.py
+++ b/miss_htbt_service/htbtworker.py
@@ -44,7 +44,7 @@ def read_json_file(i):
def process_msg(jsfile,user_name, password, ip_address, port_num, db_name):
global mr_url
i=0
- sleep_duration = 10
+ sleep_duration = 20
while(True):
time.sleep(sleep_duration)
with open(jsfile, 'r') as outfile:
@@ -61,6 +61,7 @@ def process_msg(jsfile,user_name, password, ip_address, port_num, db_name):
if(os.getenv('pytest', "") == 'test'):
eventnameList = ["Heartbeat_vDNS","Heartbeat_vFW","Heartbeat_xx"]
+ connection_db = 0
else:
connection_db = postgres_db_open(user_name, password, ip_address, port_num, db_name)
cur = connection_db.cursor()
@@ -93,8 +94,6 @@ def process_msg(jsfile,user_name, password, ip_address, port_num, db_name):
inputString = res.text
#If mrstatus in message body indicates some information, not json msg.
if ("mrstatus" in inputString):
- if (sleep_duration < 60):
- sleep_duration = sleep_duration + 10
continue
jlist = inputString.split('\n');
# Process the DMaaP input message retreived
diff --git a/miss_htbt_service/misshtbtd.py b/miss_htbt_service/misshtbtd.py
index 2069865..55e812f 100644..100755
--- a/miss_htbt_service/misshtbtd.py
+++ b/miss_htbt_service/misshtbtd.py
@@ -292,8 +292,10 @@ def create_update_db(update_db, jsfile, ip_address, port_num, user_name, passwor
def create_process(job_list, jsfile, pid_current):
if(len(job_list) == 0):
p1 = multiprocessing.Process(target=hb_worker_process, args=(jsfile,))
+ time.sleep(1)
p2 = multiprocessing.Process(target=db_monitoring_process, args=(pid_current,jsfile,))
p1.start()
+ time.sleep(1)
p2.start()
job_list.append(p1)
job_list.append(p2)
diff --git a/miss_htbt_service/mod/trapd_get_cbs_config.py b/miss_htbt_service/mod/trapd_get_cbs_config.py
index d2b615f..47ba223 100644
--- a/miss_htbt_service/mod/trapd_get_cbs_config.py
+++ b/miss_htbt_service/mod/trapd_get_cbs_config.py
@@ -58,9 +58,9 @@ def get_cbs_config():
# See if we are in a config binding service (CBS) /controller environment
try:
+ msg = "Unable to fetch CBS config or it is erroneously empty - trying override/simulator config"
tds.c_config = get_config()
if tds.c_config == {}:
- msg = "Unable to fetch CBS config or it is erroneously empty - trying override/simulator config"
stdout_logger(msg)
# if no CBS present, default to JSON config specified via CBS_HTBT_JSON env var
@@ -69,15 +69,15 @@ def get_cbs_config():
stdout_logger(msg)
try:
+ msg = "CBS_HTBT_JSON not defined - FATAL ERROR, exiting"
_cbs_sim_json_file = os.getenv("CBS_HTBT_JSON", "None")
except Exception as e:
- msg = "CBS_HTBT_JSON not defined - FATAL ERROR, exiting"
stdout_logger(msg)
cleanup(1,None)
return False
+ msg = "CBS_HTBT_JSON not defined - FATAL ERROR, exiting"
if _cbs_sim_json_file == "None":
- msg = "CBS_HTBT_JSON not defined - FATAL ERROR, exiting"
stdout_logger(msg)
cleanup(1,None)
return False
@@ -85,11 +85,11 @@ def get_cbs_config():
msg = ("ONAP controller override specified via CBS_HTBT_JSON: %s" %
_cbs_sim_json_file)
stdout_logger(msg)
+ msg = "Unable to load CBS_HTBT_JSON " + _cbs_sim_json_file + \
+ " (invalid json?) - FATAL ERROR, exiting"
try:
tds.c_config = json.load(open(_cbs_sim_json_file))
except Exception as e:
- msg = "Unable to load CBS_HTBT_JSON " + _cbs_sim_json_file + \
- " (invalid json?) - FATAL ERROR, exiting"
stdout_logger(msg)
cleanup_and_exit(0,None)
diff --git a/miss_htbt_service/mod/trapd_vnf_table.py b/miss_htbt_service/mod/trapd_vnf_table.py
index a76c886..9a40525 100644
--- a/miss_htbt_service/mod/trapd_vnf_table.py
+++ b/miss_htbt_service/mod/trapd_vnf_table.py
@@ -35,9 +35,16 @@ import logging
import get_logger
import yaml
import os.path as path
+import db_monitoring as dbmon
+import json
+from onap_dcae_cbs_docker_client.client import get_config
+import unittest
+import time
+import subprocess
prog_name = os.path.basename(__file__)
hb_properties_file = path.abspath(path.join(__file__, "../../config/hbproperties.yaml"))
+_logger = get_logger.get_logger(__name__)
def hb_properties():
#Read the hbproperties.yaml for postgress and CBS related data
@@ -54,7 +61,6 @@ def hb_properties():
s.close()
return ip_address, port_num, user_name, password, db_name, cbs_polling_required, cbs_polling_interval
-ip_address, port_num, user_name, password, db_name, cbs_polling_required, cbs_polling_interval = hb_properties()
def verify_DB_creation_1(user_name,password,ip_address,port_num,db_name):
connection_db = pm.postgres_db_open(user_name,password,ip_address,port_num,db_name)
@@ -99,8 +105,115 @@ def verify_cbsPolling_required():
def verify_cbspolling():
try:
- _cbspolling=cbs.currentpidMain(10)
+ _cbspolling=cbs.pollCBS(10)
except Exception as e:
return None
return _cbspolling
+
+def verify_fetch_json_file():
+ os.environ['pytest']='test'
+ os.environ['SERVICE_NAME']='mvp-dcaegen2-heartbeat-static'
+ #os.environ['CONSUL_HOST']='10.12.6.50' # Used this IP during testing
+ os.environ['CONSUL_HOST']='localhost'
+ os.environ['HOSTNAME']='mvp-dcaegen2-heartbeat-static'
+ try:
+ db.fetch_json_file()
+ result = True
+ except Exception as e:
+ result = False
+ print(result)
+ os.unsetenv('pytest')
+ os.unsetenv('SERVICE_NAME')
+ os.unsetenv('CONSUL_HOST')
+ os.unsetenv('HOSTNAME')
+ return result
+
+def verify_misshtbtdmain():
+ os.environ['pytest']='test'
+ os.environ['SERVICE_NAME']='mvp-dcaegen2-heartbeat-static'
+ os.environ['CONSUL_HOST']='localhost'
+ os.environ['HOSTNAME']='mvp-dcaegen2-heartbeat-static'
+
+ try:
+ db.main()
+ result = True
+ except Exception as e:
+ result = False
+ print(result)
+ os.unsetenv('pytest')
+ os.unsetenv('SERVICE_NAME')
+ os.unsetenv('CONSUL_HOST')
+ os.unsetenv('HOSTNAME')
+ return result
+
+def verify_dbmonitoring():
+ os.environ['pytest']='test'
+ os.environ['SERVICE_NAME']='mvp-dcaegen2-heartbeat-static'
+ os.environ['CONSUL_HOST']='localhost'
+ os.environ['HOSTNAME']='mvp-dcaegen2-heartbeat-static'
+ try:
+ ip_address, port_num, user_name, password, db_name, cbs_polling_required, cbs_polling_interval = hb_properties()
+ jsfile = db.fetch_json_file()
+ hbc_pid, hbc_state, hbc_srcName, hbc_time = db.read_hb_common(user_name,password,ip_address,port_num,db_name)
+ dbmon.db_monitoring(hbc_pid,jsfile,user_name,password,ip_address,port_num,db_name)
+ result = True
+ except Exception as e:
+ print("Message process error - ",e)
+ result = False
+ print(result)
+ os.unsetenv('pytest')
+ os.unsetenv('SERVICE_NAME')
+ os.unsetenv('CONSUL_HOST')
+ os.unsetenv('HOSTNAME')
+ return result
+
+def verify_dbmon_startup():
+ try:
+ p = subprocess.Popen(['./miss_htbt_service/db_monitoring.py'], stdout=subprocess.PIPE,shell=True)
+ time.sleep(1)
+ except Exception as e:
+ print( "Message process error - ",e)
+ return None
+ return True
+
+def verify_sendControlLoop_VNF_ONSET():
+ try:
+# _CL_return = sendControlLoopEvent(CLType, pol_url, policy_version, policy_name, policy_scope, target_type, srcName, epoc_time, closed_control_loop_name, version, target)
+ pol_url = "http://10.12.5.252:3904/events/unauthenticated.DCAE_CL_OUTPUT/"
+ _CL_return = dbmon.sendControlLoopEvent("ONSET", pol_url, "1.0", "vFireWall", "pscope", "VNF", "srcname1", 1541234567, "SampleCLName", "1.0", "genVnfName")
+ except Exception as e:
+# msg = "Message process error - ",err
+# _logger.error(msg)
+ return None
+ return _CL_return
+
+def verify_sendControlLoop_VM_ONSET():
+ try:
+ pol_url = "http://10.12.5.252:3904/events/unauthenticated.DCAE_CL_OUTPUT/"
+ _CL_return = dbmon.sendControlLoopEvent("ONSET", pol_url, "1.0", "vFireWall", "pscope", "VM", "srcname1", 1541234567, "SampleCLName", "1.0", "genVnfName")
+ except Exception as e:
+# msg = "Message process error - ",err
+# _logger.error(msg)
+ return None
+ return _CL_return
+
+def verify_sendControlLoop_VNF_ABATED():
+ try:
+ pol_url = "http://10.12.5.252:3904/events/unauthenticated.DCAE_CL_OUTPUT/"
+ _CL_return = dbmon.sendControlLoopEvent("ABATED", pol_url, "1.0", "vFireWall", "pscope", "VNF", "srcname1", 1541234567, "SampleCLName", "1.0", "genVnfName")
+ except Exception as e:
+# msg = "Message process error - ",err
+# _logger.error(msg)
+ return None
+ return _CL_return
+
+def verify_sendControlLoop_VM_ABATED():
+ try:
+ pol_url = "http://10.12.5.252:3904/events/unauthenticated.DCAE_CL_OUTPUT/"
+ _CL_return = dbmon.sendControlLoopEvent("ABATED", pol_url, "1.0", "vFireWall", "pscope", "VM", "srcname1", 1541234567, "SampleCLName", "1.0", "genVnfName")
+ except Exception as e:
+# msg = "Message process error - ",err
+# _logger.error(msg)
+ return None
+ return _CL_return