Reduce code duplication

Reduced source code by extracting duplicated code
(ceilometer/compute/pollsters/disk.py)

Change-Id: I6d938fc6dad983c374c5e477b3ed82eb1b778e83
This commit is contained in:
Béla Vancsics 2015-11-24 17:36:59 +01:00
parent 3549f782d1
commit cc249790d5
2 changed files with 29 additions and 33 deletions

View File

@ -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.

View File

@ -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):