Skip to content

Commit fddcad9

Browse files
Merge pull request #39 from amd/alex_summary_update
summary.csv file update with details on failure
2 parents 6061785 + 622d7e4 commit fddcad9

20 files changed

+176
-57
lines changed

nodescraper/cli/helper.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,7 @@ def dump_results_to_csv(
456456
"message": res.message,
457457
}
458458
all_rows.append(row)
459+
459460
dump_to_csv(all_rows, filename, fieldnames, logger)
460461

461462

nodescraper/plugins/inband/bios/bios_analyzer.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ def analyze_data(
8080
self.result.status = ExecutionStatus.OK
8181
return self.result
8282

83-
self.result.message = "Bios data mismatch!"
83+
self.result.message = (
84+
f"Bios data mismatch! Expected {args.exp_bios_version}, actual: {data.bios_version}"
85+
)
8486
self.result.status = ExecutionStatus.ERROR
8587
self._log_event(
8688
category=EventCategory.BIOS,

nodescraper/plugins/inband/cmdline/cmdline_analyzer.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def _compare_cmdline(self, cmdline: str, required_cmdline: list, banned_cmdline:
7272
console_log=True,
7373
)
7474

75-
return not (missing_required or found_banned)
75+
return not (missing_required or found_banned), missing_required, found_banned
7676

7777
def analyze_data(
7878
self, data: CmdlineDataModel, args: Optional[CmdlineAnalyzerArgs] = None
@@ -93,12 +93,16 @@ def analyze_data(
9393
return self.result
9494

9595
# check if any of the cmdline defined in the list match the actual kernel cmdline
96-
if self._compare_cmdline(data.cmdline, args.required_cmdline, args.banned_cmdline):
96+
check, missing_required, found_banned = self._compare_cmdline(
97+
data.cmdline, args.required_cmdline, args.banned_cmdline
98+
)
99+
100+
if check:
97101
self.result.message = "Kernel cmdline matches expected"
98102
self.result.status = ExecutionStatus.OK
99103
return self.result
100104

101-
self.result.message = "Illegal kernel cmdline"
105+
self.result.message = f"Illegal kernel cmdline, found_banned: {found_banned}, missing required: {missing_required}"
102106
self.result.status = ExecutionStatus.ERROR
103107
self._log_event(
104108
category=EventCategory.OS,

nodescraper/plugins/inband/dkms/dkms_analyzer.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ def analyze_data(
6666

6767
error_state = False
6868

69+
actual_values = []
70+
expected_values = []
6971
for check, accepted_values in check_map.items():
7072
actual_value = getattr(data, check)
7173
for accepted_value in accepted_values:
@@ -84,6 +86,8 @@ def analyze_data(
8486
elif actual_value == accepted_value:
8587
break
8688
else:
89+
expected_values.append(accepted_values)
90+
actual_values.append(actual_value)
8791
self._log_event(
8892
category=EventCategory.SW_DRIVER,
8993
description=f"DKMS {check} has an unexpected value",
@@ -95,6 +99,8 @@ def analyze_data(
9599

96100
if error_state:
97101
self.result.status = ExecutionStatus.ERROR
98-
self.result.message = "DKMS data mismatch"
102+
self.result.message = (
103+
f"DKMS data mismatch. \nActual: {actual_values}.\nExpected: {expected_values}"
104+
)
99105

100106
return self.result

nodescraper/plugins/inband/kernel/kernel_analyzer.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ def analyze_data(
7777
self.result.status = ExecutionStatus.OK
7878
return self.result
7979

80-
self.result.message = "Kernel mismatch!"
80+
self.result.message = (
81+
f"Kernel mismatch! Expected: {args.exp_kernel}, actual: {data.kernel_version}"
82+
)
8183
self.result.status = ExecutionStatus.ERROR
8284
self._log_event(
8385
category=EventCategory.OS,

nodescraper/plugins/inband/kernel_module/kernel_module_analyzer.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,9 @@ def analyze_data(
150150
data={"regex_filters": {args.regex_filter}},
151151
priority=EventPriority.ERROR,
152152
)
153-
self.result.message = "Kernel modules failed to match regex"
153+
self.result.message = (
154+
f"Kernel modules failed to match regex. Regex: {args.regex_filter}"
155+
)
154156
self.result.status = ExecutionStatus.ERROR
155157
return self.result
156158

@@ -161,7 +163,7 @@ def analyze_data(
161163
data={"unmatched_pattern: ": unmatched_pattern},
162164
priority=EventPriority.INFO,
163165
)
164-
self.result.message = "Kernel modules failed to match every pattern"
166+
self.result.message = f"Kernel modules failed to match every pattern. Unmatched patterns: {unmatched_pattern}"
165167
self.result.status = ExecutionStatus.ERROR
166168
return self.result
167169

@@ -186,7 +188,7 @@ def analyze_data(
186188
data=args.kernel_modules,
187189
priority=EventPriority.ERROR,
188190
)
189-
self.result.message = "Kernel modules not matched"
191+
self.result.message = f"Kernel modules not matched: {not_matched}"
190192
self.result.status = ExecutionStatus.ERROR
191193
return self.result
192194
# some modules matched
@@ -198,7 +200,7 @@ def analyze_data(
198200
data=not_matched,
199201
priority=EventPriority.ERROR,
200202
)
201-
self.result.message = "Kernel modules not matched"
203+
self.result.message = f"Kernel modules not matched: {not_matched}"
202204
self.result.status = ExecutionStatus.ERROR
203205
return self.result
204206
else:

nodescraper/plugins/inband/memory/memory_analyzer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def analyze_data(
6767
self.result.message = "Memory usage is within maximum allowed used memory"
6868
self.result.status = ExecutionStatus.OK
6969
else:
70-
self.result.message = "Memory usage is more than the maximum allowed used memory!"
70+
self.result.message = f"Memory usage exceeded max allowed! Used: {used_memory}, max allowed: {max_allowed_used_mem}"
7171
self.result.status = ExecutionStatus.ERROR
7272
self._log_event(
7373
category=EventCategory.OS,

nodescraper/plugins/inband/os/os_analyzer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def analyze_data(self, data: OsDataModel, args: Optional[OsAnalyzerArgs] = None)
6161
self.result.status = ExecutionStatus.OK
6262
return self.result
6363

64-
self.result.message = "OS name mismatch!"
64+
self.result.message = f"OS name mismatch! Expected: {args.exp_os}, actual: {data.os_name}"
6565
self.result.status = ExecutionStatus.ERROR
6666
self._log_event(
6767
category=EventCategory.OS,

nodescraper/plugins/inband/package/package_analyzer.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ def package_regex_search(
8787
package_data (dict[str, str]): a dictionary of package names and versions
8888
exp_packge_data (dict[str, str | None]): a dictionary of expected package names and versions
8989
"""
90+
not_found_keys = []
9091
for exp_key, exp_value in exp_packge_data.items():
9192
try:
9293
if exp_value is not None:
@@ -109,6 +110,7 @@ def package_regex_search(
109110
key_found = self.regex_version_data(package_data, key_search, value_search)
110111

111112
if not key_found:
113+
not_found_keys.append(exp_key)
112114
self._log_event(
113115
EventCategory.APPLICATION,
114116
f"Package {exp_key} not found in the package list",
@@ -120,6 +122,7 @@ def package_regex_search(
120122
"found_version": None,
121123
},
122124
)
125+
return not_found_keys
123126

124127
def package_exact_match(
125128
self, package_data: dict[str, str], exp_packge_data: dict[str, str | None]
@@ -130,13 +133,16 @@ def package_exact_match(
130133
package_data (dict[str, str]): a dictionary of package names and versions
131134
exp_packge_data (dict[str, str | None]): a dictionary of expected package names and versions
132135
"""
136+
not_found_match = []
137+
not_found_version = []
133138
for exp_key, exp_value in exp_packge_data.items():
134139
self.logger.info(exp_key)
135140
version = package_data.get(exp_key)
136141
if exp_value is None:
137142
# allow any version when expected version is None
138143
if version is None:
139144
# package not found
145+
not_found_version.append((exp_key, version))
140146
self._log_event(
141147
EventCategory.APPLICATION,
142148
f"Package {exp_key} not found in the package list",
@@ -149,6 +155,7 @@ def package_exact_match(
149155
},
150156
)
151157
elif version != exp_value:
158+
not_found_match.append((exp_key, version))
152159
self._log_event(
153160
EventCategory.APPLICATION,
154161
f"Package {exp_key} Version Mismatch, Expected {exp_key} but found {version}",
@@ -160,6 +167,7 @@ def package_exact_match(
160167
"found_version": version,
161168
},
162169
)
170+
return not_found_match, not_found_version
163171

164172
def analyze_data(
165173
self, data: PackageDataModel, args: Optional[PackageAnalyzerArgs] = None
@@ -179,8 +187,15 @@ def analyze_data(
179187
return self.result
180188

181189
if args.regex_match:
182-
self.package_regex_search(data.version_info, args.exp_package_ver)
190+
not_found_keys = self.package_regex_search(data.version_info, args.exp_package_ver)
191+
self.result.message = f"Packages not found: {not_found_keys}"
192+
self.result.status = ExecutionStatus.ERROR
183193
else:
184-
self.package_exact_match(data.version_info, args.exp_package_ver)
194+
not_found_match, not_found_version = self.package_exact_match(
195+
data.version_info, args.exp_package_ver
196+
)
197+
if not_found_match or not_found_version:
198+
self.result.message = f"Package version missmatched. Missmatched versions: {not_found_match}, not found versions: {not_found_version}"
199+
self.result.status = ExecutionStatus.ERROR
185200

186201
return self.result

nodescraper/plugins/inband/process/process_analyzer.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
###############################################################################
2626
from typing import Optional
2727

28-
from nodescraper.enums import EventCategory, EventPriority
28+
from nodescraper.enums import EventCategory, EventPriority, ExecutionStatus
2929
from nodescraper.interfaces import DataAnalyzer
3030
from nodescraper.models import TaskResult
3131

@@ -55,10 +55,14 @@ def analyze_data(
5555
if not args:
5656
args = ProcessAnalyzerArgs()
5757

58-
if data.kfd_process and data.kfd_process > args.max_kfd_processes:
58+
err_messages = []
59+
if data.kfd_process is not None and data.kfd_process > args.max_kfd_processes:
60+
err_messages.append(
61+
f"Kfd processes {data.kfd_process} exeed max limit {args.max_kfd_processes}"
62+
)
5963
self._log_event(
6064
category=EventCategory.OS,
61-
description="Kfd processes exceeds maximum limit",
65+
description="Kfd processes exceed maximum limit",
6266
data={
6367
"kfd_process": data.kfd_process,
6468
"kfd_process_limit": args.max_kfd_processes,
@@ -67,16 +71,21 @@ def analyze_data(
6771
console_log=True,
6872
)
6973

70-
if data.cpu_usage and data.cpu_usage > args.max_cpu_usage:
74+
if data.cpu_usage is not None and data.cpu_usage > args.max_cpu_usage:
75+
err_messages.append(f"CPU usage {data.cpu_usage} exceeds limit {args.max_cpu_usage}")
7176
self._log_event(
7277
category=EventCategory.OS,
73-
description="Kfd processes exceeds maximum limit",
78+
description="CPU usage exceeds maximum limit",
7479
data={
75-
"kfd_process": data.kfd_process,
76-
"kfd_process_limit": args.max_kfd_processes,
80+
"cpu_usage": data.cpu_usage,
81+
"cpu_usage_limit": args.max_cpu_usage,
7782
},
7883
priority=EventPriority.CRITICAL,
7984
console_log=True,
8085
)
8186

87+
if err_messages:
88+
self.result.status = ExecutionStatus.ERROR
89+
self.result.message = ". ".join(err_messages)
90+
8291
return self.result

0 commit comments

Comments
 (0)