Add structured compiler diagnostics
This commit is contained in:
parent
0fe968c475
commit
24bd13f9d9
20 changed files with 1386 additions and 58 deletions
|
|
@ -27,6 +27,7 @@ from .models import (
|
|||
)
|
||||
from .project import project_root_fingerprint
|
||||
from .render_contract import PreparedRender, relative_output, renderer_for
|
||||
from .telemetry import increment, stage
|
||||
|
||||
RENDER_RECEIPT_SCHEMA_VERSION = 1
|
||||
MAX_RENDER_RECEIPT_BYTES = 64_000
|
||||
|
|
@ -42,6 +43,10 @@ class RenderService:
|
|||
def status(self, view_id: str | None = None) -> dict[str, object]:
|
||||
"""Report publication state from bounded receipts without rendering canonical content."""
|
||||
|
||||
with stage("render.status"):
|
||||
return self._status(view_id)
|
||||
|
||||
def _status(self, view_id: str | None = None) -> dict[str, object]:
|
||||
descriptor = self.project.descriptor
|
||||
config = descriptor.render
|
||||
current_state = self._current_state()
|
||||
|
|
@ -113,7 +118,9 @@ class RenderService:
|
|||
state = "oversized"
|
||||
else:
|
||||
raw = output.read_bytes()
|
||||
actual_hash = hashlib.sha256(raw).hexdigest()
|
||||
increment("render_output_bytes_hashed", len(raw))
|
||||
with stage("render.output_hash"):
|
||||
actual_hash = hashlib.sha256(raw).hexdigest()
|
||||
state = "current" if actual_hash == prepared.output_hash else "stale"
|
||||
result = self._view_result(
|
||||
snapshot,
|
||||
|
|
@ -725,13 +732,16 @@ class RenderService:
|
|||
*,
|
||||
changeset_hash: str | None,
|
||||
) -> tuple[PreparedRender, bytes]:
|
||||
increment("render_prepare_calls")
|
||||
template = self._template_bytes(snapshot, view)
|
||||
prepared = renderer_for(view).prepare(
|
||||
snapshot,
|
||||
view,
|
||||
template,
|
||||
changeset_hash=changeset_hash,
|
||||
)
|
||||
with stage("render.prepare"):
|
||||
prepared = renderer_for(view).prepare(
|
||||
snapshot,
|
||||
view,
|
||||
template,
|
||||
changeset_hash=changeset_hash,
|
||||
)
|
||||
increment("render_output_bytes_built", len(prepared.output))
|
||||
if len(prepared.output) > snapshot.descriptor.limits.max_render_bytes:
|
||||
raise DocForgeError("render_too_large", "Rendered output exceeds the configured limit")
|
||||
return prepared, template
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue