Exemple #1
0
    def _do_pull_for_server(self, pdu, server_endpoint, outlet):
        try:
            LOG.debug(
                "PDU address is %s | server is %s | plugged on outlet %s",
                pdu, server_endpoint, outlet)
            value = self.wrapper.get_snmpv2(
                pdu, self.metric, outlet
            )
            milliseconds_since_epoch = int(time.time() * 1000)
            resource_metadata = {
                "host": server_endpoint,
                "title": self.title,
                "epoch": str(milliseconds_since_epoch)
            }

            measurement = Measurement(
                name=self.probe_id,
                unit=self.unit,
                type_=self.type,
                value=float(value),
                resource_id=server_endpoint,
                host=server_endpoint,
                resource_metadata=resource_metadata,
            )

            LOG.debug("[PDU] Message = %r", measurement.as_dict())
            return measurement

        except Exception as exc:
            LOG.warning(
                "Sorry, we have not received a response of PDU (%s) "
                "for getting the OID(%s) "
                "on the server `%s` thrown Exception is <%s>",
                pdu, self.metric, server_endpoint, exc.args[0]
            )
Exemple #2
0
    def test_puller_send_measurements(self, m_as_dict):
        data_puller = FakeMetricPuller(
            title=FakeMetricPuller.get_entry_name(),
            probe_id=FakeMetricPuller.get_default_probe_id(),
            interval=FakeMetricPuller.get_default_interval(),
        )
        measurement_dict = OrderedDict(
            name="dummy.data.puller",
            unit="",
            type_="",
            value=13.37,
            resource_id="test_hostname",
            host="test_hostname",
            timestamp="2015-08-04T15:15:45.703542",
        )
        m_as_dict.return_value = measurement_dict

        measurement = Measurement(**measurement_dict)

        with patch.object(MetricPuller, 'notify') as m_notify:
            data_puller.send_measurements([measurement])

        expected_encoded_msg = msgpack.dumps(measurement_dict)

        self.assertTrue(m_notify.called)
        m_notify.assert_called_once_with(expected_encoded_msg)
Exemple #3
0
    def do_pull(self):
        LOG.info("[%s] Pulling measurements...", self.key)
        value = self.wrapper.disk_usage(get_root_path(), self.metric)

        resource_metadata = {"host": platform.node(), "title": self.title}
        measurement = Measurement(
            name=self.probe_id,
            unit=self.unit,
            type_="gauge",
            value=value,
            resource_id=platform.node(),
            resource_metadata=resource_metadata,
        )
        LOG.info("[%s] Measurements collected.", self.key)
        return [measurement]
Exemple #4
0
 def do_pull(self):
     random_value = random.Random().randint(1, 10)
     random_message = "[%s] random data generated on %s" % (
         random_value, datetime.datetime.now()
     )
     measurement = Measurement(
         name=self.probe_id,
         unit="",
         type_="",
         value=random_value,
         resource_id=platform.node(),
         resource_metadata={
             "state": "ok",
             "static_data": self.static_data,
             "description": random_message
         },
     )
     return [measurement]
Exemple #5
0
    def do_pull(self):
        """Retrives the number of CPUs on the host"""
        LOG.info("[%s] Pulling measurements...", self.key)
        value = self.wrapper.cpu_usage(self.metric)

        resource_metadata = {
            "host": platform.node(),
            "title": self.title
        }
        measurement = Measurement(
            name=self.probe_id,
            unit=self.unit,
            type_="gauge",
            value=value,
            resource_id=platform.node(),
            resource_metadata=resource_metadata,
        )
        LOG.info("[%s] Measurements collected.", self.key)
        return [measurement]
Exemple #6
0
    def test_send_measurements(self, m_as_dict):
        self.agent.register_drivers()

        measurement_dict = OrderedDict(
            name="dummy.data.puller",
            unit="",
            type_="",
            value=13.37,
            resource_id="test_hostname",
            host="test_hostname",
            timestamp="2015-08-04T15:15:45.703542",
        )
        m_as_dict.return_value = measurement_dict

        measurement = Measurement(**measurement_dict)

        for driver in self.agent.drivers.values():
            driver.send_measurements([measurement])
            break  # only the first one
        expected_encoded_msg = msgpack.dumps(measurement_dict)
        self.m_agent_socket.return_value.send.assert_called_once_with(
            expected_encoded_msg)
Exemple #7
0
    def do_pull(self):
        LOG.info("[%s] Pulling measurements...", self.key)
        measurements = []
        for instance in self.wrapper.get_instances():
            value = self.wrapper.instance_cpu_percent(instance)

            resource_metadata = {
                "host": platform.node(),
                "title": self.title,
                "display_name": instance.name
            }
            measurement = Measurement(
                name=self.probe_id,
                unit=self.unit,
                type_="gauge",
                value=value,
                resource_id=instance.id,
                resource_metadata=resource_metadata,
            )
            LOG.info("[%s] Measurements collected.", self.key)
            measurements.append(measurement)

        return measurements
Exemple #8
0
class TestSwapDrivers(BaseTestCase):

    fake_swap = sswap(total=17099124736,
                      used=10,
                      free=17099124726,
                      percent=0.0,
                      sin=0,
                      sout=0)

    scenarios = (
        ("TotalSwapPuller", {
            "puller_factory":
            swap.TotalSwapPuller,
            "swap_patch":
            patch.object(psutil, "swap_memory", Mock(return_value=fake_swap)),
            "expected_data":
            Measurement(name="compute.node.swap.total",
                        timestamp="2015-08-04T15:15:45.703542+00:00",
                        unit="bytes",
                        type_="gauge",
                        value=17099124736,
                        resource_id="test_node",
                        host="test_node",
                        resource_metadata={
                            "host": "test_node",
                            "title": "swap_total"
                        })
        }),
        ("FreeSwapPuller", {
            "puller_factory":
            swap.FreeSwapPuller,
            "swap_patch":
            patch.object(psutil, "swap_memory", Mock(return_value=fake_swap)),
            "expected_data":
            Measurement(name="compute.node.swap.free",
                        timestamp="2015-08-04T15:15:45.703542+00:00",
                        unit="bytes",
                        type_="gauge",
                        value=17099124726,
                        resource_id="test_node",
                        host="test_node",
                        resource_metadata={
                            "host": "test_node",
                            "title": "swap_free"
                        })
        }),
        ("UsedSwapPuller", {
            "puller_factory":
            swap.UsedSwapPuller,
            "swap_patch":
            patch.object(psutil, "swap_memory", Mock(return_value=fake_swap)),
            "expected_data":
            Measurement(name="compute.node.swap.used",
                        timestamp="2015-08-04T15:15:45.703542+00:00",
                        unit="bytes",
                        type_="gauge",
                        value=10,
                        resource_id="test_node",
                        host="test_node",
                        resource_metadata={
                            "host": "test_node",
                            "title": "swap_used"
                        })
        }),
    )

    @freeze_time("2015-08-04T15:15:45.703542+00:00")
    @patch.object(platform, "node", Mock(return_value="test_node"))
    def test_swap(self):
        data_puller = self.puller_factory(
            self.puller_factory.get_name(),
            self.puller_factory.get_default_probe_id(),
            self.puller_factory.get_default_interval(),
        )

        with self.swap_patch:
            pulled_data = data_puller.do_pull()

        self.assertEqual(
            [measurement.as_dict() for measurement in pulled_data],
            [self.expected_data.as_dict()])
Exemple #9
0
class TestMemoryDrivers(BaseTestCase):

    fake_svmem = svmem(total=16749080576,
                       available=15042203648,
                       percent=10.2,
                       used=3770953728,
                       free=12978126848,
                       active=2177314816,
                       inactive=1093963776,
                       buffers=322965504,
                       cached=1741111296)

    scenarios = (
        ("TotalMemoryPuller", {
            "puller_factory":
            memory.TotalMemoryPuller,
            "memory_patch":
            patch.object(psutil, "virtual_memory",
                         Mock(return_value=fake_svmem)),
            "expected_data":
            Measurement(name="compute.node.memory.total",
                        timestamp="2015-08-04T15:15:45.703542+00:00",
                        unit="bytes",
                        type_="gauge",
                        value=16749080576,
                        resource_id="test_node",
                        host="test_node",
                        resource_metadata={
                            "host": "test_node",
                            "title": "memory_total"
                        })
        }),
        ("FreeMemoryPuller", {
            "puller_factory":
            memory.FreeMemoryPuller,
            "memory_patch":
            patch.object(psutil, "virtual_memory",
                         Mock(return_value=fake_svmem)),
            "expected_data":
            Measurement(name="compute.node.memory.free",
                        timestamp="2015-08-04T15:15:45.703542+00:00",
                        unit="bytes",
                        type_="gauge",
                        value=12978126848,
                        resource_id="test_node",
                        host="test_node",
                        resource_metadata={
                            "host": "test_node",
                            "title": "memory_free"
                        })
        }),
        ("UsedMemoryPuller", {
            "puller_factory":
            memory.UsedMemoryPuller,
            "memory_patch":
            patch.object(psutil, "virtual_memory",
                         Mock(return_value=fake_svmem)),
            "expected_data":
            Measurement(name="compute.node.memory.used",
                        timestamp="2015-08-04T15:15:45.703542+00:00",
                        unit="bytes",
                        type_="gauge",
                        value=3770953728,
                        resource_id="test_node",
                        host="test_node",
                        resource_metadata={
                            "host": "test_node",
                            "title": "memory_used"
                        })
        }),
    )

    @freeze_time("2015-08-04T15:15:45.703542+00:00")
    @patch.object(platform, "node", Mock(return_value="test_node"))
    def test_memory(self):
        data_puller = self.puller_factory(
            self.puller_factory.get_name(),
            self.puller_factory.get_default_probe_id(),
            self.puller_factory.get_default_interval(),
        )

        with self.memory_patch:
            pulled_data = data_puller.do_pull()

        self.assertEqual(
            [measurement.as_dict() for measurement in pulled_data],
            [self.expected_data.as_dict()])
Exemple #10
0
    def test_pdu_drivers(self):
        data_puller = self.pdu_puller_factory(
            self.pdu_puller_factory.get_name(),
            self.pdu_puller_factory.get_default_probe_id(),
            self.pdu_puller_factory.get_default_interval(),
            pdu_servers=OrderedDict([("PDU_1", "127.0.0.1"),
                                     ("PDU_2", "192.168.1.1")]),
            mapping=[
                {
                    "PDU_1": [{
                        "serv1.hostname": 1
                    }, {
                        "serv2.hostname": 2
                    }]
                },
                {
                    "PDU_2": [{
                        "serv3.hostname": 1
                    }]
                },
            ],
        )

        expected_measurements = [
            Measurement(
                name=self.expected_data["probe_id"],
                host="serv1.hostname",
                resource_id="serv1.hostname",
                resource_metadata={
                    "epoch": "1438701345703",
                    "host": "serv1.hostname",
                    "title": self.expected_data["title"]
                },
                timestamp="2015-08-04T15:15:45.703542+00:00",
                type_=self.expected_data["type"],
                unit=self.expected_data["unit"],
                value=13.37,
            ),
            Measurement(
                name=self.expected_data["probe_id"],
                host="serv2.hostname",
                resource_id="serv2.hostname",
                resource_metadata={
                    "epoch": "1438701345703",
                    "host": "serv2.hostname",
                    "title": self.expected_data["title"]
                },
                timestamp="2015-08-04T15:15:45.703542+00:00",
                type_=self.expected_data["type"],
                unit=self.expected_data["unit"],
                value=13.37,
            ),
            Measurement(
                name=self.expected_data["probe_id"],
                host="serv3.hostname",
                resource_id="serv3.hostname",
                resource_metadata={
                    "epoch": "1438701345703",
                    "host": "serv3.hostname",
                    "title": self.expected_data["title"]
                },
                timestamp="2015-08-04T15:15:45.703542+00:00",
                type_=self.expected_data["type"],
                unit=self.expected_data["unit"],
                value=13.37,
            ),
        ]

        pulled_data = data_puller.do_pull()

        self.assertEqual(data_puller.title, self.expected_data["title"])
        self.assertEqual(data_puller.probe_id, self.expected_data["probe_id"])
        self.assertEqual(data_puller.interval, self.expected_data["interval"])
        self.assertEqual(data_puller.unit, self.expected_data["unit"])
        self.assertEqual(data_puller.type, self.expected_data["type"])
        self.assertEqual(
            [measurement.as_dict() for measurement in pulled_data],
            [measurement.as_dict() for measurement in expected_measurements],
        )
Exemple #11
0
class TestDiskDrivers(BaseTestCase):

    fake_statvfs = statvfs_result((
        4096,  # bsize
        4096,  # frsize
        236216421,  # blocks
        231166945,  # bfree
        219162081,  # bavail
        60006400,  # files
        59315784,  # ffree
        59315784,  # favail
        4096,  # flag
        255,  # namemax
    ))

    scenarios = (
        ("disk.DiskTotalSpacePuller", {
            "puller_factory": disk.DiskTotalSpacePuller,
            "disk_patch": patch.object(
                os, "statvfs", Mock(return_value=fake_statvfs)),
            "expected_data": Measurement(
                name="compute.node.disk.total",
                timestamp="2015-08-04T15:15:45.703542+00:00",
                unit="bytes",
                type_="gauge",
                value=4096 * 236216421,
                resource_id="test_node",
                host="test_node",
                resource_metadata={
                    "host": "test_node",
                    "title": "disk_total"
                }
            )
        }),
        ("disk.DiskFreeSpacePuller", {
            "puller_factory": disk.DiskFreeSpacePuller,
            "disk_patch": patch.object(
                os, "statvfs", Mock(return_value=fake_statvfs)),
            "expected_data": Measurement(
                name="compute.node.disk.free",
                timestamp="2015-08-04T15:15:45.703542+00:00",
                unit="bytes",
                type_="gauge",
                value=4096 * 219162081,
                resource_id="test_node",
                host="test_node",
                resource_metadata={
                    "host": "test_node",
                    "title": "disk_free"
                }
            )
        }),
        ("disk.DiskUsedSpacePuller", {
            "puller_factory": disk.DiskUsedSpacePuller,
            "disk_patch": patch.object(
                os, "statvfs", Mock(return_value=fake_statvfs)),
            "expected_data": Measurement(
                name="compute.node.disk.used",
                timestamp="2015-08-04T15:15:45.703542+00:00",
                unit="bytes",
                type_="gauge",
                value=(236216421 - 231166945) * 4096,
                resource_id="test_node",
                host="test_node",
                resource_metadata={
                    "host": "test_node",
                    "title": "disk_used"
                }
            )
        }),
    )

    @freeze_time("2015-08-04T15:15:45.703542+00:00")
    @patch.object(platform, "node", Mock(return_value="test_node"))
    def test_disk(self):
        data_puller = self.puller_factory(
            self.puller_factory.get_name(),
            self.puller_factory.get_default_probe_id(),
            self.puller_factory.get_default_interval(),
        )

        with self.disk_patch:
            pulled_data = data_puller.do_pull()

        self.assertEqual(
            [measurement.as_dict() for measurement in pulled_data],
            [self.expected_data.as_dict()]
        )