feat(#370): install mosaicstack-telemetry in Coordinator
- Add mosaicstack-telemetry>=0.1.0 to pyproject.toml dependencies - Configure Gitea PyPI registry via pip.conf (extra-index-url) - Integrate TelemetryClient in FastAPI lifespan (start_async/stop_async) - Store client on app.state.mosaic_telemetry for downstream access - Create mosaic_telemetry.py helper module with: - get_telemetry_client(): retrieve client from app state - build_task_event(): construct TaskCompletionEvent with coordinator defaults - create_telemetry_config(): create config from MOSAIC_TELEMETRY_* env vars - Add 28 unit tests covering config, helpers, disabled mode, and lifespan - New module has 100% test coverage Refs #370 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -9,6 +9,7 @@ from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from fastapi import FastAPI
|
||||
from mosaicstack_telemetry import TelemetryClient # type: ignore[import-untyped]
|
||||
from pydantic import BaseModel
|
||||
from slowapi import Limiter, _rate_limit_exceeded_handler
|
||||
from slowapi.errors import RateLimitExceeded
|
||||
@@ -18,6 +19,7 @@ from starlette.responses import Response
|
||||
|
||||
from .config import settings
|
||||
from .coordinator import Coordinator
|
||||
from .mosaic_telemetry import create_telemetry_config
|
||||
from .queue import QueueManager
|
||||
from .telemetry import TelemetryService, shutdown_telemetry
|
||||
from .webhook import router as webhook_router
|
||||
@@ -76,6 +78,18 @@ async def lifespan(app: FastAPI) -> AsyncIterator[dict[str, Any]]:
|
||||
telemetry_service.initialize()
|
||||
logger.info("OpenTelemetry telemetry initialized")
|
||||
|
||||
# Initialize Mosaic telemetry client
|
||||
mosaic_telemetry_config = create_telemetry_config()
|
||||
mosaic_telemetry_client: TelemetryClient | None = None
|
||||
if mosaic_telemetry_config.enabled:
|
||||
mosaic_telemetry_client = TelemetryClient(mosaic_telemetry_config)
|
||||
await mosaic_telemetry_client.start_async()
|
||||
app.state.mosaic_telemetry = mosaic_telemetry_client
|
||||
logger.info("Mosaic telemetry client started")
|
||||
else:
|
||||
app.state.mosaic_telemetry = None
|
||||
logger.info("Mosaic telemetry disabled via configuration")
|
||||
|
||||
# Initialize queue manager
|
||||
queue_file = Path("queue.json")
|
||||
queue_manager = QueueManager(queue_file=queue_file)
|
||||
@@ -115,6 +129,11 @@ async def lifespan(app: FastAPI) -> AsyncIterator[dict[str, Any]]:
|
||||
pass
|
||||
logger.info("Coordinator stopped")
|
||||
|
||||
# Shutdown Mosaic telemetry client
|
||||
if mosaic_telemetry_client is not None:
|
||||
await mosaic_telemetry_client.stop_async()
|
||||
logger.info("Mosaic telemetry client stopped")
|
||||
|
||||
# Shutdown OpenTelemetry
|
||||
if telemetry_enabled:
|
||||
shutdown_telemetry()
|
||||
|
||||
Reference in New Issue
Block a user