drasi_reaction_dashboard/
lib.rs1#![allow(unexpected_cfgs)]
16
17pub mod api;
20pub mod config;
21pub mod dashboard;
22pub mod descriptor;
23pub mod storage;
24pub mod websocket;
25
26pub use config::DashboardReactionConfig;
27pub use dashboard::DashboardReaction;
28pub use storage::{DashboardConfig, DashboardWidget, GridOptions, WidgetGrid};
29
30pub struct DashboardReactionBuilder {
32 id: String,
33 queries: Vec<String>,
34 host: String,
35 port: u16,
36 heartbeat_interval_ms: u64,
37 priority_queue_capacity: Option<usize>,
38 auto_start: bool,
39 predefined_dashboards: Vec<DashboardConfig>,
40}
41
42impl DashboardReactionBuilder {
43 pub fn new(id: impl Into<String>) -> Self {
45 let config = DashboardReactionConfig::default();
46 Self {
47 id: id.into(),
48 queries: Vec::new(),
49 host: config.host,
50 port: config.port,
51 heartbeat_interval_ms: config.heartbeat_interval_ms,
52 priority_queue_capacity: None,
53 auto_start: true,
54 predefined_dashboards: Vec::new(),
55 }
56 }
57
58 pub fn with_queries(mut self, queries: Vec<String>) -> Self {
60 self.queries = queries;
61 self
62 }
63
64 pub fn with_query(mut self, query_id: impl Into<String>) -> Self {
66 self.queries.push(query_id.into());
67 self
68 }
69
70 pub fn with_host(mut self, host: impl Into<String>) -> Self {
72 self.host = host.into();
73 self
74 }
75
76 pub fn with_port(mut self, port: u16) -> Self {
78 self.port = port;
79 self
80 }
81
82 pub fn with_heartbeat_interval_ms(mut self, heartbeat_interval_ms: u64) -> Self {
84 self.heartbeat_interval_ms = heartbeat_interval_ms;
85 self
86 }
87
88 pub fn with_priority_queue_capacity(mut self, capacity: usize) -> Self {
90 self.priority_queue_capacity = Some(capacity);
91 self
92 }
93
94 pub fn with_auto_start(mut self, auto_start: bool) -> Self {
96 self.auto_start = auto_start;
97 self
98 }
99
100 pub fn with_dashboard(mut self, dashboard: DashboardConfig) -> Self {
104 self.predefined_dashboards.push(dashboard);
105 self
106 }
107
108 pub fn with_config(mut self, config: DashboardReactionConfig) -> Self {
110 self.host = config.host;
111 self.port = config.port;
112 self.heartbeat_interval_ms = config.heartbeat_interval_ms;
113 self
114 }
115
116 pub fn build(self) -> anyhow::Result<DashboardReaction> {
118 let config = DashboardReactionConfig {
119 host: self.host,
120 port: self.port,
121 heartbeat_interval_ms: self.heartbeat_interval_ms,
122 };
123
124 Ok(DashboardReaction::from_builder(
125 self.id,
126 self.queries,
127 config,
128 self.priority_queue_capacity,
129 self.auto_start,
130 self.predefined_dashboards,
131 ))
132 }
133}
134
135#[cfg(test)]
136mod tests;
137
138#[cfg(feature = "dynamic-plugin")]
140drasi_plugin_sdk::export_plugin!(
141 plugin_id = "dashboard-reaction",
142 core_version = env!("CARGO_PKG_VERSION"),
143 lib_version = env!("CARGO_PKG_VERSION"),
144 plugin_version = env!("CARGO_PKG_VERSION"),
145 source_descriptors = [],
146 reaction_descriptors = [descriptor::DashboardReactionDescriptor],
147 bootstrap_descriptors = [],
148);