import test from 'brittle' import fs from 'fs' import path from 'path' import os from 'os' import { getStore } from '../server/services/store.js' import { toPrometheusText, writeSnapshotFile, buildSnapshot, } from '../server/services/export.js' test('toPrometheusText includes peardata_info and dimensions', (t) => { const text = toPrometheusText({ 'system.cpu': { ts: Date.now(), values: { user: 10, idle: 90 }, }, }) t.ok(text.includes('peardata_info')) t.ok(text.includes('peardata_system_cpu')) t.ok(text.includes('dimension="idle"')) t.ok(text.includes(' 90')) }) test('writeSnapshotFile respects PEARDATA_EXPORT_DIR', (t) => { const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'peardata-export-')) const prev = process.env.PEARDATA_EXPORT_DIR process.env.PEARDATA_EXPORT_DIR = dir const snap = { ts: 1234567890, latest: {}, success: true } const written = writeSnapshotFile(snap) t.ok(written.path) t.ok(fs.existsSync(written.path)) const parsed = JSON.parse(fs.readFileSync(written.path, 'utf8')) t.is(parsed.ts, 1234567890) fs.rmSync(dir, { recursive: true, force: true }) if (prev == null) delete process.env.PEARDATA_EXPORT_DIR else process.env.PEARDATA_EXPORT_DIR = prev }) test('buildSnapshot returns latest from store', (t) => { // ensure singleton has something const store = getStore() store.ingest([ { chart: 'system.ram', context: 'system.ram', ts: Date.now(), values: { used: 100, free: 200, cached: 50, buffers: 10 }, }, ]) const snap = buildSnapshot() t.ok(snap.success) t.ok(snap.latest['system.ram']) t.ok(snap.health) })