@papack/metric
v1.0.0
Published
Minimal TypeScript runtime and application metrics
Readme
@papack/metric
TypeScript metrics for developers who want minimal runtime and application metrics.
Installation
npm install @papack/metricConcept
The package is built around a single abstraction:
interface MetricPortInterface<K extends string = string> {
set(key: K, value: number | ((prev: number) => number)): void;
snapshot(): Record<K, number>;
}Anything that collects metrics implements this interface.
At the moment two concrete implementations are provided:
- Metric - in-memory application metrics, includes no metric
- RuntimeMetric - minimal runtime and system metrics
You can swap them freely via the interface.
Metric (application metrics)
Use Metric for any number value.
Example
import { Metric } from "@papack/metric";
const metric = new Metric(["REQUESTS_TOTAL", "ERRORS_TOTAL"] as const);
metric.set("REQUESTS_TOTAL", 1);
metric.set("REQUESTS_TOTAL", (v) => v + 1);
metric.set("ERRORS_TOTAL", 0);
const snapshot = metric.snapshot();
// {
// REQUESTS_TOTAL: 2,
// ERRORS_TOTAL: 0
// }Properties
- Keys are fixed and enforced at compile time
- Unknown keys throw immediately
snapshot()always returns a full object
RuntimeMetric
RuntimeMetric collects application and OS-level metrics and allows you to extend them with custom keys.
Default Metrics
UPTIME_SECONDS;
LOOP_PRESSURE;
LOAD_1M;
LOAD_5M;
LOAD_15M;
TOTAL_MEMORY_BYTES;
FREE_MEMORY_BYTES;
HEAP_USED_BYTES;
RSS_BYTES;Example
import { RuntimeMetric } from "@papack/metric";
const metric = new RuntimeMetric(["REQUESTS_TOTAL"]);
metric.set("REQUESTS_TOTAL", 1);
const snapshot = metric.snapshot();
// {
// UPTIME_SECONDS: number,
// LOOP_PRESSURE: number,
// LOAD_1M: number,
// LOAD_5M: number,
// LOAD_15M: number,
// TOTAL_MEMORY_BYTES: number,
// FREE_MEMORY_BYTES: number,
// HEAP_USED_BYTES: number,
// RSS_BYTES: number,
// REQUESTS_TOTAL: number
// }