rrdtool.ts
Version:
RRDTool High Level library for Node.js written in TypeScript
91 lines (90 loc) • 3 kB
JavaScript
;
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;