Merge "Instantiate inspector in compute manager"
This commit is contained in:
commit
07eaed241c
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user