6161from renku_data_services .message_queue .db import EventRepository , ReprovisioningRepository
6262from renku_data_services .message_queue .interface import IMessageQueue
6363from renku_data_services .message_queue .redis_queue import RedisQueue
64+ from renku_data_services .metrics .core import StagingMetricsService
65+ from renku_data_services .metrics .db import MetricsRepository
6466from renku_data_services .namespace .db import GroupRepository
6567from renku_data_services .notebooks .config import NotebooksConfig
6668from renku_data_services .platform .db import PlatformRepository
@@ -133,6 +135,20 @@ def from_env(cls, prefix: str = "") -> "SentryConfig":
133135 return cls (enabled , dsn = dsn , environment = environment , sample_rate = sample_rate )
134136
135137
138+ @dataclass
139+ class PosthogConfig :
140+ """Configuration for posthog."""
141+
142+ enabled : bool
143+
144+ @classmethod
145+ def from_env (cls , prefix : str = "" ) -> "PosthogConfig" :
146+ """Create posthog config from environment variables."""
147+ enabled = os .environ .get (f"{ prefix } POSTHOG_ENABLED" , "false" ).lower () == "true"
148+
149+ return cls (enabled )
150+
151+
136152@dataclass
137153class TrustedProxiesConfig :
138154 """Configuration for trusted reverse proxies."""
@@ -261,6 +277,7 @@ class Config:
261277 gitlab_url : str | None
262278 nb_config : NotebooksConfig
263279 builds_config : BuildsConfig
280+ posthog : PosthogConfig
264281
265282 secrets_service_public_key : rsa .RSAPublicKey
266283 """The public key of the secrets service, used to encrypt user secrets that only it can decrypt."""
@@ -300,6 +317,8 @@ class Config:
300317 _data_connector_repo : DataConnectorRepository | None = field (default = None , repr = False , init = False )
301318 _data_connector_secret_repo : DataConnectorSecretRepository | None = field (default = None , repr = False , init = False )
302319 _cluster_repo : ClusterRepository | None = field (default = None , repr = False , init = False )
320+ _metrics_repo : MetricsRepository | None = field (default = None , repr = False , init = False )
321+ _metrics : StagingMetricsService | None = field (default = None , repr = False , init = False )
303322
304323 @staticmethod
305324 @functools .cache
@@ -352,7 +371,7 @@ def __post_init__(self) -> None:
352371
353372 @property
354373 def user_repo (self ) -> UserRepository :
355- """The DB adapter for users of resoure pools and classes."""
374+ """The DB adapter for users of resource pools and classes."""
356375 if not self ._user_repo :
357376 self ._user_repo = UserRepository (
358377 session_maker = self .db .async_session_maker , quotas_repo = self .quota_repo , user_repo = self .kc_user_repo
@@ -602,6 +621,20 @@ def cluster_repo(self) -> ClusterRepository:
602621
603622 return self ._cluster_repo
604623
624+ @property
625+ def metrics_repo (self ) -> MetricsRepository :
626+ """The DB adapter for metrics."""
627+ if not self ._metrics_repo :
628+ self ._metrics_repo = MetricsRepository (session_maker = self .db .async_session_maker )
629+ return self ._metrics_repo
630+
631+ @property
632+ def metrics (self ) -> StagingMetricsService :
633+ """The metrics service interface."""
634+ if not self ._metrics :
635+ self ._metrics = StagingMetricsService (enabled = self .posthog .enabled , metrics_repo = self .metrics_repo )
636+ return self ._metrics
637+
605638 @classmethod
606639 def from_env (cls , prefix : str = "" ) -> "Config" :
607640 """Create a config from environment variables."""
@@ -644,7 +677,7 @@ def from_env(cls, prefix: str = "") -> "Config":
644677 UnsavedUserInfo (
id = "user1" ,
first_name = "user1" ,
last_name = "doe" ,
email = "[email protected] " ),
645678 UnsavedUserInfo (
id = "user2" ,
first_name = "user2" ,
last_name = "doe" ,
email = "[email protected] " ),
646679 ]
647- kc_api = DummyKeycloakAPI (users = [i ._to_keycloak_dict () for i in dummy_users ])
680+ kc_api = DummyKeycloakAPI (users = [i .to_keycloak_dict () for i in dummy_users ])
648681 redis = RedisConfig .fake ()
649682 gitlab_url = None
650683 else :
@@ -698,6 +731,7 @@ def from_env(cls, prefix: str = "") -> "Config":
698731 message_queue = RedisQueue (redis )
699732 nb_config = NotebooksConfig .from_env (db )
700733 builds_config = BuildsConfig .from_env (prefix , k8s_namespace )
734+ posthog = PosthogConfig .from_env (prefix )
701735
702736 return cls (
703737 version = version ,
@@ -721,4 +755,5 @@ def from_env(cls, prefix: str = "") -> "Config":
721755 gitlab_url = gitlab_url ,
722756 nb_config = nb_config ,
723757 builds_config = builds_config ,
758+ posthog = posthog ,
724759 )
0 commit comments