41 lines
1.0 KiB
Python
41 lines
1.0 KiB
Python
from datetime import UTC, datetime
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from core.schemas.manifest import ModuleManifest
|
|
from core.schemas.results import AuditResults
|
|
from core.schemas.status import AuditSeverity
|
|
|
|
|
|
class PluginRuntimeError(BaseModel):
|
|
plugin_kind: str
|
|
plugin_name: str
|
|
stage: str
|
|
message: str
|
|
|
|
|
|
class ModuleExecutionStats(BaseModel):
|
|
duration_seconds: float = Field(ge=0)
|
|
finding_counts: dict[AuditSeverity, int] = Field(default_factory=dict)
|
|
|
|
|
|
class ModuleAuditResult(BaseModel):
|
|
module: ModuleManifest
|
|
result: AuditResults
|
|
stats: ModuleExecutionStats | None = None
|
|
error: PluginRuntimeError | None = None
|
|
|
|
|
|
class AuditReport(BaseModel):
|
|
generated_at: datetime = Field(default_factory=lambda: datetime.now(UTC))
|
|
results: list[ModuleAuditResult]
|
|
exit_code: int
|
|
plugin_errors: list[PluginRuntimeError] = Field(default_factory=list)
|
|
|
|
|
|
class RenderedReport(BaseModel):
|
|
format_name: str
|
|
media_type: str
|
|
file_extension: str
|
|
content: str
|