complete scuttlebutt status route

This commit is contained in:
glyph 2022-03-17 16:30:26 +02:00
parent fe04195030
commit 7cdf8c553d
1 changed files with 101 additions and 46 deletions

View File

@ -8,21 +8,6 @@ use peach_lib::sbot::{SbotConfig, SbotStatus};
use crate::{error::PeachWebError, templates};
/*
{# ASSIGN VARIABLES #}
{# ---------------- #}
{%- if sbot_status.memory -%}
{% set mem = sbot_status.memory / 1024 / 1024 | round | int -%}
{%- else -%}
{% set mem = "0" -%}
{%- endif -%}
{%- if sbot_status.blobstore -%}
{% set blobs = sbot_status.blobstore / 1024 / 1024 | round | int -%}
{%- else -%}
{% set blobs = "0" -%}
{%- endif -%}
*/
// HELPER FUNCTIONS
pub async fn init_sbot_with_config(
@ -116,9 +101,89 @@ fn database_element(state: &str) -> Markup {
}
}
fn memory_element(memory: Option<u32>) -> Markup {
let (memory, img_class, medium_label_class, small_label_class) = match memory {
Some(mem) => {
// convert memory to mb representation
let memory_rounded = mem / 1024 / 1024;
(
memory_rounded.to_string(),
"icon icon-active",
"label-medium font-normal",
"label-small font-normal",
)
}
_ => (
0.to_string(),
"icon icon-inactive",
"label-medium font-gray",
"label-small font-gray",
),
};
html! {
div class="stack" {
img class=(img_class) title="Memory" src="/icons/ram.png";
div class="flex-grid" style="padding-top: 0.5rem;" {
label class=(medium_label_class) style="padding-right: 3px;" title="Memory usage of the go-sbot process in MB" { (memory) }
label class=(small_label_class) { "MB" }
}
label class=(small_label_class) { "MEMORY" }
}
}
}
fn hops_element() -> Markup {
// retrieve go-sbot systemd process status
let hops = match SbotConfig::read() {
Ok(conf) => conf.hops,
_ => 0,
};
html! {
div class="stack" {
img class="icon icon-active" title="Hops" src="/icons/orbits.png";
div class="flex-grid" style="padding-top: 0.5rem;" {
label class="label-medium font-normal" style="padding-right: 3px;" title="Replication hops" {
(hops)
}
}
label class="label-small font-gray" { "HOPS" }
}
}
}
fn blobs_element(blobstore: Option<u64>) -> Markup {
let blobstore_size = match blobstore {
// convert blobstore size to mb representation
Some(blobs) => blobs / 1024 / 1024,
None => 0,
};
html! {
div class="stack" {
img class="icon icon-active" title="Blobs" src="/icons/image-file.png";
div class="flex-grid" style="padding-top: 0.5rem;" {
label class="label-medium font-normal" style="padding-right: 3px;" title="Blobstore size in MB" { (blobstore_size) }
label class="label-small font-normal" { "MB" }
}
label class="label-small font-gray" { "BLOBSTORE" }
}
}
}
/// Read the state of the go-sbot process and define status-related
/// elements accordingly.
fn render_status_elements<'a>() -> (String, &'a str, &'a str, Markup, Markup, Markup) {
fn render_status_elements<'a>() -> (
String,
&'a str,
&'a str,
Markup,
Markup,
Markup,
Markup,
Markup,
) {
// retrieve go-sbot systemd process status
let sbot_status = SbotStatus::read();
@ -134,6 +199,8 @@ fn render_status_elements<'a>() -> (String, &'a str, &'a str, Markup, Markup, Ma
uptime_element(&status.uptime),
run_on_startup_element(&status.boot_state),
database_element("active"),
memory_element(status.memory),
blobs_element(status.blobstore),
),
Some(state) if state == "inactive" => (
"INACTIVE".to_string(),
@ -142,6 +209,8 @@ fn render_status_elements<'a>() -> (String, &'a str, &'a str, Markup, Markup, Ma
downtime_element(&status.downtime),
run_on_startup_element(&status.boot_state),
database_element("inactive"),
memory_element(None),
blobs_element(status.blobstore),
),
// state is neither active nor inactive (might be failed)
Some(state) => (
@ -151,6 +220,8 @@ fn render_status_elements<'a>() -> (String, &'a str, &'a str, Markup, Markup, Ma
downtime_element(&None),
run_on_startup_element(&status.boot_state),
database_element("failed"),
memory_element(None),
blobs_element(status.blobstore),
),
None => (
"UNAVAILABLE".to_string(),
@ -159,6 +230,8 @@ fn render_status_elements<'a>() -> (String, &'a str, &'a str, Markup, Markup, Ma
downtime_element(&None),
run_on_startup_element(&status.boot_state),
database_element("unavailable"),
memory_element(None),
blobs_element(status.blobstore),
),
}
// show an error state if the attempt to read the go-sbot process
@ -171,6 +244,8 @@ fn render_status_elements<'a>() -> (String, &'a str, &'a str, Markup, Markup, Ma
downtime_element(&None),
run_on_startup_element(&None),
database_element("error"),
memory_element(None),
blobs_element(None),
)
}
}
@ -184,8 +259,12 @@ pub fn build_template() -> PreEscaped<String> {
uptime_downtime_element,
run_on_startup_element,
database_element,
memory_element,
blobs_element,
) = render_status_elements();
let hops_element = hops_element();
let status_template = html! {
(PreEscaped("<!-- SCUTTLEBUTT STATUS -->"))
div class="card center" {
@ -228,36 +307,12 @@ pub fn build_template() -> PreEscaped<String> {
}
}
hr style="color: var(--light-gray);";
/*
(PreEscaped("<!-- THREE-ACROSS STACK -->
<div class="three-grid card-container" style="margin-top: 1rem;">
<div class="stack">
<img class="icon icon-active" title="Hops" src="/icons/orbits.png">
<div class="flex-grid" style="padding-top: 0.5rem;">
<label class="label-medium font-normal" style="padding-right: 3px;" title="Replication hops">{{ sbot_config.hops }}</label>
</div>
<label class="label-small font-gray">HOPS</label>
</div>
<div class="stack">
<img class="icon icon-active" title="Blobs" src="/icons/image-file.png">
<div class="flex-grid" style="padding-top: 0.5rem;">
<label class="label-medium font-normal" style="padding-right: 3px;" title="Blobstore size in MB">{{ blobs }}</label>
<label class="label-small font-normal">MB</label>
</div>
<label class="label-small font-gray">BLOBSTORE</label>
</div>
<div class="stack">
<img class="icon{% if sbot_status.memory %} icon-active{% else %} icon-inactive{% endif %}" title="Memory" src="/icons/ram.png">
<div class="flex-grid" style="padding-top: 0.5rem;">
<label class="label-medium{% if sbot_status.state == "inactive" %} font-gray{% else %} font-normal{% endif %}" style="padding-right: 3px;" title="Memory usage of the go-sbot process in MB">{{ mem }}</label>
<label class="label-small{% if sbot_status.state == "inactive" %} font-gray{% else %} font-normal{% endif %}">MB</label>
</div>
<label class="label-small font-gray">MEMORY</label>
</div>
</div>
</div>
</div>
*/
(PreEscaped("<!-- THREE-ACROSS STACK -->"))
div class="three-grid card-container" style="margin-top: 1rem;" {
(hops_element)
(blobs_element)
(memory_element)
}
}
}
};