Skip to content

Commit 83a20be

Browse files
committed
addressed reviews
1 parent 7ccd6d2 commit 83a20be

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

nodescraper/plugins/inband/nvme/nvme_collector.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
###############################################################################
2626
import os
2727
import re
28+
import traceback
2829

2930
from pydantic import ValidationError
3031

@@ -103,11 +104,11 @@ def collect_data(
103104
if all_device_data:
104105
try:
105106
nvme_data = NvmeDataModel(devices=all_device_data)
106-
except ValidationError as e:
107+
except ValidationError as exp:
107108
self._log_event(
108109
category=EventCategory.SW_DRIVER,
109110
description="Validation error while building NvmeDataModel",
110-
data={"error": str(e)},
111+
data={"errors": traceback.format_tb(exp.__traceback__)},
111112
priority=EventPriority.ERROR,
112113
)
113114
self.result.message = "NVMe data invalid format"
@@ -135,9 +136,19 @@ def collect_data(
135136

136137
def _get_nvme_devices(self) -> list[str]:
137138
nvme_devs = []
138-
for entry in os.listdir("/dev"):
139-
full_path = os.path.join("/dev", entry)
140139

141-
if re.fullmatch(r"nvme\d+$", entry) and os.path.exists(full_path):
142-
nvme_devs.append(full_path)
140+
res = self._run_sut_cmd("ls /dev", sudo=False)
141+
if res.exit_code != 0:
142+
self._log_event(
143+
category=EventCategory.SW_DRIVER,
144+
description="Failed to list /dev directory",
145+
data={"exit_code": res.exit_code, "stderr": res.stderr},
146+
priority=EventPriority.ERROR,
147+
)
148+
return []
149+
150+
for entry in res.stdout.strip().splitlines():
151+
if re.fullmatch(r"nvme\d+$", entry):
152+
nvme_devs.append(f"/dev/{entry}")
153+
143154
return nvme_devs

test/unit/plugin/test_nvme_collector.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,12 @@ def test_no_data_collected(collector):
104104
call.kwargs["priority"] == EventPriority.ERROR
105105
for call in collector._log_event.call_args_list
106106
)
107+
108+
109+
def test_get_nvme_devices_filters_partitions(collector):
110+
fake_ls_output = "\n".join(["nvme0", "nvme0n1", "nvme1", "nvme1n1", "sda", "loop0", "nvme2"])
111+
collector._run_sut_cmd.return_value = MagicMock(exit_code=0, stdout=fake_ls_output)
112+
113+
devices = collector._get_nvme_devices()
114+
115+
assert devices == ["/dev/nvme0", "/dev/nvme1", "/dev/nvme2"]

0 commit comments

Comments
 (0)