auto-commit-service/src/auto_commit_service/__main__.py

70 lines
1.9 KiB
Python

"""Entry point for running as module: python -m auto_commit_service"""
import logging
import sys
from logging.handlers import RotatingFileHandler
import uvicorn
from .config import AutoCommitSettings
from .app import create_auto_commit_service
def setup_logging(settings: AutoCommitSettings) -> None:
"""Setup logging to both file and stderr."""
# Create formatter
formatter = logging.Formatter(
"%(asctime)s [%(levelname)s] %(name)s: %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)
# Root logger
root = logging.getLogger()
root.setLevel(logging.INFO)
# File handler with rotation (10MB, keep 3 backups)
file_handler = RotatingFileHandler(
settings.log_file,
maxBytes=10 * 1024 * 1024,
backupCount=3,
)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.INFO)
root.addHandler(file_handler)
# Stderr handler
stderr_handler = logging.StreamHandler(sys.stderr)
stderr_handler.setFormatter(formatter)
stderr_handler.setLevel(logging.INFO)
root.addHandler(stderr_handler)
# Reduce noise from httpx and httpcore
logging.getLogger("httpx").setLevel(logging.WARNING)
logging.getLogger("httpcore").setLevel(logging.WARNING)
logging.info(f"Logging to {settings.log_file}")
def main() -> None:
"""Run the auto-commit service."""
settings = AutoCommitSettings(service_name="auto-commit-service")
# Setup file logging
setup_logging(settings)
logging.info("Starting auto-commit service...")
logging.info(f"Repos: {settings.repo_names}")
logging.info(f"Cycle interval: {settings.cycle_interval_seconds}s")
logging.info(f"LLM service: {settings.llama_service_url}")
app = create_auto_commit_service(settings)
uvicorn.run(
app,
host=settings.host,
port=settings.port,
log_level="info",
)
if __name__ == "__main__":
main()