From ae82cdee06e9a3861e843881a12d61a4b77ac80a Mon Sep 17 00:00:00 2001
From: "Isaac I.Y. Saito" <130s@2000.jukuin.keio.ac.jp>
Date: Wed, 22 Feb 2023 07:13:34 -0500
Subject: [PATCH] Fix failing import in test (See CI failure
https://github.com/kinu-garage/linux_peripheral_interfaces/actions/runs/4242516401/jobs/7374123303#step:4:480)
Fix failing test (https://github.com/kinu-garage/linux_peripheral_interfaces/actions/runs/4261908716/jobs/7416781435)
---
computer_hw/package.xml | 1 +
.../computer_hw/nvidia_temperature_monitor.py | 29 +++++++++++--------
computer_hw/test/parse_test.py | 15 ++++++----
3 files changed, 27 insertions(+), 18 deletions(-)
diff --git a/computer_hw/package.xml b/computer_hw/package.xml
index 8e08d7f..af9340b 100644
--- a/computer_hw/package.xml
+++ b/computer_hw/package.xml
@@ -21,5 +21,6 @@
diagnostic_aggregator
libsensors_monitor
rospy
+ roslib
diff --git a/computer_hw/src/computer_hw/nvidia_temperature_monitor.py b/computer_hw/src/computer_hw/nvidia_temperature_monitor.py
index 72f1eff..0f4e8f8 100644
--- a/computer_hw/src/computer_hw/nvidia_temperature_monitor.py
+++ b/computer_hw/src/computer_hw/nvidia_temperature_monitor.py
@@ -34,7 +34,7 @@
from diagnostic_msgs.msg import DiagnosticArray, DiagnosticStatus, KeyValue
import rospy
-from computer_hw.gpu_util import Nvidia_GPU_Stat
+from computer_hw.gpu_util import GPUStatusHandler
class NVidiaTempMonitor(object):
@@ -111,33 +111,38 @@ def pub_status(self):
def parse_smi_output(output):
gpu_stat = GPUStatus()
- gpu_stat.product_name = _find_val(output, 'Product Name')
- gpu_stat.pci_device_id = _find_val(output, 'PCI Device/Vendor ID')
- gpu_stat.pci_location = _find_val(output, 'PCI Location ID')
- gpu_stat.display = _find_val(output, 'Display')
- gpu_stat.driver_version = _find_val(output, 'Driver Version')
+ gpu_stat.product_name = GPUStatusHandler._find_val(output, 'Product Name')
+ gpu_stat.pci_device_id = GPUStatusHandler._find_val(output, 'PCI Device/Vendor ID')
+ gpu_stat.pci_location = GPUStatusHandler._find_val(output, 'PCI Location ID')
+ gpu_stat.display = GPUStatusHandler._find_val(output, 'Display')
+ gpu_stat.driver_version = GPUStatusHandler._find_val(output, 'Driver Version')
TEMPERATURE_QUERIES = ["Temperature", "GPU Current Temp"]
for query in TEMPERATURE_QUERIES:
- temp_str = _find_val(output, query)
+ temp_str = GPUStatusHandler._find_val(output, query)
if temp_str:
- temp, units = temp_str.split()
+ try:
+ temp, units = temp_str.split()
+ except ValueError as e:
+ # Not sure but there seems to be a case where a single ,
+ # non-splittable value gets returned.
+ temp = temp_str.split()
gpu_stat.temperature = int(temp)
break
- fan_str = _find_val(output, 'Fan Speed')
+ fan_str = GPUStatusHandler._find_val(output, 'Fan Speed')
if fan_str:
# Fan speed in RPM
- fan_spd = float(fan_str.strip('\%').strip()) * 0.01 * MAX_FAN_RPM
+ fan_spd = float(fan_str.strip('\%').strip()) * 0.01 * GPUStatusHandler.MAX_FAN_RPM
# Convert fan speed to Hz
gpu_stat.fan_speed = _rpm_to_rads(fan_spd)
- usage_str = _find_val(output, 'GPU')
+ usage_str = GPUStatusHandler._find_val(output, 'GPU')
if usage_str:
usage = usage_str.strip('\%').strip()
gpu_stat.gpu_usage = int(usage)
- mem_str = _find_val(output, 'Memory')
+ mem_str = GPUStatusHandler._find_val(output, 'Memory')
if mem_str:
mem = mem_str.strip('\%').strip()
gpu_stat.memory_usage = int(mem)
diff --git a/computer_hw/test/parse_test.py b/computer_hw/test/parse_test.py
index 5c8258a..a79b93a 100755
--- a/computer_hw/test/parse_test.py
+++ b/computer_hw/test/parse_test.py
@@ -42,7 +42,10 @@
import sys
import unittest
+import roslib
+
import computer_hw
+from computer_hw.nvidia_temperature_monitor import NVidiaTempMonitor, parse_smi_output
TEXT_PATH = 'test/sample_output/nvidia_smi_out_2021.txt'
TEXT_HIGH_TEMP_PATH = 'test/sample_output/nvidia_smi_high_temp.txt'
@@ -58,7 +61,7 @@ def setUp(self):
self.high_temp_data = f.read()
def test_parse(self):
- gpu_stat = computer_hw.parse_smi_output(self.data)
+ gpu_stat = parse_smi_output(self.data)
# Check valid
self.assert_(self.data, "Unable to read sample output, no test to run")
@@ -73,12 +76,12 @@ def test_parse(self):
self.assert_(gpu_stat.temperature > 40 and gpu_stat.temperature < 90, "Invalid temperature readings. Temperature: %d" % gpu_stat.temperature)
self.assert_(gpu_stat.fan_speed > 0 and gpu_stat.fan_speed < 471, "Invalid fan speed readings. Fan Speed %f" % gpu_stat.fan_speed)
- diag_stat = computer_hw.gpu_status_to_diag(gpu_stat)
+ diag_stat = NVidiaTempMonitor.gpu_status_to_diag(gpu_stat)
self.assert_(diag_stat.level == 0, "Diagnostics reports an error for nominal input. Message: %s" % diag_stat.message)
def test_high_temp_parse(self):
- gpu_stat = computer_hw.parse_smi_output(self.high_temp_data)
+ gpu_stat = parse_smi_output(self.high_temp_data)
# Check valid
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):
self.assert_(gpu_stat.temperature > 90, "Invalid temperature readings. Temperature: %d" % gpu_stat.temperature)
self.assert_(gpu_stat.fan_speed > 0 and gpu_stat.fan_speed < 471, "Invalid fan speed readings. Fan Speed %s" % gpu_stat.fan_speed)
- diag_stat = computer_hw.gpu_status_to_diag(gpu_stat)
+ diag_stat = NVidiaTempMonitor.gpu_status_to_diag(gpu_stat)
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))
def test_empty_parse(self):
- gpu_stat = computer_hw.parse_smi_output('')
+ gpu_stat = parse_smi_output('')
self.assert_(gpu_stat.temperature == 0, "Invalid temperature reading. Should be 0. Reading: %d" % gpu_stat.temperature)
- diag_stat = computer_hw.gpu_status_to_diag(gpu_stat)
+ diag_stat = NVidiaTempMonitor.gpu_status_to_diag(gpu_stat)
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))