mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 10:21:52 +00:00
experimental features for zram and reset tor (#2299)
* experimental features for zram and reset tor * zram backend --------- Co-authored-by: Aiden McClelland <me@drbonez.dev>
This commit is contained in:
@@ -80,6 +80,7 @@ impl Database {
|
||||
.map(|x| format!("{x:X}"))
|
||||
.join(":"),
|
||||
system_start_time: Utc::now().to_rfc3339(),
|
||||
zram: false,
|
||||
},
|
||||
package_data: AllPackageData::default(),
|
||||
ui: serde_json::from_str(include_str!("../../../frontend/patchdb-ui-seed.json"))
|
||||
@@ -117,6 +118,8 @@ pub struct ServerInfo {
|
||||
pub pubkey: String,
|
||||
pub ca_fingerprint: String,
|
||||
pub system_start_time: String,
|
||||
#[serde(default)]
|
||||
pub zram: bool,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize, HasModel)]
|
||||
|
||||
@@ -85,6 +85,7 @@ pub fn main_api() -> Result<(), RpcError> {
|
||||
|
||||
#[command(subcommands(
|
||||
system::time,
|
||||
system::experimental,
|
||||
system::logs,
|
||||
system::kernel_logs,
|
||||
system::metrics,
|
||||
|
||||
@@ -24,6 +24,59 @@ use crate::{Error, ErrorKind, ResultExt};
|
||||
|
||||
pub const SYSTEMD_UNIT: &'static str = "embassyd";
|
||||
|
||||
#[command(subcommands(zram))]
|
||||
pub async fn experimental() -> Result<(), Error> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[command(display(display_none))]
|
||||
pub async fn zram(#[context] ctx: RpcContext, #[arg] enable: bool) -> Result<(), Error> {
|
||||
let mut db = ctx.db.handle();
|
||||
let zram = crate::db::DatabaseModel::new()
|
||||
.server_info()
|
||||
.zram()
|
||||
.get_mut(&mut db)
|
||||
.await?;
|
||||
if enable == *zram {
|
||||
return Ok(());
|
||||
}
|
||||
if enable {
|
||||
let mem_info = get_mem_info().await?;
|
||||
Command::new("modprobe")
|
||||
.arg("zram")
|
||||
.invoke(ErrorKind::Zram)
|
||||
.await?;
|
||||
tokio::fs::write("/sys/block/zram0/comp_algorithm", "lz4")
|
||||
.await
|
||||
.with_kind(ErrorKind::Zram)?;
|
||||
tokio::fs::write(
|
||||
"/sys/block/zram0/disksize",
|
||||
format!("{}M", mem_info.total.0 as u64 / 4),
|
||||
)
|
||||
.await
|
||||
.with_kind(ErrorKind::Zram)?;
|
||||
Command::new("mkswap")
|
||||
.arg("/dev/zram0")
|
||||
.invoke(ErrorKind::Zram)
|
||||
.await?;
|
||||
Command::new("swapon")
|
||||
.arg("-p")
|
||||
.arg("5")
|
||||
.arg("/dev/zram0")
|
||||
.invoke(ErrorKind::Zram)
|
||||
.await?;
|
||||
} else {
|
||||
Command::new("swapoff")
|
||||
.arg("/dev/zram0")
|
||||
.invoke(ErrorKind::Zram)
|
||||
.await?;
|
||||
tokio::fs::write("/sys/block/zram0/reset", "1")
|
||||
.await
|
||||
.with_kind(ErrorKind::Zram)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[command]
|
||||
pub async fn time() -> Result<String, Error> {
|
||||
Ok(Utc::now().to_rfc3339())
|
||||
@@ -699,7 +752,7 @@ async fn get_mem_info() -> Result<MetricsMemory, Error> {
|
||||
let swap_total = MebiBytes(swap_total_k as f64 / 1024.0);
|
||||
let swap_free = MebiBytes(swap_free_k as f64 / 1024.0);
|
||||
let swap_used = MebiBytes((swap_total_k - swap_free_k) as f64 / 1024.0);
|
||||
let percentage_used = Percentage(used.0 / total.0 * 100.0);
|
||||
let percentage_used = Percentage((total.0 - available.0) / total.0 * 100.0);
|
||||
Ok(MetricsMemory {
|
||||
percentage_used,
|
||||
total,
|
||||
|
||||
Reference in New Issue
Block a user