mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-18 10:59:45 +00:00
Graph nits
This commit is contained in:
1 parent
b381fdc790
commit
423f3291da
3 files changed
+31
-11
No files matched your search
@@ -26,13 +26,13 @@ size_t print_points(void (*fn)(char, void *), void *arg, va_list *ap) {
|
||||
for (i = 0; i < NUM_POINTS; i++) {
|
||||
struct point p;
|
||||
p.x = (uint16_t) i;
|
||||
p.y1 = 50 -
|
||||
(uint16_t) ((40 * (i > (NUM_POINTS - 1) / 4
|
||||
p.y1 = 80 -
|
||||
(uint16_t) ((90 * (i > (NUM_POINTS - 1) / 4
|
||||
? i - (NUM_POINTS - 1) / 4
|
||||
: (NUM_POINTS - 1) / 4 - i)) /
|
||||
(NUM_POINTS - 1)) +
|
||||
(rand() % 9);
|
||||
p.y2 = 20 + (uint16_t) ((29 * i) / NUM_POINTS) + (rand() % 5);
|
||||
p.y2 = 20 + (uint16_t) ((69 * i) / NUM_POINTS) + (rand() % 5);
|
||||
n += mg_xprintf(fn, arg, "%s[%hu,%hu,%hu]", comma, p.x, p.y1, p.y2);
|
||||
comma = ",";
|
||||
}
|
||||
@@ -43,15 +43,17 @@ static void get_points(union mg_val *val) {
|
||||
val->fn = (void (*)(void)) print_points;
|
||||
}
|
||||
|
||||
static int s_ram = 32, s_cpu = 37, s_humidity = 59;
|
||||
static double s_temp = 24.8;
|
||||
// This function prints a JSON object with read-only metrics
|
||||
size_t print_metrics(void (*fn)(char, void *), void *arg, va_list *ap) {
|
||||
size_t n = 0;
|
||||
(void) ap;
|
||||
n += mg_xprintf(fn, arg, "{");
|
||||
n += mg_xprintf(fn, arg, "%s%m:%g", " ", MG_ESC("temperature"), 24.8);
|
||||
n += mg_xprintf(fn, arg, "%s%m:%d", ",", MG_ESC("humidity"), 59);
|
||||
n += mg_xprintf(fn, arg, "%s%m:%d", ",", MG_ESC("cpu"), 37);
|
||||
n += mg_xprintf(fn, arg, "%s%m:%d", ",", MG_ESC("ram"), 32);
|
||||
n += mg_xprintf(fn, arg, "%s%m:%.3g", " ", MG_ESC("temperature"), s_temp);
|
||||
n += mg_xprintf(fn, arg, "%s%m:%d", ",", MG_ESC("humidity"), s_humidity);
|
||||
n += mg_xprintf(fn, arg, "%s%m:%d", ",", MG_ESC("cpu"), s_cpu);
|
||||
n += mg_xprintf(fn, arg, "%s%m:%d", ",", MG_ESC("ram"), s_ram);
|
||||
n += mg_xprintf(fn, arg, "}");
|
||||
return n;
|
||||
}
|
||||
@@ -84,9 +86,12 @@ size_t print_controls(void (*fn)(char, void *), void *arg, va_list *ap) {
|
||||
size_t n = 0;
|
||||
(void) ap;
|
||||
n += mg_xprintf(fn, arg, "{");
|
||||
n += mg_xprintf(fn, arg, "%s%m:%s", " ", MG_ESC("fan"), s_fan ? "true" : "false");
|
||||
n += mg_xprintf(fn, arg, "%s%m:%s", ",", MG_ESC("relay1"), s_relay1 ? "true" : "false");
|
||||
n += mg_xprintf(fn, arg, "%s%m:%s", ",", MG_ESC("relay2"), s_relay2 ? "true" : "false");
|
||||
n += mg_xprintf(fn, arg, "%s%m:%s", " ", MG_ESC("fan"),
|
||||
s_fan ? "true" : "false");
|
||||
n += mg_xprintf(fn, arg, "%s%m:%s", ",", MG_ESC("relay1"),
|
||||
s_relay1 ? "true" : "false");
|
||||
n += mg_xprintf(fn, arg, "%s%m:%s", ",", MG_ESC("relay2"),
|
||||
s_relay2 ? "true" : "false");
|
||||
n += mg_xprintf(fn, arg, "}");
|
||||
return n;
|
||||
}
|
||||
@@ -118,6 +123,17 @@ void mongoose_init(void) {
|
||||
|
||||
void mongoose_poll(void) {
|
||||
mg_mgr_poll(&mgr, 1);
|
||||
|
||||
// Simulate metrics change periodically
|
||||
static uint64_t timer = 0;
|
||||
if (mg_timer_expired(&timer, 30000, mg_now())) {
|
||||
// s_temp = 14.8 + ((double)rand() / RAND_MAX) * 20.0;
|
||||
// s_humidity = 37 + (rand() % 21);
|
||||
// s_cpu = 3 + (rand() % 21);
|
||||
// s_ram = 25 + (rand() % 16);
|
||||
mg_dash_send_change(&mgr, mg_dash_find_field(fields, mg_str("metrics")));
|
||||
mg_dash_send_change(&mgr, mg_dash_find_field(fields, mg_str("points")));
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
<span class="metric-unit">KB</span>
|
||||
</div>
|
||||
<span class="metric-status metric-status-alert" style="${metrics.ram <= 30 ? '': 'display:none;'}">low</span>
|
||||
<span class="metric-status metric-status-warn" style="${metrics.ram <= 50 && metrics.ram > 30 ? '': 'display:none;'}">low</span>
|
||||
<span class="metric-status metric-status-warn" style="${metrics.ram <= 50 && metrics.ram > 30 ? '': 'display:none;'}">ok-ish</span>
|
||||
</div>
|
||||
</article>
|
||||
<article class="metric-tile">
|
||||
|
||||
@@ -60,6 +60,10 @@ document.addEventListener("DOMContentLoaded", () => {
|
||||
{ values: "{MMM} {DD}", size: 25 },
|
||||
{ size: 50, xvalues: (u, vals, space) => vals.map(v => (+v / 1000).toFixed(1) + 'k') },
|
||||
],
|
||||
scales: {
|
||||
x: { time: true },
|
||||
y: { range: [0, 100] },
|
||||
},
|
||||
series: [
|
||||
{},
|
||||
{stroke: 'rgba(5, 141, 199, 1)', fill: 'rgba(5, 141, 199, 0.1)'},
|
||||
|
||||
Reference in new issue
Block a user