Licence
exellix-license
Version
1.4.0
Deps
0
Size
191 kB
Vulns
0
Weekly
0
@x12i/api-live-view
Embeddable status + live request view for any HTTP service.
- In-memory traffic rings only (no database)
- Tabs: Status (hourly push/pull data volume + process health graphs) · API docs · Counters (who / frequency / APIs) · Incoming · Worker (outbound)
- Adapters: Fastify and Node
http
Install
npm install @x12i/api-live-view
Peer (Fastify adapter only): fastify@^5.
Fastify
import Fastify from "fastify";
import { attachFastifyLiveView } from "@x12i/api-live-view/fastify";
const app = Fastify();
const live = await attachFastifyLiveView(app, {
service: {
id: "my-api",
title: "My API",
port: 8080,
env: "PORT",
origin: "http://127.0.0.1:8080/",
docsUrl: "http://127.0.0.1:8080/openapi.json",
description: "Example service",
},
});
// Outbound / worker calls
const fetchLive = live.createInstrumentedFetch({ caller: "worker" });
await fetchLive("https://example.test/x");
await app.listen({ port: 8080, host: "127.0.0.1" });
// Open http://127.0.0.1:8080/_live
Prefer zone defaults from @x12i/ports-manager when binding in an x12i/exellix repo.
Node http
import http from "node:http";
import { createNodeHttpLiveView } from "@x12i/api-live-view/node-http";
const port = 8080;
const live = createNodeHttpLiveView({
service: { id: "fixture", title: "Fixture", port },
});
http
.createServer(async (req, res) => {
if (await live.tryHandle(req, res)) return;
const url = new URL(req.url ?? "/", `http://127.0.0.1:${port}`);
live.withInboundTiming(req, res, url.pathname, req.method ?? "GET", () => {
res.writeHead(200, { "content-type": "application/json" });
res.end(JSON.stringify({ ok: true }));
});
})
.listen(port);
Endpoints (default basePath: /_live)
| Path | Purpose |
|---|---|
GET /_live |
HTML live view |
GET /_live/api/info |
Service metadata |
GET /_live/api/status |
Liveness snapshot + ring sizes + current volume + process CPU/memory |
GET /_live/api/volume-series |
Hourly pushed/pulled byte totals (UTC, in-memory) |
GET /_live/api/health-series |
Process health samples (CPU %, RSS, heap, host RAM, event-loop) |
GET /_live/api/traffic?lane=inbound|worker |
Recent entries |
GET /_status/traffic |
Legacy alias (optional) |
Volume semantics: pushed = request body bytes into the service; pulled =
response body bytes out. Prefer Content-Length when present, else estimate from
the body. Health probes and /_live/* are excluded from the inbound ring and
volume totals.
Memorix wiring
memorix-service→http://127.0.0.1:5100/_liveopx-source→http://127.0.0.1:5102/_live- Stack hub aggregates peers on 5103
License
exellix-license