Skip to main content

Mountain/IPC/WindAirCommands/
GetAirStatus.rs

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