From 41463d0b73b9d32dc6c55518c1866768d0ace337 Mon Sep 17 00:00:00 2001 From: gallant Date: Sat, 21 Oct 2023 18:40:07 -0500 Subject: [PATCH] oh lord --- src/clock.rs | 3 ++- src/cpu.rs | 24 ++++++++++++++++-------- src/main.rs | 25 ++++++++++++++++--------- src/mem.rs | 21 +++++++++++++++++++++ 4 files changed, 55 insertions(+), 18 deletions(-) create mode 100644 src/mem.rs diff --git a/src/clock.rs b/src/clock.rs index f07fdbd..c2bb22d 100644 --- a/src/clock.rs +++ b/src/clock.rs @@ -1,4 +1,5 @@ use chrono::prelude::*; + pub struct Clock { pub command: String, } @@ -11,7 +12,7 @@ impl Clock { } pub fn update(&mut self) { - let t: DateTime = Utc::now(); + let t: DateTime = Local::now(); let time = t.format("%H:%M"); let date = t.format("%a %d. %b"); diff --git a/src/cpu.rs b/src/cpu.rs index bdcf65e..f4d49af 100644 --- a/src/cpu.rs +++ b/src/cpu.rs @@ -1,14 +1,22 @@ -use libc::mach_host_self; -use mach::message::mach_msg_type_number_t; - - - use std::io; use std::str; -use mach::kern_return::KERN_SUCCESS; -use mach::host_info::*; -use mach::machine::*; +use libc::mach_host_self; + +use mach::kern_return::KERN_SUCCESS; +use mach::host_info::{ + host_cpu_load_info_data_t, + host_info_t, + HOST_CPU_LOAD_INFO, + HOST_CPU_LOAD_INFO_COUNT +}; +use mach::machine::{ + CPU_STATE_MAX, + CPU_STATE_IDLE, + CPU_STATE_USER, + CPU_STATE_SYSTEM +}; +use mach::message::mach_msg_type_number_t; static TOPPROC: &str = "/bin/ps -Aceo pid,pcpu,comm -r"; static FILTER_PATTERN: &str = "com.apple."; diff --git a/src/main.rs b/src/main.rs index 98df362..338f37d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,17 +1,20 @@ mod cpu; mod clock; +//mod mem; not done yet, would like to find a different implementation of these shenanigans use std::env; use std::process; -use cpu::CPU; -use clock::Clock; use std::sync::Mutex; use std::sync::Arc; + +use cpu::CPU; +use clock::Clock; + use lazy_static::lazy_static; lazy_static!{ - static ref G_CPU: Arc> = Arc::new(Mutex::new(CPU::new())); - static ref G_CLOCK: Arc> = Arc::new(Mutex::new(Clock::new())); + static ref G_CPU: Arc>> = Arc::new(Mutex::new(Some(CPU::new()))); + static ref G_CLOCK: Arc>> = Arc::new(Mutex::new(Some(Clock::new()))); } @@ -44,17 +47,19 @@ pub extern "C" fn handler(env: sketchybar_rs::Env) { sketchybar_rs::message(&command).unwrap(); } else if sender == "routine" || sender == "forced" { // CPU and Clock routine updates - let mut cpu = G_CPU.lock().unwrap(); - let mut clock = G_CLOCK.lock().unwrap(); + let mut temp_cpu = G_CPU.lock().unwrap(); + let cpu = temp_cpu.as_mut().unwrap(); + let mut temp_clock = G_CLOCK.lock().unwrap(); + let clock = temp_clock.as_mut().unwrap(); cpu.update(); clock.update(); if !cpu.command.is_empty() && !clock.command.is_empty() { let command = format!("{} {}", cpu.command, clock.command); - sketchybar_rs::message(&command); + let _ = sketchybar_rs::message(&command); } - drop(cpu); - drop(clock); + drop(temp_clock); + drop(temp_cpu); } } @@ -69,5 +74,7 @@ fn main() { let bootstrap_name = args.next().unwrap(); sketchybar_rs::server_begin(handler, &bootstrap_name); + G_CPU.lock().unwrap().take(); + G_CLOCK.lock().unwrap().take(); } diff --git a/src/mem.rs b/src/mem.rs new file mode 100644 index 0000000..44c78b9 --- /dev/null +++ b/src/mem.rs @@ -0,0 +1,21 @@ +use std::io; + +static TOPPROC: &str = "/bin/ps -Aceo pid,pmem,comm -r"; +static FILTER_PATTERN: &str = "com.apple."; + +fn get_top_process(command: &str, filter_pattern: &str) -> Result { + let output = std::process::Command::new("sh") + .arg("-c") + .arg(command) + .output()?; + + let output_str = String::from_utf8_lossy(&output.stdout); + + let top_process = output_str.lines().nth(2).unwrap_or(""); + let top_process = top_process + .splitn(2, filter_pattern) + .last() + .unwrap_or(top_process); + + Ok(top_process.to_string()) +}