From 00ba87a34f69b44962c7a885191ea38f8cc1b440 Mon Sep 17 00:00:00 2001 From: dongwenjuan Date: Mon, 12 Sep 2016 16:57:57 +0800 Subject: [PATCH] cache host-vm list when inspect start to run 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 --- tests/inspector.py | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/tests/inspector.py b/tests/inspector.py index c8fb00f9..62614158 100644 --- a/tests/inspector.py +++ b/tests/inspector.py @@ -8,10 +8,12 @@ ############################################################################## import argparse +import collections from flask import Flask from flask import request import json import os +import time import novaclient.client as novaclient @@ -23,6 +25,7 @@ class DoctorInspectorSample(object): 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'], @@ -31,10 +34,22 @@ class DoctorInspectorSample(object): 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): - 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 @@ -48,12 +63,13 @@ class DoctorInspectorSample(object): app = Flask(__name__) +app.debug = True 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) @@ -73,8 +89,7 @@ def get_args(): def main(): args = get_args() - app.run(port=args.port, debug=True) - + app.run(port=args.port) if __name__ == '__main__': main() -- 2.16.6