use super::*;
pub struct System {
opts: GeneralOpt,
fields: Vec<SystemField>,
}
impl System {
pub fn new(opts: &GeneralOpt, fields: Vec<SystemField>) -> Self {
Self {
opts: opts.to_owned(),
fields,
}
}
}
impl Dumper for System {
fn dump_model(
&self,
ctx: &CommonFieldContext,
model: &model::Model,
output: &mut dyn Write,
round: &mut usize,
comma_flag: bool,
) -> Result<IterExecResult> {
let mut fields = self.fields.clone();
if self.opts.detail || self.opts.everything {
for key in model.system.cpus.keys() {
for subquery_id in
&enum_iterator::all::<model::SingleCpuModelFieldId>().collect::<Vec<_>>()
{
let value = subquery_id.clone();
fields.push(DumpField::FieldId(model::SystemModelFieldId::Cpus(
model::BTreeMapFieldId::new(Some(*key), value),
)));
}
}
}
match self.opts.output_format {
Some(OutputFormat::Raw) | None => write!(
output,
"{}",
print::dump_raw(
&fields,
ctx,
&model.system,
*round,
self.opts.repeat_title,
self.opts.disable_title,
self.opts.raw
)
)?,
Some(OutputFormat::Csv) => write!(
output,
"{}",
print::dump_csv(
&fields,
ctx,
&model.system,
*round,
self.opts.disable_title,
self.opts.raw
)
)?,
Some(OutputFormat::Tsv) => write!(
output,
"{}",
print::dump_tsv(
&fields,
ctx,
&model.system,
*round,
self.opts.disable_title,
self.opts.raw
)
)?,
Some(OutputFormat::KeyVal) => write!(
output,
"{}",
print::dump_kv(&fields, ctx, &model.system, self.opts.raw)
)?,
Some(OutputFormat::Json) => {
let par = print::dump_json(&fields, ctx, &model.system, self.opts.raw);
if comma_flag {
write!(output, ",{}", par)?;
} else {
write!(output, "{}", par)?;
}
}
Some(OutputFormat::OpenMetrics) => write!(
output,
"{}",
print::dump_openmetrics(&fields, ctx, &model.system)
)?,
};
*round += 1;
Ok(IterExecResult::Success)
}
}