blob: 74ee47938bfc41c9e851674aa567148dfca3cd0a [file] [log] [blame]
Matteo Scandoloeb0d11c2017-08-08 13:05:26 -07001
2# Copyright 2017-present Open Networking Foundation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16
rdudyala996d70b2016-10-13 17:40:55 +000017#!/usr/bin/python
18from flask import request, Request, jsonify
19from flask import Flask
20from flask import make_response
21import logging
22import logging.handlers
23import logging.config
24import subprocess
25import ConfigParser
26import generate_pipeline
27app = Flask(__name__)
28
29
30@app.route('/monitoring/agent/openstack/start',methods=['POST'])
31def openstack_start():
32 try:
33 # To do validation of user inputs for all the functions
34 target = request.json['target']
35 logging.debug("target:%s",target)
36 if not generate_pipeline.onos_service_info:
37 logging.debug (" ONOS Service is not enalble,Only openstack need to be enabled ")
38 generate_pipeline.generate_pipeline_yaml_for_openstack(target,True)
39 else:
40 logging.debug(" ONOS Service is also enabled ,please generate yaml file for both onos and openstack")
41 generate_pipeline.generate_pipeline_yaml_for_openstack_onos(target,True)
42 restart_ceilometer_services()
43 return "Openstack start service called \n"
44 except Exception as e:
45 return e.__str__()
46
47@app.route('/monitoring/agent/onos/start',methods=['POST'])
48def onos_start():
49 try:
50 target = request.json['target']
51 logging.debug("target:%s",target)
Srikanth Vavilapallif2919002016-12-19 18:32:20 +000052 resources = request.json['resources']
rdudyala996d70b2016-10-13 17:40:55 +000053 logging.debug("resources:%s",resources)
54 if not generate_pipeline.openstack_service_info:
55 logging.debug("Openstak Service is not enabled,Only ONOS need to be enabled")
56 generate_pipeline.generate_pipeline_yaml_for_onos(target,resources,True)
57 else:
58 logging.debug(" Openstack Service is also enabled ,please generate yaml file for both onos and openstack")
59 generate_pipeline.generate_pipeline_yaml_for_onos_openstack(target,resources,True)
60
61 restart_ceilometer_services()
62 return "ONOS start service called \n"
63 except Exception as e:
64 return e.__str__()
65
66@app.route('/monitoring/agent/vsg/start',methods=['POST'])
67def vsg_start():
68 try:
69 target = request.json['target']
70 logging.debug("target:%s",target)
71 return "vsg start service called \n"
72 except Exception as e:
73 return e.__str__()
74
75
76@app.route('/monitoring/agent/openstack/stop',methods=['POST'])
77def openstack_stop():
78 try:
79 target = request.json['target']
80 logging.debug("target:%s",target)
81 if not generate_pipeline.onos_service_info:
82 generate_pipeline.generate_pipeline_yaml_for_openstack(target,False)
83 else:
84 generate_pipeline.generate_pipeline_yaml_for_onos(generate_pipeline.onos_service_info[0].target,generate_pipeline.onos_service_info[0].resources,True)
85 logging.debug("Delete Openstack object")
86 for obj in generate_pipeline.openstack_service_info:
87 generate_pipeline.openstack_service_info.remove(obj)
88
89 restart_ceilometer_services()
90 return "Openstack stop service called \n"
91
92 except Exception as e:
93 return e.__str__()
94
95@app.route('/monitoring/agent/onos/stop',methods=['POST'])
96def onos_stop():
97 try:
98 target = request.json['target']
99 logging.debug("target:%s",target)
100 metadata = request.json['meta_data']
101 logging.debug("metadata:%s",metadata)
102 resources = metadata['resources']
103 logging.debug("resources:%s",resources)
104
105 if not generate_pipeline.openstack_service_info:
106 generate_pipeline.generate_pipeline_yaml_for_onos(target,resources,False)
107 else:
108 generate_pipeline.generate_pipeline_yaml_for_openstack(generate_pipeline.openstack_service_info[0].target,True)
109
110 logging.debug("Delete ONOS Object")
111 for obj in generate_pipeline.onos_service_info:
112 generate_pipeline.onos_service_info.remove(obj)
113
114 restart_ceilometer_services()
115 return "ONOS stop service called \n"
116 except Exception as e:
117 return e.__str__()
118
119@app.route('/monitoring/agent/vsg/stop',methods=['POST'])
120def vsg_stop():
121 try:
122 target = request.json['target']
123 logging.debug("target:%s",target)
124 return "vsg stop service called \n"
125 except Exception as e:
126 return e.__str__()
127
128
129def restart_ceilometer_services():
130 try :
131 config = ConfigParser.ConfigParser()
132 config.read('monitoring_agent.conf')
133 services = config.get('SERVICE','Ceilometer_service')
134 service = services.split(",")
135 subprocess.call("sudo cp pipeline.yaml /etc/ceilometer/pipeline.yaml",shell=True)
136 except Exception as e:
137 logging.error("* Error in confing file:%s",e.__str__())
138 return False
139 else :
140 for service_name in service:
141 command = ['service',service_name, 'restart'];
142 logging.debug("Executing: %s command",command)
143 #shell=FALSE for sudo to work.
144 try :
145 subprocess.call(command, shell=False)
146 except Exception as e:
147 logging.error("* %s command execution failed with error %s",command,e.__str__())
148 return False
149 return True
150
151if __name__ == "__main__":
152 logging.config.fileConfig('monitoring_agent.conf', disable_existing_loggers=False)
153 app.run(host="0.0.0.0",port=5004,debug=False)