systemprompt_logging/
extension.rs1use systemprompt_extension::prelude::*;
8
9#[derive(Debug, Clone, Copy, Default)]
10pub struct LoggingExtension;
11
12impl Extension for LoggingExtension {
13 fn metadata(&self) -> ExtensionMetadata {
14 ExtensionMetadata {
15 id: "logging",
16 name: "Logging",
17 version: env!("CARGO_PKG_VERSION"),
18 }
19 }
20
21 fn is_required(&self) -> bool {
22 true
23 }
24
25 fn schemas(&self) -> Vec<SchemaDefinition> {
26 vec![
27 SchemaDefinition::new("logs", include_str!("../schema/log.sql")).with_required_columns(
28 vec![
29 "id".into(),
30 "timestamp".into(),
31 "level".into(),
32 "module".into(),
33 "message".into(),
34 ],
35 ),
36 SchemaDefinition::new("analytics_events", include_str!("../schema/analytics.sql"))
37 .with_required_columns(vec![
38 "id".into(),
39 "user_id".into(),
40 "event_type".into(),
41 "event_category".into(),
42 "severity".into(),
43 "timestamp".into(),
44 ]),
45 SchemaDefinition::new(
46 "log_rollup_hourly",
47 include_str!("../schema/log_rollup_hourly.sql"),
48 )
49 .with_required_columns(vec![
50 "bucket".into(),
51 "level".into(),
52 "module".into(),
53 "log_count".into(),
54 ]),
55 SchemaDefinition::sql_only(include_str!("../schema/trace_facts_logs.sql")),
56 SchemaDefinition::new(
57 "analytics_link_click_rollup_hourly",
58 include_str!("../schema/analytics_link_click_rollup_hourly.sql"),
59 )
60 .with_required_columns(vec![
61 "bucket".into(),
62 "endpoint".into(),
63 "clicks".into(),
64 ]),
65 SchemaDefinition::sql_only(include_str!("../schema/analytics_event_link_facts.sql")),
66 ]
67 }
68
69 fn migrations(&self) -> Vec<Migration> {
70 extension_migrations!()
71 }
72
73 fn dependencies(&self) -> Vec<&'static str> {
74 vec!["database", "users"]
75 }
76}
77
78register_extension!(LoggingExtension);