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("funnel_steps", include_str!("../schema/funnel_steps.sql"))
46 .with_required_columns(vec!["funnel_id".into(), "step_order".into()]),
47 SchemaDefinition::new(
48 "funnel_progress",
49 include_str!("../schema/funnel_progress.sql"),
50 )
51 .with_required_columns(vec![
52 "id".into(),
53 "funnel_id".into(),
54 "session_id".into(),
55 ]),
56 ]
57 }
58
59 fn dependencies(&self) -> Vec<&'static str> {
60 vec!["users"]
61 }
62
63 fn migrations(&self) -> Vec<Migration> {
64 extension_migrations!()
65 }
66}
67
68register_extension!(AnalyticsExtension);