diff --git a/dex/analyzer.py b/dex/analyzer.py index 896724d..560c5e4 100644 --- a/dex/analyzer.py +++ b/dex/analyzer.py @@ -41,6 +41,7 @@ class QueryAnalyzer: def __init__(self, check_indexes): self._internal_map = {} self._check_indexes = check_indexes + self._index_cache_connection = None ############################################################################ def generate_query_report(self, db_uri, parsed_query, db_name, collection_name): @@ -54,6 +55,7 @@ def generate_query_report(self, db_uri, parsed_query, db_name, collection_name): db_name, collection_name) + query_analysis = self._generate_query_analysis(parsed_query, db_name, collection_name) @@ -95,10 +97,12 @@ def _ensure_index_cache(self, db_uri, db_name, collection_name): if collection_name not in self._internal_map[db_name]: indexes = [] try: - connection = pymongo.MongoClient(db_uri, - document_class=OrderedDict, - read_preference=pymongo.ReadPreference.PRIMARY_PREFERRED) - db = connection[db_name] + if self._index_cache_connection is None: + self._index_cache_connection = pymongo.MongoClient(db_uri, + document_class=OrderedDict, + read_preference=pymongo.ReadPreference.PRIMARY_PREFERRED) + + db = self._index_cache_connection[db_name] indexes = db[collection_name].index_information() except: warning = 'Warning: unable to connect to ' + db_uri + "\n" diff --git a/dex/parsers.py b/dex/parsers.py index 7f2cc6f..c9c1b1b 100644 --- a/dex/parsers.py +++ b/dex/parsers.py @@ -186,12 +186,7 @@ def handle(self, input): class QueryLineHandler: ######################################################################## def parse_query(self, extracted_query): - yaml_query = yamlfy(extracted_query) - - if '$query' not in yaml_query: - return OrderedDict([('$query', yaml_query)]) - else: - return yaml_query + return yamlfy(extracted_query) def parse_line_stats(self, stat_string): line_stats = {} @@ -289,7 +284,7 @@ def __init__(self): def handle(self, input): match = self._rx.match(input) if match is not None: - parsed = yamlfy(match.group('query')) + parsed = self.parse_query(match.group('query')) if parsed is not None: result = OrderedDict() result['stats'] = self.parse_line_stats(match.group('stats'))