alopex_cli/output/
server.rs1use crate::models::{Column, DataType, Row, Value};
4
5pub fn status_columns() -> Vec<Column> {
6 vec![
7 Column::new("Version", DataType::Text),
8 Column::new("Uptime (s)", DataType::Text),
9 Column::new("Connections", DataType::Text),
10 Column::new("QPS", DataType::Text),
11 ]
12}
13
14pub fn status_row(
15 version: Option<&str>,
16 uptime_secs: Option<u64>,
17 connections: Option<u64>,
18 qps: Option<f64>,
19) -> Row {
20 Row::new(vec![
21 Value::Text(opt_text(version)),
22 Value::Text(opt_u64(uptime_secs)),
23 Value::Text(opt_u64(connections)),
24 Value::Text(opt_f64(qps)),
25 ])
26}
27
28pub fn metrics_columns() -> Vec<Column> {
29 vec![
30 Column::new("QPS", DataType::Text),
31 Column::new("Avg Latency (ms)", DataType::Text),
32 Column::new("P99 Latency (ms)", DataType::Text),
33 Column::new("Memory (MB)", DataType::Text),
34 Column::new("Active Connections", DataType::Text),
35 ]
36}
37
38pub fn metrics_row(
39 qps: Option<f64>,
40 avg_latency_ms: Option<f64>,
41 p99_latency_ms: Option<f64>,
42 memory_usage_mb: Option<u64>,
43 active_connections: Option<u64>,
44) -> Row {
45 Row::new(vec![
46 Value::Text(opt_f64(qps)),
47 Value::Text(opt_f64(avg_latency_ms)),
48 Value::Text(opt_f64(p99_latency_ms)),
49 Value::Text(opt_u64(memory_usage_mb)),
50 Value::Text(opt_u64(active_connections)),
51 ])
52}
53
54pub fn health_columns() -> Vec<Column> {
55 vec![
56 Column::new("Status", DataType::Text),
57 Column::new("Message", DataType::Text),
58 ]
59}
60
61pub fn health_row(status: Option<&str>, message: Option<&str>) -> Row {
62 Row::new(vec![
63 Value::Text(opt_text(status)),
64 Value::Text(opt_text(message)),
65 ])
66}
67
68pub fn compaction_columns() -> Vec<Column> {
69 vec![
70 Column::new("Status", DataType::Text),
71 Column::new("Message", DataType::Text),
72 ]
73}
74
75pub fn compaction_row(success: Option<bool>, message: Option<&str>) -> Row {
76 let result = match success {
77 Some(true) => "OK",
78 Some(false) => "Failed",
79 None => "N/A",
80 };
81 Row::new(vec![
82 Value::Text(result.to_string()),
83 Value::Text(opt_text(message)),
84 ])
85}
86
87fn opt_text(value: Option<&str>) -> String {
88 value.unwrap_or("N/A").to_string()
89}
90
91fn opt_u64(value: Option<u64>) -> String {
92 value
93 .map(|value| value.to_string())
94 .unwrap_or_else(|| "N/A".to_string())
95}
96
97fn opt_f64(value: Option<f64>) -> String {
98 value
99 .map(|value| format!("{:.2}", value))
100 .unwrap_or_else(|| "N/A".to_string())
101}