Skip to content

Commit 532d286

Browse files
committed
Move data to struct
1 parent 4933291 commit 532d286

File tree

1 file changed

+37
-12
lines changed

1 file changed

+37
-12
lines changed

src/main.rs

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use ipmi_rs::connection::{IpmiConnection, LogicalUnit, Message, NetFn, Request};
99
mod common;
1010

1111
#[derive(Parser)]
12-
pub struct Command {
12+
struct Command {
1313
#[clap(flatten)]
1414
common: CommonOpts,
1515
}
@@ -34,8 +34,19 @@ fn get_message() -> std::io::Result<Message> {
3434
))
3535
}
3636

37+
pub struct PowerConsumption {
38+
grp_id: u8, /* first byte: Group Extension ID */
39+
curr_pwr: u16,
40+
min_sample: u16,
41+
max_sample: u16,
42+
avg_pwr: u16,
43+
time_stamp: u32, /* time since epoch */
44+
sample: u32,
45+
state: u8,
46+
}
47+
3748
// See: https://github.com/ipmitool/ipmitool/blob/IPMITOOL_1_8_19/lib/ipmi_dcmi.c#L1398-L1454
38-
fn ipmi_dcmi_pwr_rd(ipmi: IpmiConnectionEnum) -> Result<(), Error> {
49+
pub fn ipmi_dcmi_pwr_rd(ipmi: IpmiConnectionEnum) -> Result<PowerConsumption, Error> {
3950
let message = get_message()?;
4051

4152
let mut request: Request = Request::new(message, LogicalUnit::Zero);
@@ -63,53 +74,64 @@ fn ipmi_dcmi_pwr_rd(ipmi: IpmiConnectionEnum) -> Result<(), Error> {
6374
state: u8,
6475
});
6576
let view = power_data::View::new(response_data);
66-
//let grp_id: u8 = view.grp_id().read();
77+
let grp_id: u8 = view.grp_id().read();
6778
let curr_pwr: u16 = view.curr_pwr().read();
6879
let min_sample: u16 = view.min_sample().read();
6980
let max_sample: u16 = view.max_sample().read();
7081
let avg_pwr: u16 = view.avg_pwr().read();
7182
let time_stamp: u32 = view.time_stamp().read();
72-
let date_time = Utc.timestamp_opt(time_stamp as i64, 0).unwrap();
7383
let sample: u32 = view.sample().read();
7484
let state: u8 = view.state().read();
85+
Ok(PowerConsumption {
86+
grp_id,
87+
curr_pwr,
88+
min_sample,
89+
max_sample,
90+
avg_pwr,
91+
time_stamp,
92+
sample,
93+
state,
94+
})
95+
}
7596

97+
pub fn ipmi_dcmi_pwr_format_text(pwr: PowerConsumption) {
98+
let date_time = Utc.timestamp_opt(pwr.time_stamp as i64, 0).unwrap();
7699
//println!("grp_id: {}:{:02X?}", grp_id, grp_id);
77100
println!("");
78101
println!(
79102
" Instantaneous power reading : {:<8} Watts",
80-
curr_pwr
103+
pwr.curr_pwr
81104
);
82105
println!(
83106
" Minimum during sampling period : {:<8} Watts",
84-
min_sample
107+
pwr.min_sample
85108
);
86109
println!(
87110
" Maximum during sampling period : {:<8} Watts",
88-
max_sample
111+
pwr.max_sample
89112
);
90113

91114
println!(
92115
" Average power reading over sample period : {:<8} Watts",
93-
avg_pwr
116+
pwr.avg_pwr
94117
);
95118
println!(
96119
" IPMI timestamp : {}",
97120
date_time
98121
);
99122
println!(
100123
" Sampling period : {} Milliseconds",
101-
sample
124+
pwr.sample
102125
);
103126
println!(
104127
" Power reading state is : {}",
105-
match state {
128+
match pwr.state {
106129
0x40 => "activated",
107130
_ => "deactivated",
108131
}
109132
);
110133
println!("");
111134
println!("");
112-
Ok(())
113135
}
114136

115137
fn main() -> std::io::Result<()> {
@@ -119,5 +141,8 @@ fn main() -> std::io::Result<()> {
119141

120142
let command = Command::parse();
121143
let ipmi = command.common.get_connection()?;
122-
ipmi_dcmi_pwr_rd(ipmi)
144+
match ipmi_dcmi_pwr_rd(ipmi) {
145+
Ok(data) => Ok(ipmi_dcmi_pwr_format_text(data)),
146+
Err(err) => Err(err),
147+
}
123148
}

0 commit comments

Comments
 (0)