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