"""Configurazione centralizzata del servizio ML, letta da env.""" from __future__ import annotations import os from dataclasses import dataclass def _b(name: str, default: bool = False) -> bool: return os.environ.get(name, str(default)).lower() in ("1", "true", "yes", "on") @dataclass(frozen=True) class Settings: # Postgres (db "ml") pg_host: str = os.environ.get("PG_HOST", "meb-postgres") pg_port: int = int(os.environ.get("PG_PORT", "5432")) pg_user: str = os.environ.get("DB_USER", "meb") pg_password: str = os.environ.get("DB_PASSWORD", "meb") pg_db: str = os.environ.get("ML_DB", "ml") # Redis redis_host: str = os.environ.get("REDIS_HOST", "meb-redis") redis_port: int = int(os.environ.get("REDIS_PORT", "6379")) # MinIO (bucket unico) minio_endpoint: str = os.environ.get("MINIO_ENDPOINT", "minio") minio_port: int = int(os.environ.get("MINIO_PORT", "9000")) minio_use_ssl: bool = _b("MINIO_USE_SSL", False) minio_access_key: str = os.environ.get("MINIO_ACCESS_KEY", "") minio_secret_key: str = os.environ.get("MINIO_SECRET_KEY", "") minio_bucket: str = os.environ.get("MINIO_BUCKET", "ml") # InfluxDB — accetta sia INFLUX_* che INFLX_* per allinearsi alle var già # usate dagli altri servizi (realtime, api) senza dover duplicare la config. influx_url: str = os.environ.get("INFLUX_URL") or os.environ.get("INFLX_URL", "http://meb-influx:8086") influx_token: str = os.environ.get("INFLUX_TOKEN") or os.environ.get("INFLX_TOKEN", "") influx_org: str = os.environ.get("INFLUX_ORG") or os.environ.get("INFLX_ORG", "meb") # Bucket dedicato alle metriche di training/test ML, separato dai logs e # dai dati meteo. Sovrascrivibile via INFLUX_BUCKET o ML_INFLUX_BUCKET. influx_bucket: str = os.environ.get("ML_INFLUX_BUCKET") or os.environ.get("INFLUX_BUCKET", "ml_metrics") # Gitea (installato esternamente) gitea_url: str = os.environ.get("GITEA_URL", "") gitea_token: str = os.environ.get("GITEA_TOKEN", "") # API service (per jobs/queue/pageconnections) api_url: str = os.environ.get("API_URL", "http://api:3003") internal_api_key: str = os.environ.get("INTERNAL_API_KEY", "") # Auth (condiviso) jwt_secret: str = os.environ.get("JWT_SECRET", "") auth_login_url: str = os.environ.get("AUTH_LOGIN_URL", "https://auth.mebboat.it/login") # Esecuzione training train_concurrency: int = int(os.environ.get("ML_TRAIN_CONCURRENCY", "1")) runner_image: str = os.environ.get("ML_RUNNER_IMAGE", "meb-ml-runner:latest") runner_tmp_dir: str = os.environ.get("ML_RUNNER_TMP", "/var/ml/tmp") gitcache_dir: str = os.environ.get("ML_GITCACHE_DIR", "/var/ml/gitcache") # Limiti runtime max_upload_mb: int = int(os.environ.get("ML_MAX_UPLOAD_MB", "500")) settings = Settings()