Skip to content

File tree

3 files changed

+24
-20
lines changed

3 files changed

+24
-20
lines changed

computer_hw/package.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@
2121
<exec_depend>diagnostic_aggregator</exec_depend>
2222
<exec_depend>libsensors_monitor</exec_depend>
2323
<exec_depend>rospy</exec_depend>
24+
<test_depend>roslib</test_depend>
2425

2526
</package>

computer_hw/src/computer_hw/nvidia_temperature_monitor.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
from diagnostic_msgs.msg import DiagnosticArray, DiagnosticStatus, KeyValue
3535
import rospy
3636

37-
from computer_hw.gpu_util import Nvidia_GPU_Stat
37+
from computer_hw.gpu_util import GPUStatusHandler
3838

3939

4040
class NVidiaTempMonitor(object):
@@ -55,7 +55,7 @@ def gpu_status_to_diag(gpu_stat):
5555
stat.values.append(KeyValue(key='Display', value = gpu_stat.display))
5656
stat.values.append(KeyValue(key='Driver Version', value = gpu_stat.driver_version))
5757
stat.values.append(KeyValue(key='Temperature (C)', value = '%.0f' % gpu_stat.temperature))
58-
stat.values.append(KeyValue(key='Fan Speed (RPM)', value = '%.0f' % _rads_to_rpm(gpu_stat.fan_speed)))
58+
stat.values.append(KeyValue(key='Fan Speed (RPM)', value = '%.0f' % GPUStatusHandler.rads_to_rpm(gpu_stat.fan_speed)))
5959
stat.values.append(KeyValue(key='Usage (%)', value = '%.0f' % gpu_stat.gpu_usage))
6060
stat.values.append(KeyValue(key='Memory (%)', value = '%.0f' % gpu_stat.memory_usage))
6161

@@ -111,33 +111,33 @@ def pub_status(self):
111111
def parse_smi_output(output):
112112
gpu_stat = GPUStatus()
113113

114-
gpu_stat.product_name = _find_val(output, 'Product Name')
115-
gpu_stat.pci_device_id = _find_val(output, 'PCI Device/Vendor ID')
116-
gpu_stat.pci_location = _find_val(output, 'PCI Location ID')
117-
gpu_stat.display = _find_val(output, 'Display')
118-
gpu_stat.driver_version = _find_val(output, 'Driver Version')
114+
gpu_stat.product_name = GPUStatusHandler._find_val(output, 'Product Name')
115+
gpu_stat.pci_device_id = GPUStatusHandler._find_val(output, 'PCI Device/Vendor ID')
116+
gpu_stat.pci_location = GPUStatusHandler._find_val(output, 'PCI Location ID')
117+
gpu_stat.display = GPUStatusHandler._find_val(output, 'Display')
118+
gpu_stat.driver_version = GPUStatusHandler._find_val(output, 'Driver Version')
119119

120120
TEMPERATURE_QUERIES = ["Temperature", "GPU Current Temp"]
121121
for query in TEMPERATURE_QUERIES:
122-
temp_str = _find_val(output, query)
122+
temp_str = GPUStatusHandler._find_val(output, query)
123123
if temp_str:
124-
temp, units = temp_str.split()
124+
temp = temp_str.split()[0]
125125
gpu_stat.temperature = int(temp)
126126
break
127127

128-
fan_str = _find_val(output, 'Fan Speed')
128+
fan_str = GPUStatusHandler._find_val(output, 'Fan Speed')
129129
if fan_str:
130130
# Fan speed in RPM
131-
fan_spd = float(fan_str.strip('\%').strip()) * 0.01 * MAX_FAN_RPM
131+
fan_spd = float(fan_str.strip('\%').strip()) * 0.01 * GPUStatusHandler._MAX_FAN_RPM
132132
# Convert fan speed to Hz
133-
gpu_stat.fan_speed = _rpm_to_rads(fan_spd)
133+
gpu_stat.fan_speed = GPUStatusHandler.rpm_to_rads(fan_spd)
134134

135-
usage_str = _find_val(output, 'GPU')
135+
usage_str = GPUStatusHandler._find_val(output, 'GPU')
136136
if usage_str:
137137
usage = usage_str.strip('\%').strip()
138138
gpu_stat.gpu_usage = int(usage)
139139

140-
mem_str = _find_val(output, 'Memory')
140+
mem_str = GPUStatusHandler._find_val(output, 'Memory')
141141
if mem_str:
142142
mem = mem_str.strip('\%').strip()
143143
gpu_stat.memory_usage = int(mem)

computer_hw/test/parse_test.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@
4242
import sys
4343
import unittest
4444

45+
import roslib
46+
4547
import computer_hw
48+
from computer_hw.nvidia_temperature_monitor import NVidiaTempMonitor, parse_smi_output
4649

4750
TEXT_PATH = 'test/sample_output/nvidia_smi_out_2021.txt'
4851
TEXT_HIGH_TEMP_PATH = 'test/sample_output/nvidia_smi_high_temp.txt'
@@ -58,7 +61,7 @@ def setUp(self):
5861
self.high_temp_data = f.read()
5962

6063
def test_parse(self):
61-
gpu_stat = computer_hw.parse_smi_output(self.data)
64+
gpu_stat = parse_smi_output(self.data)
6265

6366
# Check valid
6467
self.assert_(self.data, "Unable to read sample output, no test to run")
@@ -73,12 +76,12 @@ def test_parse(self):
7376
self.assert_(gpu_stat.temperature > 40 and gpu_stat.temperature < 90, "Invalid temperature readings. Temperature: %d" % gpu_stat.temperature)
7477
self.assert_(gpu_stat.fan_speed > 0 and gpu_stat.fan_speed < 471, "Invalid fan speed readings. Fan Speed %f" % gpu_stat.fan_speed)
7578

76-
diag_stat = computer_hw.gpu_status_to_diag(gpu_stat)
79+
diag_stat = NVidiaTempMonitor.gpu_status_to_diag(gpu_stat)
7780

7881
self.assert_(diag_stat.level == 0, "Diagnostics reports an error for nominal input. Message: %s" % diag_stat.message)
7982

8083
def test_high_temp_parse(self):
81-
gpu_stat = computer_hw.parse_smi_output(self.high_temp_data)
84+
gpu_stat = parse_smi_output(self.high_temp_data)
8285

8386
# Check valid
8487
self.assert_(self.high_temp_data, "Unable to read sample output, no test to run")
@@ -93,17 +96,17 @@ def test_high_temp_parse(self):
9396
self.assert_(gpu_stat.temperature > 90, "Invalid temperature readings. Temperature: %d" % gpu_stat.temperature)
9497
self.assert_(gpu_stat.fan_speed > 0 and gpu_stat.fan_speed < 471, "Invalid fan speed readings. Fan Speed %s" % gpu_stat.fan_speed)
9598

96-
diag_stat = computer_hw.gpu_status_to_diag(gpu_stat)
99+
diag_stat = NVidiaTempMonitor.gpu_status_to_diag(gpu_stat)
97100

98101
self.assert_(diag_stat.level == 1, "Diagnostics didn't report warning for high temp input. Level %d, Message: %s" % (diag_stat.level, diag_stat.message))
99102

100103

101104
def test_empty_parse(self):
102-
gpu_stat = computer_hw.parse_smi_output('')
105+
gpu_stat = parse_smi_output('')
103106

104107
self.assert_(gpu_stat.temperature == 0, "Invalid temperature reading. Should be 0. Reading: %d" % gpu_stat.temperature)
105108

106-
diag_stat = computer_hw.gpu_status_to_diag(gpu_stat)
109+
diag_stat = NVidiaTempMonitor.gpu_status_to_diag(gpu_stat)
107110

108111
self.assert_(diag_stat.level == 2, "Diagnostics didn't reports an error for empty input. Level: %d, Message: %s" % (diag_stat.level, diag_stat.message))
109112

0 commit comments

Comments
 (0)