Skip to main content

systemprompt_analytics/
extension.rs

1use systemprompt_extension::prelude::*;
2
3#[derive(Debug, Clone, Copy, Default)]
4pub struct AnalyticsExtension;
5
6impl Extension for AnalyticsExtension {
7    fn metadata(&self) -> ExtensionMetadata {
8        ExtensionMetadata {
9            id: "analytics",
10            name: "Analytics",
11            version: env!("CARGO_PKG_VERSION"),
12        }
13    }
14
15    fn migration_weight(&self) -> u32 {
16        20
17    }
18
19    fn schemas(&self) -> Vec<SchemaDefinition> {
20        vec![
21            SchemaDefinition::inline(
22                "engagement_events",
23                include_str!("../schema/engagement_events.sql"),
24            )
25            .with_required_columns(vec![
26                "id".into(),
27                "session_id".into(),
28                "event_type".into(),
29                "created_at".into(),
30            ]),
31            SchemaDefinition::inline(
32                "anomaly_thresholds",
33                include_str!("../schema/anomaly_thresholds.sql"),
34            )
35            .with_required_columns(vec!["metric_name".into()]),
36            SchemaDefinition::inline(
37                "fingerprint_reputation",
38                include_str!("../schema/fingerprint_reputation.sql"),
39            )
40            .with_required_columns(vec!["fingerprint_hash".into()]),
41            SchemaDefinition::inline("funnels", include_str!("../schema/funnels.sql"))
42                .with_required_columns(vec!["id".into(), "name".into()]),
43            SchemaDefinition::inline(
44                "funnel_progress",
45                include_str!("../schema/funnel_progress.sql"),
46            )
47            .with_required_columns(vec![
48                "id".into(),
49                "funnel_id".into(),
50                "session_id".into(),
51            ]),
52        ]
53    }
54
55    fn dependencies(&self) -> Vec<&'static str> {
56        vec!["users"]
57    }
58}
59
60register_extension!(AnalyticsExtension);