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