Classes
HealthCheckStats
dataclass
Statistics about health check execution.
Provides observability into parallel execution performance.
HealthCheckStats
dataclass Statistics about health check execution.
Provides observability into parallel execution performance.
Attributes
| Name | Type | Description |
|---|---|---|
total_duration_ms |
float |
|
execution_mode |
str |
|
validator_count |
int |
|
worker_count |
int |
|
cpu_count |
int |
|
sum_validator_duration_ms |
float |
Methods 3
speedup
property
Calculate speedup from parallel execution.
Returns ratio of sum(individual dur…
speedup
property def speedup(self) -> float
Calculate speedup from parallel execution.
Returns ratio of sum(individual durations) / total duration. A speedup of 2.0 means parallel was 2x faster than sequential would be.
Returns
float
efficiency
property
Calculate parallel efficiency (0.0 to 1.0).
efficiency = speedup / worker_coun…
efficiency
property def efficiency(self) -> float
Calculate parallel efficiency (0.0 to 1.0).
efficiency = speedup / worker_count 1.0 = perfect scaling, 0.5 = 50% efficiency
Returns
float
format_summary
Format a human-readable summary.
format_summary
def format_summary(self) -> str
Format a human-readable summary.
Returns
str
HealthCheck
Orchestrates health check validators and produces unified health reports.
By default, registers al…
HealthCheck
Orchestrates health check validators and produces unified health reports.
By default, registers all standard validators. You can disable auto-registration by passing auto_register=False, then manually register validators.
Usage:
# Default: auto-registers all validators
health = HealthCheck(site)
report = health.run()
print(report.format_console())
# Manual registration:
health = HealthCheck(site, auto_register=False)
health.register(ConfigValidator())
health.register(OutputValidator())
report = health.run()
Attributes
| Name | Type | Description |
|---|---|---|
last_stats |
HealthCheckStats | None |
Methods 3
register
Register a validator to be run.
register
def register(self, validator: BaseValidator) -> None
Register a validator to be run.
Parameters 1
validator |
BaseValidator |
Validator instance to register |
run
Run all registered validators and produce a health report.
Validators run in p…
run
def run(self, build_stats: dict[str, Any] | None = None, verbose: bool = False, profile: BuildProfile | None = None, incremental: bool = False, context: list[Path] | None = None, cache: Any = None, build_context: Any = None, tier: str = 'build') -> HealthReport
Run all registered validators and produce a health report.
Validators run in parallel when there are 3+ enabled validators, falling back to sequential execution for smaller workloads.
Parameters 8
build_stats |
dict[str, Any] | None |
Optional build statistics to include in report |
verbose |
bool |
Whether to show verbose output during validation |
profile |
BuildProfile | None |
Build profile to use for filtering validators |
incremental |
bool |
If True, only validate changed files (requires cache) |
context |
list[Path] | None |
Optional list of specific file paths to validate (overrides incremental) |
cache |
Any |
Optional BuildCache instance for incremental validation and result caching |
build_context |
Any |
Optional BuildContext with cached artifacts (e.g., knowledge graph, cached content) that validators can use to avoid redundant computation. When build_context has cached content, validators like DirectiveValidator skip disk I/O, reducing health check time from ~4.6s to <100ms. |
tier |
str |
Validation tier to run: - "build": Fast validators only (<100ms) - default - "full": + Knowledge graph validators (~500ms) - "ci": All validators including external checks (~30s) |
Returns
HealthReport with results from all validatorsHealthReport
—
run_and_print
Run health checks and print console output.
run_and_print
def run_and_print(self, build_stats: dict[str, Any] | None = None, verbose: bool = False) -> HealthReport
Run health checks and print console output.
Parameters 2
build_stats |
dict[str, Any] | None |
Optional build statistics |
verbose |
bool |
Whether to show all checks (not just problems) |
Returns
HealthReportHealthReport
—
Internal Methods 10
__init__
Initialize health check system.
__init__
def __init__(self, site: Site, auto_register: bool = True)
Initialize health check system.
Parameters 2
site |
Site |
The Site object to validate |
auto_register |
bool |
Whether to automatically register all default validators |
_register_default_validators
Register all default validators.
_register_default_validators
def _register_default_validators(self) -> None
Register all default validators.
_get_optimal_workers
Calculate optimal worker count based on system resources and workload.
Auto-sc…
_get_optimal_workers
def _get_optimal_workers(self, validator_count: int) -> int
Calculate optimal worker count based on system resources and workload.
Auto-scales based on:
- Available CPU cores (uses ~50% to leave headroom)
- Number of validators (no point having more workers than tasks)
- Minimum of 2 workers (for any parallelism benefit)
- Maximum of 8 workers (diminishing returns beyond this)
Parameters 1
validator_count |
int |
Number of validators to run |
Returns
Optimal number of worker threadsint
—
_is_validator_in_tier
Check if a validator should run based on the validation tier.
Tiered validatio…
_is_validator_in_tier
def _is_validator_in_tier(self, validator: BaseValidator, tier: str) -> bool
Check if a validator should run based on the validation tier.
Tiered validation allows fast builds by default with thorough checks available when needed.
Tiers (cumulative):
- "build": Fast validators only (<100ms)
- "full": + Knowledge graph validators (~500ms)
- "ci": All validators including external checks (~30s)
Parameters 2
validator |
BaseValidator |
The validator to check |
tier |
str |
One of "build", "full", or "ci" |
Returns
True if validator should run for this tierbool
—
_is_validator_enabled
Check if a validator should run based on profile and config.
_is_validator_enabled
def _is_validator_enabled(self, validator: BaseValidator, profile: BuildProfile | None, verbose: bool) -> bool
Check if a validator should run based on profile and config.
Parameters 3
validator |
BaseValidator |
The validator to check |
profile |
BuildProfile | None |
Optional build profile for filtering |
verbose |
bool |
Whether to show skip messages |
Returns
True if validator should runbool
—
_get_files_to_validate
Determine which files to validate for incremental/context modes.
_get_files_to_validate
def _get_files_to_validate(self, context: list[Path] | None, incremental: bool, cache: Any) -> set[Path] | None
Determine which files to validate for incremental/context modes.
Parameters 3
context |
list[Path] | None |
Optional explicit file list |
incremental |
bool |
Whether incremental mode is enabled |
cache |
Any |
BuildCache instance |
Returns
Set of paths to validate, or None for full validationset[Path] | None
—
_run_single_validator
Run a single validator and return its report.
This method is used by both sequ…
_run_single_validator
def _run_single_validator(self, validator: BaseValidator, build_context: BuildContext | Any | None, cache: Any, files_to_validate: set[Path] | None) -> ValidatorReport
Run a single validator and return its report.
This method is used by both sequential and parallel execution.
Parameters 4
validator |
BaseValidator |
The validator to run |
build_context |
BuildContext | Any | None |
Optional BuildContext with cached artifacts |
cache |
Any |
Optional BuildCache for result caching |
files_to_validate |
set[Path] | None |
Set of files to validate (for incremental mode) |
Returns
ValidatorReport with results and timingValidatorReport
—
_run_validators_sequential
Run validators sequentially (for small workloads).
_run_validators_sequential
def _run_validators_sequential(self, validators: list[BaseValidator], report: HealthReport, build_context: BuildContext | Any | None, verbose: bool, cache: Any, files_to_validate: set[Path] | None) -> None
Run validators sequentially (for small workloads).
Parameters 6
validators |
list[BaseValidator] |
List of validators to run |
report |
HealthReport |
HealthReport to add results to |
build_context |
BuildContext | Any | None |
Optional BuildContext with cached artifacts |
verbose |
bool |
Whether to show per-validator output |
cache |
Any |
Optional BuildCache for result caching |
files_to_validate |
set[Path] | None |
Set of files to validate (for incremental mode) |
_run_validators_parallel
Run validators in parallel using ThreadPoolExecutor.
Uses as_completed() to pr…
_run_validators_parallel
def _run_validators_parallel(self, validators: list[BaseValidator], report: HealthReport, build_context: BuildContext | Any | None, verbose: bool, cache: Any, files_to_validate: set[Path] | None, worker_count: int | None = None) -> None
Run validators in parallel using ThreadPoolExecutor.
Uses as_completed() to process results as they finish, providing better UX for verbose mode. Output is printed in the main thread to prevent garbled console output.
Parameters 7
validators |
list[BaseValidator] |
List of validators to run |
report |
HealthReport |
HealthReport to add results to |
build_context |
BuildContext | Any | None |
Optional BuildContext with cached artifacts |
verbose |
bool |
Whether to show per-validator output |
cache |
Any |
Optional BuildCache for result caching |
files_to_validate |
set[Path] | None |
Set of files to validate (for incremental mode) |
worker_count |
int | None |
Number of worker threads (auto-detected if None) |
__repr__
__repr__
def __repr__(self) -> str
Returns
str