As you may have seen, status.boysare.moe hosts live metrics, with some stats about my servers and also a small health feed with various data about me, anyone can access this if they want, and obsessively track me if desired...

This page is a short guide about the endpoints.

Endpoints

Server metrics

Server endpoints return the same structure of data, and are polled every few seconds on the dashboard.

Field Type Description
cpu number Overall CPU utilisation as a percentage
ram number RAM utilisation as a percentage
ram_used_mb / ram_total_mb number RAM used and total available RAM, in MB
uptime_s number System uptime, in seconds
proc_count number Number of running processes
timestamp number Unix timestamp from when the data was collected
power_w number CPU package power draw in watts, null if unavailable
disks[] array Disk usage per-mount: dev, used/total (in KB) and pct
net object Aggregate rx_bps/tx_bps, plus breakdown by interfaces[], with cumulative rx_bytes_total/tx_bytes_total
top_cpu[] / top_mem[] array Top processes by CPU/memory: name, cpu, mem_mb and procs

Health feed

A daily log of weight and sleep stats. How this data is collected is a mystery, but I definitely didn't reverse engineer the Suunto API (*sobs*)...

Sleep data might take a while to appear for the current date, and my sleep is seems to be split into naps because I'm stupid...
Field Type Description
current object Most recent day's row
previous[] array All earlier rows, newest first
<row>.date string YYYY-MM-DD
<row>.weight_kg number Omitted on days with no weigh-in
<row>.sleep object from/to (HH:MM), hours, stages breakdown in hours (optional)
<row>.naps object Keyed by start time (HH:MM), each entry shaped like sleep minus stages (optional)
sleep_error string Shows an error message if the sleep source failed

Activity feed

The desktop activity for the day, in categories set for ActivityWatch. Seen on the home page in the form of a small bar.

Field Type Description
host string The device the data is from
date string In YYYY-MM-DD
day_start string ISO timestamp the day began. ActivityWatch treats a day as 04:00 to 04:00 rather than midnight to midnight, so this is not on the same date as date before 04:00
day_end string ISO timestamp the day ends, one day on from day_start
generated_at string ISO timestamp of when the data was collected
source string URL of the ActivityWatch instance the data was read from
partial boolean true while the day is still being recorded
totals object active_seconds, afk_seconds, tracked_seconds, and also app_switches and distinct_apps
categories[] array Time per activitywatch category: category, active_seconds, afk_seconds, plus color and color_light to draw the bar without hardcoding a palette. Both are omitted on days recorded before the colours were added. The colour is the top-level family's, so a category and its parent share one; color_light is the same hue darkened to clear 3:1 on a light background, for use inside light-dark()
apps[] array Time per app: app, name, active_seconds, afk_seconds
hours[] array One entry per hour of the day: hour (0–23), active_seconds, afk_seconds

Errors

Errors are returned in JSON. If a server isn't responding or if data is unavailable.