in below/dump/src/cgroup.rs [98:207]
fn dump_model(
&self,
ctx: &CommonFieldContext,
model: &model::Model,
output: &mut dyn Write,
round: &mut usize,
comma_flag: bool,
) -> Result<IterExecResult> {
fn output_cgroup(
handle: &Cgroup,
ctx: &CommonFieldContext,
model: &model::CgroupModel,
output: &mut dyn Write,
round: &mut usize,
json: bool,
jval: &mut Value,
) -> Result<()> {
let cgroup = &model.data;
//filter
let should_print = match (handle.select.as_ref(), handle.opts.filter.as_ref()) {
(Some(field_id), Some(filter)) => filter.is_match(
&cgroup
.query(&field_id)
.map_or("?".to_owned(), |v| v.to_string()),
),
_ => true,
};
if should_print {
match handle.opts.output_format {
Some(OutputFormat::Raw) | None => write!(
output,
"{}",
print::dump_raw_indented(
&handle.fields,
ctx,
cgroup,
*round,
handle.opts.repeat_title,
handle.opts.disable_title,
handle.opts.raw,
)
)?,
Some(OutputFormat::Csv) => write!(
output,
"{}",
print::dump_csv(
&handle.fields,
ctx,
cgroup,
*round,
handle.opts.disable_title,
handle.opts.raw,
)
)?,
Some(OutputFormat::KeyVal) => write!(
output,
"{}",
print::dump_kv(&handle.fields, ctx, cgroup, handle.opts.raw)
)?,
Some(OutputFormat::Json) => {
*jval = print::dump_json(&handle.fields, ctx, cgroup, handle.opts.raw);
jval["children"] = json!([]);
}
};
*round += 1;
}
let mut children = Vec::from_iter(&model.children);
//sort
if let Some(field_id) = &handle.select {
if handle.opts.sort {
model::sort_queriables(&mut children, &field_id.to_owned().into(), false);
}
if handle.opts.rsort {
model::sort_queriables(&mut children, &field_id.to_owned().into(), true);
}
if (handle.opts.sort || handle.opts.rsort) && handle.opts.top != 0 {
children.truncate(handle.opts.top as usize);
}
}
for child_cgroup in &children {
let mut child = json!({});
output_cgroup(handle, ctx, child_cgroup, output, round, json, &mut child)?;
if json && child["children"].is_array() {
// Parent does not match, but child does, we should also render parent.
if !jval["children"].is_array() {
*jval = print::dump_json(&handle.fields, ctx, cgroup, handle.opts.raw);
jval["children"] = json!([]);
}
jval["children"].as_array_mut().unwrap().push(child);
}
}
Ok(())
}
let json = self.opts.output_format == Some(OutputFormat::Json);
let mut jval = json!({});
output_cgroup(&self, ctx, &model.cgroup, output, round, json, &mut jval)?;
match (json, comma_flag) {
(true, true) => write!(output, ",{}", jval)?,
(true, false) => write!(output, "{}", jval)?,
_ => {}
};
Ok(IterExecResult::Success)
}