mongo-oplog2
Version:
Simple monitoring of MongoDB oplog.
44 lines • 3.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FilteredMongoOplog = void 0;
const util_1 = require("util");
const eventemitter_1 = require("./eventemitter");
const util_2 = require("./util");
const debug = util_1.debuglog("mongo-oplog2:filter");
/**
* Allows filtering of the oplog events. A typical usecase would be to have the
* main `oplog` instance tailing an entire database but then create a filter for
* a specifc collection to create triggers independently.
*/
class FilteredMongoOplog extends eventemitter_1.default {
constructor(oplog, ns = "*") {
super();
this.ignore = false;
debug("initializing filter with re %s", ns);
const re = util_2.regex(ns);
this.oplog = oplog;
this.onOp = (doc) => {
const docNs = doc.namespace || doc.ns;
if (this.ignore || !re.test(docNs)) {
return;
}
debug("incoming data %j", doc);
const opName = doc.operation || util_2.getOpName(doc.op);
this.emit("op", doc);
this.emit(opName, doc);
};
oplog.on("op", this.onOp);
}
/**
* Removes the filter from the listeners for the oplog instance and
* removes all event listeners from the filter.
*/
destroy() {
debug("removing filter bindings");
this.emit("destroy");
this.oplog.removeListener("op", this.onOp);
this.removeAllListeners();
}
}
exports.FilteredMongoOplog = FilteredMongoOplog;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZpbHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBZ0M7QUFDaEMsaURBQTBDO0FBRTFDLGlDQUE4RTtBQUU5RSxNQUFNLEtBQUssR0FBRyxlQUFRLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQVU5Qzs7OztHQUlHO0FBQ0gsTUFBYSxrQkFDTyxTQUFRLHNCQUEyQztJQU1uRSxZQUFZLEtBQTJCLEVBQUUsS0FBYSxHQUFHO1FBQ3JELEtBQUssRUFBRSxDQUFDO1FBTFosV0FBTSxHQUFZLEtBQUssQ0FBQztRQU1wQixLQUFLLENBQUMsZ0NBQWdDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxFQUFFLEdBQUcsWUFBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNyQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFBRSxPQUFPO2FBQUU7WUFDL0MsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sTUFBTSxHQUFpQyxHQUFHLENBQUMsU0FBUyxJQUFJLGdCQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQztRQUNGLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTztRQUNILEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0NBQ0o7QUFqQ0QsZ0RBaUNDIn0=