2025-04-14 19:17:53 +08:00

101 lines
2.9 KiB
Rust

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<String> {
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<String> = 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")
}
}