diff options
author | dongwenjuan <dong.wenjuan@zte.com.cn> | 2016-09-12 16:57:57 +0800 |
---|---|---|
committer | dongwenjuan <dong.wenjuan@zte.com.cn> | 2016-09-20 13:43:50 +0800 |
commit | 00ba87a34f69b44962c7a885191ea38f8cc1b440 (patch) | |
tree | 8423171e32842cfde2fe205da1cca051af6964e7 | |
parent | 194f2ea113c07ff6c66e67b368abce0bfa22f595 (diff) |
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 <dong.wenjuan@zte.com.cn>
-rw-r--r-- | tests/inspector.py | 25 |
1 files 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() |