nvidia_smi: handle `N/A` values (#4893)
Ilya Mashchenko committed
Dec 2, 2018 at 03:17 UTC
376bd7de8f8a716e40fa4d922588afe926bb0191
1 file changed
+15
-1
collectors/python.d.plugin/nvidia_smi/nvidia_smi.chart.py
+15
-1
@@ -15,6 +15,8 @@ disabled_by_default = True
15
16
NVIDIA_SMI = 'nvidia-smi'
17
18
+BAD_VALUE = 'N/A'
19
+
20
EMPTY_ROW = ''
21
EMPTY_ROW_LIMIT = 500
22
POLLER_BREAK_ROW = '</nvidia_smi_log>'
@@ -206,6 +208,15 @@ def handle_attr_error(method):
208
return on_call
209
210
211
+def handle_value_error(method):
212
+ def on_call(*args, **kwargs):
213
+ try:
214
+ return method(*args, **kwargs)
215
+ except ValueError:
216
+ return None
217
+ return on_call
218
+
219
+
220
class GPU:
221
def __init__(self, num, root):
222
self.num = num
@@ -272,6 +283,7 @@ class GPU:
283
def mem_clock(self):
284
return self.root.find('clocks').find('mem_clock').text.split()[0]
285
286
+ @handle_value_error
287
@handle_attr_error
288
def power_draw(self):
289
return float(self.root.find('power_readings').find('power_draw').text.split()[0]) * 100
@@ -294,7 +306,9 @@ class GPU:
306
'power_draw': self.power_draw(),
307
}
308
297
- return dict(('gpu{0}_{1}'.format(self.num, k), v) for k, v in data.items() if v is not None)
309
+ return dict(
310
+ ('gpu{0}_{1}'.format(self.num, k), v) for k, v in data.items() if v is not None and v != BAD_VALUE
311
+ )
312
313
314
class Service(SimpleService):