async experiment (broken) plus lots of template updates

This commit is contained in:
2022-01-12 10:45:57 +02:00
parent 523c781b46
commit 2c3ee5056e
12 changed files with 515 additions and 171 deletions

View File

@ -12,3 +12,4 @@ peach-lib = { path = "../peach-lib" }
peach-network = { path = "../peach-network" } peach-network = { path = "../peach-network" }
peach-stats = { path = "../peach-stats" } peach-stats = { path = "../peach-stats" }
rouille = "3.5.0" rouille = "3.5.0"
golgi = { path = "/home/glyph/Projects/playground/rust/golgi" }

68
peach-web-lite/ap_card Normal file
View File

@ -0,0 +1,68 @@
{%- if ap_state == "up" %}
<!-- NETWORK CARD -->
<div class="card center">
<!-- NETWORK INFO BOX -->
<div class="capsule capsule-container success-border">
<!-- NETWORK STATUS GRID -->
<div class="two-grid" title="PeachCloud network mode and status">
<!-- top-right config icon -->
<a class="link two-grid-top-right" href="/settings/network" title="Configure network settings">
<img id="configureNetworking" class="icon-small" src="/icons/cog.svg" alt="Configure">
</a>
<!-- left column -->
<!-- network mode icon with label -->
<div class="grid-column-1">
<img id="netModeIcon" class="center icon icon-active" src="/icons/router.svg" alt="WiFi router">
<label id="netModeLabel" for="netModeIcon" class="center label-small font-gray" title="Access Point Online">ONLINE</label>
</div>
<!-- right column -->
<!-- network mode, ssid & ip with labels -->
<div class="grid-column-2">
<label class="label-small font-gray" for="netMode" title="Network Mode">MODE</label>
<p id="netMode" class="card-text" title="Network Mode">Access Point</p>
<label class="label-small font-gray" for="netSsid" title="Access Point SSID">SSID</label>
<p id="netSsid" class="card-text" title="SSID">peach</p>
<label class="label-small font-gray" for="netIp" title="Access Point IP Address">IP</label>
<p id="netIp" class="card-text" title="IP">{{ ap_ip }}</p>
</div>
</div>
<!-- horizontal dividing line -->
<hr>
<!-- DEVICES AND TRAFFIC GRID -->
<div class="three-grid card-container">
<div class="stack">
<img id="devices" class="icon icon-medium" title="Connected devices" src="/icons/devices.svg" alt="Digital devices">
<div class="flex-grid" style="padding-top: 0.5rem;">
<label class="label-medium" for="devices" style="padding-right: 3px;" title="Number of connected devices"></label>
</div>
<label class="label-small font-gray">DEVICES</label>
</div>
<div class="stack">
<img id="dataDownload" class="icon icon-medium" title="Download" src="/icons/down-arrow.svg" alt="Download">
<div class="flex-grid" style="padding-top: 0.5rem;">
{%- if ap_traffic -%}
<label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total in {{ ap_traffic.rx_unit }}">{{ ap_traffic.received }}</label>
<label class="label-small font-near-black">{{ ap_traffic.rx_unit }}</label>
{%- else -%}
<label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total"></label>
<label class="label-small font-near-black"></label>
{%- endif -%}
</div>
<label class="label-small font-gray">DOWNLOAD</label>
</div>
<div class="stack">
<img id="dataUpload" class="icon icon-medium" title="Upload" src="/icons/up-arrow.svg" alt="Upload">
<div class="flex-grid" style="padding-top: 0.5rem;">
{%- if ap_traffic -%}
<label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total in {{ ap_traffic.tx_unit }}">{{ ap_traffic.transmitted }}</label>
<label class="label-small font-near-black">{{ ap_traffic.tx_unit }}</label>
{%- else -%}
<label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total"></label>
<label class="label-small font-near-black"></label>
{%- endif -%}
</div>
<label class="label-small font-gray">UPLOAD</label>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,12 @@
[ peach-web-lite ]
230 total dependencies
Finished release [optimized] target(s) in 35.12s
[ peach-web ]
522 total dependencies
Finished release [optimized] target(s) in 1m 33s

View File

@ -1,3 +1,4 @@
pub mod admin; pub mod admin;
pub mod network; pub mod network;
pub mod status; pub mod status;
pub mod test;

View File

@ -144,10 +144,10 @@ pub fn save_dns_configuration(
#[derive(Debug)] #[derive(Debug)]
pub struct IfaceTraffic { pub struct IfaceTraffic {
rx: u64, pub rx: u64,
rx_unit: String, pub rx_unit: String,
tx: u64, pub tx: u64,
tx_unit: String, pub tx_unit: String,
} }
#[derive(Debug)] #[derive(Debug)]

View File

@ -0,0 +1,12 @@
use golgi;
use golgi::sbot::Sbot;
pub async fn test_async() -> Result<(), Box<dyn std::error::Error>> {
let mut sbot_client = Sbot::init(Some("127.0.0.1:8009".to_string()), None).await?;
let id = sbot_client.whoami().await?;
println!("whoami: {}", id);
Ok(())
}

View File

@ -1,7 +1,7 @@
use std::env; use std::env;
use lazy_static::lazy_static; use lazy_static::lazy_static;
use log::{info, warn}; use log::info;
mod auth; mod auth;
mod context; mod context;

View File

@ -76,6 +76,9 @@ pub fn minimal_router(request: &Request) -> Response {
/// Define router for fully-featured mode (PeachCloud). /// Define router for fully-featured mode (PeachCloud).
pub fn complete_router(request: &Request) -> Response { pub fn complete_router(request: &Request) -> Response {
router!(request, router!(request,
(GET) (/async) => {
routes::home::async_test()
},
(GET) (/) => { (GET) (/) => {
routes::home::menu() routes::home::menu()
}, },

View File

@ -8,3 +8,7 @@ pub fn menu() -> Response {
Response::html(templates::home::menu()) Response::html(templates::home::menu())
} }
pub fn async_test() -> Response {
Response::html(templates::home::async_test())
}

View File

@ -1,7 +1,21 @@
use maud::{html, PreEscaped}; use maud::{html, PreEscaped};
use crate::context;
use crate::templates; use crate::templates;
pub async fn async_test() -> PreEscaped<String> {
let back = "".to_string();
let title = "".to_string();
let whoami = context::test::test_async().await.unwrap();
let content = html! {
p { (whoami) }
};
templates::base::base(back, title, content)
}
pub fn menu() -> PreEscaped<String> { pub fn menu() -> PreEscaped<String> {
let back = "".to_string(); let back = "".to_string();
let title = "".to_string(); let title = "".to_string();

View File

@ -3,6 +3,293 @@ use maud::{html, PreEscaped};
use crate::context::{network::NetworkStatusContext, status::StatusContext}; use crate::context::{network::NetworkStatusContext, status::StatusContext};
use crate::{templates, STANDALONE_MODE}; use crate::{templates, STANDALONE_MODE};
fn ap_network_card(status: NetworkStatusContext) -> PreEscaped<String> {
html! {
(PreEscaped("<!-- NETWORK CARD -->"))
div class="card center" {
(PreEscaped("<!-- NETWORK INFO BOX -->"))
div class="capsule capsule-container success-border" {
(PreEscaped("<!-- NETWORK STATUS GRID -->"))
div class="two-grid" title="PeachCloud network mode and status" {
(PreEscaped("<!-- top-right config icon -->"))
a class="link two-grid-top-right" href="/settings/network" title="Configure network settings" {
img id="configureNetworking" class="icon-small" src="/static/icons/cog.svg" alt="Configure";
}
(PreEscaped("<!-- left column -->"))
(PreEscaped("<!-- network mode icon with label -->"))
div class="grid-column-1" {
img id="netModeIcon" class="center icon icon-active" src="/static/icons/router.svg" alt="WiFi router";
label id="netModeLabel" for="netModeIcon" class="center label-small font-gray" title="Access Point Online" { "ONLINE" }
}
(PreEscaped("<!-- right column -->"))
(PreEscaped("<!-- network mode, ssid & ip with labels -->"))
div class="grid-column-2" {
label class="label-small font-gray" for="netMode" title="Network Mode" { "MODE" }
p id="netMode" class="card-text" title="Network Mode" { "Access Point" }
label class="label-small font-gray" for="netSsid" title="Access Point SSID" { "SSID" }
p id="netSsid" class="card-text" title="SSID" { (status.ap_ssid) }
label class="label-small font-gray" for="netIp" title="Access Point IP Address" { "IP" }
p id="netIp" class="card-text" title="IP" { (status.ap_ip) }
}
}
(PreEscaped("<!-- horizontal dividing line -->"))
hr;
(PreEscaped("<!-- DEVICES AND TRAFFIC GRID -->"))
div class="three-grid card-container" {
// devices stack
div class="stack" {
img id="devices" class="icon icon-medium" title="Connected devices" src="/static/icons/devices.svg" alt="Digital devices";
div class="flex-grid" style="padding-top: 0.5rem;" {
label class="label-medium" for="devices" style="padding-right: 3px;" title="Number of connected devices";
}
label class="label-small font-gray" { "DEVICES" }
}
// download stack
div class="stack" {
img id="dataDownload" class="icon icon-medium" title="Download" src="/static/icons/down-arrow.svg" alt="Download";
div class="flex-grid" style="padding-top: 0.5rem;" {
@if let Some(traffic) = &status.ap_traffic {
label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total in "{ (traffic.rx_unit) }"" { (traffic.rx) }
label class="label-small font-near-black" { (traffic.rx_unit) }
} @else {
label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total";
label class="label-small font-near-black" { "0" }
}
}
label class="label-small font-gray" { "DOWNLOAD" }
}
// upload stack
div class="stack" {
img id="dataUpload" class="icon icon-medium" title="Upload" src="/static/icons/up-arrow.svg" alt="Upload";
div class="flex-grid" style="padding-top: 0.5rem;" {
@if let Some(traffic) = status.ap_traffic {
label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total in "{ (traffic.tx_unit) }"" { (traffic.tx) }
label class="label-small font-near-black" { (traffic.tx_unit) }
} @else {
label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total";
label class="label-small font-near-black" { "0" }
}
}
label class="label-small font-gray" { "UPLOAD" }
}
}
}
}
}
}
fn wlan_network_card(status: NetworkStatusContext) -> PreEscaped<String> {
let capsule = if status.wlan_state == *"up" {
"capsule capsule-container success-border"
} else {
"capsule capsule-container warning-border"
};
html! {
(PreEscaped("<!-- NETWORK CARD -->"))
div class="card center" {
(PreEscaped("<!-- NETWORK INFO BOX -->"))
div class=(capsule) {
@if status.wlan_state == *"up" {
(PreEscaped("<!-- NETWORK STATUS GRID -->"))
div id="netInfoBox" class="two-grid" title="PeachCloud network mode and status" {
a class="link two-grid-top-right" href="/settings/network" title="Configure network settings" {
img id="configureNetworking" class="icon-small" src="/static/icons/cog.svg" alt="Configure";
}
(PreEscaped("<!-- NETWORK STATUS -->"))
(PreEscaped("<!-- left column -->"))
(PreEscaped("<!-- network mode icon with label -->"))
div class="grid-column-1" {
img id="netModeIcon" class="center icon icon-active" src="/static/icons/wifi.svg" alt="WiFi online";
label id="netModeLabel" for="netModeIcon" class="center label-small font-gray" title="WiFi Client Status" { "ONLINE" }
}
div class="grid-column-2" {
(PreEscaped("<!-- right column -->"))
(PreEscaped("<!-- network mode, ssid & ip with labels -->"))
label class="label-small font-gray" for="netMode" title="Network Mode" { "MODE" }
p id="netMode" class="card-text" title="Network Mode" { "WiFi Client" }
label class="label-small font-gray" for="netSsid" title="WiFi SSID" { "SSID" }
p id="netSsid" class="card-text" title="SSID" { (status.wlan_ssid) }
label class="label-small font-gray" for="netIp" title="WiFi Client IP Address" { "IP" }
p id="netIp" class="card-text" title="IP" { (status.wlan_ip) }
}
}
} @else {
div id="netInfoBox" class="two-grid" title="PeachCloud network mode and status" {
a class="link two-grid-top-right" href="/settings/network" title="Configure network settings" {
img id="configureNetworking" class="icon-small" src="/static/icons/cog.svg" alt="Configure";
}
div class="grid-column-1" {
img id="netModeIcon" class="center icon icon-inactive" src="/static/icons/wifi.svg" alt="WiFi offline";
label id="netModeLabel" for="netModeIcon" class="center label-small font-gray" title="WiFi Client Status" { "OFFLINE" }
}
div class="grid-column-2" {
(PreEscaped("<!-- right column -->"))
(PreEscaped("<!-- network mode, ssid & ip with labels -->"))
label class="label-small font-gray" for="netMode" title="Network Mode" { "MODE" }
p id="netMode" class="card-text" title="Network Mode" { "WiFi Client" }
label class="label-small font-gray" for="netSsid" title="WiFi SSID" { "SSID" }
p id="netSsid" class="card-text" title="SSID" { (status.wlan_ssid) }
label class="label-small font-gray" for="netIp" title="WiFi Client IP Address" { "IP" }
p id="netIp" class="card-text" title="IP" { (status.wlan_ip) }
}
}
}
(PreEscaped("<!-- horizontal dividing line -->"))
hr;
(PreEscaped("<!-- SIGNAL AND TRAFFIC GRID -->"))
(PreEscaped("<!-- row of icons representing network statistics -->"))
div class="three-grid card-container" {
div class="stack" {
img id="netSignal" class="icon icon-medium" alt="Signal" title="WiFi Signal (%)" src="/static/icons/low-signal.svg";
div class="flex-grid" style="padding-top: 0.5rem;" {
label class="label-medium" for="netSignal" style="padding-right: 3px;" title="Signal strength of WiFi connection (%)" {
@if let Some(wlan_rssi) = status.wlan_rssi { (wlan_rssi) } @else { "0" }
}
}
label class="label-small font-gray" { "SIGNAL" }
}
div class="stack" {
img id="dataDownload" class="icon icon-medium" alt="Download" title="WiFi download total" src="/static/icons/down-arrow.svg";
div class="flex-grid" style="padding-top: 0.5rem;" {
@if let Some(traffic) = &status.wlan_traffic {
(PreEscaped("<!-- display wlan traffic data -->"))
label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total in "{ (traffic.rx_unit) }"" { (traffic.rx) }
label class="label-small font-near-black" { (traffic.rx_unit) }
} @else {
(PreEscaped("<!-- no wlan traffic data to display -->"))
label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total" { "0" }
label class="label-small font-near-black" { "MB" }
}
}
label class="label-small font-gray" { "DOWNLOAD" }
}
div class="stack" {
img id="dataUpload" class="icon icon-medium" alt="Upload" title="WiFi upload total" src="/static/icons/up-arrow.svg";
div class="flex-grid" style="padding-top: 0.5rem;" {
@if let Some(traffic) = status.wlan_traffic {
(PreEscaped("<!-- display wlan traffic data -->"))
label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total in "{ (traffic.tx_unit) }"" { (traffic.tx) }
label class="label-small font-near-black" { (traffic.tx_unit) }
} @else {
(PreEscaped("<!-- no wlan traffic data to display -->"))
label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total" { "0" }
label class="label-small font-near-black" { "MB" }
}
}
label class="label-small font-gray" { "UPLOAD" }
}
}
}
}
}
}
/*
* WORKS ... kinda
fn wlan_network_card(status: NetworkStatusContext) -> PreEscaped<String> {
html! {
(PreEscaped("<!-- NETWORK CARD -->"))
div class="card center" {
(PreEscaped("<!-- NETWORK INFO BOX -->"))
@if status.wlan_state == *"up" {
div class="capsule capsule-container success-border" {
(PreEscaped("<!-- NETWORK STATUS GRID -->"))
div id="netInfoBox" class="two-grid" title="PeachCloud network mode and status" {
a class="link two-grid-top-right" href="/settings/network" title="Configure network settings" {
img id="configureNetworking" class="icon-small" src="/static/icons/cog.svg" alt="Configure";
}
(PreEscaped("<!-- NETWORK STATUS -->"))
(PreEscaped("<!-- left column -->"))
(PreEscaped("<!-- network mode icon with label -->"))
div class="grid-column-1" {
img id="netModeIcon" class="center icon icon-active" src="/static/icons/wifi.svg" alt="WiFi online";
label id="netModeLabel" for="netModeIcon" class="center label-small font-gray" title="WiFi Client Status" { "ONLINE" }
}
div class="grid-column-2" {
(PreEscaped("<!-- right column -->"))
(PreEscaped("<!-- network mode, ssid & ip with labels -->"))
label class="label-small font-gray" for="netMode" title="Network Mode" { "MODE" }
p id="netMode" class="card-text" title="Network Mode" { "WiFi Client" }
label class="label-small font-gray" for="netSsid" title="WiFi SSID" { "SSID" }
p id="netSsid" class="card-text" title="SSID" { (status.wlan_ssid) }
label class="label-small font-gray" for="netIp" title="WiFi Client IP Address" { "IP" }
p id="netIp" class="card-text" title="IP" { (status.wlan_ip) }
}
}
}
} @else {
div class="capsule capsule-container warning-border" {
div id="netInfoBox" class="two-grid" title="PeachCloud network mode and status" {
a class="link two-grid-top-right" href="/settings/network" title="Configure network settings" {
img id="configureNetworking" class="icon-small" src="/static/icons/cog.svg" alt="Configure";
}
div class="grid-column-1" {
img id="netModeIcon" class="center icon icon-inactive" src="/static/icons/wifi.svg" alt="WiFi offline";
label id="netModeLabel" for="netModeIcon" class="center label-small font-gray" title="WiFi Client Status" { "OFFLINE" }
}
div class="grid-column-2" {
(PreEscaped("<!-- right column -->"))
(PreEscaped("<!-- network mode, ssid & ip with labels -->"))
label class="label-small font-gray" for="netMode" title="Network Mode" { "MODE" }
p id="netMode" class="card-text" title="Network Mode" { "WiFi Client" }
label class="label-small font-gray" for="netSsid" title="WiFi SSID" { "SSID" }
p id="netSsid" class="card-text" title="SSID" { (status.wlan_ssid) }
label class="label-small font-gray" for="netIp" title="WiFi Client IP Address" { "IP" }
p id="netIp" class="card-text" title="IP" { (status.wlan_ip) }
}
}
}
}
(PreEscaped("<!-- horizontal dividing line -->"))
hr;
(PreEscaped("<!-- SIGNAL AND TRAFFIC GRID -->"))
(PreEscaped("<!-- row of icons representing network statistics -->"))
div class="three-grid card-container" {
div class="stack" {
img id="netSignal" class="icon icon-medium" alt="Signal" title="WiFi Signal (%)" src="/static/icons/low-signal.svg";
div class="flex-grid" style="padding-top: 0.5rem;" {
label class="label-medium" for="netSignal" style="padding-right: 3px;" title="Signal strength of WiFi connection (%)" {
@if let Some(wlan_rssi) = status.wlan_rssi { (wlan_rssi) } @else { "0" }
}
}
label class="label-small font-gray" { "SIGNAL" }
}
div class="stack" {
img id="dataDownload" class="icon icon-medium" alt="Download" title="WiFi download total" src="/static/icons/down-arrow.svg";
div class="flex-grid" style="padding-top: 0.5rem;" {
@if let Some(traffic) = &status.wlan_traffic {
(PreEscaped("<!-- display wlan traffic data -->"))
label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total in "{ (traffic.rx_unit) }"" { (traffic.rx) }
label class="label-small font-near-black" { (traffic.rx_unit) }
} @else {
(PreEscaped("<!-- no wlan traffic data to display -->"))
label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total" { "0" }
label class="label-small font-near-black" { "MB" }
}
}
label class="label-small font-gray" { "DOWNLOAD" }
}
div class="stack" {
img id="dataUpload" class="icon icon-medium" alt="Upload" title="WiFi upload total" src="/static/icons/up-arrow.svg";
div class="flex-grid" style="padding-top: 0.5rem;" {
@if let Some(traffic) = status.wlan_traffic {
(PreEscaped("<!-- display wlan traffic data -->"))
label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total in "{ (traffic.tx_unit) }"" { (traffic.tx) }
label class="label-small font-near-black" { (traffic.tx_unit) }
} @else {
(PreEscaped("<!-- no wlan traffic data to display -->"))
label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total" { "0" }
label class="label-small font-near-black" { "MB" }
}
}
label class="label-small font-gray" { "UPLOAD" }
}
}
}
}
}
*/
pub fn network() -> PreEscaped<String> { pub fn network() -> PreEscaped<String> {
let back = "/status".to_string(); let back = "/status".to_string();
let title = "Network Status".to_string(); let title = "Network Status".to_string();
@ -13,170 +300,34 @@ pub fn network() -> PreEscaped<String> {
let content = html! { let content = html! {
(PreEscaped("<!-- NETWORK STATUS -->")) (PreEscaped("<!-- NETWORK STATUS -->"))
// if ap is up, show ap card, else show wlan card // if ap is up, show ap card, else show wlan card
@if status.ap_state == *"up" {
(ap_network_card(status))
} @else {
(wlan_network_card(status))
}
}; };
templates::base::base(back, title, content) templates::base::base(back, title, content)
} }
/* fn scuttlebutt_status() -> PreEscaped<String> {
{%- if ap_state == "up" %} html! {
<!-- NETWORK CARD --> (PreEscaped("<!-- SCUTTLEBUTT STATUS -->"))
<div class="card center"> div class="card center" {
<!-- NETWORK INFO BOX --> div class="card-container" {
<div class="capsule capsule-container success-border"> p { "Network key: " }
<!-- NETWORK STATUS GRID --> p { "Replication hops: " }
<div class="two-grid" title="PeachCloud network mode and status"> p { "Sbot version: " }
<!-- top-right config icon --> p { "Process status: " }
<a class="link two-grid-top-right" href="/settings/network" title="Configure network settings"> p { "Process uptime: " }
<img id="configureNetworking" class="icon-small" src="/icons/cog.svg" alt="Configure"> p { "Blobstore size: " }
</a> p { "Latest sequence number: " }
<!-- left column --> p { "Last time you visited this page, latest sequence was x ... now it's y" }
<!-- network mode icon with label --> p { "Number of follows / followers / friends / blocks" }
<div class="grid-column-1"> }
<img id="netModeIcon" class="center icon icon-active" src="/icons/router.svg" alt="WiFi router"> }
<label id="netModeLabel" for="netModeIcon" class="center label-small font-gray" title="Access Point Online">ONLINE</label> }
</div>
<!-- right column -->
<!-- network mode, ssid & ip with labels -->
<div class="grid-column-2">
<label class="label-small font-gray" for="netMode" title="Network Mode">MODE</label>
<p id="netMode" class="card-text" title="Network Mode">Access Point</p>
<label class="label-small font-gray" for="netSsid" title="Access Point SSID">SSID</label>
<p id="netSsid" class="card-text" title="SSID">peach</p>
<label class="label-small font-gray" for="netIp" title="Access Point IP Address">IP</label>
<p id="netIp" class="card-text" title="IP">{{ ap_ip }}</p>
</div>
</div>
<!-- horizontal dividing line -->
<hr>
<!-- DEVICES AND TRAFFIC GRID -->
<div class="three-grid card-container">
<div class="stack">
<img id="devices" class="icon icon-medium" title="Connected devices" src="/icons/devices.svg" alt="Digital devices">
<div class="flex-grid" style="padding-top: 0.5rem;">
<label class="label-medium" for="devices" style="padding-right: 3px;" title="Number of connected devices"></label>
</div>
<label class="label-small font-gray">DEVICES</label>
</div>
<div class="stack">
<img id="dataDownload" class="icon icon-medium" title="Download" src="/icons/down-arrow.svg" alt="Download">
<div class="flex-grid" style="padding-top: 0.5rem;">
{%- if ap_traffic -%}
<label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total in {{ ap_traffic.rx_unit }}">{{ ap_traffic.received }}</label>
<label class="label-small font-near-black">{{ ap_traffic.rx_unit }}</label>
{%- else -%}
<label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total"></label>
<label class="label-small font-near-black"></label>
{%- endif -%}
</div>
<label class="label-small font-gray">DOWNLOAD</label>
</div>
<div class="stack">
<img id="dataUpload" class="icon icon-medium" title="Upload" src="/icons/up-arrow.svg" alt="Upload">
<div class="flex-grid" style="padding-top: 0.5rem;">
{%- if ap_traffic -%}
<label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total in {{ ap_traffic.tx_unit }}">{{ ap_traffic.transmitted }}</label>
<label class="label-small font-near-black">{{ ap_traffic.tx_unit }}</label>
{%- else -%}
<label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total"></label>
<label class="label-small font-near-black"></label>
{%- endif -%}
</div>
<label class="label-small font-gray">UPLOAD</label>
</div>
</div>
</div>
</div>
{%- else %}
<!-- NETWORK CARD -->
<div class="card center">
<!-- NETWORK INFO BOX -->
{%- if wlan_state == "up" %}
<div class="capsule capsule-container success-border">
<!-- NETWORK STATUS GRID -->
<div id="netInfoBox" class="two-grid" title="PeachCloud network mode and status">
<a class="link two-grid-top-right" href="/settings/network" title="Configure network settings">
<img id="configureNetworking" class="icon-small" src="/icons/cog.svg" alt="Configure">
</a>
<!-- NETWORK STATUS -->
<!-- left column -->
<!-- network mode icon with label -->
<div class="grid-column-1">
<img id="netModeIcon" class="center icon icon-active" src="/icons/wifi.svg" alt="WiFi online">
<label id="netModeLabel" for="netModeIcon" class="center label-small font-gray" title="WiFi Client Status">ONLINE</label>
{%- else %}
<div class="capsule capsule-container warning-border">
<div id="netInfoBox" class="two-grid" title="PeachCloud network mode and status">
<a class="link two-grid-top-right" href="/settings/network" title="Configure network settings">
<img id="configureNetworking" class="icon-small" src="/icons/cog.svg" alt="Configure">
</a>
<div class="grid-column-1">
<img id="netModeIcon" class="center icon icon-inactive" src="/icons/wifi.svg" alt="WiFi offline">
<label id="netModeLabel" for="netModeIcon" class="center label-small font-gray" title="WiFi Client Status">OFFLINE</label>
{%- endif %}
</div>
<div class="grid-column-2">
<!-- right column -->
<!-- network mode, ssid & ip with labels -->
<label class="label-small font-gray" for="netMode" title="Network Mode">MODE</label>
<p id="netMode" class="card-text" title="Network Mode">WiFi Client</p>
<label class="label-small font-gray" for="netSsid" title="WiFi SSID">SSID</label>
<p id="netSsid" class="card-text" title="SSID">{{ wlan_ssid }}</p>
<label class="label-small font-gray" for="netIp" title="WiFi Client IP Address">IP</label>
<p id="netIp" class="card-text" title="IP">{{ wlan_ip }}</p>
</div>
</div>
<!-- horizontal dividing line -->
<hr>
<!-- SIGNAL AND TRAFFIC GRID -->
<!-- row of icons representing network statistics -->
<div class="three-grid card-container">
<div class="stack">
<img id="netSignal" class="icon icon-medium" alt="Signal" title="WiFi Signal (%)" src="/icons/low-signal.svg">
<div class="flex-grid" style="padding-top: 0.5rem;">
<label class="label-medium" for="netSignal" style="padding-right: 3px;" title="Signal strength of WiFi connection (%)">{% if wlan_rssi %}{{ wlan_rssi }}{% else %}0{% endif %}%</label>
</div>
<label class="label-small font-gray">SIGNAL</label>
</div>
<div class="stack">
<img id="dataDownload" class="icon icon-medium" alt="Download" title="WiFi download total" src="/icons/down-arrow.svg">
<div class="flex-grid" style="padding-top: 0.5rem;">
{%- if wlan_traffic %}
<!-- display wlan traffic data -->
<label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total in {{ wlan_traffic.rx_unit }}">{{ wlan_traffic.received }}</label>
<label class="label-small font-near-black">{{ wlan_traffic.rx_unit }}</label>
{%- else %}
<!-- no wlan traffic data to display -->
<label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total">0</label>
<label class="label-small font-near-black">MB</label>
{%- endif %}
</div>
<label class="label-small font-gray">DOWNLOAD</label>
</div>
<div class="stack">
<img id="dataUpload" class="icon icon-medium" alt="Upload" title="WiFi upload total" src="/icons/up-arrow.svg">
<div class="flex-grid" style="padding-top: 0.5rem;">
{%- if wlan_traffic %}
<!-- display wlan traffic data -->
<label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total in {{ wlan_traffic.tx_unit }}">{{ wlan_traffic.transmitted }}</label>
<label class="label-small font-near-black">{{ wlan_traffic.tx_unit }}</label>
{%- else %}
<!-- no wlan traffic data to display -->
<label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total">0</label>
<label class="label-small font-near-black">MB</label>
{%- endif %}
</div>
<label class="label-small font-gray">UPLOAD</label>
</div>
</div>
</div>
</div>
{%- endif -%}
};
templates::base::base(back, title, content)
} }
*/
pub fn status() -> PreEscaped<String> { pub fn status() -> PreEscaped<String> {
let back = "/".to_string(); let back = "/".to_string();
@ -191,14 +342,7 @@ pub fn status() -> PreEscaped<String> {
// render the scuttlebutt status template // render the scuttlebutt status template
let content = if *STANDALONE_MODE { let content = if *STANDALONE_MODE {
html! { scuttlebutt_status()
(PreEscaped("<!-- SCUTTLEBUTT STATUS -->"))
div class="card center" {
div class="card-container" {
p { "such scuttlebutt stats" }
}
}
}
// or render the complete system status template // or render the complete system status template
} else { } else {
html! { html! {

85
peach-web-lite/wlan_card Normal file
View File

@ -0,0 +1,85 @@
{%- else %}
<!-- NETWORK CARD -->
<div class="card center">
<!-- NETWORK INFO BOX -->
{%- if wlan_state == "up" %}
<div class="capsule capsule-container success-border">
<!-- NETWORK STATUS GRID -->
<div id="netInfoBox" class="two-grid" title="PeachCloud network mode and status">
<a class="link two-grid-top-right" href="/settings/network" title="Configure network settings">
<img id="configureNetworking" class="icon-small" src="/icons/cog.svg" alt="Configure">
</a>
<!-- NETWORK STATUS -->
<!-- left column -->
<!-- network mode icon with label -->
<div class="grid-column-1">
<img id="netModeIcon" class="center icon icon-active" src="/icons/wifi.svg" alt="WiFi online">
<label id="netModeLabel" for="netModeIcon" class="center label-small font-gray" title="WiFi Client Status">ONLINE</label>
{%- else %}
<div class="capsule capsule-container warning-border">
<div id="netInfoBox" class="two-grid" title="PeachCloud network mode and status">
<a class="link two-grid-top-right" href="/settings/network" title="Configure network settings">
<img id="configureNetworking" class="icon-small" src="/icons/cog.svg" alt="Configure">
</a>
<div class="grid-column-1">
<img id="netModeIcon" class="center icon icon-inactive" src="/icons/wifi.svg" alt="WiFi offline">
<label id="netModeLabel" for="netModeIcon" class="center label-small font-gray" title="WiFi Client Status">OFFLINE</label>
{%- endif %}
</div>
<div class="grid-column-2">
<!-- right column -->
<!-- network mode, ssid & ip with labels -->
<label class="label-small font-gray" for="netMode" title="Network Mode">MODE</label>
<p id="netMode" class="card-text" title="Network Mode">WiFi Client</p>
<label class="label-small font-gray" for="netSsid" title="WiFi SSID">SSID</label>
<p id="netSsid" class="card-text" title="SSID">{{ wlan_ssid }}</p>
<label class="label-small font-gray" for="netIp" title="WiFi Client IP Address">IP</label>
<p id="netIp" class="card-text" title="IP">{{ wlan_ip }}</p>
</div>
</div>
<!-- horizontal dividing line -->
<hr>
<!-- SIGNAL AND TRAFFIC GRID -->
<!-- row of icons representing network statistics -->
<div class="three-grid card-container">
<div class="stack">
<img id="netSignal" class="icon icon-medium" alt="Signal" title="WiFi Signal (%)" src="/icons/low-signal.svg">
<div class="flex-grid" style="padding-top: 0.5rem;">
<label class="label-medium" for="netSignal" style="padding-right: 3px;" title="Signal strength of WiFi connection (%)">{% if wlan_rssi %}{{ wlan_rssi }}{% else %}0{% endif %}%</label>
</div>
<label class="label-small font-gray">SIGNAL</label>
</div>
<div class="stack">
<img id="dataDownload" class="icon icon-medium" alt="Download" title="WiFi download total" src="/icons/down-arrow.svg">
<div class="flex-grid" style="padding-top: 0.5rem;">
{%- if wlan_traffic %}
<!-- display wlan traffic data -->
<label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total in {{ wlan_traffic.rx_unit }}">{{ wlan_traffic.received }}</label>
<label class="label-small font-near-black">{{ wlan_traffic.rx_unit }}</label>
{%- else %}
<!-- no wlan traffic data to display -->
<label class="label-medium" for="dataDownload" style="padding-right: 3px;" title="Data download total">0</label>
<label class="label-small font-near-black">MB</label>
{%- endif %}
</div>
<label class="label-small font-gray">DOWNLOAD</label>
</div>
<div class="stack">
<img id="dataUpload" class="icon icon-medium" alt="Upload" title="WiFi upload total" src="/icons/up-arrow.svg">
<div class="flex-grid" style="padding-top: 0.5rem;">
{%- if wlan_traffic %}
<!-- display wlan traffic data -->
<label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total in {{ wlan_traffic.tx_unit }}">{{ wlan_traffic.transmitted }}</label>
<label class="label-small font-near-black">{{ wlan_traffic.tx_unit }}</label>
{%- else %}
<!-- no wlan traffic data to display -->
<label class="label-medium" for="dataUpload" style="padding-right: 3px;" title="Data upload total">0</label>
<label class="label-small font-near-black">MB</label>
{%- endif %}
</div>
<label class="label-small font-gray">UPLOAD</label>
</div>
</div>
</div>
</div>
{%- endif -%}