Skip to content

Commit bf4917b

Browse files
committed
analyzer added
1 parent e19398c commit bf4917b

File tree

2 files changed

+50
-11
lines changed

2 files changed

+50
-11
lines changed

nodescraper/plugins/inband/sysctl/analyzer_args.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,16 @@ def build_from_model(cls, datamodel: SysctlDataModel) -> "SysctlAnalyzerArgs":
5252
Returns:
5353
SysctlAnalyzerArgs: instance of analyzer args class
5454
"""
55-
return cls(exp_vm_swappiness=datamodel.vm_swappiness)
55+
return cls(
56+
exp_vm_swappiness=datamodel.vm_swappiness,
57+
exp_vm_numa_balancing=datamodel.vm_numa_balancing,
58+
exp_vm_oom_kill_allocating_task=datamodel.vm_oom_kill_allocating_task,
59+
exp_vm_compaction_proactiveness=datamodel.vm_compaction_proactiveness,
60+
exp_vm_compact_unevictable_allowed=datamodel.vm_compact_unevictable_allowed,
61+
exp_vm_extfrag_threshold=datamodel.vm_extfrag_threshold,
62+
exp_vm_zone_reclaim_mode=datamodel.vm_zone_reclaim_mode,
63+
exp_vm_dirty_background_ratio=datamodel.vm_dirty_background_ratio,
64+
exp_vm_dirty_ratio=datamodel.vm_dirty_ratio,
65+
exp_vm_dirty_writeback_centisecs=datamodel.vm_dirty_writeback_centisecs,
66+
exp_kernel_numa_balancing=datamodel.kernel_numa_balancing,
67+
)

nodescraper/plugins/inband/sysctl/sysctl_analyzer.py

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
from typing import Optional
2828

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

@@ -41,16 +42,42 @@ class SysctlAnalyzer(DataAnalyzer[SysctlDataModel, SysctlAnalyzerArgs]):
4142
def analyze_data(
4243
self, data: SysctlDataModel, args: Optional[SysctlAnalyzerArgs] = None
4344
) -> TaskResult:
44-
"""Analyze the Sysctl data against expected Sysctl versions.
45-
46-
Args:
47-
data (SysctlDataModel): The Sysctl data to analyze.
48-
args (Optional[SysctlAnalyzerArgs], optional): Expected Sysctl data. Defaults to None.
49-
50-
Returns:
51-
TaskResult: The result of the analysis, indicating whether the Sysctl data matches
52-
the expected versions or not.
53-
"""
45+
"""Analyze the Sysctl data against expected Sysctl values."""
46+
self.result = self.result
47+
self.result.status = ExecutionStatus.OK
48+
self.result.message = "All expected sysctl parameters match."
49+
mismatches = {}
5450

5551
if not args:
5652
args = SysctlAnalyzerArgs()
53+
54+
for exp_field_name, expected_value in args.model_dump(exclude_unset=True).items():
55+
56+
data_field_name = exp_field_name.removeprefix("exp_")
57+
actual_value = getattr(data, data_field_name, None)
58+
59+
if actual_value is None:
60+
mismatches[data_field_name] = {"expected": expected_value, "actual": "missing"}
61+
elif actual_value != expected_value:
62+
mismatches[data_field_name] = {"expected": expected_value, "actual": actual_value}
63+
64+
if mismatches:
65+
self.result.status = ExecutionStatus.ERROR
66+
self.result.message = f"{len(mismatches)} sysctl parameter(s) mismatched."
67+
self.result.message = "Sysctl parameters mismatch detected."
68+
self._log_event(
69+
category=EventCategory.OS,
70+
description="Sysctl mismatch detected",
71+
data=mismatches,
72+
priority=EventPriority.ERROR,
73+
console_log=True,
74+
)
75+
else:
76+
self._log_event(
77+
category=EventCategory.OS,
78+
description="All expected sysctl parameters matched",
79+
priority=EventPriority.INFO,
80+
console_log=True,
81+
)
82+
83+
return self.result

0 commit comments

Comments
 (0)