Esempio n. 1
0
async def main():
    """Get the data from a Netdata instance."""
    with aiohttp.ClientSession() as session:
        data = Netdata("localhost", loop, session, data="data")
        await data.get_data("system.cpu")

        print(json.dumps(data.values, indent=4, sort_keys=True))

        # Print the current value of the system's CPU
        print("CPU System:", round(data.values["system"], 2))

    with aiohttp.ClientSession() as session:
        data = Netdata("localhost", loop, session, data="alarms")
        await data.get_alarms()

        print(data.alarms)

    with aiohttp.ClientSession() as session:
        data = Netdata("localhost", loop, session)
        await data.get_allmetrics()

        print(data.metrics)

        # Print the current value for the system's CPU
        print(
            "CPU System:",
            round(data.metrics["system.cpu"]["dimensions"]["system"]["value"], 2),
        )
Esempio n. 2
0
async def test_info_valid(httpx_mock: HTTPXMock):
    """Test a valid response."""
    httpx_mock.add_response(json=RESPONSE_VALID)

    client = Netdata("localhost")
    await client.get_info()

    assert client.info.get("version") == "v1.31.0"
async def test_chart_valid(httpx_mock: HTTPXMock):
    """Test a valid response."""
    httpx_mock.add_response(json=RESPONSE_VALID)

    client = Netdata("localhost")
    await client.get_chart("system.cpu")

    assert client.values.get("system") == 6.015038
async def test_timeout(httpx_mock: HTTPXMock):
    """Test if the connection is hitting the timeout."""
    def raise_timeout(request):
        """Set the timeout for the requests."""
        raise httpx.ReadTimeout(
            f"Unable to read within {request.extensions['timeout']}",
            request=request)

    httpx_mock.add_callback(raise_timeout)

    with pytest.raises(httpx.ReadTimeout):
        client = Netdata("localhost")
        await client.get_info()
Esempio n. 5
0
async def main():
    """Get the data from a Netdata instance."""
    async with aiohttp.ClientSession() as session:
        data = Netdata("localhost", loop, session)
        # Get data for the CPU
        await data.get_data("system.cpu")
        print(json.dumps(data.values, indent=4, sort_keys=True))

        # Print the current value of the system's CPU
        print("CPU System:", round(data.values["system"], 2))

        # Get the alarms which are present
        await data.get_alarms()
        print(data.alarms)
Esempio n. 6
0
async def async_setup_platform(opp, config, async_add_entities, discovery_info=None):
    """Set up the Netdata sensor."""

    name = config.get(CONF_NAME)
    host = config.get(CONF_HOST)
    port = config.get(CONF_PORT)
    resources = config.get(CONF_RESOURCES)

    session = async_get_clientsession(opp)
    netdata = NetdataData(Netdata(host, opp.loop, session, port=port))
    await netdata.async_update()

    if netdata.api.metrics is None:
        raise PlatformNotReady

    dev = []
    for entry, data in resources.items():
        icon = data[CONF_ICON]
        sensor = data[CONF_DATA_GROUP]
        element = data[CONF_ELEMENT]
        invert = data[CONF_INVERT]
        sensor_name = entry
        try:
            resource_data = netdata.api.metrics[sensor]
            unit = (
                PERCENTAGE
                if resource_data["units"] == "percentage"
                else resource_data["units"]
            )
        except KeyError:
            _LOGGER.error("Sensor is not available: %s", sensor)
            continue

        dev.append(
            NetdataSensor(
                netdata, name, sensor, sensor_name, element, icon, unit, invert
            )
        )

    dev.append(NetdataAlarms(netdata, name, host, port))
    async_add_entities(dev, True)
Esempio n. 7
0
async def async_setup_platform(hass,
                               config,
                               async_add_devices,
                               discovery_info=None):
    """Set up the Netdata sensor."""
    from netdata import Netdata

    name = config.get(CONF_NAME)
    host = config.get(CONF_HOST)
    port = config.get(CONF_PORT)
    resources = config.get(CONF_RESOURCES)

    session = async_get_clientsession(hass)
    netdata = NetdataData(Netdata(host, hass.loop, session, port=port))
    await netdata.async_update()

    if netdata.api.metrics is None:
        raise PlatformNotReady

    dev = []
    for entry, data in resources.items():
        sensor = entry
        element = data[CONF_ELEMENT]
        sensor_name = icon = None
        try:
            resource_data = netdata.api.metrics[sensor]
            unit = '%' if resource_data['units'] == 'percentage' else \
                resource_data['units']
            if data is not None:
                sensor_name = data.get(CONF_NAME)
                icon = data.get(CONF_ICON)
        except KeyError:
            _LOGGER.error("Sensor is not available: %s", sensor)
            continue

        dev.append(
            NetdataSensor(netdata, name, sensor, sensor_name, element, icon,
                          unit))

    async_add_devices(dev, True)
Esempio n. 8
0
async def async_setup_platform(
    hass: HomeAssistant,
    config: ConfigType,
    async_add_entities: AddEntitiesCallback,
    discovery_info: DiscoveryInfoType | None = None,
) -> None:
    """Set up the Netdata sensor."""

    name = config[CONF_NAME]
    host = config[CONF_HOST]
    port = config[CONF_PORT]
    resources = config[CONF_RESOURCES]

    netdata = NetdataData(Netdata(host, port=port))
    await netdata.async_update()

    if netdata.api.metrics is None:
        raise PlatformNotReady

    dev: list[SensorEntity] = []
    for entry, data in resources.items():
        icon = data[CONF_ICON]
        sensor = data[CONF_DATA_GROUP]
        element = data[CONF_ELEMENT]
        invert = data[CONF_INVERT]
        sensor_name = entry
        try:
            resource_data = netdata.api.metrics[sensor]
            unit = (PERCENTAGE if resource_data["units"] == "percentage" else
                    resource_data["units"])
        except KeyError:
            _LOGGER.error("Sensor is not available: %s", sensor)
            continue

        dev.append(
            NetdataSensor(netdata, name, sensor, sensor_name, element, icon,
                          unit, invert))

    dev.append(NetdataAlarms(netdata, name, host, port))
    async_add_entities(dev, True)
async def main():
    """Get the data from a Netdata instance."""
    client = Netdata("localhost")

    # Get all metrics
    await client.get_info()
    print(client.info)

    # Get details of a available chart
    await client.get_chart("system.cpu")
    print(json.dumps(client.values, indent=4, sort_keys=True))

    # Print the current value of the system's CPU
    print("CPU System:", round(client.values["system"], 2))

    # Get the alarms which are present
    await client.get_alarms()
    print(client.alarms)

    # Get all metrics
    await client.get_allmetrics()
    print(client.metrics)