Source code for pyspark_pipeline_framework.core.config.hooks

"""Lifecycle hooks configuration models."""

from dataclasses import dataclass

from pyspark_pipeline_framework.core.config.base import LogFormat, LogLevel, MetricsBackend


[docs] @dataclass class LoggingConfig: """Configuration for logging behavior.""" level: LogLevel = LogLevel.INFO """Logging level (default: INFO)""" format: LogFormat = LogFormat.JSON """Log output format (default: JSON)""" output: str = "stdout" """Log output destination - stdout, stderr, or file path (default: stdout)""" structured: bool = True """Use structlog for structured logging (default: True)"""
[docs] @dataclass class MetricsConfig: """Configuration for metrics collection and export.""" enabled: bool = True """Enable metrics collection (default: True)""" backend: MetricsBackend = MetricsBackend.PROMETHEUS """Metrics backend to use (default: prometheus)""" push_gateway_url: str | None = None """URL for metrics push gateway (optional)""" export_interval_seconds: int = 60 """Interval for exporting metrics in seconds (default: 60)""" def __post_init__(self) -> None: """Validate configuration after initialization.""" if self.export_interval_seconds < 1: raise ValueError("export_interval_seconds must be at least 1")
[docs] @dataclass class AuditConfig: """Configuration for audit trail logging.""" enabled: bool = True """Enable audit trail (default: True)""" include_data_samples: bool = False """Include data samples in audit logs (default: False)""" audit_trail_path: str = "/var/log/pipeline/audit" """Path for audit trail logs (default: /var/log/pipeline/audit)""" retention_days: int = 90 """Number of days to retain audit logs (default: 90)""" def __post_init__(self) -> None: """Validate configuration after initialization.""" if self.retention_days < 1: raise ValueError("retention_days must be at least 1")
[docs] @dataclass class HooksConfig: """Composite configuration for all lifecycle hooks.""" logging: LoggingConfig | None = None """Logging configuration""" metrics: MetricsConfig | None = None """Metrics configuration (optional)""" audit: AuditConfig | None = None """Audit configuration (optional)""" def __post_init__(self) -> None: """Initialize default logging if not provided.""" if self.logging is None: self.logging = LoggingConfig()