2626
2727from typing import Optional
2828
29+ from nodescraper .enums import EventCategory , EventPriority , ExecutionStatus
2930from nodescraper .interfaces import DataAnalyzer
3031from 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