@exotjs/measurements
TypeScript icon, indicating that this package has built-in type declarations

0.1.6 • Public • Published

Exot Measurements

Exot Measurements is an in-memory time series database with optional persistent storage. It serves as a core component of the Exot Inspector for storing metrics. This module is compatible with any JavaScript runtime, including Node.js, Bun, Deno, and web browsers.

ci

Features

  • Fast, in-memory time-series aggregations
  • Low memory footprint
  • Optional persistance

Usage

import { Measurements } from '@exotjs/measurements';
import { MemoryStore } from '@exotjs/measurements/store';

const measurements = new Measurements({
  measurements: [{
    interval: 5000,
    key: 'temperature',
    type: 'aggregate',
  }],
  store: new MemoryStore(),
});

const aggregate = measurements.aggregate('temperature');

aggregate.push([51.7, 53.6, 49.2]);

const { avg, count, first, last, max, min, sum } = aggregate.value;

API

new Measurements(options)

Instantiate a new Measurements instance.

new Measurements({
  measurements: [{
    interval: 5000,
    key: 'temperature',
    type: 'aggregate',
  }],
  store: new MemoryStore(),
})

Available options:

  • measurements: MeasurementConfig[]
  • store: Store (required)

aggregate(key, time?, label?)

Return an instance of the AggregateMeasurement for the given key, time, and label.

async export(options)

Returns an exported measurements with configurations and measurements.

Available options:

  • downsample: number
  • endTime: number
  • fill: boolean
  • keys: string[]
  • startTime: number

async import(data)

Import data returned from the .export() method.

push(data)

Push new values to multiple measurements.

measurements.push({
  temperature: [{
    label: 'hdd1',
    values: [43.2, 48.9],
  }],
});

reset()

Clear in-memory measurements and the underlying store.

sum(key, time?, label?)

Return an instance of the SumMeasurement for the given key, time, and label.

value(key, time?, label?)

Return an instance of the ValueMeasurement for the given key, time, and label.

Measurements

Available measurement types:

  • aggregate
  • sum
  • value

AggregateMeasurement

Stores an aggregate object.

interface AggregateMeasurement {
  value: {
    avg: null | number;
    count: number;
    first: null | number;
    last: null | number;
    min: null | number;
    max: null | number;
    sum: number;
  };
}

SumMeasurement

Stores a single numeric value representing the sum of the values.

interface SumMeasurement {
  value: number;
}

ValueMeasurement

Stores the last pushed value.

interface ValueMeasurement {
  value: number;
}

License

MIT

Package Sidebar

Install

npm i @exotjs/measurements

Weekly Downloads

1

Version

0.1.6

License

MIT

Unpacked Size

31.8 kB

Total Files

21

Last publish

Collaborators

  • ovx