A dependency-free machine health beacon for the Norfield VPS. One Node daemon, three GET endpoints, JSON on localhost.

Is the machine healthy right now? One request answers.

Norfield Pulse runs as one Node.js daemon on the Norfield VPS. It samples load, memory, disk and uptime on a fixed cadence, 10 seconds by default, and serves the latest reading as JSON on 127.0.0.1. Node built-ins only.

See the endpoints

Three endpoints, GET only, loopback only

/pulse

Latest sample: status of ok, warn or critical, plus load, memory, disk, uptime, the beat counter, and per-check detail showing the observed value against its limits.

/pulse/history?n=N

Recent samples from the in-memory ring, oldest first. The ring holds 360 samples, about an hour at the 10-second default. Pass n to limit the response to the most recent N.

/healthz

Shallow liveness. Returns 200 while the sampler has ticked within the last three intervals, 503 otherwise. Intended for supervision and for Hermes.

Bound to 127.0.0.1

The listener answers GET requests on loopback only. The health data never leaves the machine that produced it.

No dependencies

Node.js built-ins only, on Node 18.15 or newer. Nothing to pull at install time, nothing extra to audit on the box it watches.

Fixed cadence sampling

The daemon samples on a timer rather than per request, so every reader sees the same sample, and the beat counter shows how many ticks have elapsed.

0
runtime dependencies
10s
default sample interval
360
samples held in memory (~1 hour)
3
GET endpoints

How it runs

1

Start the daemon

One Node.js process, built-ins only, on Node 18.15 or newer. It binds to 127.0.0.1 and starts sampling on its own cadence.

2

Sample on a timer

Every interval, 10 seconds by default, it reads load, memory, disk and uptime, compares each against its limits, and advances the beat counter.

3

Keep about an hour in memory

Each sample enters a ring of 360 entries. The oldest falls off as new ones arrive, and nothing is written to disk.

4

Read it over HTTP

Ask /pulse for the current state, /pulse/history for the recent trend, and /healthz when a supervisor or Hermes needs a yes or no.

Questions operators ask

Can I reach it from another host?

No. The listener binds to 127.0.0.1 and accepts GET requests only. Read it from the VPS itself, or tunnel to loopback.

What do ok, warn and critical mean?

They are the roll-up of the individual checks. Every check reports its observed value alongside the limits it was compared against, so you can see which one moved the overall status and by how much.

How much history is available?

The ring holds 360 samples, roughly one hour at the 10-second default. Samples come back oldest first, and n trims the response to the most recent N. The ring lives in memory, so it starts empty after a restart.

What is the difference between /pulse and /healthz?

/pulse describes the machine. /healthz describes the daemon: 200 while the sampler has ticked within three intervals, 503 otherwise. Use /healthz for supervision and Hermes, and /pulse when you want the numbers.

How much does the beacon itself cost to run?

It is one Node process with no dependencies. Each sample reports the daemon's own RSS, so its footprint shows up in the same response as everything else it measures.

About Norfield Pulse

Norfield Pulse answers one question, is the machine itself healthy right now, and stops there. It is a beacon: a fixed-cadence sample of load, memory, disk and uptime, held in memory for about an hour and served as JSON on loopback. Staying on Node built-ins means there is no dependency tree to maintain on the machine it is meant to watch. Staying on 127.0.0.1 means there is no exposed surface to defend. Everything else, alerting, dashboards, escalation, is left to whatever reads the endpoints.