As getting servers list under all tenants in specify host takes most
of the time when inspector handling the host failure event, cache the
host-vms list when inspector start run to improve the performance.
add receive event time in inspector
Change-Id: I5fca2816ae9a176be4791bf5dbe26b1c30e743c5
Signed-off-by: dongwenjuan <dong.wenjuan@zte.com.cn>
##############################################################################
import argparse
##############################################################################
import argparse
from flask import Flask
from flask import request
import json
import os
from flask import Flask
from flask import request
import json
import os
import novaclient.client as novaclient
import novaclient.client as novaclient
nova_api_version = '2.11'
def __init__(self):
nova_api_version = '2.11'
def __init__(self):
+ self.servers = collections.defaultdict(list)
self.nova = novaclient.Client(self.nova_api_version,
os.environ['OS_USERNAME'],
os.environ['OS_PASSWORD'],
self.nova = novaclient.Client(self.nova_api_version,
os.environ['OS_USERNAME'],
os.environ['OS_PASSWORD'],
connection_pool=True)
# check nova is available
self.nova.servers.list(detailed=False)
connection_pool=True)
# check nova is available
self.nova.servers.list(detailed=False)
+ self.init_servers_list()
+
+ def init_servers_list(self):
+ opts = {'all_tenants': True}
+ servers=self.nova.servers.list(search_opts=opts)
+ self.servers.clear()
+ for server in servers:
+ try:
+ host=server.__dict__.get('OS-EXT-SRV-ATTR:host')
+ self.servers[host].append(server)
+ app.logger.debug('get hostname=%s from server=%s' % (host, server))
+ except Exception as e:
+ app.logger.debug('can not get hostname from server=%s' % server)
def disable_compute_host(self, hostname):
def disable_compute_host(self, hostname):
- opts = {'all_tenants': True, 'host': hostname}
- for server in self.nova.servers.list(detailed=False, search_opts=opts):
+ for server in self.servers[hostname]:
self.nova.servers.reset_state(server, 'error')
# NOTE: We use our own client here instead of this novaclient for a
self.nova.servers.reset_state(server, 'error')
# NOTE: We use our own client here instead of this novaclient for a
inspector = DoctorInspectorSample()
@app.route('/events', methods=['POST'])
def event_posted():
inspector = DoctorInspectorSample()
@app.route('/events', methods=['POST'])
def event_posted():
- app.logger.debug('event posted')
+ app.logger.debug('event posted at %s' % time.time())
app.logger.debug('inspector = %s' % inspector)
app.logger.debug('received data = %s' % request.data)
d = json.loads(request.data)
app.logger.debug('inspector = %s' % inspector)
app.logger.debug('received data = %s' % request.data)
d = json.loads(request.data)
def main():
args = get_args()
def main():
args = get_args()
- app.run(port=args.port, debug=True)
-
+ app.run(port=args.port)
if __name__ == '__main__':
main()
if __name__ == '__main__':
main()