Skip to content

Commit 42068e7

Browse files
committed
Add new endpoints (alarms and allmetrics)
1 parent fb5987c commit 42068e7

File tree

1 file changed

+55
-10
lines changed

1 file changed

+55
-10
lines changed

netdata/__init__.py

Lines changed: 55 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,43 @@
1313
from . import exceptions
1414

1515
_LOGGER = logging.getLogger(__name__)
16-
_RESOURCE = 'http://{host}:{port}/api/v{api}/data?chart={resource}&{realtime}'
17-
_REALTIME = 'before=0&after=-1&options=seconds'
16+
_INSTANCE = 'http://{host}:{port}/api/v{api}/'
17+
_DATA_ENDPOINT = 'data?chart={resource}&before=0&after=-1&options=seconds'
18+
_ALARMS_ENDPOINT = 'alarms?all&format=json'
19+
_ALL_METRIC_ENDPOINT = ('allmetrics?format=json&help=no&types=no&'
20+
'timestamps=yes&names=yes&data=average')
1821

1922
API_VERSION = 1
2023

2124

2225
class Netdata(object):
2326
"""A class for handling connections with a Netdata instance."""
2427

25-
def __init__(self, host, resource, loop, session, port=19999):
28+
def __init__(self, host, loop, session, port=19999, data=None):
2629
"""Initialize the connection to the Netdata instance."""
2730
self._loop = loop
2831
self._session = session
2932
self.host = host
3033
self.port = port
31-
self.resource = resource
32-
self.values = None
34+
self.values = self.alarms = self.metrics = None
35+
self.base_url = _INSTANCE.format(host=host, port=port, api=API_VERSION)
36+
if data is None:
37+
self.endpoint = _ALL_METRIC_ENDPOINT
38+
if data == 'alarms':
39+
self.endpoint = _ALARMS_ENDPOINT
40+
if data == 'data':
41+
self.endpoint = _DATA_ENDPOINT
3342

34-
async def async_get_data(self):
35-
url = _RESOURCE.format(
36-
host=self.host, port=self.port, api=API_VERSION,
37-
resource=self.resource, realtime=_REALTIME)
43+
async def get_data(self, resource):
44+
"""Get detail for a resource from the data endpoint."""
45+
url = '{}{}'.format(
46+
self.base_url, self.endpoint.format(resource=resource))
3847

3948
try:
4049
with async_timeout.timeout(5, loop=self._loop):
4150
response = await self._session.get(url)
4251

43-
_LOGGER.debug(
52+
_LOGGER.info(
4453
"Response from Netdata: %s", response.status)
4554
data = await response.json()
4655
_LOGGER.debug(data)
@@ -50,3 +59,39 @@ async def async_get_data(self):
5059
except (asyncio.TimeoutError, aiohttp.ClientError, socket.gaierror):
5160
_LOGGER.error("Can not load data from Netdata")
5261
raise exceptions.NetdataConnectionError()
62+
63+
async def get_alarms(self):
64+
"""Get alarms for a Netdata instance."""
65+
url = '{}{}'.format(self.base_url, self.endpoint)
66+
67+
try:
68+
with async_timeout.timeout(5, loop=self._loop):
69+
response = await self._session.get(url)
70+
71+
_LOGGER.debug(
72+
"Response from Netdata: %s", response.status)
73+
data = await response.text()
74+
_LOGGER.debug(data)
75+
self.alarms = data
76+
77+
except (asyncio.TimeoutError, aiohttp.ClientError, socket.gaierror):
78+
_LOGGER.error("Can not load data from Netdata")
79+
raise exceptions.NetdataConnectionError()
80+
81+
async def get_allmetrics(self):
82+
"""Get all available metrics from a Netdata instance."""
83+
url = '{}{}'.format(self.base_url, self.endpoint)
84+
85+
try:
86+
with async_timeout.timeout(5, loop=self._loop):
87+
response = await self._session.get(url)
88+
89+
_LOGGER.debug(
90+
"Response from Netdata: %s", response.status)
91+
data = await response.json()
92+
_LOGGER.debug(data)
93+
self.metrics = data
94+
95+
except (asyncio.TimeoutError, aiohttp.ClientError, socket.gaierror):
96+
_LOGGER.error("Can not load data from Netdata")
97+
raise exceptions.NetdataConnectionError()

0 commit comments

Comments
 (0)