Add generate, report, and utils modules
This commit is contained in:
95
config_auditor/report.py
Normal file
95
config_auditor/report.py
Normal file
@@ -0,0 +1,95 @@
|
||||
import json
|
||||
from typing import Any, Callable, Dict, List
|
||||
from config_auditor.rules import Issue
|
||||
|
||||
|
||||
class ReportGenerator:
|
||||
def to_json(self, issues: List[Issue]) -> str:
|
||||
result = {
|
||||
"summary": {
|
||||
"total": len(issues),
|
||||
"critical": sum(1 for i in issues if i.severity == "critical"),
|
||||
"warning": sum(1 for i in issues if i.severity == "warning"),
|
||||
"info": sum(1 for i in issues if i.severity == "info"),
|
||||
},
|
||||
"issues": [
|
||||
{
|
||||
"severity": i.severity,
|
||||
"category": i.category,
|
||||
"message": i.message,
|
||||
"file": str(i.file),
|
||||
"line": i.line,
|
||||
"suggestion": i.suggestion,
|
||||
}
|
||||
for i in issues
|
||||
],
|
||||
}
|
||||
return json.dumps(result, indent=2)
|
||||
|
||||
def to_yaml(self, issues: List[Issue]) -> str:
|
||||
import yaml
|
||||
|
||||
result = {
|
||||
"summary": {
|
||||
"total": len(issues),
|
||||
"critical": sum(1 for i in issues if i.severity == "critical"),
|
||||
"warning": sum(1 for i in issues if i.severity == "warning"),
|
||||
"info": sum(1 for i in issues if i.severity == "info"),
|
||||
},
|
||||
"issues": [
|
||||
{
|
||||
"severity": i.severity,
|
||||
"category": i.category,
|
||||
"message": i.message,
|
||||
"file": str(i.file),
|
||||
"line": i.line,
|
||||
"suggestion": i.suggestion,
|
||||
}
|
||||
for i in issues
|
||||
],
|
||||
}
|
||||
return yaml.dump(result, default_flow_style=False)
|
||||
|
||||
def to_text(self, issues: List[Issue], output_func: Callable[[str], None]):
|
||||
critical = [i for i in issues if i.severity == "critical"]
|
||||
warnings = [i for i in issues if i.severity == "warning"]
|
||||
infos = [i for i in issues if i.severity == "info"]
|
||||
|
||||
output_func("\n=== Audit Report ===")
|
||||
output_func(f"Total issues: {len(issues)}")
|
||||
output_func(f" Critical: {len(critical)}")
|
||||
output_func(f" Warnings: {len(warnings)}")
|
||||
output_func(f" Info: {len(infos)}")
|
||||
|
||||
if critical:
|
||||
output_func("\n=== Critical Issues ===")
|
||||
for i in critical:
|
||||
output_func(f"[CRITICAL] {i.file}: {i.message}")
|
||||
if i.suggestion:
|
||||
output_func(f" -> {i.suggestion}")
|
||||
|
||||
if warnings:
|
||||
output_func("\n=== Warnings ===")
|
||||
for i in warnings:
|
||||
output_func(f"[WARNING] {i.file}: {i.message}")
|
||||
if i.suggestion:
|
||||
output_func(f" -> {i.suggestion}")
|
||||
|
||||
if infos:
|
||||
output_func("\n=== Informational ===")
|
||||
for i in infos:
|
||||
output_func(f"[INFO] {i.file}: {i.message}")
|
||||
|
||||
if not issues:
|
||||
output_func("\nNo issues found. Configuration looks good!")
|
||||
|
||||
def generate_summary(self, issues: List[Issue]) -> Dict[str, Any]:
|
||||
return {
|
||||
"total": len(issues),
|
||||
"by_severity": {
|
||||
"critical": sum(1 for i in issues if i.severity == "critical"),
|
||||
"warning": sum(1 for i in issues if i.severity == "warning"),
|
||||
"info": sum(1 for i in issues if i.severity == "info"),
|
||||
},
|
||||
"by_category": {},
|
||||
}
|
||||
Reference in New Issue
Block a user