oxgraph_postgres/
status.rs1use crate::{Engine, SyncHealth};
4
5#[derive(Clone, Debug, PartialEq, Eq)]
7pub struct EngineStatusReport {
8 pub loaded: bool,
10 pub node_count: u32,
12 pub edge_count: u32,
14 pub read_only: bool,
16 pub overlay_edge_count: usize,
18 pub tombstoned_edges: usize,
20 pub sync_overlay_edges: usize,
22 pub sync_tombstoned_edges: usize,
24 pub sync_tombstoned_nodes: usize,
26}
27
28impl EngineStatusReport {
29 #[must_use]
31 pub const fn unloaded() -> Self {
32 Self {
33 loaded: false,
34 node_count: 0,
35 edge_count: 0,
36 read_only: false,
37 overlay_edge_count: 0,
38 tombstoned_edges: 0,
39 sync_overlay_edges: 0,
40 sync_tombstoned_edges: 0,
41 sync_tombstoned_nodes: 0,
42 }
43 }
44
45 #[must_use]
47 pub fn from_engine(engine: &Engine) -> Self {
48 let status = engine.stats();
49 let health = engine.sync_health();
50 Self {
51 loaded: true,
52 node_count: status.node_count,
53 edge_count: status.edge_count,
54 read_only: status.read_only,
55 overlay_edge_count: status.overlay_edge_count,
56 tombstoned_edges: status.tombstoned_edges,
57 sync_overlay_edges: health.overlay_edges,
58 sync_tombstoned_edges: health.tombstoned_edges,
59 sync_tombstoned_nodes: health.tombstoned_nodes,
60 }
61 }
62
63 #[must_use]
69 pub fn to_json(&self) -> alloc::string::String {
70 if !self.loaded {
71 return "{\"loaded\":false}".into();
72 }
73 alloc::format!(
74 "{{\"loaded\":true,\"node_count\":{},\"edge_count\":{},\"read_only\":{},\
75\"overlay_edge_count\":{},\"tombstoned_edges\":{},\"sync_overlay_edges\":{},\
76\"sync_tombstoned_edges\":{},\"sync_tombstoned_nodes\":{}}}",
77 self.node_count,
78 self.edge_count,
79 self.read_only,
80 self.overlay_edge_count,
81 self.tombstoned_edges,
82 self.sync_overlay_edges,
83 self.sync_tombstoned_edges,
84 self.sync_tombstoned_nodes
85 )
86 }
87}
88
89#[derive(Clone, Copy, Debug, PartialEq, Eq)]
91pub struct SyncHealthReport {
92 pub overlay_edges: usize,
94 pub tombstoned_edges: usize,
96 pub tombstoned_nodes: usize,
98}
99
100impl From<SyncHealth> for SyncHealthReport {
101 fn from(health: SyncHealth) -> Self {
102 Self {
103 overlay_edges: health.overlay_edges,
104 tombstoned_edges: health.tombstoned_edges,
105 tombstoned_nodes: health.tombstoned_nodes,
106 }
107 }
108}
109
110impl SyncHealthReport {
111 #[must_use]
117 pub fn to_json(&self) -> alloc::string::String {
118 alloc::format!(
119 "{{\"overlay_edges\":{},\"tombstoned_edges\":{},\"tombstoned_nodes\":{}}}",
120 self.overlay_edges,
121 self.tombstoned_edges,
122 self.tombstoned_nodes
123 )
124 }
125}