systemprompt_analytics/
extension.rs1use 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);