diff --git a/ceilometer/compute/pollsters/__init__.py b/ceilometer/compute/pollsters/__init__.py index 60eb6b65..f56122b1 100644 --- a/ceilometer/compute/pollsters/__init__.py +++ b/ceilometer/compute/pollsters/__init__.py @@ -42,6 +42,27 @@ class BaseComputePollster(plugin_base.PollsterBase): def default_discovery(self): return 'local_instances' + @staticmethod + def _populate_cache_create(_i_cache, _instance, _inspector, + _DiskData, _inspector_attr, _stats_attr): + """Settings and return cache.""" + if _instance.id not in _i_cache: + _data = 0 + _per_device_data = {} + disk_rates = getattr(_inspector, _inspector_attr)(_instance) + for disk, stats in disk_rates: + _data += getattr(stats, _stats_attr) + _per_device_data[disk.device] = ( + getattr(stats, _stats_attr)) + _per_disk_data = { + _stats_attr: _per_device_data + } + _i_cache[_instance.id] = _DiskData( + _data, + _per_disk_data + ) + return _i_cache[_instance.id] + def _record_poll_time(self): """Method records current time as the poll time. diff --git a/ceilometer/compute/pollsters/disk.py b/ceilometer/compute/pollsters/disk.py index 840abdcb..8a94bc31 100644 --- a/ceilometer/compute/pollsters/disk.py +++ b/ceilometer/compute/pollsters/disk.py @@ -413,23 +413,10 @@ class _DiskLatencyPollsterBase(pollsters.BaseComputePollster): CACHE_KEY_DISK_LATENCY = 'disk-latency' def _populate_cache(self, inspector, cache, instance): - i_cache = cache.setdefault(self.CACHE_KEY_DISK_LATENCY, {}) - if instance.id not in i_cache: - latency = 0 - per_device_latency = {} - disk_rates = inspector.inspect_disk_latency(instance) - for disk, stats in disk_rates: - latency += stats.disk_latency - per_device_latency[disk.device] = ( - stats.disk_latency) - per_disk_latency = { - 'disk_latency': per_device_latency - } - i_cache[instance.id] = DiskLatencyData( - latency, - per_disk_latency - ) - return i_cache[instance.id] + return self._populate_cache_create( + cache.setdefault(self.CACHE_KEY_DISK_LATENCY, {}), + instance, inspector, DiskLatencyData, + 'inspect_disk_latency', 'disk_latency') @abc.abstractmethod def _get_samples(self, instance, disk_rates_info): @@ -496,22 +483,10 @@ class _DiskIOPSPollsterBase(pollsters.BaseComputePollster): CACHE_KEY_DISK_IOPS = 'disk-iops' def _populate_cache(self, inspector, cache, instance): - i_cache = cache.setdefault(self.CACHE_KEY_DISK_IOPS, {}) - if instance.id not in i_cache: - iops = 0 - per_device_iops = {} - disk_iops_count = inspector.inspect_disk_iops(instance) - for disk, stats in disk_iops_count: - iops += stats.iops_count - per_device_iops[disk.device] = (stats.iops_count) - per_disk_iops = { - 'iops_count': per_device_iops - } - i_cache[instance.id] = DiskIOPSData( - iops, - per_disk_iops - ) - return i_cache[instance.id] + return self._populate_cache_create( + cache.setdefault(self.CACHE_KEY_DISK_IOPS, {}), + instance, inspector, DiskIOPSData, + 'inspect_disk_iops', 'iops_count') @abc.abstractmethod def _get_samples(self, instance, disk_rates_info):