From 22cc55145063f4fe0c7808508a06e34adbb41828 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 13 Jun 2025 20:26:21 -0600 Subject: [PATCH] Sort /scheme/sys files --- src/scheme/sys/block.rs | 1 + src/scheme/sys/context.rs | 36 ++++++++++++++++++++++++++++++++++-- src/scheme/sys/iostat.rs | 3 ++- src/scheme/sys/syscall.rs | 7 ++----- 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/src/scheme/sys/block.rs b/src/scheme/sys/block.rs index 54fe5b19d5..3b64d10d8c 100644 --- a/src/scheme/sys/block.rs +++ b/src/scheme/sys/block.rs @@ -15,6 +15,7 @@ pub fn resource() -> Result> { rows.push((context.pid, context.name.clone(), context.status_reason)); } } + rows.sort_by_key(|row| row.0); for row in rows.iter() { let id: usize = row.0.into(); diff --git a/src/scheme/sys/context.rs b/src/scheme/sys/context.rs index 91f74b9c3c..219c152c4d 100644 --- a/src/scheme/sys/context.rs +++ b/src/scheme/sys/context.rs @@ -2,6 +2,7 @@ use alloc::{ string::{String, ToString}, vec::Vec, }; +use core::fmt::Write; use crate::{context, paging::PAGE_SIZE, syscall::error::Result}; @@ -10,6 +11,8 @@ pub fn resource() -> Result> { "{:<6}{:<6}{:<6}{:<6}{:<6}{:<6}{:<11}{:<12}{:<8}{}\n", "PID", "EUID", "EGID", "ENS", "STAT", "CPU", "AFFINITY", "TIME", "MEM", "NAME" ); + + let mut rows = Vec::new(); { let contexts = context::contexts(); for context_ref in contexts.iter().filter_map(|r| r.upgrade()) { @@ -86,8 +89,7 @@ pub fn resource() -> Result> { format!("{} B", memory) }; - string.push_str(&format!( - "{:<6}{:<6}{:<6}{:<6}{:<6}{:<6}{:<11}{:<12}{:<8}{}\n", + rows.push(( context.pid, context.euid, context.egid, @@ -101,6 +103,36 @@ pub fn resource() -> Result> { )); } } + rows.sort_by_key(|row| row.0); + + for ( + pid, + euid, + egid, + ens, + stat_string, + cpu_string, + affinity, + cpu_time_string, + memory_string, + name, + ) in rows + { + let _ = writeln!( + string, + "{:<6}{:<6}{:<6}{:<6}{:<6}{:<6}{:<11}{:<12}{:<8}{}", + pid, + euid, + egid, + ens, + stat_string, + cpu_string, + affinity, + cpu_time_string, + memory_string, + name, + ); + } Ok(string.into_bytes()) } diff --git a/src/scheme/sys/iostat.rs b/src/scheme/sys/iostat.rs index 39bc6f0963..a976ff2972 100644 --- a/src/scheme/sys/iostat.rs +++ b/src/scheme/sys/iostat.rs @@ -12,12 +12,13 @@ pub fn resource() -> Result> { for context_ref in contexts.iter().filter_map(|r| r.upgrade()) { let context = context_ref.read(); rows.push(( - context.debug_id, + context.pid, context.name.clone(), context.files.read().clone(), )); } } + rows.sort_by_key(|row| row.0); for (id, name, fs) in rows.iter() { let _ = writeln!(string, "{}: {}", id, name); diff --git a/src/scheme/sys/syscall.rs b/src/scheme/sys/syscall.rs index 6c5f9ae008..71b705bbb0 100644 --- a/src/scheme/sys/syscall.rs +++ b/src/scheme/sys/syscall.rs @@ -12,13 +12,10 @@ pub fn resource() -> Result> { let contexts = context::contexts(); for context_ref in contexts.iter().filter_map(|r| r.upgrade()) { let context = context_ref.read(); - rows.push(( - context.debug_id, - context.name.clone(), - context.current_syscall(), - )); + rows.push((context.pid, context.name.clone(), context.current_syscall())); } } + rows.sort_by_key(|row| row.0); for &(id, ref name, sc) in rows.iter() { let _ = writeln!(string, "{}: {}", id, name);