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                "created_at".into(),
29            ]),
30            SchemaDefinition::inline(
31                "anomaly_thresholds",
32                include_str!("../schema/anomaly_thresholds.sql"),
33            )
34            .with_required_columns(vec!["metric_name".into()]),
35            SchemaDefinition::inline(
36                "fingerprint_reputation",
37                include_str!("../schema/fingerprint_reputation.sql"),
38            )
39            .with_required_columns(vec!["fingerprint_hash".into()]),
40            SchemaDefinition::inline("funnels", include_str!("../schema/funnels.sql"))
41                .with_required_columns(vec!["id".into(), "name".into()]),
42            SchemaDefinition::inline(
43                "funnel_progress",
44                include_str!("../schema/funnel_progress.sql"),
45            )
46            .with_required_columns(vec![
47                "id".into(),
48                "funnel_id".into(),
49                "session_id".into(),
50            ]),
51        ]
52    }
53
54    fn dependencies(&self) -> Vec<&'static str> {
55        vec!["users"]
56    }
57}
58
59register_extension!(AnalyticsExtension);