Skip to content

Commit 8f67d20

Browse files
committed
pr fixes - control reporting interval for tests, don't start metrics if app launched standalone, remove socket writer
1 parent a84ad63 commit 8f67d20

File tree

6 files changed

+41
-62
lines changed

6 files changed

+41
-62
lines changed

README.md

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,16 +92,20 @@ Usage: nodejs-dashboard [options] -- [node] [script] [arguments]
9292
```
9393
Options:
9494
95-
-h, --help output usage information
96-
-V, --version output the version number
97-
-p, --port [port] Socket listener port
98-
-e, --eventdelay [ms] Minimum threshold for event loop reporting, default 10ms
99-
-s, --scrollback [count] Maximum scroll history for log windows
95+
-h, --help output usage information
96+
-V, --version output the version number
97+
-p, --port [port] Socket listener port
98+
-r, --refreshinterval [ms] Metrics refresh interval, default 1000ms
99+
-e, --eventdelay [ms] Minimum threshold for event loop reporting, default 10ms
100+
-s, --scrollback [count] Maximum scroll history for log windows
100101
```
101102

102103
#####`--port`
103104
Under the hood the dashboard utilizes SocketIO with a default port of `9838`. If this conflicts with an existing service you can optionally change this value.
104105

106+
#####`--refreshinterval`
107+
Specifies the interval in milliseconds that the metrics should be refreshed. The default is 1000 ms (1 second).
108+
105109
#####`--eventdelay`
106110
This tunes the minimum threshold for reporting event loop delays. The default value is `10ms`. Any delay below this value will be reported at `0`.
107111

bin/nodejs-dashboard.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ var program = new commander.Command(pkg.name);
1616

1717
program.version(pkg.version);
1818
program.option("-p, --port [port]", "Socket listener port");
19+
program.option("-r, --refreshinterval [ms]", "Metrics refresh interval, default 1000ms");
1920
program.option("-e, --eventdelay [ms]", "Minimum threshold for event loop reporting, default 10ms");
2021
program.option("-s, --scrollback [count]", "Maximum scroll history for log windows");
2122
program.usage("[options] -- [node] [script] [arguments]");
@@ -30,10 +31,12 @@ var command = program.args[0];
3031
var args = program.args.slice(1);
3132

3233
var port = program.port || config.PORT;
34+
var refreshInterval = program.refreshinterval || config.REFRESH_INTERVAL;
3335
var eventDelay = program.eventdelay || config.BLOCKED_THRESHOLD;
3436
var scrollback = program.scrollback || config.SCROLLBACK;
3537

3638
process.env[config.PORT_KEY] = port;
39+
process.env[config.REFRESH_INTERVAL_KEY] = refreshInterval;
3740
process.env[config.BLOCKED_THRESHOLD_KEY] = eventDelay;
3841

3942
var child = spawn(command, args, {

lib/config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ var pkg = require("../package.json");
55
module.exports = {
66
PORT: 9838,
77
PORT_KEY: pkg.name + "_PORT",
8+
REFRESH_INTERVAL: 1000,
9+
REFRESH_INTERVAL_KEY: pkg.name + "_REFRESH_INTERVAL",
810
BLOCKED_THRESHOLD: 10,
911
BLOCKED_THRESHOLD_KEY: pkg.name + "_BLOCKED_THRESHOLD",
1012
SCROLLBACK: 1000

lib/dashboard-agent.js

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use strict";
22

3-
var socketWriterFactory = require("./socket-writer");
3+
var SocketIO = require("socket.io-client");
44
var blocked = require("blocked");
55
var pusage = require("pidusage");
66
var os = require("os");
@@ -11,11 +11,15 @@ var dashboardAgent = function () {
1111

1212
var options = {
1313
port: process.env[config.PORT_KEY],
14-
blockedThreshold: process.env[config.BLOCKED_THRESHOLD_KEY],
15-
refreshInterval: 1000
14+
refreshInterval: process.env[config.REFRESH_INTERVAL_KEY],
15+
blockedThreshold: process.env[config.BLOCKED_THRESHOLD_KEY]
1616
};
1717

18-
var socketWriter = socketWriterFactory(options);
18+
// check if the app was launched w/o the dashboard
19+
// if so, don't start any of the monitoring
20+
var enabled = options.port && options.refreshInterval && options.blockedThreshold;
21+
22+
var socket;
1923

2024
var metrics = {
2125
eventLoop: {
@@ -35,8 +39,6 @@ var dashboardAgent = function () {
3539
metrics.eventLoop.delay = delay;
3640
};
3741

38-
blocked(_delayed, { threshold: options.blockedThreshold });
39-
4042
var _getStats = function (cb) {
4143
_.merge(metrics.mem, process.memoryUsage());
4244

@@ -61,9 +63,11 @@ var dashboardAgent = function () {
6163
_getStats(function (err, newMetrics) {
6264
if (err) {
6365
console.error("Failed to load metrics: ", err); //eslint-disable-line
64-
socketWriter.write("error", JSON.stringify(err));
65-
} else {
66-
socketWriter.write("metrics", JSON.stringify(newMetrics));
66+
if (socket && socket.connected) {
67+
socket.emit("error", JSON.stringify(err));
68+
}
69+
} else if (socket && socket.connected) {
70+
socket.emit("metrics", JSON.stringify(newMetrics));
6771
}
6872

6973
resetEventMetrics();
@@ -72,12 +76,22 @@ var dashboardAgent = function () {
7276
};
7377

7478
var startPump = function () {
75-
options.intervalId = setInterval(_emitStats, options.refreshInterval);
79+
if (enabled) {
80+
socket = new SocketIO("http://localhost:" + options.port);
81+
blocked(_delayed, { threshold: options.blockedThreshold });
82+
options.intervalId = setInterval(_emitStats, options.refreshInterval);
83+
}
7684
};
7785

7886
var destroy = function () {
79-
socketWriter.close();
80-
clearInterval(options.intervalId);
87+
if (socket) {
88+
socket.close();
89+
socket = null;
90+
}
91+
if (options.intervalId) {
92+
clearInterval(options.intervalId);
93+
options.intervalId = null;
94+
}
8195
};
8296

8397
startPump();

lib/socket-writer.js

Lines changed: 0 additions & 45 deletions
This file was deleted.

test/lib/dashboard-agent.spec.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ describe("dashboard-agent", function () {
1818
before(function () {
1919
process.env[config.PORT_KEY] = TEST_PORT;
2020
process.env[config.BLOCKED_THRESHOLD_KEY] = 1;
21+
process.env[config.REFRESH_INTERVAL_KEY] = 10;
2122
});
2223

2324
beforeEach(function () {

0 commit comments

Comments
 (0)