Skip to main content

Mountain/IPC/WindAirCommands/
GetAirStatus.rs

1//! `GetAirStatus` Tauri command - call Air's status RPC and
2//! its health probe, fold both into an
3//! `AirServiceStatusDTO::Struct`.
4
5use crate::{
6	IPC::WindAirCommands::{AirServiceStatusDTO, GetAirAddress, GetOrCreateAirClient},
7	dev_log,
8};
9
10#[tauri::command]
11pub async fn GetAirStatus() -> Result<AirServiceStatusDTO::Struct, String> {
12	dev_log!("grpc", "[WindAirCommands] GetAirStatus called");
13
14	let air_address = GetAirAddress::Fn()?;
15
16	let client = GetOrCreateAirClient::Fn(air_address).await?;
17
18	let request_id = uuid::Uuid::new_v4().to_string();
19
20	let status = client
21		.get_status(request_id)
22		.await
23		.map_err(|e| format!("Failed to get Air status: {:?}", e))?;
24
25	let healthy = client.health_check().await.unwrap_or(false);
26
27	let result = AirServiceStatusDTO::Struct {
28		version:status.version,
29
30		uptime_seconds:status.uptime_seconds,
31
32		total_requests:status.total_requests,
33
34		successful_requests:status.successful_requests,
35
36		failed_requests:status.failed_requests,
37
38		active_requests:status.active_requests,
39
40		healthy,
41	};
42
43	dev_log!("grpc", "[WindAirCommands] Air status retrieved: healthy={}", result.healthy);
44
45	Ok(result)
46}