Monitoring publisher tenant changes
Code changes includes:
disable_monitoring_service.yaml for diabling monitoring of the service.
enable_monitoring_service.yaml for enabling monitoring of the service,
install_monitoring_ceilometer.sh for installing monitoring agent in ceilometer and compute nodes.
Change-Id: I7f8d845cc59786eb25382b51573932fc6c9e5fac
diff --git a/xos/synchronizer/ceilometer/monitoring_agent/monitoring_agent.py b/xos/synchronizer/ceilometer/monitoring_agent/monitoring_agent.py
new file mode 100644
index 0000000..5128d50
--- /dev/null
+++ b/xos/synchronizer/ceilometer/monitoring_agent/monitoring_agent.py
@@ -0,0 +1,140 @@
+#!/usr/bin/python
+from flask import request, Request, jsonify
+from flask import Flask
+from flask import make_response
+import logging
+import logging.handlers
+import logging.config
+import subprocess
+import ConfigParser
+import generate_pipeline
+app = Flask(__name__)
+
+
+@app.route('/monitoring/agent/openstack/start',methods=['POST'])
+def openstack_start():
+ try:
+ # To do validation of user inputs for all the functions
+ target = request.json['target']
+ logging.debug("target:%s",target)
+ if not generate_pipeline.onos_service_info:
+ logging.debug (" ONOS Service is not enalble,Only openstack need to be enabled ")
+ generate_pipeline.generate_pipeline_yaml_for_openstack(target,True)
+ else:
+ logging.debug(" ONOS Service is also enabled ,please generate yaml file for both onos and openstack")
+ generate_pipeline.generate_pipeline_yaml_for_openstack_onos(target,True)
+ restart_ceilometer_services()
+ return "Openstack start service called \n"
+ except Exception as e:
+ return e.__str__()
+
+@app.route('/monitoring/agent/onos/start',methods=['POST'])
+def onos_start():
+ try:
+ target = request.json['target']
+ logging.debug("target:%s",target)
+ metadata = request.json['meta_data']
+ logging.debug("metadata:%s",metadata)
+ logging.debug(type(target))
+ resources = metadata['resources']
+ logging.debug("resources:%s",resources)
+ if not generate_pipeline.openstack_service_info:
+ logging.debug("Openstak Service is not enabled,Only ONOS need to be enabled")
+ generate_pipeline.generate_pipeline_yaml_for_onos(target,resources,True)
+ else:
+ logging.debug(" Openstack Service is also enabled ,please generate yaml file for both onos and openstack")
+ generate_pipeline.generate_pipeline_yaml_for_onos_openstack(target,resources,True)
+
+ restart_ceilometer_services()
+ return "ONOS start service called \n"
+ except Exception as e:
+ return e.__str__()
+
+@app.route('/monitoring/agent/vsg/start',methods=['POST'])
+def vsg_start():
+ try:
+ target = request.json['target']
+ logging.debug("target:%s",target)
+ return "vsg start service called \n"
+ except Exception as e:
+ return e.__str__()
+
+
+@app.route('/monitoring/agent/openstack/stop',methods=['POST'])
+def openstack_stop():
+ try:
+ target = request.json['target']
+ logging.debug("target:%s",target)
+ if not generate_pipeline.onos_service_info:
+ generate_pipeline.generate_pipeline_yaml_for_openstack(target,False)
+ else:
+ generate_pipeline.generate_pipeline_yaml_for_onos(generate_pipeline.onos_service_info[0].target,generate_pipeline.onos_service_info[0].resources,True)
+ logging.debug("Delete Openstack object")
+ for obj in generate_pipeline.openstack_service_info:
+ generate_pipeline.openstack_service_info.remove(obj)
+
+ restart_ceilometer_services()
+ return "Openstack stop service called \n"
+
+ except Exception as e:
+ return e.__str__()
+
+@app.route('/monitoring/agent/onos/stop',methods=['POST'])
+def onos_stop():
+ try:
+ target = request.json['target']
+ logging.debug("target:%s",target)
+ metadata = request.json['meta_data']
+ logging.debug("metadata:%s",metadata)
+ resources = metadata['resources']
+ logging.debug("resources:%s",resources)
+
+ if not generate_pipeline.openstack_service_info:
+ generate_pipeline.generate_pipeline_yaml_for_onos(target,resources,False)
+ else:
+ generate_pipeline.generate_pipeline_yaml_for_openstack(generate_pipeline.openstack_service_info[0].target,True)
+
+ logging.debug("Delete ONOS Object")
+ for obj in generate_pipeline.onos_service_info:
+ generate_pipeline.onos_service_info.remove(obj)
+
+ restart_ceilometer_services()
+ return "ONOS stop service called \n"
+ except Exception as e:
+ return e.__str__()
+
+@app.route('/monitoring/agent/vsg/stop',methods=['POST'])
+def vsg_stop():
+ try:
+ target = request.json['target']
+ logging.debug("target:%s",target)
+ return "vsg stop service called \n"
+ except Exception as e:
+ return e.__str__()
+
+
+def restart_ceilometer_services():
+ try :
+ config = ConfigParser.ConfigParser()
+ config.read('monitoring_agent.conf')
+ services = config.get('SERVICE','Ceilometer_service')
+ service = services.split(",")
+ subprocess.call("sudo cp pipeline.yaml /etc/ceilometer/pipeline.yaml",shell=True)
+ except Exception as e:
+ logging.error("* Error in confing file:%s",e.__str__())
+ return False
+ else :
+ for service_name in service:
+ command = ['service',service_name, 'restart'];
+ logging.debug("Executing: %s command",command)
+ #shell=FALSE for sudo to work.
+ try :
+ subprocess.call(command, shell=False)
+ except Exception as e:
+ logging.error("* %s command execution failed with error %s",command,e.__str__())
+ return False
+ return True
+
+if __name__ == "__main__":
+ logging.config.fileConfig('monitoring_agent.conf', disable_existing_loggers=False)
+ app.run(host="0.0.0.0",port=5004,debug=False)