nu_command/system/sys/
mem.rs

1use nu_engine::command_prelude::*;
2use sysinfo::System;
3
4#[derive(Clone)]
5pub struct SysMem;
6
7impl Command for SysMem {
8    fn name(&self) -> &str {
9        "sys mem"
10    }
11
12    fn signature(&self) -> Signature {
13        Signature::build("sys mem")
14            .filter()
15            .category(Category::System)
16            .input_output_types(vec![(Type::Nothing, Type::record())])
17    }
18
19    fn description(&self) -> &str {
20        "View information about the system memory."
21    }
22
23    fn run(
24        &self,
25        _engine_state: &EngineState,
26        _stack: &mut Stack,
27        call: &Call,
28        _input: PipelineData,
29    ) -> Result<PipelineData, ShellError> {
30        Ok(mem(call.head).into_pipeline_data())
31    }
32
33    fn examples(&self) -> Vec<Example> {
34        vec![Example {
35            description: "Show info about the system memory",
36            example: "sys mem",
37            result: None,
38        }]
39    }
40}
41
42fn mem(span: Span) -> Value {
43    let mut sys = System::new();
44    sys.refresh_memory();
45
46    let record = record! {
47        "total" => Value::filesize(sys.total_memory() as i64, span),
48        "free" => Value::filesize(sys.free_memory() as i64, span),
49        "used" => Value::filesize(sys.used_memory() as i64, span),
50        "available" => Value::filesize(sys.available_memory() as i64, span),
51        "swap total" => Value::filesize(sys.total_swap() as i64, span),
52        "swap free" => Value::filesize(sys.free_swap() as i64, span),
53        "swap used" => Value::filesize(sys.used_swap() as i64, span),
54    };
55
56    Value::record(record, span)
57}