use anyhow::{bail, Ok, Result}; use tracing::{error, info}; use paw_common::preclude::*; use std::time::Duration; /// 获取当前运行的系统服务版本 /// /// get /service/version pub async fn service_version() -> Result { let client = reqwest::Client::new(); let response = client .get(format!("{}/service/version", service_url())) .timeout(Duration::from_millis(100)) // 由于正常情况下,系统服务响应非常快,为了加快检查系统服务是否正常,设置较短的超时 .send() .await?; if response.status().is_success() { let result: CoreResponse = response.json().await?; Ok(result.data) } else { bail!("Failed to get version: {}", response.text().await?); } } /// 停止系统服务 /// /// post /service/stop pub async fn stop_service() -> Result<()> { let client = reqwest::Client::new(); let response = client .post(format!("{}/service/stop", service_url())) .send() .await?; if response.status().is_success() { let _result: CoreResponse<()> = response.json().await?; info!("Successfully stop service."); Ok(()) } else { error!("Failed to stop service: {}", response.text().await?); bail!("Failed to stop service") } } /// 启动核心 /// /// post /core/start pub async fn start_core(config: CoreConfig) -> Result<()> { let client = reqwest::Client::new(); let response = client .post(format!("{}/core/start", service_url())) .json(&config) .send() .await?; if response.status().is_success() { let _result: CoreResponse<()> = response.json().await?; info!("Successfully start core."); Ok(()) } else { error!("Failed to start core: {}", response.text().await?); bail!("Failed to start core") } } /// 停止核心 /// /// post /core/stop pub async fn stop_core() -> Result<()> { let client = reqwest::Client::new(); let response = client .post(format!("{}/core/stop", service_url())) .send() .await?; if response.status().is_success() { let _result: CoreResponse<()> = response.json().await?; info!("Successfully stop core."); Ok(()) } else { error!("Failed to stop core: {}", response.text().await?); bail!("Failed to stop core") } } /// 重启核心 /// /// post /core/restart pub async fn restart_core(config: CoreConfig) -> Result<()> { let client = reqwest::Client::new(); let response = client .post(format!("{}/core/restart", service_url())) .json(&config) .send() .await?; if response.status().is_success() { let _result: CoreResponse<()> = response.json().await?; info!("Successfully restart core."); Ok(()) } else { error!("Failed to restart core: {}", response.text().await?); bail!("Failed to restart core") } }