mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 05:36:00 +00:00
mongo profiler formatter
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
const driver = require('./driver');
|
||||
const formatProfilerEntry = require('../frontend/formatProfilerEntry');
|
||||
|
||||
module.exports = {
|
||||
packageName: 'dbgate-plugin-mongo',
|
||||
drivers: [driver],
|
||||
functions: {
|
||||
formatProfilerEntry,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -34,6 +34,7 @@ const driver = {
|
||||
supportsDatabaseUrl: true,
|
||||
supportsServerSummary: true,
|
||||
supportsDatabaseProfiler: true,
|
||||
profilerFormatterFunction: 'formatProfilerEntry@dbgate-plugin-mongo',
|
||||
databaseUrlPlaceholder: 'e.g. mongodb://username:password@mongodb.mydomain.net/dbname',
|
||||
|
||||
getQuerySplitterOptions: () => mongoSplitterOptions,
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
const _ = require('lodash');
|
||||
|
||||
function formatProfilerEntry(obj) {
|
||||
const ts = obj.ts;
|
||||
let op = obj.op;
|
||||
let doc;
|
||||
let query;
|
||||
let ext;
|
||||
if (op == 'query') {
|
||||
const cmd = obj.command || obj.query;
|
||||
doc = cmd.find;
|
||||
query = cmd.filter;
|
||||
ext = _.pick(cmd, ['sort', 'limit', 'skip']);
|
||||
} else if (op == 'update') {
|
||||
doc = obj.ns.split('.').slice(-1)[0];
|
||||
query = obj.command && obj.command.q;
|
||||
ext = _.pick(obj, ['nModified', 'nMatched']);
|
||||
} else if (op == 'insert') {
|
||||
doc = obj.ns.split('.').slice(-1)[0];
|
||||
ext = _.pick(obj, ['ninserted']);
|
||||
} else if (op == 'remove') {
|
||||
doc = obj.ns.split('.').slice(-1)[0];
|
||||
query = obj.command && obj.command.q;
|
||||
} else if (op == 'command' && obj.command) {
|
||||
const cmd = obj.command;
|
||||
if (cmd.count) {
|
||||
op = 'count';
|
||||
query = cmd.query;
|
||||
} else if (cmd.aggregate) {
|
||||
op = 'aggregate';
|
||||
query = cmd.pipeline;
|
||||
} else if (cmd.distinct) {
|
||||
op = 'distinct';
|
||||
query = cmd.query;
|
||||
ext = _.pick(cmd, ['key']);
|
||||
} else if (cmd.drop) {
|
||||
op = 'drop';
|
||||
} else if (cmd.findandmodify) {
|
||||
op = 'findandmodify';
|
||||
query = cmd.query;
|
||||
ext = _.pick(cmd, ['sort', 'update', 'remove', 'fields', 'upsert', 'new']);
|
||||
} else if (cmd.group) {
|
||||
op = 'group';
|
||||
doc = cmd.group.ns;
|
||||
ext = _.pick(cmd, ['key', 'initial', 'cond', '$keyf', '$reduce', 'finalize']);
|
||||
} else if (cmd.map) {
|
||||
op = 'map';
|
||||
doc = cmd.mapreduce;
|
||||
query = _.omit(cmd, ['mapreduce', 'map', 'reduce']);
|
||||
ext = { map: cmd.map, reduce: cmd.reduce };
|
||||
} else {
|
||||
// unknown command
|
||||
op = 'unknown';
|
||||
query = obj;
|
||||
}
|
||||
} else {
|
||||
// unknown operation
|
||||
query = obj;
|
||||
}
|
||||
|
||||
return {
|
||||
ts,
|
||||
op,
|
||||
doc,
|
||||
query,
|
||||
ext,
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = formatProfilerEntry;
|
||||
@@ -1,6 +1,10 @@
|
||||
import driver from './driver';
|
||||
import formatProfilerEntry from './formatProfilerEntry';
|
||||
|
||||
export default {
|
||||
packageName: 'dbgate-plugin-mongo',
|
||||
drivers: [driver],
|
||||
functions: {
|
||||
formatProfilerEntry,
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user