UNPKG

rrdtool.ts

Version:

RRDTool High Level library for Node.js written in TypeScript

91 lines (90 loc) 3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.RrdtoolDatabase = void 0; const proc_1 = __importDefault(require("./proc")); const async_1 = __importDefault(require("async")); const events_1 = __importDefault(require("events")); var M; (function (M) { M[M["DUMP"] = 0] = "DUMP"; M[M["FETCH"] = 1] = "FETCH"; M[M["UPDATE"] = 2] = "UPDATE"; })(M || (M = {})); class RrdtoolDatabase extends events_1.default { constructor(filename, cb) { super(); this.filename = filename; this.cb = cb || (err => this.emit("error", err)); this.queue = async_1.default.queue(this._worker.bind(this), 1); this.queue.pause(); this._load(filename); } async _load(filename) { this.info = await proc_1.default.info(filename); this.queue.resume(); } _addToQueue(q) { this.queue.push(q, this.cb); } _callback(resolve, reject) { return (err, result) => { if (err) reject(err); resolve(result); }; } _worker(q) { var _a; switch (q.method) { case M.UPDATE: { const ds = ((_a = this.info) === null || _a === void 0 ? void 0 : _a.ds) || []; const unknownKeys = Object.keys(q.values).filter(k => !ds.find(d => d.name === k)); if (unknownKeys.length > 0) { return q.cb(new Error(`Unknown data source(s): ${unknownKeys.join(", ")}`)); } q.cb(null, proc_1.default.update(this.filename, q.values, q.options)); break; } case M.FETCH: { q.cb(null, proc_1.default.fetch(this.filename, q.cf, q.options)); break; } case M.DUMP: q.cb(null, proc_1.default.dump(this.filename)); break; } } dump() { return new Promise((resolve, reject) => { const cb = this._callback(resolve, reject); this._addToQueue({ method: M.DUMP, cb }); }); } ; fetch(cf, options) { return new Promise((resolve, reject) => { const cb = this._callback(resolve, reject); this._addToQueue({ method: M.FETCH, cb, cf, options, }); }); } async update(values, options) { return new Promise((resolve, reject) => { const cb = this._callback(resolve, reject); this._addToQueue({ method: M.UPDATE, cb, values, options, }); }); } } exports.RrdtoolDatabase = RrdtoolDatabase;