mongo-oplog2
Version:
Simple monitoring of MongoDB oplog.
53 lines • 4.07 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getLastDoc = exports.getStream = void 0;
const util_1 = require("./util");
/**
* Obtain a cursor stream for the oplog.
* @param db database connection
* @param ns optional namespace for filtering of documents returned
* @param ts timestamp to start from. No specified timestamp is treated as from now.
* @param coll collection for the oplog. (default: "oplog.rs")
*/
async function getStream({ db, ns, ts, coll, filter } = {}) {
if (!db) {
throw new Error("Mongo db is missing.");
}
coll = coll || "oplog.rs";
const collection = db.collection(coll);
const timestamp = util_1.getTimestamp(ts);
const query = { ts: { $gt: timestamp } };
if (filter) {
Object.assign(query, filter);
}
else if (ns) {
query.ns = { $regex: util_1.regex(ns) };
}
const cursor = collection.find(query);
for (const flag of ['awaitData', 'noCursorTimeout', 'oplogReplay', 'tailable']) {
cursor.addCursorFlag(flag, true);
}
cursor.setCursorOption('numberOfRetries', Number.MAX_VALUE);
cursor.batchSize(1000);
return cursor.stream();
}
exports.getStream = getStream;
/**
* Retrieves the last document from the capped collection.
* @param db database connection
* @param ns optional namespace for filtering of ducoments returned
* @param coll collection to query (default: "oplog.rs")
*/
async function getLastDoc(db, ns, coll) {
if (!db) {
throw new Error("MongoDB connection is missing.");
}
coll = coll || "oplog.rs";
const collection = db.collection(coll);
const query = ns ? { ns: { $regex: util_1.regex(ns) } } : {};
const cursor = collection.find(query).sort({ $natural: -1 }).limit(1);
const doc = await cursor.next();
return doc;
}
exports.getLastDoc = getLastDoc;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxpQ0FBbUU7QUFVbkU7Ozs7OztHQU1HO0FBQ0ksS0FBSyxVQUFVLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLEtBQXVCLEVBQUU7SUFDL0UsSUFBSSxDQUFDLEVBQUUsRUFBRTtRQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztLQUFFO0lBQ3JELElBQUksR0FBRyxJQUFJLElBQUksVUFBVSxDQUFDO0lBQzFCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsTUFBTSxTQUFTLEdBQUcsbUJBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxNQUFNLEtBQUssR0FBZSxFQUFDLEVBQUUsRUFBRSxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsRUFBQyxDQUFDO0lBQ2pELElBQUksTUFBTSxFQUFFO1FBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FBRTtTQUN4QyxJQUFJLEVBQUUsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBQyxNQUFNLEVBQUUsWUFBSyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7S0FBRTtJQUNoRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1FBQzVFLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3BDO0lBQ0QsTUFBTSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsU0FBZ0IsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsT0FBTyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDM0IsQ0FBQztBQWZELDhCQWVDO0FBRUQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsVUFBVSxDQUFDLEVBQU8sRUFBRSxFQUFXLEVBQUUsSUFBYTtJQUNoRSxJQUFJLENBQUMsRUFBRSxFQUFFO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0tBQUU7SUFDL0QsSUFBSSxHQUFHLElBQUksSUFBSSxVQUFVLENBQUM7SUFDMUIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxNQUFNLEtBQUssR0FBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFFLEVBQUMsTUFBTSxFQUFFLFlBQUssQ0FBQyxFQUFFLENBQUMsRUFBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN2RCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sR0FBRyxHQUFhLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFDLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQVJELGdDQVFDIn0=