nu_command/system/sys/
mem.rs1use 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}