Beispiel #1
0
    def setUp(self):
        self.mock_perf_mgr = MagicMock()
        self.mock_perf_mgr.perfCounter = fake_get_counters()

        self.coll = PerfManagerCollector()
        metric_names = [
            [],
            ["A.B", "C.D"],
            ["E.F", "G.H"],
            ["I.J", "I.K", "I.L"],
            ["M.N", "M.O", "M.O"]
        ]
        self.coll.metric_names = metric_names
        host = MagicMock(spec=vim.ManagedObject, key=vim.HostSystem("ha-host"))
        host.summary = MagicMock()
        host.summary.quickStats = MagicMock()
        host.summary.hardware = MagicMock()
        host.summary.quickStats.overallCpuUsage = MagicMock(return_value=100)
        host.summary.hardware.cpuMhz = MagicMock(return_value=2048)
        host.summary.hardware.numCpuCores = MagicMock(return_value=12)
        host.summary.quickStats.overallMemoryUsage = MagicMock(return_value=2500)
        host.summary.hardware.memorySize = MagicMock(return_value=4000)
        self.coll.get_perf_manager = MagicMock(return_value=self.mock_perf_mgr)
        self.coll.get_host_system = MagicMock(
            return_value=host)

        self.mock_vim = MagicMock()
        self.mock_vim.get_vms_in_cache.return_value = [MagicMock(name="fake-vm-id",
                                                                 project_id="p1",
                                                                 tenant_id="t1")]
        self.mock_vim.get_vm_obj_in_cache.return_value = vim.VirtualMachine('9')

        self.coll.get_vim_client = MagicMock(return_value=self.mock_vim)
    def setUp(self):
        self.coll = PerfManagerCollector()

        now_timestamp = int(time.mktime(datetime.now().timetuple()))
        # Mock function calls in vim_client
        results = {}
        results["disk.usage"] = [(10.0, 99.0), (11.0, 34.0), (12.0, 23.0), (13.0, 11.0)]
        results["net.usage"] = [(10.0, 3.0), (11.0, 5.0)]
        results["cpu.cpuUsagePercentage"] = [(now_timestamp, 50.0)]
        results["mem.memoryUsagePercentage"] = [(now_timestamp, 50.0)]

        self.mock_vim = MagicMock()
        self.mock_vim.query_stats = MagicMock(return_value=results)
        self.coll._get_client = MagicMock(return_value=self.mock_vim)
class TestPerfManagerCollector(unittest.TestCase):

    def setUp(self):
        self.coll = PerfManagerCollector()

        now_timestamp = int(time.mktime(datetime.now().timetuple()))
        # Mock function calls in vim_client
        results = {}
        results["disk.usage"] = [(10.0, 99.0), (11.0, 34.0), (12.0, 23.0), (13.0, 11.0)]
        results["net.usage"] = [(10.0, 3.0), (11.0, 5.0)]
        results["cpu.cpuUsagePercentage"] = [(now_timestamp, 50.0)]
        results["mem.memoryUsagePercentage"] = [(now_timestamp, 50.0)]

        self.mock_vim = MagicMock()
        self.mock_vim.query_stats = MagicMock(return_value=results)
        self.coll._get_client = MagicMock(return_value=self.mock_vim)

    def test_collect(self):
        now = datetime.now()
        now_timestamp = int(time.mktime(datetime.now().timetuple()))
        since = now - timedelta(seconds=20)
        results = self.coll.collect(since)

        # Verify counters returned by queryperf.
        assert_that(results, has_entries('disk.usage', [(10.0, 99.0), (11.0, 34.0), (12.0, 23.0), (13.0, 11.0)]))
        assert_that(results, has_entries('net.usage', [(10.0, 3.0), (11.0, 5.0)]))

        # Verify counters collected through Pyvmomi Host object
        assert_that(results, has_entries('cpu.cpuUsagePercentage', [(now_timestamp, 50.0)]))
        assert_that(results, has_entries('mem.memoryUsagePercentage', [(now_timestamp, 50.0)]))

        self.mock_vim.get_perf_manager_stats = MagicMock(return_value={})
    def setUp(self):
        self.coll = PerfManagerCollector()

        # Create mock Host entity to get CPU and Memory Performance Counters.
        self.host = MagicMock(spec=vim.ManagedObject, key=vim.HostSystem("ha-host"))
        self.host.summary = MagicMock()
        self.host.summary.quickStats = MagicMock()
        self.host.summary.hardware = MagicMock()
        self.host.summary.quickStats.overallCpuUsage = 1024
        self.host.summary.hardware.cpuMhz = 1024
        self.host.summary.hardware.numCpuCores = 2
        self.host.summary.quickStats.overallMemoryUsage = 2  # 2GB
        self.host.summary.hardware.memorySize = 4*1024*1024  # 4GB
        self.coll.get_host_system = MagicMock(return_value=self.host)

        # Mock function calls in vim_client
        results = {}
        results["disk.usage"] = [(10.0, 99.0), (11.0, 34.0), (12.0, 23.0), (13.0, 11.0)]
        results["net.usage"] = [(10.0, 3.0), (11.0, 5.0)]

        self.mock_vim = MagicMock()
        self.mock_vim.query_stats = MagicMock(return_value=results)
        self.coll.get_vim_client = MagicMock(return_value=self.mock_vim)
Beispiel #5
0
class TestPerfManagerCollector(unittest.TestCase):

    def setUp(self):
        self.mock_perf_mgr = MagicMock()
        self.mock_perf_mgr.perfCounter = fake_get_counters()

        self.coll = PerfManagerCollector()
        metric_names = [
            [],
            ["A.B", "C.D"],
            ["E.F", "G.H"],
            ["I.J", "I.K", "I.L"],
            ["M.N", "M.O", "M.O"]
        ]
        self.coll.metric_names = metric_names
        host = MagicMock(spec=vim.ManagedObject, key=vim.HostSystem("ha-host"))
        host.summary = MagicMock()
        host.summary.quickStats = MagicMock()
        host.summary.hardware = MagicMock()
        host.summary.quickStats.overallCpuUsage = MagicMock(return_value=100)
        host.summary.hardware.cpuMhz = MagicMock(return_value=2048)
        host.summary.hardware.numCpuCores = MagicMock(return_value=12)
        host.summary.quickStats.overallMemoryUsage = MagicMock(return_value=2500)
        host.summary.hardware.memorySize = MagicMock(return_value=4000)
        self.coll.get_perf_manager = MagicMock(return_value=self.mock_perf_mgr)
        self.coll.get_host_system = MagicMock(
            return_value=host)

        self.mock_vim = MagicMock()
        self.mock_vim.get_vms_in_cache.return_value = [MagicMock(name="fake-vm-id",
                                                                 project_id="p1",
                                                                 tenant_id="t1")]
        self.mock_vim.get_vm_obj_in_cache.return_value = vim.VirtualMachine('9')

        self.coll.get_vim_client = MagicMock(return_value=self.mock_vim)

    def test_initialize_host_counters(self):
        self.coll.initialize_host_counters()
        assert_that(self.coll._counter_to_metric_map, equal_to(
            {7376: 'I.L', 7778: 'M.N', 7779: 'M.O', 7172: 'G.H', 6566: 'A.B',
             7374: 'I.J', 7375: 'I.K', 6768: 'C.D', 6970: 'E.F'}))
        assert_that(self.coll._selected_metric_names, equal_to(['A.B', 'C.D']))
        for metric_obj in self.coll._selected_perf_metric_id_objs:
            assert_that([6566, 6768], has_item(metric_obj.counterId))

    def test_update_selected_metrics(self):
        self.coll.initialize_host_counters()

        # select higher level (=2) to pick a bigger set of metrics to query
        self.coll._update_selected_metrics(2)
        assert_that(self.coll._selected_metric_names, equal_to(['A.B', 'C.D',
                                                                'E.F', 'G.H']))
        for metric_obj in self.coll._selected_perf_metric_id_objs:
            assert_that([6566, 6768, 6970, 7172],
                        has_item(metric_obj.counterId))
            assert_that(metric_obj.instance, is_("*"))

    def test_get_perf_manager_stats(self):
        self.coll.initialize_host_counters()

        now = datetime.now()
        since = now - timedelta(seconds=20)
        self.mock_perf_mgr.QueryPerf.return_value = [
            vim.PerformanceManager.EntityMetricCSV(
                entity=vim.HostSystem('ha-host'),
                sampleInfoCSV='20,1970-01-01T00:00:10Z',
                value=[
                    vim.PerformanceManager.MetricSeriesCSV(
                        id=vim.PerformanceManager.MetricId(counterId=6566,
                                                           instance=''),
                        value='200')]
            ),
            vim.PerformanceManager.EntityMetricCSV(
                entity=vim.VirtualMachine('9'),
                sampleInfoCSV='20,1970-01-01T00:00:10Z',
                value=[
                    vim.PerformanceManager.MetricSeriesCSV(
                        id=vim.PerformanceManager.MetricId(counterId=6566,
                                                           instance=''),
                        value='100')]
            )
        ]

        results = self.coll.get_perf_manager_stats(since, now)
        assert_that(len(results.keys()), is_(2))
        assert_that(results,
                    has_entries('vm.t1.p1.A.B', [(10.0, 100.0)],
                                'A.B', [(10.0, 200.0)]))
        assert_that(self.mock_perf_mgr.QueryPerf.call_count, is_(1))

        expected_entity_refs = ["'vim.VirtualMachine:9'",
                                "'vim.HostSystem:ha-host'"]
        for i in range(len(expected_entity_refs)):
            # ref_str = expected_entity_refs[i]
            query_spec = self.mock_perf_mgr.QueryPerf.call_args[0][0][i]
            assert_that(query_spec,
                        instance_of(vim.PerformanceManager.QuerySpec))
            assert_that(query_spec.intervalId, is_(20))
            assert_that(query_spec.format, is_('csv'))
            assert_that(len(query_spec.metricId), is_(2))
            # assert_that(str(query_spec.entity), is_(ref_str))
            t_start = datetime.strptime(
                str(query_spec.startTime), '%Y-%m-%d %H:%M:%S.%f')
            t_end = datetime.strptime(
                str(query_spec.endTime), '%Y-%m-%d %H:%M:%S.%f')
            assert_that(t_end, equal_to(now))
            assert_that(t_start, equal_to(since))

    @parameterized.expand([
        (True,),
        (False,),
    ])
    def test_collect(self, initialized):
        now = datetime.now()
        since = now - timedelta(seconds=20)
        self.coll._initialized = initialized
        self.coll.get_perf_manager_stats = MagicMock()
        self.coll.initialize_host_counters = MagicMock()
        self.coll.collect(since)
        assert_that(self.coll.initialize_host_counters.call_count,
                    is_(0 if initialized else 1))
        assert_that(self.coll.get_perf_manager_stats.call_count, is_(1))
class TestPerfManagerCollector(unittest.TestCase):

    def setUp(self):
        self.coll = PerfManagerCollector()

        # Create mock Host entity to get CPU and Memory Performance Counters.
        self.host = MagicMock(spec=vim.ManagedObject, key=vim.HostSystem("ha-host"))
        self.host.summary = MagicMock()
        self.host.summary.quickStats = MagicMock()
        self.host.summary.hardware = MagicMock()
        self.host.summary.quickStats.overallCpuUsage = 1024
        self.host.summary.hardware.cpuMhz = 1024
        self.host.summary.hardware.numCpuCores = 2
        self.host.summary.quickStats.overallMemoryUsage = 2  # 2GB
        self.host.summary.hardware.memorySize = 4*1024*1024  # 4GB
        self.coll.get_host_system = MagicMock(return_value=self.host)

        # Mock function calls in vim_client
        results = {}
        results["disk.usage"] = [(10.0, 99.0), (11.0, 34.0), (12.0, 23.0), (13.0, 11.0)]
        results["net.usage"] = [(10.0, 3.0), (11.0, 5.0)]

        self.mock_vim = MagicMock()
        self.mock_vim.query_stats = MagicMock(return_value=results)
        self.coll.get_vim_client = MagicMock(return_value=self.mock_vim)

    def test_collect(self):
        now = datetime.now()
        now_timestamp = int(time.mktime(now.timetuple()))
        since = now - timedelta(seconds=20)

        self.coll._get_timestamp = MagicMock(return_value=now_timestamp)

        results = self.coll.collect(since)

        # Verify counters returned by vim_client.
        assert_that(results, has_entries('disk.usage', [(10.0, 99.0), (11.0, 34.0), (12.0, 23.0), (13.0, 11.0)]))
        assert_that(results, has_entries('net.usage', [(10.0, 3.0), (11.0, 5.0)]))

        # Verify counters collected through Pyvmomi Host object
        assert_that(results, has_entries('cpu.cpuUsagePercentage', [(now_timestamp, 50.0)]))
        assert_that(results, has_entries('mem.memoryUsagePercentage', [(now_timestamp, 50.0)]))

        self.mock_vim.get_perf_manager_stats = MagicMock(return_value={})

    def test_collect_with_no_vim_client_results(self):
        now = datetime.now()
        now_timestamp = int(time.mktime(now.timetuple()))
        since = now - timedelta(seconds=20)

        self.coll._get_timestamp = MagicMock(return_value=now_timestamp)
        self.mock_vim.query_stats = MagicMock(return_value={})

        results = self.coll.collect(since)

        # Verify no counter
        assert_that("disk.usage" in results.keys(), equal_to(False))
        assert_that("net.usage" in results.keys(), equal_to(False))

        # Verify counters collected through Pyvmomi Host object
        assert_that(results, has_entries('cpu.cpuUsagePercentage', [(now_timestamp, 50.0)]))
        assert_that(results, has_entries('mem.memoryUsagePercentage', [(now_timestamp, 50.0)]))

    def test_collect_with_bad_pyvmomi_results(self):
        now = datetime.now()
        now_timestamp = int(time.mktime(now.timetuple()))
        since = now - timedelta(seconds=20)

        self.coll._get_timestamp = MagicMock(return_value=now_timestamp)
        self.host.summary.hardware.numCpuCores = 0
        self.host.summary.hardware.memorySize = 0

        results = self.coll.collect(since)

        # Verify no counter
        assert_that(results, has_entries('cpu.cpuUsagePercentage', [(now_timestamp, 0.0)]))
        assert_that(results, has_entries('mem.memoryUsagePercentage', [(now_timestamp, 0.0)]))