-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
executable file
·80 lines (67 loc) · 2.14 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env node
import _ from "lodash";
import { MongoClient } from "mongodb";
import chalk from "chalk";
import config from "config";
import args from "./lib/usage.js";
import Renderer from "./lib/renderer.js";
import { sleep, clear, setupRawMode, cleanupAndExit } from "./lib/helpers.js";
const prefs = {
paused: false,
reversed: false,
snapshot: false,
refreshInterval: Number(args.refresh),
minTime: Number(args.minTime),
all: args.all,
log: args.log,
};
let server;
let db;
async function run() {
const serverConfig = config.get(args.config);
setupRawMode(prefs);
prefs.ip = args.ip;
try {
server = await MongoClient.connect(serverConfig.uri);
db = server.db("admin");
} catch (err) {
console.log(chalk.red(`Error connecting to MongoDB URI: ${args.uri}`));
console.log(chalk.white.bgRed(err));
cleanupAndExit();
}
try {
const renderer = new Renderer(prefs, args.config);
let body;
while (true) {
const header = renderer.renderHeader();
let queries;
if (!prefs.paused) {
queries = await db.command({ currentOp: 1, secs_running: { $gte: Number(prefs.minTime) } });
body = renderer.renderBody(queries.inprog);
}
if (!prefs.paused || !prefs.finishedPausing) {
clear();
console.log(header, body);
prefs.finishedPausing = prefs.paused;
}
if (args.once) {
break;
}
const interval = prefs.paused ? 0.5 : prefs.refreshInterval;
await sleep(interval);
if (prefs.snapshot && queries) {
// User requested to save a snapshot of the current queries to disk for later analysis
renderer.save(queries.inprog);
}
}
} catch (err) {
console.log(chalk.white.bgRed(`Error running db.currentOp(): ${err}`));
console.log(err);
}
cleanupAndExit();
}
process.on("exit", () => {
console.log("Closing server connection");
server?.close();
});
run(); // Start