Add formatters (table, JSON, text)
Some checks failed
Some checks failed
This commit is contained in:
@@ -1,14 +1,57 @@
|
||||
"""JSON output formatter."""
|
||||
|
||||
import json
|
||||
from typing import Any
|
||||
|
||||
from loglens.analyzers.analyzer import AnalysisResult
|
||||
from loglens.formatters.base import OutputFormatter
|
||||
from loglens.parsers.base import ParsedLogEntry
|
||||
|
||||
|
||||
class JSONFormatter:
|
||||
"""Format analysis results as JSON."""
|
||||
class JSONFormatter(OutputFormatter):
|
||||
"""Formats output as JSON."""
|
||||
|
||||
def format(self, result: Any) -> str:
|
||||
"""Format result as JSON."""
|
||||
if hasattr(result, "to_dict"):
|
||||
return json.dumps(result.to_dict(), indent=2)
|
||||
return json.dumps(result, indent=2)
|
||||
def format(self, data: Any) -> str:
|
||||
"""Format data as JSON."""
|
||||
if isinstance(data, AnalysisResult):
|
||||
return self._format_analysis_result(data)
|
||||
elif isinstance(data, list):
|
||||
return self._format_entries(data)
|
||||
else:
|
||||
return json.dumps(data, default=str, indent=2)
|
||||
|
||||
def _format_analysis_result(self, result: AnalysisResult) -> str:
|
||||
"""Format analysis result as JSON."""
|
||||
output = {
|
||||
"summary": {
|
||||
"total_lines": result.total_lines,
|
||||
"parsed_entries": result.parsed_count,
|
||||
"format_detected": result.format_detected.value,
|
||||
"analysis_time": result.analysis_time.isoformat(),
|
||||
},
|
||||
"severity_breakdown": result.severity_breakdown,
|
||||
"pattern_matches": result.pattern_matches,
|
||||
"top_errors": result.top_errors,
|
||||
"host_breakdown": result.host_breakdown,
|
||||
"suggestions": result.suggestions,
|
||||
}
|
||||
|
||||
if result.time_range:
|
||||
output["time_range"] = {
|
||||
"start": result.time_range[0].isoformat(),
|
||||
"end": result.time_range[1].isoformat(),
|
||||
}
|
||||
|
||||
return json.dumps(output, default=str, indent=2)
|
||||
|
||||
def _format_entries(self, entries: list[ParsedLogEntry]) -> str:
|
||||
"""Format log entries as JSON array."""
|
||||
output = [entry.to_dict() for entry in entries]
|
||||
return json.dumps(output, default=str, indent=2)
|
||||
|
||||
def format_entries_compact(self, entries: list[ParsedLogEntry]) -> str:
|
||||
"""Format entries as compact JSON (one per line)."""
|
||||
lines = []
|
||||
for entry in entries:
|
||||
lines.append(json.dumps(entry.to_dict(), default=str))
|
||||
return "\n".join(lines)
|
||||
|
||||
Reference in New Issue
Block a user