101 lines
2.9 KiB
Rust
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")
|
|
}
|
|
}
|