systemprompt_analytics/
extension.rs1use systemprompt_extension::prelude::*;
6
7#[derive(Debug, Clone, Copy, Default)]
8pub struct AnalyticsExtension;
9
10impl Extension for AnalyticsExtension {
11 fn metadata(&self) -> ExtensionMetadata {
12 ExtensionMetadata {
13 id: "analytics",
14 name: "Analytics",
15 version: env!("CARGO_PKG_VERSION"),
16 }
17 }
18
19 fn schemas(&self) -> Vec<SchemaDefinition> {
20 vec![
21 SchemaDefinition::new(
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::new(
31 "anomaly_thresholds",
32 include_str!("../schema/anomaly_thresholds.sql"),
33 )
34 .with_required_columns(vec!["metric_name".into()]),
35 SchemaDefinition::new(
36 "fingerprint_reputation",
37 include_str!("../schema/fingerprint_reputation.sql"),
38 )
39 .with_required_columns(vec!["fingerprint_hash".into()]),
40 SchemaDefinition::new("funnels", include_str!("../schema/funnels.sql"))
41 .with_required_columns(vec!["id".into(), "name".into()]),
42 SchemaDefinition::new(
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 fn migrations(&self) -> Vec<Migration> {
59 extension_migrations!()
60 }
61}
62
63register_extension!(AnalyticsExtension);