Add generate, report, and utils modules
Some checks failed
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled

This commit is contained in:
2026-01-30 18:03:46 +00:00
parent d359bfaf34
commit f39b45393d

95
config_auditor/report.py Normal file
View 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": {},
}