From f3cc375a32abcef60b8e843a03150d55c9fce05a Mon Sep 17 00:00:00 2001 From: Mohamed Ayaan Date: Fri, 24 Mar 2023 10:06:45 +0530 Subject: [PATCH] Hello there is it me you are looking for? --- SysModule/src/BATStat/batfuncs.rs | 70 ++++++++++++++++++++++++ SysModule/src/BATStat/mod.rs | 1 + SysModule/src/CPUStat/statfuncs.rs | 14 ++--- SysModule/src/data.proto | 7 +++ SysModule/src/main.rs | 87 ++++++++++++++++++++---------- SysPerfTUI/globals/globals.go | 7 ++- SysPerfTUI/go.mod | 14 ++--- SysPerfTUI/go.sum | 28 ++++++++++ SysPerfTUI/grpc/data.proto | 8 +++ 9 files changed, 194 insertions(+), 42 deletions(-) create mode 100644 SysModule/src/BATStat/batfuncs.rs create mode 100644 SysModule/src/BATStat/mod.rs diff --git a/SysModule/src/BATStat/batfuncs.rs b/SysModule/src/BATStat/batfuncs.rs new file mode 100644 index 0000000..54c74c9 --- /dev/null +++ b/SysModule/src/BATStat/batfuncs.rs @@ -0,0 +1,70 @@ +use crate::BatUsageProtobuf; +use std::{fs::File, io::prelude::*, io::BufReader, io::Read, thread, time}; + +#[derive(Debug)] +pub struct BatUsage { + Charge_Full_Design: u32, + Charge_Full: u32, + Charge_Now: u32, +} + +impl BatUsage { + pub fn new() -> BatUsage { + BatUsage { + Charge_Full_Design: 0, + Charge_Full: 0, + Charge_Now: 0, + } + } + + fn update_values(&mut self, line_vector: Vec) { + self.Charge_Full_Design = line_vector[0]; + self.Charge_Full = line_vector[1]; + self.Charge_Now = line_vector[2]; + } + + pub fn convert_to_protobuf(&self) -> BatUsageProtobuf { + BatUsageProtobuf { + charge_full_design: self.Charge_Full_Design, + charge_full: self.Charge_Full, + charge_now: self.Charge_Now, + } + } +} + +pub async fn main_bat_stat_handler(statefull_bat_usage: &mut BatUsage) { + println!("This is bat"); + loop { + let statbatinfo_fd = match File::open("/sys/class/power_supply/BAT0/uevent") { + Ok(x) => x, + Err(_) => { + // panic!("I use Arch BTW."); + let statbatinfo_fd = match File::open("/sys/class/power_supply/BAT1/uevent") { + Ok(x) => x, + Err(_) => { + panic!("Ok, what the hell are you using?"); + } + }; + statbatinfo_fd + } + }; + + let mut buff_reader = BufReader::new(&statbatinfo_fd); + let mut batinfo = String::new(); + let _ = buff_reader.read_to_string(&mut batinfo); + + let mut lines: Vec<&str> = batinfo.split("\n").into_iter().collect(); + let mut temp_vec: Vec = Vec::new(); + // println!("{:?}", lines); + + for i in 9..12 { + let pos1 = lines[i].chars().position(|c| c == '=').unwrap() + 1; + let finalvalue = lines[i].get(pos1..).unwrap(); + let line_val = finalvalue.trim().parse::().unwrap(); + temp_vec.push(line_val); + // println!("{:?}", temp_vec); + } + statefull_bat_usage.update_values(temp_vec); + thread::sleep(time::Duration::from_millis(100)); + } +} diff --git a/SysModule/src/BATStat/mod.rs b/SysModule/src/BATStat/mod.rs new file mode 100644 index 0000000..aae30bf --- /dev/null +++ b/SysModule/src/BATStat/mod.rs @@ -0,0 +1 @@ +pub mod batfuncs; diff --git a/SysModule/src/CPUStat/statfuncs.rs b/SysModule/src/CPUStat/statfuncs.rs index aea9bb2..8184570 100644 --- a/SysModule/src/CPUStat/statfuncs.rs +++ b/SysModule/src/CPUStat/statfuncs.rs @@ -194,23 +194,23 @@ impl MultiCpuUsage { } }; let mut usage = self.calculate_recent_usage(needed_cpu_id) as f32; - if usage.is_nan(){ + if usage.is_nan() { usage = 0.0 } CpuUsageProtobuf { cpu_id: String::from(needed_cpu_id.to_string()), - cpu_usage: usage + cpu_usage: usage, } } - pub fn convert_to_detail_protobuf(&self) -> crate::InitDataProtobuf{ + pub fn convert_to_detail_protobuf(&self) -> crate::InitDataProtobuf { let mut largest = 0; - for i in self.irq_usage.keys(){ - if *i>largest{ + for i in self.irq_usage.keys() { + if *i > largest { largest = *i } } - crate::InitDataProtobuf{ - number_of_cpu : largest + crate::InitDataProtobuf { + number_of_cpu: largest, } } } diff --git a/SysModule/src/data.proto b/SysModule/src/data.proto index 1c834e5..69d1019 100644 --- a/SysModule/src/data.proto +++ b/SysModule/src/data.proto @@ -13,6 +13,11 @@ message MemUsage { uint32 Mem_Buffer = 4; uint32 Mem_Cached = 5; } +message BatUsage { + uint32 Charge_Full_Design = 1; + uint32 Charge_Full = 2; + uint32 Charge_Now = 3; +} message InitData { int32 number_of_cpu = 1; @@ -21,6 +26,7 @@ message InitData { message EmptyReq {} message MemUsageRequest { float prev_mem_usage = 1; } +message BatUsageRequest { float prev_bat_usage = 1; } message CpuUsageRequest { string needed_cpu_usage = 1; } service FetchData { @@ -30,3 +36,4 @@ service FetchData { } service FetchDataMem { rpc FetchMemUsage(MemUsageRequest) returns (MemUsage); } +service FetchDataBat{ rpc FetchBatUsage(BatUsageRequest) returns (BatUsage); } diff --git a/SysModule/src/main.rs b/SysModule/src/main.rs index 043a763..2411288 100644 --- a/SysModule/src/main.rs +++ b/SysModule/src/main.rs @@ -5,6 +5,7 @@ #![feature(get_mut_unchecked)] //Local module system : +mod BATStat; mod CPUStat; mod MEMStat; @@ -21,44 +22,60 @@ use tonic::transport::Server; pub mod protobuf { tonic::include_proto!("data.protobuf"); } +use protobuf::BatUsage as BatUsageProtobuf; use protobuf::CpuUsage as CpuUsageProtobuf; -use protobuf::MemUsage as MemUsageProtobuf; use protobuf::InitData as InitDataProtobuf; -use protobuf::{CpuUsageRequest, MemUsageRequest, EmptyReq}; +use protobuf::MemUsage as MemUsageProtobuf; +use protobuf::{BatUsageRequest, CpuUsageRequest, EmptyReq, MemUsageRequest}; + //Server trait +use protobuf::fetch_data_bat_server::{FetchDataBat, FetchDataBatServer}; +use protobuf::fetch_data_mem_server::{FetchDataMem, FetchDataMemServer}; use protobuf::fetch_data_server::{FetchData, FetchDataServer}; -use protobuf::fetch_data_mem_server::{ FetchDataMem, FetchDataMemServer}; + +//Rust side structs +use BATStat::batfuncs::BatUsage; +use CPUStat::statfuncs::MultiCpuUsage; +use MEMStat::memfuncs::MemUsage; #[tonic::async_trait] impl FetchData for MultiCpuUsage { async fn init_cpu_detail( &self, req: tonic::Request, - ) -> std::result::Result, tonic::Status> { - return Ok(tonic::Response::new(self.convert_to_detail_protobuf())) - } + ) -> std::result::Result, tonic::Status> { + return Ok(tonic::Response::new(self.convert_to_detail_protobuf())); + } async fn fetch_cpu_usage( &self, req: tonic::Request, - ) -> std::result::Result, tonic::Status> { + ) -> std::result::Result, tonic::Status> { let request_paylod = req.into_inner(); - return Ok(tonic::Response::new(self.convert_to_protobuf(request_paylod))); - } + return Ok(tonic::Response::new( + self.convert_to_protobuf(request_paylod), + )); + } } #[tonic::async_trait] -impl FetchDataMem for MemUsage{ +impl FetchDataMem for MemUsage { async fn fetch_mem_usage( &self, req: tonic::Request, - ) -> std::result::Result, tonic::Status> { + ) -> std::result::Result, tonic::Status> { return Ok(tonic::Response::new(self.convert_to_protobuf())); } } -//Rust side structs -use CPUStat::statfuncs::MultiCpuUsage; -use MEMStat::memfuncs::MemUsage; +#[tonic::async_trait] +impl FetchDataBat for BatUsage { + async fn fetch_bat_usage( + &self, + req: tonic::Request, + ) -> std::result::Result, tonic::Status> { + return Ok(tonic::Response::new(self.convert_to_protobuf())); + } +} #[tokio::main] async fn main() -> Result<()> { @@ -66,37 +83,53 @@ async fn main() -> Result<()> { //Non Blocking spawns : /* tokio::spawn(async { - MEMStat::memfuncs::main_mem_stat_handler(mem_tx).await; - }); - */ + MEMStat::memfuncs::main_mem_stat_handler(mem_tx).await; + }); + */ let mut statefull_cpu_usage = MultiCpuUsage::new(); let mut arc_statefull_cpu_usage = Arc::new(statefull_cpu_usage); let clone = Arc::clone(&arc_statefull_cpu_usage); let mut statefull_mem_usage = MemUsage::new(); - let mut arc_statefull_mem_usage = Arc:: new(statefull_mem_usage); - let clone1=Arc::clone(&arc_statefull_mem_usage); + let mut arc_statefull_mem_usage = Arc::new(statefull_mem_usage); + let clone1 = Arc::clone(&arc_statefull_mem_usage); + let mut statefull_bat_usage = BatUsage::new(); + let mut arc_statefull_bat_usage = Arc::new(statefull_bat_usage); + let clone2 = Arc::clone(&arc_statefull_bat_usage); - tokio::spawn(async move{ + tokio::spawn(async move { let addr = "[::1]:5001".parse().unwrap(); println!("Listening on port 5001"); Server::builder() .add_service(FetchDataServer::from_arc(clone)) .add_service(FetchDataMemServer::from_arc(clone1)) + .add_service(FetchDataBatServer::from_arc(clone2)) .serve(addr) .await; }); - unsafe{ - tokio::spawn(async move{ - CPUStat::statfuncs::main_cpu_stat_handler(&mut Arc::get_mut_unchecked(&mut arc_statefull_cpu_usage)).await; + unsafe { + tokio::spawn(async move { + CPUStat::statfuncs::main_cpu_stat_handler(&mut Arc::get_mut_unchecked( + &mut arc_statefull_cpu_usage, + )) + .await; + }); + tokio::spawn(async move { + MEMStat::memfuncs::main_mem_stat_handler(&mut Arc::get_mut_unchecked( + &mut arc_statefull_mem_usage, + )) + .await; }); - tokio::spawn(async move{ - MEMStat::memfuncs::main_mem_stat_handler(&mut Arc::get_mut_unchecked(&mut arc_statefull_mem_usage)).await; - }).await; + tokio::spawn(async move { + BATStat::batfuncs::main_bat_stat_handler(&mut Arc::get_mut_unchecked( + &mut arc_statefull_bat_usage, + )) + .await; + }) + .await; //Last await is to keep the main thread alive in the aysnc space. } - Ok(()) } diff --git a/SysPerfTUI/globals/globals.go b/SysPerfTUI/globals/globals.go index 4ad1ace..463c832 100644 --- a/SysPerfTUI/globals/globals.go +++ b/SysPerfTUI/globals/globals.go @@ -1,8 +1,9 @@ package globals import ( - "google.golang.org/grpc" "sync" + + "google.golang.org/grpc" ) var Mainwaitgroup *sync.WaitGroup @@ -24,3 +25,7 @@ var Mem_cached_percentage int32 var Mem_free float64 var Mem_free_percentage int32 + +var Charge_full_design int32 +var Charge_full int32 +var Charge_now int32 diff --git a/SysPerfTUI/go.mod b/SysPerfTUI/go.mod index daca8ea..b654df3 100644 --- a/SysPerfTUI/go.mod +++ b/SysPerfTUI/go.mod @@ -10,14 +10,14 @@ require ( require ( github.com/gdamore/encoding v1.0.0 // indirect - github.com/gdamore/tcell/v2 v2.5.1 // indirect + github.com/gdamore/tcell/v2 v2.6.0 // indirect github.com/golang/protobuf v1.5.2 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - github.com/mattn/go-runewidth v0.0.13 // indirect - github.com/rivo/uniseg v0.2.0 // indirect - golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect - golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e // indirect - golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 // indirect - golang.org/x/text v0.3.7 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/rivo/uniseg v0.4.3 // indirect + golang.org/x/net v0.0.0-20220722155237-a158d28d115b // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/term v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect ) diff --git a/SysPerfTUI/go.sum b/SysPerfTUI/go.sum index dc1af99..fbe07d6 100644 --- a/SysPerfTUI/go.sum +++ b/SysPerfTUI/go.sum @@ -8,6 +8,8 @@ github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdk github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell/v2 v2.5.1 h1:zc3LPdpK184lBW7syF2a5C6MV827KmErk9jGVnmsl/I= github.com/gdamore/tcell/v2 v2.5.1/go.mod h1:wSkrPaXoiIWZqW/g7Px4xc79di6FTcpB8tvaKJ6uGBo= +github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg= +github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -32,48 +34,74 @@ github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69 github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mum4k/termdash v0.17.0 h1:lAl5dTVSgQJLLAU42QspKFLr+SJWw2KGN+YPajNTMGg= github.com/mum4k/termdash v0.17.0/go.mod h1:inGde56cgA4QXe1Sb3eQIJQnN5CLDsmDjzda7TnNaxg= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b h1:PxfKdU9lEEDYjdIzOtC4qFWgkU2rGHdKlKowJSMN9h0= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220318055525-2edf467146b5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e h1:CsOuNlbOuf0mzxJIefr6Q4uAUetRUwZE4qt7VfzP+xo= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= diff --git a/SysPerfTUI/grpc/data.proto b/SysPerfTUI/grpc/data.proto index b2e595b..5f653c2 100644 --- a/SysPerfTUI/grpc/data.proto +++ b/SysPerfTUI/grpc/data.proto @@ -15,6 +15,12 @@ message MemUsage { uint32 Mem_Cached = 5; } +message BatUsage { + uint32 Charge_Full_Design = 1; + uint32 Charge_Full = 2; + uint32 Charge_Now = 3; +} + message InitData { int32 number_of_cpu = 1; // int32 number_of_partition = 2; @@ -22,6 +28,7 @@ message InitData { message EmptyReq {} message MemUsageRequest { float prev_mem_usage = 1; } +message BatUsageRequest { float prev_bat_usage = 1; } message CpuUsageRequest { string needed_cpu_usage = 1; } service FetchData { @@ -31,3 +38,4 @@ service FetchData { } service FetchDataMem { rpc FetchMemUsage(MemUsageRequest) returns (MemUsage); } +service FetchDataBat{ rpc FetchBatUsage(BatUsageRequest) returns (BatUsage); }