Skip to main content

AirLibrary/Client/AirClient/
GetStatus.rs

1//! `AirClient::GetStatus` - fetches a wide snapshot of the Air daemon's
2//! runtime status: version string, uptime, request counters,
3//! response-time average, memory + CPU usage, in-flight request count.
4//! Intended for status dashboards / health checks that need richer detail
5//! than [`AirClient::HealthCheck`] returns.
6
7use tonic::Request;
8
9use crate::{
10	AirError,
11	Client::AirClient::{AirClient, AirStatus},
12	Vine::Generated::air::StatusRequest,
13	dev_log,
14};
15
16impl AirClient {
17	/// Gets the Air daemon status snapshot.
18	pub async fn GetStatus(&self, request_id:String) -> Result<AirStatus::Struct, AirError> {
19		dev_log!("grpc", "[AirClient] Getting Air daemon status");
20
21		let RequestPayload = StatusRequest { request_id };
22
23		let Client = self
24			.Client()
25			.ok_or_else(|| AirError::Network("Air client not initialized".to_string()))?;
26
27		let mut ClientGuard = Client.lock().await;
28
29		match ClientGuard.get_status(Request::new(RequestPayload)).await {
30			Ok(Response) => {
31				let Response = Response.into_inner();
32
33				dev_log!(
34					"grpc",
35					"[AirClient] Status retrieved. Active requests: {}",
36					Response.active_requests
37				);
38
39				Ok(AirStatus::Struct {
40					version:Response.version,
41					uptime_seconds:Response.uptime_seconds,
42					total_requests:Response.total_requests,
43					successful_requests:Response.successful_requests,
44					failed_requests:Response.failed_requests,
45					average_response_time:Response.average_response_time,
46					memory_usage_mb:Response.memory_usage_mb,
47					cpu_usage_percent:Response.cpu_usage_percent,
48					active_requests:Response.active_requests,
49				})
50			},
51
52			Err(Status) => {
53				dev_log!("grpc", "error: [AirClient] Get status RPC error: {}", Status);
54
55				Err(AirError::Network(format!("Get status RPC error: {}", Status)))
56			},
57		}
58	}
59}