Skip to content

Commit 2905907

Browse files
Dym03Kobzol
authored andcommitted
Add third view for only asssigned cpus
1 parent 335dc89 commit 2905907

3 files changed

Lines changed: 235 additions & 75 deletions

File tree

crates/hyperqueue/src/dashboard/ui/screens/cluster/worker/cpu_util_table.rs

Lines changed: 74 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::common::format::human_size;
2-
use crate::dashboard::ui::screens::cluster::worker::UtilizationRenderMode;
2+
use crate::dashboard::ui::screens::cluster::worker::{CpuScope, CpuViewMode};
33
use ratatui::layout::{Constraint, Rect};
44
use ratatui::style::Style;
55
use ratatui::widgets::{Cell, Row, Table};
@@ -10,7 +10,7 @@ use tako::resources::ResourceIndex;
1010
use crate::dashboard::ui::styles;
1111
use crate::dashboard::ui::terminal::DashboardFrame;
1212
use crate::dashboard::ui::widgets::progressbar::{
13-
ProgressPrintStyle, get_progress_bar_color, get_progress_bar_cpu_color, render_progress_bar_at,
13+
ProgressPrintStyle, get_cpu_progress_bar_color, render_progress_bar_at,
1414
};
1515
use crate::dashboard::utils::calculate_average;
1616

@@ -22,7 +22,8 @@ pub fn render_cpu_util_table(
2222
cpu_util_list: &[f64],
2323
mem_util: &MemoryStats,
2424
used_cpus: &[ResourceIndex],
25-
util_render_mode: &UtilizationRenderMode,
25+
util_render_mode: &CpuViewMode,
26+
cpu_scope: &CpuScope,
2627
rect: Rect,
2728
frame: &mut DashboardFrame,
2829
table_style: Style,
@@ -36,13 +37,46 @@ pub fn render_cpu_util_table(
3637
let height = (cpu_util_list.len() as f64 / width as f64).ceil() as usize;
3738

3839
let mut rows: Vec<Vec<(f64, usize, bool)>> = vec![vec![]; height];
39-
if *util_render_mode == UtilizationRenderMode::Worker {
40-
rows = get_utilization_sorted_by_usage(cpu_util_list, used_cpus, height)
41-
} else {
42-
for (position, &cpu_util) in cpu_util_list.iter().enumerate() {
43-
let row = position % height;
44-
let used = used_cpus.contains(&ResourceIndex::new(position as u32));
45-
rows[row].push((cpu_util, position, used));
40+
41+
match util_render_mode {
42+
CpuViewMode::Global => {
43+
for (position, &cpu_util) in cpu_util_list.iter().enumerate() {
44+
let row = position % height;
45+
let used = used_cpus.contains(&ResourceIndex::new(position as u32));
46+
rows[row].push((cpu_util, position, used));
47+
}
48+
}
49+
CpuViewMode::WorkerManaged => match cpu_scope {
50+
CpuScope::Node => {
51+
rows = get_utilization_sorted_by_usage(cpu_util_list, used_cpus, height)
52+
}
53+
CpuScope::Subset(managed_cpus) => {
54+
let managed_cpu_util_list: Vec<f64> = cpu_util_list
55+
.iter()
56+
.enumerate()
57+
.filter_map(|(idx, &cpu_util)| {
58+
if managed_cpus.contains(&ResourceIndex::new(idx as u32)) {
59+
Some(cpu_util)
60+
} else {
61+
None
62+
}
63+
})
64+
.collect();
65+
66+
rows = get_utilization_sorted_by_usage(&managed_cpu_util_list, used_cpus, height)
67+
}
68+
},
69+
CpuViewMode::WorkerAssigned => {
70+
let mut r = 0;
71+
for (position, &cpu_util) in cpu_util_list.iter().enumerate() {
72+
let row = r % height;
73+
let used = used_cpus.contains(&ResourceIndex::new(position as u32));
74+
75+
if used {
76+
rows[row].push((cpu_util, position, used));
77+
r += 1;
78+
}
79+
}
4680
}
4781
}
4882

@@ -53,10 +87,8 @@ pub fn render_cpu_util_table(
5387
.into_iter()
5488
.map(|(cpu_util, position, used)| {
5589
let progress = cpu_util / 100.00;
56-
let style = match util_render_mode {
57-
UtilizationRenderMode::Global => get_progress_bar_color(progress),
58-
UtilizationRenderMode::Worker => get_progress_bar_cpu_color(progress, used),
59-
};
90+
91+
let style = get_cpu_progress_bar_color(progress, used, util_render_mode);
6092

6193
Cell::from(render_progress_bar_at(
6294
Some(format!("{position:>3} ")),
@@ -73,7 +105,7 @@ pub fn render_cpu_util_table(
73105

74106
let mem_used = mem_util.total - mem_util.free;
75107
let (which_util, num_cpus, avg_cpu) =
76-
create_title_info(cpu_util_list, used_cpus, util_render_mode);
108+
create_title_info(cpu_util_list, used_cpus, util_render_mode, cpu_scope);
77109

78110
let title = styles::table_title(format!(
79111
"{} Utilization ({} CPUs), Avg CPU = {:.0}%, Mem = {:.0}% ({}/{})",
@@ -133,35 +165,35 @@ fn get_utilization_sorted_by_usage(
133165
fn create_title_info(
134166
cpu_util_list: &[f64],
135167
used_cpus: &[ResourceIndex],
136-
util_render_mode: &UtilizationRenderMode,
168+
util_render_mode: &CpuViewMode,
169+
cpu_manager_state: &CpuScope,
137170
) -> (String, usize, f64) {
138171
let which_util = match util_render_mode {
139-
UtilizationRenderMode::Global => "Node".to_string(),
140-
UtilizationRenderMode::Worker => "Worker".to_string(),
141-
};
142-
143-
let num_cpus = match util_render_mode {
144-
UtilizationRenderMode::Global => cpu_util_list.len(),
145-
UtilizationRenderMode::Worker => used_cpus.len(),
146-
};
147-
148-
let avg_usage = match util_render_mode {
149-
UtilizationRenderMode::Global => calculate_average(cpu_util_list),
150-
UtilizationRenderMode::Worker => {
151-
let used_cpu_util_list: Vec<f64> = cpu_util_list
152-
.iter()
153-
.enumerate()
154-
.filter_map(|(idx, utilization)| {
155-
if used_cpus.contains(&ResourceIndex::new(idx as u32)) {
156-
Some(*utilization)
157-
} else {
158-
None
159-
}
160-
})
161-
.collect();
162-
calculate_average(&used_cpu_util_list)
163-
}
164-
};
172+
CpuViewMode::Global => "Node",
173+
CpuViewMode::WorkerManaged => "Worker Managed",
174+
CpuViewMode::WorkerAssigned => "Worker Assigned",
175+
}
176+
.to_string();
177+
178+
let filtered_utils: Vec<f64> = cpu_util_list
179+
.iter()
180+
.enumerate()
181+
.filter(|(idx, _util)| {
182+
let res_idx = ResourceIndex::new(*idx as u32);
183+
match util_render_mode {
184+
CpuViewMode::Global => true,
185+
CpuViewMode::WorkerAssigned => used_cpus.contains(&res_idx),
186+
CpuViewMode::WorkerManaged => match cpu_manager_state {
187+
CpuScope::Node => true,
188+
CpuScope::Subset(managed) => managed.contains(&res_idx),
189+
},
190+
}
191+
})
192+
.map(|(_, &util)| util)
193+
.collect();
194+
195+
let num_cpus = filtered_utils.len();
196+
let avg_usage = calculate_average(&filtered_utils);
165197

166198
(which_util, num_cpus, avg_usage)
167199
}

0 commit comments

Comments
 (0)