init commit
This commit is contained in:
commit
f7b750580c
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/target
|
5
Cargo.lock
generated
Normal file
5
Cargo.lock
generated
Normal file
@ -0,0 +1,5 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
[[package]]
|
||||
name = "rs_blocks"
|
||||
version = "0.1.0"
|
9
Cargo.toml
Normal file
9
Cargo.toml
Normal file
@ -0,0 +1,9 @@
|
||||
[package]
|
||||
name = "rs_blocks"
|
||||
version = "0.1.0"
|
||||
authors = ["mustafa salih <mustafasalih1991@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
11
src/date.rs
Normal file
11
src/date.rs
Normal file
@ -0,0 +1,11 @@
|
||||
use std::process::Command;
|
||||
|
||||
pub fn fmt_date(ft: &str) -> String {
|
||||
let cmd = format!("date +\"{}\"", ft);
|
||||
let cmd = Command::new("sh").arg("-c").args(&[cmd]).output().unwrap();
|
||||
let result = String::from_utf8_lossy(&cmd.stdout)
|
||||
.to_string()
|
||||
.trim()
|
||||
.to_string();
|
||||
format!(" {} │", result)
|
||||
}
|
19
src/disk.rs
Normal file
19
src/disk.rs
Normal file
@ -0,0 +1,19 @@
|
||||
use std::process::Command;
|
||||
|
||||
pub fn disk_free() -> String {
|
||||
let cmd = Command::new("sh")
|
||||
.arg("-c")
|
||||
.args(&["df -h"])
|
||||
.output()
|
||||
.unwrap();
|
||||
let output = String::from_utf8_lossy(&cmd.stdout);
|
||||
let mut disk_used = String::new();
|
||||
for line in output.lines() {
|
||||
if line.ends_with('/') {
|
||||
let splited = line.split_whitespace().collect::<Vec<&str>>();
|
||||
disk_used = splited[2].to_string();
|
||||
break;
|
||||
}
|
||||
}
|
||||
format!(" {} │", disk_used)
|
||||
}
|
26
src/main.rs
Normal file
26
src/main.rs
Normal file
@ -0,0 +1,26 @@
|
||||
use std::process::Command;
|
||||
use std::thread;
|
||||
use std::time::Duration;
|
||||
|
||||
mod date;
|
||||
mod disk;
|
||||
mod mem;
|
||||
|
||||
fn main() {
|
||||
loop {
|
||||
let args = format!(
|
||||
"{}{}{}",
|
||||
disk::disk_free(),
|
||||
mem::mem().unwrap(),
|
||||
date::fmt_date("%d %b, %I:%M:%S %p")
|
||||
);
|
||||
|
||||
Command::new("xsetroot")
|
||||
.arg("-name")
|
||||
.arg(args)
|
||||
.output()
|
||||
.unwrap();
|
||||
|
||||
thread::sleep(Duration::new(1, 0));
|
||||
}
|
||||
}
|
66
src/mem.rs
Normal file
66
src/mem.rs
Normal file
@ -0,0 +1,66 @@
|
||||
use std::fs::File;
|
||||
use std::io::Read;
|
||||
//MemUsed = Memtotal + Shmem - MemFree - Buffers - Cached - SReclaimable
|
||||
pub fn mem() -> Result<String, std::io::Error> {
|
||||
let mut buf = String::new();
|
||||
|
||||
File::open("/proc/meminfo")?.read_to_string(&mut buf)?;
|
||||
|
||||
let mut mem_total: u32 = 0;
|
||||
let mut shmem: u32 = 0;
|
||||
let mut mem_free: u32 = 0;
|
||||
let mut mem_buffers: u32 = 0;
|
||||
let mut mem_cached: u32 = 0;
|
||||
let mut mem_srecl: u32 = 0;
|
||||
|
||||
for line in buf.lines() {
|
||||
if mem_total > 0
|
||||
&& shmem > 0
|
||||
&& mem_free > 0
|
||||
&& mem_buffers > 0
|
||||
&& mem_cached > 0
|
||||
&& mem_srecl > 0
|
||||
{
|
||||
break;
|
||||
}
|
||||
if line.starts_with("MemTotal") {
|
||||
assign_val(line, &mut mem_total);
|
||||
}
|
||||
if line.starts_with("SReclaimable") {
|
||||
assign_val(line, &mut mem_srecl)
|
||||
}
|
||||
if line.starts_with("Cached") {
|
||||
assign_val(line, &mut mem_cached)
|
||||
}
|
||||
|
||||
if line.starts_with("Shmem") {
|
||||
assign_val(line, &mut shmem);
|
||||
}
|
||||
|
||||
if line.starts_with("MemFree") {
|
||||
assign_val(line, &mut mem_free);
|
||||
}
|
||||
if line.starts_with("Buffers") {
|
||||
assign_val(line, &mut mem_buffers);
|
||||
}
|
||||
}
|
||||
|
||||
let mem_used = (mem_total + shmem - mem_free - mem_buffers - mem_cached - mem_srecl) / 1024;
|
||||
let result: String;
|
||||
if mem_used > 1000 {
|
||||
result = format!(" ▦ {:.1}G │", mem_used as f32 / 1000.0);
|
||||
} else {
|
||||
result = format!(" ▦ {}M │", mem_used);
|
||||
}
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
fn assign_val(line: &str, assignable: &mut u32) {
|
||||
let parsed: u32 = line.split(':').collect::<Vec<&str>>()[1]
|
||||
.trim()
|
||||
.split(' ')
|
||||
.collect::<Vec<&str>>()[0]
|
||||
.parse()
|
||||
.unwrap();
|
||||
*assignable = parsed;
|
||||
}
|
Loading…
Reference in New Issue
Block a user