systemprompt_analytics/services/
providers.rs1use super::service::AnalyticsService;
7use crate::repository::FingerprintRepository;
8use async_trait::async_trait;
9use http::HeaderMap;
10use systemprompt_identifiers::SessionId;
11use systemprompt_traits::{
12 AnalyticsProvider, AnalyticsProviderError, AnalyticsResult, ExtractSignals,
13 FingerprintProvider, SessionAnalytics,
14};
15impl AnalyticsProvider for AnalyticsService {
16 fn extract_analytics(
17 &self,
18 headers: &HeaderMap,
19 signals: ExtractSignals<'_>,
20 ) -> SessionAnalytics {
21 Self::extract_analytics(self, headers, signals)
22 }
23}
24#[async_trait]
25impl FingerprintProvider for FingerprintRepository {
26 async fn count_active_sessions(&self, fingerprint: &str) -> AnalyticsResult<i64> {
27 self.count_active_sessions(fingerprint)
28 .await
29 .map(i64::from)
30 .map_err(|e| AnalyticsProviderError::Internal(e.to_string()))
31 }
32
33 async fn find_reusable_session(&self, fingerprint: &str) -> AnalyticsResult<Option<SessionId>> {
34 self.find_reusable_session(fingerprint)
35 .await
36 .map_err(|e| AnalyticsProviderError::Internal(e.to_string()))
37 }
38
39 async fn upsert_fingerprint(
40 &self,
41 fingerprint: &str,
42 ip_address: Option<&str>,
43 user_agent: Option<&str>,
44 _screen_info: Option<&str>,
45 ) -> AnalyticsResult<()> {
46 self.upsert_fingerprint(fingerprint, ip_address, user_agent, None)
47 .await
48 .map(|_| ())
49 .map_err(|e| AnalyticsProviderError::Internal(e.to_string()))
50 }
51}