mongo-oplog2
Version:
Simple monitoring of MongoDB oplog.
96 lines • 5.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.timeout = exports.regex = exports.prettify = exports.omit = exports.getTimestamp = exports.getOpName = exports.opMap = void 0;
const util_1 = require("util");
const mongodb_1 = require("mongodb");
util_1.debuglog("mongo-oplog2:utils");
exports.opMap = Object.freeze({
i: "insert", insert: "i",
d: "delete", delete: "d",
n: "noop", noop: "n",
u: "update", update: "i",
});
/**
* Converts from the operation code from the native MongoDB versions to
* friendlier names. Conversions are:
* i: insert
* d: delete
* n: noop
* u: update
* @param op MongoDB operation code
*/
function getOpName(op) {
return exports.opMap[op] || op;
}
exports.getOpName = getOpName;
/**
* Converts a number into a MongoDB `Timestamp`
* @param ts timestamp to convert
*/
function getTimestamp(ts) {
if (typeof ts === 'string') {
return mongodb_1.Timestamp.fromString(ts);
}
else if (typeof ts === 'number' || !ts) {
return new mongodb_1.Timestamp(0, ts ? ts : (Date.now() / 1000));
}
return ts;
}
exports.getTimestamp = getTimestamp;
/**
* Returns a new object without any of the specified keys.
* @param obj Initial object
* @param keys array of keys to be removed from the object
*/
function omit(obj, keys) {
const omitted = Object.assign({}, obj);
for (const key of keys) {
delete omitted[key];
}
return omitted;
}
exports.omit = omit;
/**
* Converts from `OplogDoc` format to `PrettyOplogDoc` format.
* @param oplogDoc a document in MongoDB OplogDoc format.
*/
function prettify(oplogDoc) {
const aEvents = exports.opMap;
const doc = {
namespace: oplogDoc.ns,
operation: getOpName(oplogDoc.op),
operationId: oplogDoc.h,
timestamp: new Date(oplogDoc.ts.high_ * 1000),
ts: oplogDoc.ts,
};
const targetId = (oplogDoc.o2 && oplogDoc.o2._id ? oplogDoc.o2._id : (oplogDoc.o && oplogDoc.o._id ? oplogDoc.o._id : null));
if (targetId) {
doc.targetId = targetId;
}
if (oplogDoc.o2) {
doc.criteria = oplogDoc.o2;
}
if (oplogDoc.o) {
doc.data = oplogDoc.o;
}
return doc;
}
exports.prettify = prettify;
/**
* Returns a `RegExp` used for filtering events.
* @param pattern regex pattern
*/
function regex(pattern) {
pattern = pattern.replace(/[*]/g, "(.*?)");
return new RegExp(`^${pattern}$`, "i");
}
exports.regex = regex;
/**
* Returns a promise that will resolve after a specified period of time.
* @param ms length of time before promise should resolve.
*/
function timeout(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
exports.timeout = timeout;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUFnQztBQUNoQyxxQ0FBaUQ7QUFFakQsZUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFbEIsUUFBQSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBUTtJQUN0QyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHO0lBQ3hCLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUc7SUFDeEIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRztJQUNwQixDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHO0NBQzNCLENBQUMsQ0FBQztBQUdIOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLEVBQVU7SUFDaEMsT0FBYSxhQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2xDLENBQUM7QUFGRCw4QkFFQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLFlBQVksQ0FBQyxFQUFnQztJQUN6RCxJQUFJLE9BQU8sRUFBRSxLQUFLLFFBQVEsRUFBRTtRQUN4QixPQUFPLG1CQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ25DO1NBQU0sSUFBSSxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksQ0FBQyxFQUFFLEVBQUU7UUFDdEMsT0FBTyxJQUFJLG1CQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0tBQzFEO0lBQ0QsT0FBTyxFQUFFLENBQUM7QUFDZCxDQUFDO0FBUEQsb0NBT0M7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsSUFBSSxDQUFDLEdBQVEsRUFBRSxJQUFjO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1FBQ3BCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0tBQ3ZCO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQztBQU5ELG9CQU1DO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsUUFBUSxDQUFDLFFBQWtCO0lBQ3ZDLE1BQU0sT0FBTyxHQUFRLGFBQUssQ0FBQztJQUMzQixNQUFNLEdBQUcsR0FBd0I7UUFDN0IsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFO1FBQ3RCLFNBQVMsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNqQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkIsU0FBUyxFQUFFLElBQUksSUFBSSxDQUFPLFFBQVEsQ0FBQyxFQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNwRCxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUU7S0FDbEIsQ0FBQztJQUNGLE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUEsQ0FBQyxDQUFBLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQSxDQUFDLENBQUEsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUEsQ0FBQyxDQUFBLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckgsSUFBSSxRQUFRLEVBQUU7UUFBRSxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztLQUFFO0lBQzFDLElBQUksUUFBUSxDQUFDLEVBQUUsRUFBRTtRQUFFLEdBQUcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQztLQUFFO0lBQ2hELElBQUksUUFBUSxDQUFDLENBQUMsRUFBRTtRQUFFLEdBQUcsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUFFO0lBQzFDLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQWRELDRCQWNDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsS0FBSyxDQUFDLE9BQWU7SUFDakMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzNDLE9BQU8sSUFBSSxNQUFNLENBQUMsSUFBSSxPQUFPLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBSEQsc0JBR0M7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixPQUFPLENBQUMsRUFBVTtJQUM5QixPQUFPLElBQUksT0FBTyxDQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDaEMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FDMUIsQ0FBQztBQUNOLENBQUM7QUFKRCwwQkFJQyJ9