Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions nodescraper/plugins/inband/bios/bios_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,11 @@ def analyze_data(
self.result.status = ExecutionStatus.OK
return self.result

self.result.message = (
f"Bios data mismatch! Expected {args.exp_bios_version}, actual: {data.bios_version}"
)
self.result.message = "Bios data mismatch!"
self.result.status = ExecutionStatus.ERROR
self._log_event(
category=EventCategory.BIOS,
description=f"{self.result.message}, Actual: {data.bios_version}",
description=f"Bios data mismatch! Expected {args.exp_bios_version}, actual: {data.bios_version}",
data={
"actual_bios_version": data.bios_version,
"expected_bios_version": args.exp_bios_version,
Expand Down
4 changes: 2 additions & 2 deletions nodescraper/plugins/inband/cmdline/cmdline_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,11 +167,11 @@ def analyze_data(
self.result.status = ExecutionStatus.OK
return self.result

self.result.message = f"Illegal kernel cmdline, found_banned: {found_banned}, missing required: {missing_required}"
self.result.message = "Illegal kernel cmdline"
self.result.status = ExecutionStatus.ERROR
self._log_event(
category=EventCategory.OS,
description=self.result.message,
description=f"Illegal kernel cmdline, found_banned: {found_banned}, missing required: {missing_required}",
priority=EventPriority.CRITICAL,
console_log=True,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,12 +64,11 @@ def analyze_data(
for check, accepted_counts in checks.items():
actual_count = getattr(data, check)
if actual_count not in accepted_counts:
message = f"Expected {check} in {accepted_counts}, but got {actual_count}. "
self.result.message += message
self.result.message = "Device Enumeration mismatch"
self.result.status = ExecutionStatus.ERROR
self._log_event(
category=EventCategory.PLATFORM,
description=message,
description=f"Expected {check} in {accepted_counts}, but got {actual_count}",
data={check: actual_count},
priority=EventPriority.CRITICAL,
console_log=True,
Expand Down
6 changes: 2 additions & 4 deletions nodescraper/plugins/inband/kernel/kernel_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,11 @@ def analyze_data(
self.result.status = ExecutionStatus.OK
return self.result

self.result.message = (
f"Kernel mismatch! Expected: {args.exp_kernel}, actual: {data.kernel_version}"
)
self.result.message = "Kernel mismatch!"
self.result.status = ExecutionStatus.ERROR
self._log_event(
category=EventCategory.OS,
description=f"{self.result.message}",
description=f"Kernel mismatch! Expected: {args.exp_kernel}, actual: {data.kernel_version}",
data={"expected": args.exp_kernel, "actual": data.kernel_version},
priority=EventPriority.CRITICAL,
console_log=True,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,20 +146,18 @@ def analyze_data(
except re.error:
self._log_event(
category=EventCategory.RUNTIME,
description="KernelModule regex is invalid",
description=f"KernelModule regex is invalid. Regex: {args.regex_filter}",
data={"regex_filters": {args.regex_filter}},
priority=EventPriority.ERROR,
)
self.result.message = (
f"Kernel modules failed to match regex. Regex: {args.regex_filter}"
)
self.result.message = "Kernel modules failed to match regex"
self.result.status = ExecutionStatus.ERROR
return self.result

if unmatched_pattern:
self._log_event(
category=EventCategory.RUNTIME,
description="KernelModules did not match all patterns",
description=f"KernelModules did not match all patterns. Unmatched patterns: {unmatched_pattern}",
data={"unmatched_pattern: ": unmatched_pattern},
priority=EventPriority.INFO,
)
Expand All @@ -184,23 +182,23 @@ def analyze_data(
if not filtered_modules and not_matched:
self._log_event(
category=EventCategory.RUNTIME,
description="KernelModules: no modules matched",
description=f"KernelModules: no modules matched. Not matched: {not_matched}",
data=args.kernel_modules,
priority=EventPriority.ERROR,
)
self.result.message = f"Kernel modules not matched: {not_matched}"
self.result.message = f"Kernel modules not matched. Not matched: {not_matched}"
self.result.status = ExecutionStatus.ERROR
return self.result
# some modules matched
elif filtered_modules and not_matched:

self._log_event(
category=EventCategory.RUNTIME,
description="KernelModules: not all modules matched",
description=f"KernelModules: not all modules matched. Not matched: {not_matched}",
data=not_matched,
priority=EventPriority.ERROR,
)
self.result.message = f"Kernel modules not matched: {not_matched}"
self.result.message = f"Kernel modules not matched. Not matched: {not_matched}"
self.result.status = ExecutionStatus.ERROR
return self.result
else:
Expand Down
8 changes: 2 additions & 6 deletions nodescraper/plugins/inband/memory/memory_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,15 +83,11 @@ def _bytes_to_gb(n: float) -> float:
)
self.result.status = ExecutionStatus.OK
else:
self.result.message = (
f"Memory usage exceeded max allowed! Used {used_gb:.2f} GB, "
f"max allowed {allowed_gb:.2f} GB "
f"(base={base_source} {base_gb:.2f} GB × ratio={args.ratio:.2f})"
)
self.result.message = "Memory usage exceeded max allowed!"
self.result.status = ExecutionStatus.ERROR
self._log_event(
category=EventCategory.OS,
description=self.result.message,
description=f"Memory usage exceeded max allowed! Used {used_gb:.2f} GB, max allowed {allowed_gb:.2f} GB (base={base_source} {base_gb:.2f} GB × ratio={args.ratio:.2f})",
priority=EventPriority.CRITICAL,
data={
"used_memory": used_memory,
Expand Down
4 changes: 2 additions & 2 deletions nodescraper/plugins/inband/os/os_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,11 @@ def analyze_data(self, data: OsDataModel, args: Optional[OsAnalyzerArgs] = None)
self.result.status = ExecutionStatus.OK
return self.result

self.result.message = f"OS name mismatch! Expected: {args.exp_os}, actual: {data.os_name}"
self.result.message = "OS name mismatch!"
self.result.status = ExecutionStatus.ERROR
self._log_event(
category=EventCategory.OS,
description=f"{self.result.message}",
description=f"OS name mismatch! Expected: {args.exp_os}, actual: {data.os_name}",
data={"expected": args.exp_os, "actual": data.os_name},
priority=EventPriority.CRITICAL,
console_log=True,
Expand Down
4 changes: 2 additions & 2 deletions nodescraper/plugins/inband/package/package_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ def analyze_data(

total_errors = len(not_found_keys) + len(regex_errors) + len(version_mismatches)
if total_errors > 0:
self.result.message = f"{'; '.join(error_parts)}"
self.result.message = "Package version mismatch"
self.result.status = ExecutionStatus.ERROR
else:
self.result.message = "All packages found and versions matched"
Expand All @@ -247,7 +247,7 @@ def analyze_data(
data.version_info, args.exp_package_ver
)
if not_found_match or not_found_version:
self.result.message = f"Package version missmatched. Missmatched versions: {not_found_match}, not found versions: {not_found_version}"
self.result.message = "Package version mismatch"
self.result.status = ExecutionStatus.ERROR

return self.result
16 changes: 7 additions & 9 deletions nodescraper/plugins/inband/process/process_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,14 +55,12 @@ def analyze_data(
if not args:
args = ProcessAnalyzerArgs()

err_messages = []
has_errors = False
if data.kfd_process is not None and data.kfd_process > args.max_kfd_processes:
err_messages.append(
f"Kfd processes {data.kfd_process} exeed max limit {args.max_kfd_processes}"
)
has_errors = True
self._log_event(
category=EventCategory.OS,
description="Kfd processes exceed maximum limit",
description=f"Kfd processes {data.kfd_process} exeed max limit {args.max_kfd_processes}",
data={
"kfd_process": data.kfd_process,
"kfd_process_limit": args.max_kfd_processes,
Expand All @@ -72,10 +70,10 @@ def analyze_data(
)

if data.cpu_usage is not None and data.cpu_usage > args.max_cpu_usage:
err_messages.append(f"CPU usage {data.cpu_usage} exceeds limit {args.max_cpu_usage}")
has_errors = True
self._log_event(
category=EventCategory.OS,
description="CPU usage exceeds maximum limit",
description=f"CPU usage {data.cpu_usage} exceeds limit {args.max_cpu_usage}",
data={
"cpu_usage": data.cpu_usage,
"cpu_usage_limit": args.max_cpu_usage,
Expand All @@ -84,8 +82,8 @@ def analyze_data(
console_log=True,
)

if err_messages:
if has_errors:
self.result.status = ExecutionStatus.ERROR
self.result.message = ". ".join(err_messages)
self.result.message = "Process limits exceeded"

return self.result
10 changes: 4 additions & 6 deletions nodescraper/plugins/inband/rocm/rocm_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,13 +64,11 @@ def analyze_data(
break
else:
# No matching version found
self.result.message = (
f"ROCm version mismatch! Expected: {args.exp_rocm}, actual: {data.rocm_version}"
)
self.result.message = "ROCm version mismatch!"
self.result.status = ExecutionStatus.ERROR
self._log_event(
category=EventCategory.SW_DRIVER,
description=f"{self.result.message}",
description=f"ROCm version mismatch! Expected: {args.exp_rocm}, actual: {data.rocm_version}",
data={"expected": args.exp_rocm, "actual": data.rocm_version},
priority=EventPriority.CRITICAL,
console_log=True,
Expand All @@ -80,11 +78,11 @@ def analyze_data(
# validate rocm_latest if provided in args
if args.exp_rocm_latest:
if data.rocm_latest_versioned_path != args.exp_rocm_latest:
self.result.message = f"ROCm latest path mismatch! Expected: {args.exp_rocm_latest}, actual: {data.rocm_latest_versioned_path}"
self.result.message = "ROCm latest path mismatch!"
self.result.status = ExecutionStatus.ERROR
self._log_event(
category=EventCategory.SW_DRIVER,
description=f"{self.result.message}",
description=f"ROCm latest path mismatch! Expected: {args.exp_rocm_latest}, actual: {data.rocm_latest_versioned_path}",
data={
"expected": args.exp_rocm_latest,
"actual": data.rocm_latest_versioned_path,
Expand Down
4 changes: 2 additions & 2 deletions nodescraper/resultcollators/tablesummary.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def render_physical_row(parts: list[str]) -> str:
table = gen_str_table(
["Connection", "Status", "Message"],
conn_rows,
max_widths={"Connection": 32, "Status": 16, "Message": 80},
max_widths={"Connection": 32, "Status": 20, "Message": 80},
)
tables += f"\n\n{table}"

Expand All @@ -151,7 +151,7 @@ def render_physical_row(parts: list[str]) -> str:
table = gen_str_table(
["Plugin", "Status", "Message"],
plug_rows,
max_widths={"Plugin": 32, "Status": 16, "Message": 80},
max_widths={"Plugin": 32, "Status": 20, "Message": 80},
)
tables += f"\n\n{table}"

Expand Down
5 changes: 4 additions & 1 deletion test/unit/plugin/test_kernel_module_analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,10 @@ def test_analyze_data_regex_unmatched_patterns(data_model, analyzer):
args = KernelModuleAnalyzerArgs(regex_filter=["modA", "nope"])
result = analyzer.analyze_data(data_model, args)
assert result.status == ExecutionStatus.ERROR
assert any(ev.description == "KernelModules did not match all patterns" for ev in result.events)
assert any(
ev.description.startswith("KernelModules did not match all patterns")
for ev in result.events
)


def test_analyze_data_name_only_success(data_model, analyzer):
Expand Down