From 4390238970ab180114e75dee7e9e2fd670dfbdbc Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Tue, 9 Aug 2016 20:12:23 +0200 Subject: [PATCH] swift: optimize metric reporting in detail mode This only makes one listing request if details are requested. Change-Id: If637230b1d8913f1574f15dc9e93a5ecdac54fad --- gnocchi/storage/swift.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/gnocchi/storage/swift.py b/gnocchi/storage/swift.py index df6932c46..cbf1ee049 100644 --- a/gnocchi/storage/swift.py +++ b/gnocchi/storage/swift.py @@ -121,19 +121,23 @@ class SwiftStorage(_carbonara.CarbonaraBasedStorage): data) def _build_report(self, details): - headers, files = self.swift.get_container(self.MEASURE_PREFIX, - delimiter='/', - full_listing=True) - metrics = len(files) - measures = int(headers.get('x-container-object-count')) metric_details = defaultdict(int) if details: headers, files = self.swift.get_container(self.MEASURE_PREFIX, full_listing=True) + metrics = set() for f in files: - metric = f['name'].split('/', 1)[0] + metric, metric_files = f['name'].split("/", 1) metric_details[metric] += 1 - return metrics, measures, metric_details if details else None + metrics.add(metric) + nb_metrics = len(metrics) + else: + headers, files = self.swift.get_container(self.MEASURE_PREFIX, + delimiter='/', + full_listing=True) + nb_metrics = len(files) + measures = int(headers.get('x-container-object-count')) + return nb_metrics, measures, metric_details if details else None def list_metric_with_measures_to_process(self, size, part, full=False): limit = None