Skip to content

Commit 41f5e53

Browse files
veluca93Virv12
authored andcommitted
Display a summary of the ping status of each group.
Fixes #73.
1 parent 59d624f commit 41f5e53

2 files changed

Lines changed: 101 additions & 0 deletions

File tree

pixie-web/src/main.rs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,8 +420,89 @@ fn App() -> impl IntoView {
420420
view! { <Group units group_name images hostmap time=time_in_seconds/> }.into_view()
421421
};
422422

423+
let render_group_grid = move |id: u8| {
424+
let group_name = create_memo(move |_| {
425+
config
426+
.get()
427+
.unwrap()
428+
.groups
429+
.get_by_second(&id)
430+
.unwrap()
431+
.clone()
432+
});
433+
let units = create_memo(move |_| -> Vec<_> {
434+
units
435+
.get()
436+
.unwrap_or_else(Vec::new)
437+
.iter()
438+
.filter(|x| x.group == id)
439+
.cloned()
440+
.collect()
441+
});
442+
let render_unit_grid = move |idx: usize| {
443+
let unit = create_memo(move |_| units.get()[idx].clone());
444+
let ping_ago = move || time_in_seconds.get() - unit.get().last_ping_timestamp as i64;
445+
446+
let class = move || match ping_ago() {
447+
..0 => "grid-blue",
448+
0..120 => "grid-green",
449+
120..300 => "grid-yellow",
450+
300.. => "grid-red",
451+
};
452+
453+
let size_style = "width: 16px; height: 16px;";
454+
455+
let style = move || {
456+
format!(
457+
"grid-column: {}; grid-row: {}; {size_style}",
458+
unit.get().col,
459+
unit.get().row
460+
)
461+
};
462+
463+
let popover_text = move || {
464+
format!(
465+
"row {} col {}: {} seconds ago",
466+
unit.get().row,
467+
unit.get().col,
468+
ping_ago()
469+
)
470+
};
471+
472+
view! {
473+
<div style=style class=class>
474+
<Popover tooltip=true placement=PopoverPlacement::Right>
475+
<PopoverTrigger slot>
476+
<div class=class style=size_style>
477+
</div>
478+
</PopoverTrigger>
479+
{popover_text}
480+
</Popover>
481+
</div>
482+
}
483+
};
484+
view! {
485+
<div style="display: inline-block; text-align: center;" >
486+
<h2>{group_name}</h2>
487+
<div style="display: inline-grid; margin: 10px; transform: scaleY(-1);">
488+
<For each=move || 0..units.get().len() key=|x| *x children=render_unit_grid/>
489+
</div>
490+
</div>
491+
}
492+
};
493+
423494
view! {
424495
<Images images=image_stats/>
496+
<h1>Ping Summary</h1>
497+
<Space vertical=false>
498+
<For
499+
each=move || {
500+
config.get().clone().into_iter().flat_map(|x| x.groups.into_iter().map(|x| x.1))
501+
}
502+
key=|x| *x
503+
children=render_group_grid
504+
/>
505+
</Space>
425506
<For
426507
each=move || {
427508
config.get().clone().into_iter().flat_map(|x| x.groups.into_iter().map(|x| x.1))

pixie-web/style.css

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,26 @@
3030
box-shadow: inset #006 0 0 5px 1px;
3131
}
3232

33+
.grid-green {
34+
background-color: #ABFF00;
35+
box-shadow: inset #304701 0 0 5px 1px;
36+
}
37+
38+
.grid-yellow {
39+
background-color: #FF0;
40+
box-shadow: inset #808002 0 0 5px 1px;
41+
}
42+
43+
.grid-red {
44+
background-color: #F00;
45+
box-shadow: inset #441313 0 0 5px 1px;
46+
}
47+
48+
.grid-blue {
49+
background-color: #24E0FF;
50+
box-shadow: inset #006 0 0 5px 1px;
51+
}
52+
3353
.expand {
3454
width: 100%;
3555
}

0 commit comments

Comments
 (0)