///| Dashboard provides a visual representation of the RelayQueue state.
pub struct Dashboard[T] {
queue : RelayQueue[T]
backend : InMemoryBackend[T]
}
///| new creates a new dashboard for the provided queue and backend.
pub fn[T] Dashboard::new(queue : RelayQueue[T], backend : InMemoryBackend[T]) -> Dashboard[T] {
{ queue: queue, backend: backend }
}
///| render prints an ANSI color-coded snapshot of the current queue state.
pub fn[T] Dashboard::render(self : Dashboard[T]) -> Unit {
let main_size = self.queue.size()
let dlq_size = self.backend.dlq_size()
let in_flight = self.backend.in_flight.length()
println("\u001b[2J\u001b[H") // Clear screen and reset cursor
println("\u001b[1;36m=== RELAY MESSAGE QUEUE DASHBOARD ===\u001b[0m")
println("\u001b[33mStatus: \u001b[32mRUNNING\u001b[0m")
println("-------------------------------------")
println("\u001b[1mMain Queue:\u001b[0m \{main_size} messages")
println("\u001b[1mIn-Flight:\u001b[0m \{in_flight} messages")
println("\u001b[1;31mDead Letters:\u001b[0m \{dlq_size} messages")
println("-------------------------------------")
println("\u001b[90mLast Update: real-time snapshot\u001b[0m")
}
///| start_auto_render starts an infinite loop of rendering.
pub fn[T] Dashboard::start_auto_render(self : Dashboard[T]) -> Unit {
for ;; {
self.render()
}
}