netdata_interface.py
Go to the documentation of this file.
1 import rospy
2 import requests
3 import numpy
4 
5 
7  def __init__(self, base_url="http://127.0.0.1:19999/api/v1"):
8  """Create a new NetData interface.
9 
10  :param base_url: Base URL of the NetData interface
11  """
12  self._base_url = base_url
14 
15  def _request_data(self, url):
16  res = requests.get(url)
17 
18  if res.status_code != 200:
19  msg = "NetData request not successful (url='{}', status_code={})".format(
20  url, res.status_code
21  )
22  raise requests.ConnectionError(msg)
23 
24  return res.json()
25 
26  def _reset_failed_counter(self, chart, label):
27  """Reset the failed counter for given label in chart.
28 
29  :param chart: Chart
30  :param label: Label
31  """
32  if chart not in self._failed_counter_dict:
33  self._failed_counter_dict[chart] = {}
34 
35  self._failed_counter_dict[chart][label] = 0
36 
37  def _increase_failed_counter(self, chart, label):
38  """Increase the failed counter for given label in chart.
39 
40  Throws an exception if failed counter is greater or equal 5.
41 
42  :param chart: Chart
43  :param label: Label
44  """
45  if chart not in self._failed_counter_dict:
46  self._failed_counter_dict[chart] = {}
47 
48  if label not in self._failed_counter_dict[chart]:
49  self._failed_counter_dict[chart][label] = 1
50  else:
51  self._failed_counter_dict[chart][label] += 1
52 
53  if self._failed_counter_dict[chart][label] >= 5:
54  raise Exception(
55  "Data from NetData was malformed {} times (chart='{}', label='{}')".format(
56  self._failed_counter_dict[chart][label], chart, label
57  )
58  )
59 
60  def query_netdata_info(self):
61  """Get NetData information."""
62  url = "{}/info".format(self._base_url)
63  res = self._request_data(url)
64 
65  return res
66 
67  def query_netdata(self, chart, after):
68  """Get data from NetData chart after a certain time.
69 
70  :param chart: Chart identifier
71  :param after: Timedelta in seconds
72  """
73  url = "{}/data?chart={}&format=json&after=-{}".format(
74  self._base_url, chart, after
75  )
76  res = self._request_data(url)
77 
78  sdata = list(zip(*res["data"]))
79  data = dict()
80 
81  for idx, label in enumerate(res["labels"]):
82  np_array = numpy.array(sdata[idx])
83  if np_array.dtype == object or (np_array == None).any():
84  msg = "Data from NetData malformed: {}".format(label)
85  rospy.logwarn(msg)
86  rospy.logwarn(
87  "... malformed data for Label <{}>: {}".format(label, np_array)
88  )
89  self._increase_failed_counter(chart, label)
90  return None, msg
91  data[label] = np_array
92  self._reset_failed_counter(chart, label)
93 
94  return data, None
netdata_interface.netdata_interface.NetdataInterface._increase_failed_counter
def _increase_failed_counter(self, chart, label)
Definition: netdata_interface.py:37
netdata_interface.netdata_interface.NetdataInterface._base_url
_base_url
Definition: netdata_interface.py:12
netdata_interface.netdata_interface.NetdataInterface
Definition: netdata_interface.py:6
netdata_interface.netdata_interface.NetdataInterface._failed_counter_dict
_failed_counter_dict
Definition: netdata_interface.py:13
netdata_interface.netdata_interface.NetdataInterface.__init__
def __init__(self, base_url="http://127.0.0.1:19999/api/v1")
Definition: netdata_interface.py:7
netdata_interface.netdata_interface.NetdataInterface.query_netdata
def query_netdata(self, chart, after)
Definition: netdata_interface.py:67
netdata_interface.netdata_interface.NetdataInterface._reset_failed_counter
def _reset_failed_counter(self, chart, label)
Definition: netdata_interface.py:26
netdata_interface.netdata_interface.NetdataInterface.query_netdata_info
def query_netdata_info(self)
Definition: netdata_interface.py:60
netdata_interface.netdata_interface.NetdataInterface._request_data
def _request_data(self, url)
Definition: netdata_interface.py:15


cob_monitoring
Author(s): Florian Weisshardt , Felix Messmer
autogenerated on Fri Aug 2 2024 09:45:52