Skip to content

Commit c64323a

Browse files
committed
updates
1 parent afbe171 commit c64323a

File tree

5 files changed

+56
-46
lines changed

5 files changed

+56
-46
lines changed

nodescraper/cli/helper.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ def generate_reference_config(
302302
for obj in results:
303303
if obj.result_data.collection_result.status != ExecutionStatus.OK:
304304
logger.warning(
305-
"Plugin: %s result status is %, skipping",
305+
"Plugin: %s result status is %s, skipping",
306306
obj.source,
307307
obj.result_data.collection_result.status,
308308
)

nodescraper/plugins/inband/kernel_module/analyzer_args.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@
3131

3232

3333
class KernelModuleAnalyzerArgs(AnalyzerArgs):
34-
modules: dict = {}
35-
modules_filter: list[str] = ["amd", "Amd"]
36-
regex_match: bool = False
34+
kernel_modules: dict[str, dict] = {}
35+
modules_filter: list[str] = ["amd"]
36+
regex_match: bool = True
3737

3838
@classmethod
3939
def build_from_model(cls, datamodel: KernelModuleDataModel) -> "KernelModuleAnalyzerArgs":
@@ -45,4 +45,8 @@ def build_from_model(cls, datamodel: KernelModuleDataModel) -> "KernelModuleAnal
4545
Returns:
4646
KernelModuleAnalyzerArgs: instance of analyzer args class
4747
"""
48-
return cls(modules=datamodel.modules)
48+
return cls(
49+
kernel_modules=datamodel.kernel_modules,
50+
modules_filter=datamodel.modules_filter,
51+
regex_match=datamodel.regex_match,
52+
)

nodescraper/plugins/inband/kernel_module/kernel_module_analyzer.py

Lines changed: 45 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@
2323
# SOFTWARE.
2424
#
2525
###############################################################################
26+
import re
2627
from typing import Optional
2728

28-
from nodescraper.enums import ExecutionStatus
29+
from nodescraper.enums import EventCategory, EventPriority, ExecutionStatus
2930
from nodescraper.interfaces import DataAnalyzer
3031
from nodescraper.models import TaskResult
3132

@@ -38,55 +39,63 @@ class KernelModuleAnalyzer(DataAnalyzer[KernelModuleDataModel, KernelModuleAnaly
3839

3940
DATA_MODEL = KernelModuleDataModel
4041

42+
def filter_modules_by_pattern(
43+
self, modules: dict[str, dict], patterns: list[str]
44+
) -> dict[str, dict]:
45+
pattern_regex = re.compile("|".join(patterns), re.IGNORECASE)
46+
47+
return {name: data for name, data in modules.items() if pattern_regex.search(name)}
48+
49+
def filter_modules_by_name(
50+
self, modules: dict[str, dict], names: list[str] = None
51+
) -> dict[str, dict]:
52+
53+
if not names:
54+
return {name: data for name, data in modules.items()}
55+
56+
return {name: data for name, data in modules.items() if name in names}
57+
4158
def analyze_data(
4259
self, data: KernelModuleDataModel, args: Optional[KernelModuleAnalyzerArgs] = None
4360
) -> TaskResult:
44-
"""Analyze the kernel data against expected versions.
61+
"""Analyze the kernel modules and associated parameters.
4562
4663
Args:
4764
data (KernelModuleDataModel): KernelModule data to analyze.
48-
args (Optional[KernelModuleAnalyzerArgs], optional): KernelModule analysis arguments. Defaults to None.
65+
args (Optional[KernelModuleAnalyzerArgs], optional): KernelModule analyzer args.
4966
5067
Returns:
5168
TaskResult: Result of the analysis containing status and message.
5269
"""
5370
if not args:
54-
self.result.message = "Expected kernel not provided"
55-
self.result.status = ExecutionStatus.NOT_RAN
56-
return self.result
71+
args = KernelModuleAnalyzerArgs()
5772

58-
self.result = None
59-
60-
"""
61-
for kernel in args.exp_kernel:
62-
if args.regex_match:
63-
try:
64-
regex_data = re.compile(kernel)
65-
except re.error:
66-
self._log_event(
67-
category=EventCategory.RUNTIME,
68-
description="KernelModule regex is invalid",
69-
data={"regex": kernel},
70-
priority=EventPriority.ERROR,
71-
)
72-
continue
73-
if regex_data.match(data.kernel_version):
74-
self.result.message = "KernelModule matches expected"
75-
self.result.status = ExecutionStatus.OK
76-
return self.result
77-
elif data.kernel_version == kernel:
78-
self.result.message = "KernelModule matches expected"
79-
self.result.status = ExecutionStatus.OK
73+
self.result.message = "Kernel modules analyzed"
74+
self.result.status = ExecutionStatus.OK
75+
filtered_modules = {}
76+
if args.regex_match:
77+
try:
78+
filtered_modules = self.filter_modules_by_pattern(
79+
data.kernel_modules, args.modules_filter
80+
)
81+
except re.error:
82+
self._log_event(
83+
category=EventCategory.RUNTIME,
84+
description="KernelModule regex is invalid",
85+
data=data,
86+
priority=EventPriority.ERROR,
87+
)
88+
self.result.message = "Kernel modules failed to match regex"
89+
self.result.status = ExecutionStatus.ERROR
8090
return self.result
8191

82-
self.result.message = "KernelModule mismatch!"
83-
self.result.status = ExecutionStatus.ERROR
92+
else:
93+
filtered_modules = self.filter_modules_by_name(data.kernel_modules, args.modules_filter)
94+
8495
self._log_event(
85-
category=EventCategory.OS,
86-
description=f"{self.result.message}",
87-
data={"expected": args.exp_kernel, "actual": data.kernel_version},
88-
priority=EventPriority.CRITICAL,
89-
console_log=True,
96+
category=EventCategory.RUNTIME,
97+
description="KernelModules analyzed",
98+
data=filtered_modules,
99+
priority=EventPriority.INFO,
90100
)
91-
"""
92101
return self.result

nodescraper/plugins/inband/kernel_module/kernel_module_collector.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,6 @@ def parse_proc_modules(self, output):
4444
continue
4545
name, size, instances, deps, state, offset = parts[:6]
4646
modules[name] = {
47-
"size": int(size),
48-
"instances": int(instances),
49-
"dependencies": [] if deps == "-" else deps.split(","),
50-
"state": state,
51-
"offset": offset,
5247
"parameters": {},
5348
}
5449
return modules

nodescraper/plugins/inband/kernel_module/kernel_module_data.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,5 @@
2929

3030
class KernelModuleDataModel(DataModel):
3131
kernel_modules: dict
32+
modules_filter: list[str] = ["amd"]
33+
regex_match: bool = True

0 commit comments

Comments
 (0)