Merge "Instantiate inspector in compute manager"

This commit is contained in:
Jenkins 2012-12-17 10:58:00 +00:00 committed by Gerrit Code Review
commit 07eaed241c
3 changed files with 42 additions and 53 deletions

View File

@ -16,9 +16,12 @@
# License for the specific language governing permissions and limitations
# under the License.
from stevedore import driver
from ceilometer import extension_manager
from ceilometer import nova_client
from ceilometer.compute.virt import inspector as virt_inspector
from ceilometer.openstack.common import cfg
from ceilometer.openstack.common import log
from ceilometer import publish
@ -28,6 +31,10 @@ OPTS = [
default=[],
help='list of compute agent pollsters to disable',
),
cfg.StrOpt('hypervisor_inspector',
default='libvirt',
help='Inspector to use for inspecting the hypervisor layer',
),
]
cfg.CONF.register_opts(OPTS)
@ -38,6 +45,18 @@ LOG = log.getLogger(__name__)
PLUGIN_NAMESPACE = 'ceilometer.poll.compute'
def get_hypervisor_inspector():
try:
namespace = 'ceilometer.compute.virt'
mgr = driver.DriverManager(namespace,
cfg.CONF.hypervisor_inspector,
invoke_on_load=True)
return mgr.driver
except ImportError as e:
LOG.error("Unable to load the hypervisor inspector: %s" % (e))
return virt_inspector.Inspector()
class AgentManager(object):
def __init__(self):
@ -45,6 +64,7 @@ class AgentManager(object):
namespace=PLUGIN_NAMESPACE,
disabled_names=cfg.CONF.disabled_compute_pollsters,
)
self._inspector = get_hypervisor_inspector()
return
@staticmethod
@ -79,3 +99,7 @@ class AgentManager(object):
for instance in nv.instance_get_all_by_host(cfg.CONF.host):
if getattr(instance, 'OS-EXT-STS:vm_state', None) != 'error':
self.poll_instance(context, instance)
@property
def inspector(self):
return self._inspector

View File

@ -21,26 +21,12 @@
import copy
import datetime
from stevedore import driver
from ceilometer import counter
from ceilometer.compute import plugin
from ceilometer.compute import instance as compute_instance
from ceilometer.compute.virt import inspector as virt_inspector
from ceilometer.openstack.common import cfg
from ceilometer.openstack.common import importutils
from ceilometer.openstack.common import log
from ceilometer.openstack.common import timeutils
OPTS = [
cfg.StrOpt('hypervisor_inspector',
help='Inspector to use for inspecting the hypervisor layer',
default='libvirt')
]
CONF = cfg.CONF
CONF.register_opts(OPTS)
LOG = log.getLogger(__name__)
@ -49,18 +35,6 @@ def _instance_name(instance):
return getattr(instance, 'OS-EXT-SRV-ATTR:instance_name', None)
def get_hypervisor_inspector():
try:
namespace = 'ceilometer.compute.virt'
mgr = driver.DriverManager(namespace,
CONF.hypervisor_inspector,
invoke_on_load=True)
return mgr.driver
except ImportError as e:
LOG.error("Unable to load the hypervisor inspector: %s" % (e))
return virt_inspector.Inspector()
def make_counter_from_instance(instance, name, type, volume):
return counter.Counter(
name=name,
@ -74,16 +48,7 @@ def make_counter_from_instance(instance, name, type, volume):
)
class HypervisorPollster(plugin.ComputePollster):
inspector = None
def __init__(self):
if not HypervisorPollster.inspector:
HypervisorPollster.inspector = get_hypervisor_inspector()
class InstancePollster(HypervisorPollster):
class InstancePollster(plugin.ComputePollster):
def get_counters(self, manager, instance):
yield make_counter_from_instance(instance,
@ -99,7 +64,7 @@ class InstancePollster(HypervisorPollster):
)
class DiskIOPollster(HypervisorPollster):
class DiskIOPollster(plugin.ComputePollster):
LOG = log.getLogger(__name__ + '.diskio')
@ -119,7 +84,7 @@ class DiskIOPollster(HypervisorPollster):
r_requests = 0
w_bytes = 0
w_requests = 0
for disk, info in self.inspector.inspect_disks(instance_name):
for disk, info in manager.inspector.inspect_disks(instance_name):
self.LOG.info(self.DISKIO_USAGE_MESSAGE,
instance, disk.device, info.read_requests,
info.read_bytes, info.write_requests,
@ -154,7 +119,7 @@ class DiskIOPollster(HypervisorPollster):
self.LOG.exception(err)
class CPUPollster(HypervisorPollster):
class CPUPollster(plugin.ComputePollster):
LOG = log.getLogger(__name__ + '.cpu')
@ -181,7 +146,7 @@ class CPUPollster(HypervisorPollster):
self.LOG.info('checking instance %s', instance.id)
instance_name = _instance_name(instance)
try:
cpu_info = self.inspector.inspect_cpus(instance_name)
cpu_info = manager.inspector.inspect_cpus(instance_name)
self.LOG.info("CPUTIME USAGE: %s %d",
instance.__dict__, cpu_info.time)
cpu_util = self.get_cpu_util(instance, cpu_info)
@ -208,7 +173,7 @@ class CPUPollster(HypervisorPollster):
self.LOG.exception(err)
class NetPollster(HypervisorPollster):
class NetPollster(plugin.ComputePollster):
LOG = log.getLogger(__name__ + '.net')
@ -236,7 +201,7 @@ class NetPollster(HypervisorPollster):
instance_name = _instance_name(instance)
self.LOG.info('checking instance %s', instance.id)
try:
for vnic, info in self.inspector.inspect_vnics(instance_name):
for vnic, info in manager.inspector.inspect_vnics(instance_name):
self.LOG.info(self.NET_USAGE_MESSAGE, instance_name,
vnic.name, info.rx_bytes, info.tx_bytes)
yield self.make_vnic_counter(instance,

View File

@ -35,17 +35,15 @@ class TestPollsterBase(test_base.TestCase):
def setUp(self):
super(TestPollsterBase, self).setUp()
self.manager = manager.AgentManager()
self.mox.StubOutWithMock(manager, 'get_hypervisor_inspector')
self.inspector = self.mox.CreateMock(virt_inspector.Inspector)
manager.get_hypervisor_inspector().AndReturn(self.inspector)
self.instance = mock.MagicMock()
self.instance.name = 'instance-00000001'
setattr(self.instance, 'OS-EXT-SRV-ATTR:instance_name',
self.instance.name)
self.instance.id = 1
self.instance.flavor = {'name': 'm1.small', 'id': 2}
self.mox.StubOutWithMock(pollsters, 'get_hypervisor_inspector')
self.inspector = self.mox.CreateMock(virt_inspector.Inspector)
pollsters.get_hypervisor_inspector().AndReturn(self.inspector)
pollsters.HypervisorPollster.inspector = None
class TestInstancePollster(TestPollsterBase):
@ -56,9 +54,9 @@ class TestInstancePollster(TestPollsterBase):
def test_get_counters(self):
self.mox.ReplayAll()
mgr = manager.AgentManager()
pollster = pollsters.InstancePollster()
counters = list(pollster.get_counters(self.manager,
self.instance))
counters = list(pollster.get_counters(mgr, self.instance))
self.assertEquals(len(counters), 2)
self.assertEqual(counters[0].name, 'instance')
self.assertEqual(counters[1].name, 'instance:m1.small')
@ -79,8 +77,9 @@ class TestDiskIOPollster(TestPollsterBase):
self.inspector.inspect_disks(self.instance.name).AndReturn(disks)
self.mox.ReplayAll()
mgr = manager.AgentManager()
pollster = pollsters.DiskIOPollster()
counters = list(pollster.get_counters(self.manager, self.instance))
counters = list(pollster.get_counters(mgr, self.instance))
assert counters
def _verify_disk_metering(name, expected_volume):
@ -124,8 +123,9 @@ class TestNetPollster(TestPollsterBase):
self.inspector.inspect_vnics(self.instance.name).AndReturn(vnics)
self.mox.ReplayAll()
mgr = manager.AgentManager()
pollster = pollsters.NetPollster()
counters = list(pollster.get_counters(self.manager, self.instance))
counters = list(pollster.get_counters(mgr, self.instance))
assert counters
def _verify_vnic_metering(name, ip, expected_volume):
@ -160,11 +160,11 @@ class TestCPUPollster(TestPollsterBase):
virt_inspector.CPUStats(time=2 * (10 ** 6), number=2))
self.mox.ReplayAll()
mgr = manager.AgentManager()
pollster = pollsters.CPUPollster()
def _verify_cpu_metering(zero, expected_time):
counters = list(pollster.get_counters(self.manager,
self.instance))
counters = list(pollster.get_counters(mgr, self.instance))
self.assertEquals(len(counters), 2)
assert counters[0].name == 'cpu_util'
assert (counters[0].volume == 0.0 if zero else