Added server data collection and charting.
Ylian Saint-Hilaire committed
Mar 25, 2019 at 19:59 UTC
3c2fd023bfcc8bb0d9e5ce6a00b72e1d6969f816
7 files changed
+549
-508
db.js
+34
@@ -30,6 +30,7 @@ module.exports.CreateDB = function (parent) {
30
var Datastore = null;
31
var expireEventsSeconds = (60 * 60 * 24 * 20); // By default, expire events after 20 days. (Seconds * Minutes * Hours * Days)
32
var expirePowerEventsSeconds = (60 * 60 * 24 * 10); // By default, expire power events after 10 days. (Seconds * Minutes * Hours * Days)
33
+ var expireServerStatsSeconds = (60 * 60 * 24 * 30); // By default, expire power events after 30 days. (Seconds * Minutes * Hours * Days)
34
obj.path = require('path');
35
obj.parent = parent;
36
obj.identifier = null;
@@ -39,6 +40,7 @@ module.exports.CreateDB = function (parent) {
40
if (typeof obj.parent.args.dbexpire == 'object') {
41
if (typeof obj.parent.args.dbexpire.events == 'number') { expireEventsSeconds = obj.parent.args.dbexpire.events; }
42
if (typeof obj.parent.args.dbexpire.powerevents == 'number') { expirePowerEventsSeconds = obj.parent.args.dbexpire.powerevents; }
43
+ if (typeof obj.parent.args.dbexpire.statsevents == 'number') { expireServerStatsSeconds = obj.parent.args.dbexpire.statsevents; }
44
}
45
46
if (obj.parent.args.mongodb) {
@@ -115,6 +117,29 @@ module.exports.CreateDB = function (parent) {
117
118
// Setup MongoDB smbios collection, no indexes needed
119
obj.smbiosfile = db.collection('smbios'); // Collection containing all smbios information
120
+
121
+ // Setup MongoDB server stats collection
122
+ obj.serverstatsfile = db.collection('serverstats'); // Collection of server stats
123
+ obj.serverstatsfile.getIndexes(function (err, indexes) {
124
+ // Check if we need to reset indexes
125
+ var indexesByName = {}, indexCount = 0;
126
+ for (var i in indexes) { indexesByName[indexes[i].name] = indexes[i]; indexCount++; }
127
+ if ((indexCount != 2) || (indexesByName['ExpireTime1'] == null)) {
128
+ // Reset all indexes
129
+ console.log('Resetting server stats indexes...');
130
+ obj.serverstatsfile.dropIndexes(function (err) {
131
+ // Create all indexes
132
+ obj.serverstatsfile.createIndex({ "time": 1 }, { expireAfterSeconds: expireServerStatsSeconds, name: 'ExpireTime1' });
133
+ });
134
+ } else if (indexesByName['ExpireTime1'].expireAfterSeconds != expireServerStatsSeconds) {
135
+ // Reset the timeout index
136
+ console.log('Resetting server stats expire index...');
137
+ obj.serverstatsfile.dropIndex("ExpireTime1", function (err) {
138
+ // Reset the expire server stats index
139
+ obj.serverstatsfile.createIndex({ "time": 1 }, { expireAfterSeconds: expireServerStatsSeconds, name: 'ExpireTime1' });
140
+ });
141
+ }
142
+ });
143
} else {
144
// Use NeDB (The default)
145
obj.databaseType = 1;
@@ -167,6 +192,11 @@ module.exports.CreateDB = function (parent) {
192
193
// Setup the SMBIOS collection
194
obj.smbiosfile = new Datastore({ filename: obj.parent.getConfigFilePath('meshcentral-smbios.db'), autoload: true });
195
+
196
+ // Setup the server stats collection and setup indexes
197
+ obj.serverstatsfile = new Datastore({ filename: obj.parent.getConfigFilePath('meshcentral-stats.db'), autoload: true });
198
+ obj.serverstatsfile.persistence.setAutocompactionInterval(36000);
199
+ obj.serverstatsfile.ensureIndex({ fieldName: 'time', expireAfterSeconds: 60 * 60 * 24 * 30 }); // Limit the server stats log to 30 days (Seconds * Minutes * Hours * Days)
200
}
201
202
obj.SetupDatabase = function (func) {
@@ -305,6 +335,10 @@ module.exports.CreateDB = function (parent) {
335
obj.RemoveSMBIOS = function (id) { obj.smbiosfile.remove({ _id: id }); };
336
obj.GetSMBIOS = function (id, func) { obj.smbiosfile.find({ _id: id }, func); };
337
338
+ // Database actions on the Server Stats collection
339
+ obj.SetServerStats = function (data, func) { obj.serverstatsfile.insert(data, func); };
340
+ obj.GetServerStats = function (hours, func) { var t = new Date(); t.setTime(t.getTime() - (60 * 60 * 1000 * hours)); obj.serverstatsfile.find({ time: { $gt: t } }, { _id: 0, cpu: 0 }, func); };
341
+
342
// Read a configuration file from the database
343
obj.getConfigFile = function (path, func) { obj.Get('cfile/' + path, func); }
344
meshcentral.js
+25
-2
@@ -800,6 +800,29 @@ function CreateMeshCentralServer(config, args) {
800
});
801
}
802
803
+ // Start collecting server stats every 5 minutes
804
+ setInterval(function () {
805
+ obj.db.getStats(function (dbstats) {
806
+ var data = {
807
+ time: new Date(),
808
+ mem: process.memoryUsage(),
809
+ db: dbstats,
810
+ cpu: process.cpuUsage(),
811
+ conn: {
812
+ ca: Object.keys(obj.webserver.wsagents).length,
813
+ cu: Object.keys(obj.webserver.wssessions).length,
814
+ us: Object.keys(obj.webserver.wssessions2).length,
815
+ rs: obj.webserver.relaySessionCount
816
+ }
817
+ };
818
+ if (obj.mpsserver != null) { data.conn.am = Object.keys(obj.mpsserver.ciraConnections).length; }
819
+ obj.db.SetServerStats(data);
820
+ });
821
+
822
+
823
+
824
+ }, 300000);
825
+
826
//obj.debug(1, 'Server started');
827
if (obj.args.nousers == true) { obj.updateServerState('nousers', '1'); }
828
obj.updateServerState('state', 'running');
@@ -1599,7 +1622,7 @@ function InstallModules(modules, func) {
1622
var missingModules = [];
1623
if (modules.length > 0) {
1624
for (var i in modules) { try { var xxmodule = require(modules[i]); } catch (e) { missingModules.push(modules[i]); } }
1602
- if (missingModules.length > 0) { InstallModule(missingModules.join(' '), InstallModules, modules, func); } else { func(); }
1625
+ if (missingModules.length > 0) { InstallModule(missingModules.shift(), InstallModules, modules, func); } else { func(); }
1626
}
1627
}
1628
@@ -1610,7 +1633,7 @@ function InstallModule(modulename, func, tag1, tag2) {
1633
var child_process = require('child_process');
1634
1635
// Looks like we need to keep a global reference to the child process object for this to work correctly.
1613
- InstallModuleChildProcess = child_process.exec('npm install ' + modulename + ' --no-optional --save', { maxBuffer: 512000, timeout: 10000 }, function (error, stdout, stderr) {
1636
+ InstallModuleChildProcess = child_process.exec('npm install --no-optional --save ' + modulename, { maxBuffer: 512000, timeout: 10000 }, function (error, stdout, stderr) {
1637
InstallModuleChildProcess = null;
1638
if (error != null) { console.log('ERROR: Unable to install missing package \'' + modulename + '\', make sure npm is installed: ' + error); process.exit(); return; }
1639
func(tag1, tag2);
meshuser.js
+17
-9
@@ -261,17 +261,25 @@ module.exports.CreateMeshUser = function (parent, db, ws, req, args, domain, use
261
try { ws.send(JSON.stringify({ action: 'authcookie', cookie: parent.parent.encodeCookie({ userid: user._id, domainid: domain.id }, parent.parent.loginCookieEncryptionKey) })); } catch (ex) { }
262
break;
263
}
264
+ case 'servertimelinestats':
265
+ {
266
+ if ((user.siteadmin & 21) == 0) return; // Only site administrators with "site backup" or "site restore" or "site update" permissions can use this.
267
+ if (common.validateInt(command.hours, 0, 24 * 30) == false) return;
268
+ db.GetServerStats(command.hours, function (err, docs) {
269
+ if (err == null) { ws.send(JSON.stringify({ action: 'servertimelinestats', events: docs })); }
270
+ });
271
+ break;
272
+ }
273
case 'serverstats':
274
{
266
- if ((user.siteadmin & 21) != 0) { // Only site administrators with "site backup" or "site restore" or "site update" permissions can use this.
267
- if (common.validateInt(command.interval, 1000, 1000000) == false) {
268
- // Clear the timer
269
- if (obj.serverStatsTimer != null) { clearInterval(obj.serverStatsTimer); delete obj.serverStatsTimer; }
270
- } else {
271
- // Set the timer
272
- obj.SendServerStats();
273
- obj.serverStatsTimer = setInterval(obj.SendServerStats, command.interval);
274
- }
275
+ if ((user.siteadmin & 21) == 0) return; // Only site administrators with "site backup" or "site restore" or "site update" permissions can use this.
276
+ if (common.validateInt(command.interval, 1000, 1000000) == false) {
277
+ // Clear the timer
278
+ if (obj.serverStatsTimer != null) { clearInterval(obj.serverStatsTimer); delete obj.serverStatsTimer; }
279
+ } else {
280
+ // Set the timer
281
+ obj.SendServerStats();
282
+ obj.serverStatsTimer = setInterval(obj.SendServerStats, command.interval);
283
}
284
break;
285
}
package - Copy.json
deleted
-57
@@ -1,57 +0,0 @@
1
-{
2
- "name": "meshcentral",
3
- "version": "0.3.0-x",
4
- "keywords": [
5
- "Remote Management",
6
- "Intel AMT",
7
- "Active Management",
8
- "Remote Desktop"
9
- ],
10
- "homepage": "http://meshcommander.com",
11
- "description": "Web based remote computer management and file server",
12
- "author": "Ylian Saint-Hilaire <ysainthilaire@hotmail.com>",
13
- "main": "meshcentral.js",
14
- "bin": {
15
- "meshcentral": "./bin/meshcentral"
16
- },
17
- "license": "Apache-2.0",
18
- "files": [
19
- "*.js",
20
- "sample-config.json",
21
- "license.txt",
22
- "readme.txt",
23
- "agents",
24
- "public",
25
- "views",
26
- "bin"
27
- ],
28
- "dependencies": {
29
- "archiver": "^3.0.0",
30
- "authdog": "^0.1.1",
31
- "body-parser": "^1.18.2",
32
- "compression": "^1.7.3",
33
- "connect-redis": "^3.4.0",
34
- "cookie-session": "^2.0.0-beta.3",
35
- "express": "^4.16.4",
36
- "express-handlebars": "^3.0.0",
37
- "express-ws": "^4.0.0",
38
- "ipcheck": "^0.1.0",
39
- "meshcentral": "*",
40
- "minimist": "^1.2.0",
41
- "mongojs": "^2.6.0",
42
- "multiparty": "^4.2.1",
43
- "nedb": "^1.8.0",
44
- "node-forge": "^0.7.6",
45
- "otplib": "^10.0.1",
46
- "ws": "^6.1.2",
47
- "xmldom": "^0.1.27",
48
- "yauzl": "^2.10.0",
49
- "yubikeyotp": "^0.2.0"
50
- },
51
- "devDependencies": {},
52
- "repository": {
53
- "type": "git",
54
- "url": "https://github.com/Ylianst/MeshCentral.git"
55
- },
56
- "readme": "readme.txt"
57
-}
package-lock.json
+345
-429
@@ -1,6 +1,6 @@
1
{
2
"name": "meshcentral",
3
- "version": "0.3.0-u",
3
+ "version": "0.3.1-a",
4
"lockfileVersion": 1,
5
"requires": true,
6
"dependencies": {
@@ -9,14 +9,14 @@
9
"resolved": "https://registry.npmjs.org/@davedoesdev/fido2-lib/-/fido2-lib-2.4.0.tgz",
10
"integrity": "sha512-qBNCio4amWMxDe7e8VG3wOo3iu/cFxzLpZ+vzRhLDYbQpZVBhJxFyYXCak33+1qPkDHJOSLZBU7x5jyruU1RMA==",
11
"requires": {
12
- "@peculiar/webcrypto": "^1.0.1",
13
- "asn1js": "^2.0.18",
14
- "cbor": "^4.0.0",
15
- "cose-to-jwk": "^1.1.0",
16
- "jwk-to-pem": "^2.0.0",
17
- "node-jose": "^1.0.0",
18
- "pkijs": "=2.1.58",
19
- "psl": "^1.1.24"
12
+ "@peculiar/webcrypto": "1.0.8",
13
+ "asn1js": "2.0.22",
14
+ "cbor": "4.1.5",
15
+ "cose-to-jwk": "1.1.0",
16
+ "jwk-to-pem": "2.0.1",
17
+ "node-jose": "1.1.3",
18
+ "pkijs": "2.1.58",
19
+ "psl": "1.1.29"
20
}
21
},
22
"@peculiar/asn1-schema": {
@@ -24,8 +24,8 @@
24
"resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-1.0.3.tgz",
25
"integrity": "sha512-Tfgj9eNJ6cTKEtEuidKenLHMx/Q5M8KEE9hnohHqvdpqHJXWYr5RlT3GjAHPjGXy5+mr7sSfuXfzE6aAkEGN7A==",
26
"requires": {
27
- "asn1js": "^2.0.22",
28
- "tslib": "^1.9.3"
27
+ "asn1js": "2.0.22",
28
+ "tslib": "1.9.3"
29
}
30
},
31
"@peculiar/json-schema": {
@@ -33,7 +33,7 @@
33
"resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.5.tgz",
34
"integrity": "sha512-y5XYA3pf9+c+YKVpWnPtQbNmlNCs2ehNHyMLJvq4K5Fjwc1N64YGy7MNecKW3uYLga+sqbGTQSUdOdlnaRRbpA==",
35
"requires": {
36
- "tslib": "^1.9.3"
36
+ "tslib": "1.9.3"
37
}
38
},
39
"@peculiar/webcrypto": {
@@ -41,12 +41,12 @@
41
"resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.0.8.tgz",
42
"integrity": "sha512-zOCwDimHbQeUgSdBCHnw/69wbA1ks+aUt1MPAttcWNOlXaZjbUppc8shtwX/mzDQYctzNGFlI8Xrayl7lBUe5A==",
43
"requires": {
44
- "@peculiar/asn1-schema": "^1.0.2",
45
- "@peculiar/json-schema": "^1.1.5",
46
- "asn1js": "^2.0.22",
47
- "pvtsutils": "^1.0.4",
48
- "tslib": "^1.9.3",
49
- "webcrypto-core": "^1.0.10"
44
+ "@peculiar/asn1-schema": "1.0.3",
45
+ "@peculiar/json-schema": "1.1.5",
46
+ "asn1js": "2.0.22",
47
+ "pvtsutils": "1.0.4",
48
+ "tslib": "1.9.3",
49
+ "webcrypto-core": "1.0.11"
50
}
51
},
52
"@types/node": {
@@ -59,30 +59,29 @@
59
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
60
"integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
61
"requires": {
62
- "mime-types": "~2.1.18",
62
+ "mime-types": "2.1.21",
63
"negotiator": "0.6.1"
64
}
65
},
66
"ajv": {
67
- "version": "6.6.1",
68
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz",
69
- "integrity": "sha1-Y2D17Q2A8jLMKylMNi1dwuU43WE=",
67
+ "version": "6.10.0",
68
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
69
+ "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
70
"requires": {
71
- "fast-deep-equal": "^2.0.1",
72
- "fast-json-stable-stringify": "^2.0.0",
73
- "json-schema-traverse": "^0.4.1",
74
- "uri-js": "^4.2.2"
71
+ "fast-deep-equal": "2.0.1",
72
+ "fast-json-stable-stringify": "2.0.0",
73
+ "json-schema-traverse": "0.4.1",
74
+ "uri-js": "4.2.2"
75
}
76
},
77
"align-text": {
78
"version": "0.1.4",
79
"resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
80
"integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
81
- "optional": true,
81
"requires": {
83
- "kind-of": "^3.0.2",
84
- "longest": "^1.0.1",
85
- "repeat-string": "^1.5.2"
82
+ "kind-of": "3.2.2",
83
+ "longest": "1.0.1",
84
+ "repeat-string": "1.6.1"
85
}
86
},
87
"amdefine": {
@@ -95,13 +94,13 @@
94
"resolved": "https://registry.npmjs.org/archiver/-/archiver-3.0.0.tgz",
95
"integrity": "sha1-ULJijPAyrcvzXTXREbUyTblb+2k=",
96
"requires": {
98
- "archiver-utils": "^2.0.0",
99
- "async": "^2.0.0",
100
- "buffer-crc32": "^0.2.1",
101
- "glob": "^7.0.0",
102
- "readable-stream": "^2.0.0",
103
- "tar-stream": "^1.5.0",
104
- "zip-stream": "^2.0.1"
97
+ "archiver-utils": "2.0.0",
98
+ "async": "2.6.1",
99
+ "buffer-crc32": "0.2.13",
100
+ "glob": "7.1.3",
101
+ "readable-stream": "2.3.6",
102
+ "tar-stream": "1.6.2",
103
+ "zip-stream": "2.0.1"
104
},
105
"dependencies": {
106
"async": {
@@ -109,7 +108,7 @@
108
"resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
109
"integrity": "sha1-skWiPKcZMAROxT+kaqAKPofGphA=",
110
"requires": {
112
- "lodash": "^4.17.10"
111
+ "lodash": "4.17.11"
112
}
113
}
114
}
@@ -119,18 +118,18 @@
118
"resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.0.0.tgz",
119
"integrity": "sha1-VjmBiotdidD/xRtyw5KDz0/qFKE=",
120
"requires": {
122
- "glob": "^7.0.0",
123
- "graceful-fs": "^4.1.0",
124
- "lazystream": "^1.0.0",
125
- "lodash.assign": "^4.2.0",
126
- "lodash.defaults": "^4.2.0",
127
- "lodash.difference": "^4.5.0",
128
- "lodash.flatten": "^4.4.0",
129
- "lodash.isplainobject": "^4.0.6",
130
- "lodash.toarray": "^4.4.0",
131
- "lodash.union": "^4.6.0",
132
- "normalize-path": "^3.0.0",
133
- "readable-stream": "^2.0.0"
121
+ "glob": "7.1.3",
122
+ "graceful-fs": "4.1.15",
123
+ "lazystream": "1.0.0",
124
+ "lodash.assign": "4.2.0",
125
+ "lodash.defaults": "4.2.0",
126
+ "lodash.difference": "4.5.0",
127
+ "lodash.flatten": "4.4.0",
128
+ "lodash.isplainobject": "4.0.6",
129
+ "lodash.toarray": "4.4.0",
130
+ "lodash.union": "4.6.0",
131
+ "normalize-path": "3.0.0",
132
+ "readable-stream": "2.3.6"
133
}
134
},
135
"array-flatten": {
@@ -146,9 +145,9 @@
145
"asn1": {
146
"version": "0.2.4",
147
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
149
- "integrity": "sha1-jSR136tVO7M+d7VOWeiAu4ziMTY=",
148
+ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
149
"requires": {
151
- "safer-buffer": "~2.1.0"
150
+ "safer-buffer": "2.1.2"
151
}
152
},
153
"asn1.js": {
@@ -156,9 +155,9 @@
155
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
156
"integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
157
"requires": {
159
- "bn.js": "^4.0.0",
160
- "inherits": "^2.0.1",
161
- "minimalistic-assert": "^1.0.0"
158
+ "bn.js": "4.11.8",
159
+ "inherits": "2.0.3",
160
+ "minimalistic-assert": "1.0.1"
161
}
162
},
163
"asn1js": {
@@ -166,7 +165,7 @@
165
"resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.0.22.tgz",
166
"integrity": "sha512-mKox8OHPmLZY0FUbd8JYsAu2lQk61yFH8gTq4N7AT7NzmUKISpy0LEjV/AfLyE/SNCUicdMDZUFbocsf/9qOTg==",
167
"requires": {
169
- "pvutils": "^1.0.17"
168
+ "pvutils": "1.0.17"
169
}
170
},
171
"assert-plus": {
@@ -189,11 +188,6 @@
188
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
189
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
190
},
192
- "authdog": {
193
- "version": "0.1.1",
194
- "resolved": "https://registry.npmjs.org/authdog/-/authdog-0.1.1.tgz",
195
- "integrity": "sha1-1uFBImEwCvtvWnuvaMqjy+984a4="
196
- },
191
"aws-sign2": {
192
"version": "0.7.0",
193
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -202,7 +196,7 @@
196
"aws4": {
197
"version": "1.8.0",
198
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
205
- "integrity": "sha1-8OAD2cqef1nHpQiUXXsu+aBKVC8="
199
+ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
200
},
201
"balanced-match": {
202
"version": "1.0.0",
@@ -224,7 +218,7 @@
218
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
219
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
220
"requires": {
227
- "tweetnacl": "^0.14.3"
221
+ "tweetnacl": "0.14.5"
222
}
223
},
224
"bignumber.js": {
@@ -237,7 +231,7 @@
231
"resolved": "https://registry.npmjs.org/binary-search-tree/-/binary-search-tree-0.2.5.tgz",
232
"integrity": "sha1-fbs7IQ/coIJFDa0jNMMErzm9x4Q=",
233
"requires": {
240
- "underscore": "~1.4.4"
234
+ "underscore": "1.4.4"
235
}
236
},
237
"bl": {
@@ -245,8 +239,8 @@
239
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
240
"integrity": "sha1-oWCRFxcQPAdBDO9j71Gzl8Alr5w=",
241
"requires": {
248
- "readable-stream": "^2.3.5",
249
- "safe-buffer": "^5.1.1"
242
+ "readable-stream": "2.3.6",
243
+ "safe-buffer": "5.1.1"
244
}
245
},
246
"bn.js": {
@@ -260,15 +254,15 @@
254
"integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=",
255
"requires": {
256
"bytes": "3.0.0",
263
- "content-type": "~1.0.4",
257
+ "content-type": "1.0.4",
258
"debug": "2.6.9",
265
- "depd": "~1.1.1",
266
- "http-errors": "~1.6.2",
259
+ "depd": "1.1.2",
260
+ "http-errors": "1.6.3",
261
"iconv-lite": "0.4.19",
268
- "on-finished": "~2.3.0",
262
+ "on-finished": "2.3.0",
263
"qs": "6.5.1",
264
"raw-body": "2.3.2",
271
- "type-is": "~1.6.15"
265
+ "type-is": "1.6.16"
266
},
267
"dependencies": {
268
"iconv-lite": {
@@ -305,7 +299,7 @@
299
"depd": "1.1.1",
300
"inherits": "2.0.3",
301
"setprototypeof": "1.0.3",
308
- "statuses": ">= 1.3.1 < 2"
302
+ "statuses": "1.4.0"
303
}
304
}
305
}
@@ -322,7 +316,7 @@
316
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
317
"integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
318
"requires": {
325
- "balanced-match": "^1.0.0",
319
+ "balanced-match": "1.0.0",
320
"concat-map": "0.0.1"
321
}
322
},
@@ -341,8 +335,8 @@
335
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz",
336
"integrity": "sha1-3Vf6DxCaxZxgJHkETcp7iz0LcdY=",
337
"requires": {
344
- "base64-js": "^1.0.2",
345
- "ieee754": "^1.1.4"
338
+ "base64-js": "1.3.0",
339
+ "ieee754": "1.1.12"
340
}
341
},
342
"buffer-alloc": {
@@ -350,8 +344,8 @@
344
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
345
"integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=",
346
"requires": {
353
- "buffer-alloc-unsafe": "^1.1.0",
354
- "buffer-fill": "^1.0.0"
347
+ "buffer-alloc-unsafe": "1.1.0",
348
+ "buffer-fill": "1.0.0"
349
}
350
},
351
"buffer-alloc-unsafe": {
@@ -400,10 +394,10 @@
394
"resolved": "https://registry.npmjs.org/cbor/-/cbor-4.1.5.tgz",
395
"integrity": "sha512-WqpISHl7/kk1u1uoaqctGyGiET3+wGN4A6pPsFCzEBztJJlCVxnMB4JwcuuNSrMiV4V6UBlxMkhNzJrUxDWO1A==",
396
"requires": {
403
- "bignumber.js": "^8.0.2",
404
- "commander": "^2.19.0",
405
- "json-text-sequence": "^0.1",
406
- "nofilter": "^1.0.1"
397
+ "bignumber.js": "8.1.1",
398
+ "commander": "2.19.0",
399
+ "json-text-sequence": "0.1.1",
400
+ "nofilter": "1.0.2"
401
}
402
},
403
"center-align": {
@@ -412,8 +406,8 @@
406
"integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
407
"optional": true,
408
"requires": {
415
- "align-text": "^0.1.3",
416
- "lazy-cache": "^1.0.3"
409
+ "align-text": "0.1.4",
410
+ "lazy-cache": "1.0.4"
411
}
412
},
413
"cliui": {
@@ -422,8 +416,8 @@
416
"integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
417
"optional": true,
418
"requires": {
425
- "center-align": "^0.1.1",
426
- "right-align": "^0.1.1",
419
+ "center-align": "0.1.3",
420
+ "right-align": "0.1.3",
421
"wordwrap": "0.0.2"
422
},
423
"dependencies": {
@@ -438,9 +432,9 @@
432
"combined-stream": {
433
"version": "1.0.7",
434
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
441
- "integrity": "sha1-LR0kMXr7ir6V1tLAsHtXgTU52Cg=",
435
+ "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
436
"requires": {
443
- "delayed-stream": "~1.0.0"
437
+ "delayed-stream": "1.0.0"
438
}
439
},
440
"commander": {
@@ -453,10 +447,10 @@
447
"resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz",
448
"integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=",
449
"requires": {
456
- "buffer-crc32": "^0.2.1",
457
- "crc32-stream": "^2.0.0",
458
- "normalize-path": "^2.0.0",
459
- "readable-stream": "^2.0.0"
450
+ "buffer-crc32": "0.2.13",
451
+ "crc32-stream": "2.0.0",
452
+ "normalize-path": "2.1.1",
453
+ "readable-stream": "2.3.6"
454
},
455
"dependencies": {
456
"normalize-path": {
@@ -464,7 +458,7 @@
458
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
459
"integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
460
"requires": {
467
- "remove-trailing-separator": "^1.0.1"
461
+ "remove-trailing-separator": "1.1.0"
462
}
463
}
464
}
@@ -474,7 +468,7 @@
468
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz",
469
"integrity": "sha1-hXqasKfloH2Ng37UP+Le//ZP4hI=",
470
"requires": {
477
- "mime-db": ">= 1.36.0 < 2"
471
+ "mime-db": "1.37.0"
472
},
473
"dependencies": {
474
"mime-db": {
@@ -489,13 +483,13 @@
483
"resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz",
484
"integrity": "sha1-J+DhdqryYPfywoE8PkQK258Zk9s=",
485
"requires": {
492
- "accepts": "~1.3.5",
486
+ "accepts": "1.3.5",
487
"bytes": "3.0.0",
494
- "compressible": "~2.0.14",
488
+ "compressible": "2.0.15",
489
"debug": "2.6.9",
496
- "on-headers": "~1.0.1",
490
+ "on-headers": "1.0.1",
491
"safe-buffer": "5.1.2",
498
- "vary": "~1.1.2"
492
+ "vary": "1.1.2"
493
},
494
"dependencies": {
495
"accepts": {
@@ -503,7 +497,7 @@
497
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
498
"integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
499
"requires": {
506
- "mime-types": "~2.1.18",
500
+ "mime-types": "2.1.21",
501
"negotiator": "0.6.1"
502
}
503
},
@@ -517,7 +511,7 @@
511
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
512
"integrity": "sha1-KJlaoey3cHQv5q5+WPkYHHRLP5Y=",
513
"requires": {
520
- "mime-db": "~1.37.0"
514
+ "mime-db": "1.37.0"
515
}
516
},
517
"safe-buffer": {
@@ -537,8 +531,8 @@
531
"resolved": "https://registry.npmjs.org/connect-redis/-/connect-redis-3.4.0.tgz",
532
"integrity": "sha1-QEDdN1W92/k0ePuEk3p0BSwxuWU=",
533
"requires": {
540
- "debug": "^4.0.1",
541
- "redis": "^2.8.0"
534
+ "debug": "4.1.0",
535
+ "redis": "2.8.0"
536
},
537
"dependencies": {
538
"debug": {
@@ -546,7 +540,7 @@
540
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
541
"integrity": "sha1-NzaHv/pnizixzZH4YbY4UANd3Ic=",
542
"requires": {
549
- "ms": "^2.1.1"
543
+ "ms": "2.1.1"
544
}
545
},
546
"ms": {
@@ -578,7 +572,7 @@
572
"requires": {
573
"cookies": "0.7.1",
574
"debug": "3.1.0",
581
- "on-headers": "~1.0.1",
575
+ "on-headers": "1.0.1",
576
"safe-buffer": "5.1.1"
577
},
578
"dependencies": {
@@ -602,8 +596,8 @@
596
"resolved": "https://registry.npmjs.org/cookies/-/cookies-0.7.1.tgz",
597
"integrity": "sha1-fIphX1SBxhq58WyDNzG8uPZjuZs=",
598
"requires": {
605
- "depd": "~1.1.1",
606
- "keygrip": "~1.0.2"
599
+ "depd": "1.1.2",
600
+ "keygrip": "1.0.2"
601
}
602
},
603
"core-util-is": {
@@ -616,7 +610,7 @@
610
"resolved": "https://registry.npmjs.org/cose-to-jwk/-/cose-to-jwk-1.1.0.tgz",
611
"integrity": "sha512-DbR/XPptfo+kcoA77jWPTe4JS0MrpOXAg0sgVr2FeZMnTGGpppOL072e2hgPHTVbSoMkt5l0qDv/k2xCn+79Cg==",
612
"requires": {
619
- "cbor": "^4.0.0"
613
+ "cbor": "4.1.5"
614
}
615
},
616
"crc": {
@@ -624,7 +618,7 @@
618
"resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz",
619
"integrity": "sha1-rWAmnCyFb4wpnixMwN5FVpFAVsY=",
620
"requires": {
627
- "buffer": "^5.1.0"
621
+ "buffer": "5.2.1"
622
}
623
},
624
"crc32-stream": {
@@ -632,8 +626,8 @@
626
"resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz",
627
"integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=",
628
"requires": {
635
- "crc": "^3.4.4",
636
- "readable-stream": "^2.0.0"
629
+ "crc": "3.8.0",
630
+ "readable-stream": "2.3.6"
631
}
632
},
633
"dashdash": {
@@ -641,7 +635,7 @@
635
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
636
"integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
637
"requires": {
644
- "assert-plus": "^1.0.0"
638
+ "assert-plus": "1.0.0"
639
}
640
},
641
"debug": {
@@ -663,8 +657,8 @@
657
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz",
658
"integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
659
"requires": {
666
- "foreach": "^2.0.5",
667
- "object-keys": "^1.0.8"
660
+ "foreach": "2.0.5",
661
+ "object-keys": "1.0.11"
662
}
663
},
664
"delayed-stream": {
@@ -702,8 +696,8 @@
696
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
697
"integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
698
"requires": {
705
- "jsbn": "~0.1.0",
706
- "safer-buffer": "^2.1.0"
699
+ "jsbn": "0.1.1",
700
+ "safer-buffer": "2.1.2"
701
}
702
},
703
"ee-first": {
@@ -716,13 +710,13 @@
710
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
711
"integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==",
712
"requires": {
719
- "bn.js": "^4.4.0",
720
- "brorand": "^1.0.1",
721
- "hash.js": "^1.0.0",
722
- "hmac-drbg": "^1.0.0",
723
- "inherits": "^2.0.1",
724
- "minimalistic-assert": "^1.0.0",
725
- "minimalistic-crypto-utils": "^1.0.0"
713
+ "bn.js": "4.11.8",
714
+ "brorand": "1.1.0",
715
+ "hash.js": "1.1.7",
716
+ "hmac-drbg": "1.0.1",
717
+ "inherits": "2.0.3",
718
+ "minimalistic-assert": "1.0.1",
719
+ "minimalistic-crypto-utils": "1.0.1"
720
}
721
},
722
"encodeurl": {
@@ -735,29 +729,7 @@
729
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
730
"integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=",
731
"requires": {
738
- "once": "^1.4.0"
739
- }
740
- },
741
- "es-abstract": {
742
- "version": "1.12.0",
743
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz",
744
- "integrity": "sha1-nbvdJ8aFbwABQhyhh4LXhr+KYWU=",
745
- "requires": {
746
- "es-to-primitive": "^1.1.1",
747
- "function-bind": "^1.1.1",
748
- "has": "^1.0.1",
749
- "is-callable": "^1.1.3",
750
- "is-regex": "^1.0.4"
751
- }
752
- },
753
- "es-to-primitive": {
754
- "version": "1.2.0",
755
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
756
- "integrity": "sha1-7fckeAM0VujdqO8J4ArZZQcH83c=",
757
- "requires": {
758
- "is-callable": "^1.1.4",
759
- "is-date-object": "^1.0.1",
760
- "is-symbol": "^1.0.2"
732
+ "once": "1.4.0"
733
}
734
},
735
"es6-promise": {
@@ -780,36 +752,36 @@
752
"resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
753
"integrity": "sha1-/d72GSYQniTFFeqX/S8b2/Yt8S4=",
754
"requires": {
783
- "accepts": "~1.3.5",
755
+ "accepts": "1.3.5",
756
"array-flatten": "1.1.1",
757
"body-parser": "1.18.3",
758
"content-disposition": "0.5.2",
787
- "content-type": "~1.0.4",
759
+ "content-type": "1.0.4",
760
"cookie": "0.3.1",
761
"cookie-signature": "1.0.6",
762
"debug": "2.6.9",
791
- "depd": "~1.1.2",
792
- "encodeurl": "~1.0.2",
793
- "escape-html": "~1.0.3",
794
- "etag": "~1.8.1",
763
+ "depd": "1.1.2",
764
+ "encodeurl": "1.0.2",
765
+ "escape-html": "1.0.3",
766
+ "etag": "1.8.1",
767
"finalhandler": "1.1.1",
768
"fresh": "0.5.2",
769
"merge-descriptors": "1.0.1",
798
- "methods": "~1.1.2",
799
- "on-finished": "~2.3.0",
800
- "parseurl": "~1.3.2",
770
+ "methods": "1.1.2",
771
+ "on-finished": "2.3.0",
772
+ "parseurl": "1.3.2",
773
"path-to-regexp": "0.1.7",
802
- "proxy-addr": "~2.0.4",
774
+ "proxy-addr": "2.0.4",
775
"qs": "6.5.2",
804
- "range-parser": "~1.2.0",
776
+ "range-parser": "1.2.0",
777
"safe-buffer": "5.1.2",
778
"send": "0.16.2",
779
"serve-static": "1.13.2",
780
"setprototypeof": "1.1.0",
809
- "statuses": "~1.4.0",
810
- "type-is": "~1.6.16",
781
+ "statuses": "1.4.0",
782
+ "type-is": "1.6.16",
783
"utils-merge": "1.0.1",
812
- "vary": "~1.1.2"
784
+ "vary": "1.1.2"
785
},
786
"dependencies": {
787
"body-parser": {
@@ -818,15 +790,15 @@
790
"integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
791
"requires": {
792
"bytes": "3.0.0",
821
- "content-type": "~1.0.4",
793
+ "content-type": "1.0.4",
794
"debug": "2.6.9",
823
- "depd": "~1.1.2",
824
- "http-errors": "~1.6.3",
795
+ "depd": "1.1.2",
796
+ "http-errors": "1.6.3",
797
"iconv-lite": "0.4.23",
826
- "on-finished": "~2.3.0",
798
+ "on-finished": "2.3.0",
799
"qs": "6.5.2",
800
"raw-body": "2.3.3",
829
- "type-is": "~1.6.16"
801
+ "type-is": "1.6.16"
802
}
803
},
804
"safe-buffer": {
@@ -841,11 +813,11 @@
813
"resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-3.0.0.tgz",
814
"integrity": "sha1-gKBwu4GbCeSvLKbQeA91zgXnXC8=",
815
"requires": {
844
- "glob": "^6.0.4",
845
- "graceful-fs": "^4.1.2",
846
- "handlebars": "^4.0.5",
847
- "object.assign": "^4.0.3",
848
- "promise": "^7.0.0"
816
+ "glob": "6.0.4",
817
+ "graceful-fs": "4.1.11",
818
+ "handlebars": "4.0.11",
819
+ "object.assign": "4.1.0",
820
+ "promise": "7.3.1"
821
},
822
"dependencies": {
823
"glob": {
@@ -853,11 +825,11 @@
825
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
826
"integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
827
"requires": {
856
- "inflight": "^1.0.4",
857
- "inherits": "2",
858
- "minimatch": "2 || 3",
859
- "once": "^1.3.0",
860
- "path-is-absolute": "^1.0.0"
828
+ "inflight": "1.0.6",
829
+ "inherits": "2.0.3",
830
+ "minimatch": "3.0.4",
831
+ "once": "1.4.0",
832
+ "path-is-absolute": "1.0.1"
833
}
834
},
835
"graceful-fs": {
@@ -872,7 +844,7 @@
844
"resolved": "https://registry.npmjs.org/express-ws/-/express-ws-4.0.0.tgz",
845
"integrity": "sha1-2r2NyXRRZBiQKkH+bjDtlJtNNsQ=",
846
"requires": {
875
- "ws": "^5.2.0"
847
+ "ws": "5.2.2"
848
},
849
"dependencies": {
850
"ws": {
@@ -880,7 +852,7 @@
852
"resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz",
853
"integrity": "sha1-3/7xSGa46NyRM1glFNG++vlumA8=",
854
"requires": {
883
- "async-limiter": "~1.0.0"
855
+ "async-limiter": "1.0.0"
856
}
857
}
858
}
@@ -888,7 +860,7 @@
860
"extend": {
861
"version": "3.0.2",
862
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
891
- "integrity": "sha1-+LETa0Bx+9jrFAr/hYsQGewpFfo="
863
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
864
},
865
"extsprintf": {
866
"version": "1.3.0",
@@ -910,7 +882,7 @@
882
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
883
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
884
"requires": {
913
- "pend": "~1.2.0"
885
+ "pend": "1.2.0"
886
}
887
},
888
"finalhandler": {
@@ -919,12 +891,12 @@
891
"integrity": "sha1-7r9O2EAHnIP0JJA4ydcDAIMBsQU=",
892
"requires": {
893
"debug": "2.6.9",
922
- "encodeurl": "~1.0.2",
923
- "escape-html": "~1.0.3",
924
- "on-finished": "~2.3.0",
925
- "parseurl": "~1.3.2",
926
- "statuses": "~1.4.0",
927
- "unpipe": "~1.0.0"
894
+ "encodeurl": "1.0.2",
895
+ "escape-html": "1.0.3",
896
+ "on-finished": "2.3.0",
897
+ "parseurl": "1.3.2",
898
+ "statuses": "1.4.0",
899
+ "unpipe": "1.0.0"
900
}
901
},
902
"foreach": {
@@ -940,11 +912,11 @@
912
"form-data": {
913
"version": "2.3.3",
914
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
943
- "integrity": "sha1-3M5SwF9kTymManq5Nr1yTO/786Y=",
915
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
916
"requires": {
945
- "asynckit": "^0.4.0",
946
- "combined-stream": "^1.0.6",
947
- "mime-types": "^2.1.12"
917
+ "asynckit": "0.4.0",
918
+ "combined-stream": "1.0.7",
919
+ "mime-types": "2.1.21"
920
}
921
},
922
"forwarded": {
@@ -977,7 +949,7 @@
949
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
950
"integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
951
"requires": {
980
- "assert-plus": "^1.0.0"
952
+ "assert-plus": "1.0.0"
953
}
954
},
955
"glob": {
@@ -985,12 +957,12 @@
957
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
958
"integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=",
959
"requires": {
988
- "fs.realpath": "^1.0.0",
989
- "inflight": "^1.0.4",
990
- "inherits": "2",
991
- "minimatch": "^3.0.4",
992
- "once": "^1.3.0",
993
- "path-is-absolute": "^1.0.0"
960
+ "fs.realpath": "1.0.0",
961
+ "inflight": "1.0.6",
962
+ "inherits": "2.0.3",
963
+ "minimatch": "3.0.4",
964
+ "once": "1.4.0",
965
+ "path-is-absolute": "1.0.1"
966
}
967
},
968
"graceful-fs": {
@@ -1003,10 +975,10 @@
975
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
976
"integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
977
"requires": {
1006
- "async": "^1.4.0",
1007
- "optimist": "^0.6.1",
1008
- "source-map": "^0.4.4",
1009
- "uglify-js": "^2.6"
978
+ "async": "1.5.2",
979
+ "optimist": "0.6.1",
980
+ "source-map": "0.4.4",
981
+ "uglify-js": "2.8.29"
982
},
983
"dependencies": {
984
"async": {
@@ -1024,18 +996,10 @@
996
"har-validator": {
997
"version": "5.1.3",
998
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz",
1027
- "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=",
999
+ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==",
1000
"requires": {
1029
- "ajv": "^6.5.5",
1030
- "har-schema": "^2.0.0"
1031
- }
1032
- },
1033
- "has": {
1034
- "version": "1.0.3",
1035
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
1036
- "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
1037
- "requires": {
1038
- "function-bind": "^1.1.1"
1001
+ "ajv": "6.10.0",
1002
+ "har-schema": "2.0.0"
1003
}
1004
},
1005
"has-symbols": {
@@ -1048,8 +1012,8 @@
1012
"resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
1013
"integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
1014
"requires": {
1051
- "inherits": "^2.0.3",
1052
- "minimalistic-assert": "^1.0.1"
1015
+ "inherits": "2.0.3",
1016
+ "minimalistic-assert": "1.0.1"
1017
}
1018
},
1019
"hmac-drbg": {
@@ -1057,9 +1021,9 @@
1021
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
1022
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
1023
"requires": {
1060
- "hash.js": "^1.0.3",
1061
- "minimalistic-assert": "^1.0.0",
1062
- "minimalistic-crypto-utils": "^1.0.1"
1024
+ "hash.js": "1.1.7",
1025
+ "minimalistic-assert": "1.0.1",
1026
+ "minimalistic-crypto-utils": "1.0.1"
1027
}
1028
},
1029
"http-errors": {
@@ -1067,10 +1031,10 @@
1031
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
1032
"integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
1033
"requires": {
1070
- "depd": "~1.1.2",
1034
+ "depd": "1.1.2",
1035
"inherits": "2.0.3",
1036
"setprototypeof": "1.1.0",
1073
- "statuses": ">= 1.4.0 < 2"
1037
+ "statuses": "1.4.0"
1038
}
1039
},
1040
"http-signature": {
@@ -1078,9 +1042,9 @@
1042
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
1043
"integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
1044
"requires": {
1081
- "assert-plus": "^1.0.0",
1082
- "jsprim": "^1.2.2",
1083
- "sshpk": "^1.7.0"
1045
+ "assert-plus": "1.0.0",
1046
+ "jsprim": "1.4.1",
1047
+ "sshpk": "1.16.1"
1048
}
1049
},
1050
"iconv-lite": {
@@ -1088,7 +1052,7 @@
1052
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
1053
"integrity": "sha1-KXhx9jvlB63Pv8pxXQzQ7thOmmM=",
1054
"requires": {
1091
- "safer-buffer": ">= 2.1.2 < 3"
1055
+ "safer-buffer": "2.1.2"
1056
}
1057
},
1058
"ieee754": {
@@ -1106,8 +1070,8 @@
1070
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1071
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1072
"requires": {
1109
- "once": "^1.3.0",
1110
- "wrappy": "1"
1073
+ "once": "1.4.0",
1074
+ "wrappy": "1.0.2"
1075
}
1076
},
1077
"inherits": {
@@ -1128,34 +1092,7 @@
1092
"is-buffer": {
1093
"version": "1.1.6",
1094
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
1131
- "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
1132
- "optional": true
1133
- },
1134
- "is-callable": {
1135
- "version": "1.1.4",
1136
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz",
1137
- "integrity": "sha1-HhrfIZ4e62hNaR+dagX/DTCiTXU="
1138
- },
1139
- "is-date-object": {
1140
- "version": "1.0.1",
1141
- "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz",
1142
- "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY="
1143
- },
1144
- "is-regex": {
1145
- "version": "1.0.4",
1146
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz",
1147
- "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
1148
- "requires": {
1149
- "has": "^1.0.1"
1150
- }
1151
- },
1152
- "is-symbol": {
1153
- "version": "1.0.2",
1154
- "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
1155
- "integrity": "sha1-oFX2rlcZLK7jKeeoYBGLSXqVDzg=",
1156
- "requires": {
1157
- "has-symbols": "^1.0.0"
1158
- }
1095
+ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4="
1096
},
1097
"is-typedarray": {
1098
"version": "1.0.0",
@@ -1185,7 +1122,7 @@
1122
"json-schema-traverse": {
1123
"version": "0.4.1",
1124
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
1188
- "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
1125
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
1126
},
1127
"json-stringify-safe": {
1128
"version": "5.0.1",
@@ -1216,9 +1153,9 @@
1153
"resolved": "https://registry.npmjs.org/jwk-to-pem/-/jwk-to-pem-2.0.1.tgz",
1154
"integrity": "sha512-KKu0WuDDjqw2FlRFp9/vk9TMO/KvgpZVKzdhhYcNyy5OwE8dw9lOK5OQTQHIJ7m+HioI/4P44sAtVuDrQ8KQfw==",
1155
"requires": {
1219
- "asn1.js": "^4.5.2",
1220
- "elliptic": "^6.2.3",
1221
- "safe-buffer": "^5.0.1"
1156
+ "asn1.js": "4.10.1",
1157
+ "elliptic": "6.4.1",
1158
+ "safe-buffer": "5.1.1"
1159
}
1160
},
1161
"keygrip": {
@@ -1230,9 +1167,8 @@
1167
"version": "3.2.2",
1168
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
1169
"integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
1233
- "optional": true,
1170
"requires": {
1235
- "is-buffer": "^1.1.5"
1171
+ "is-buffer": "1.1.6"
1172
}
1173
},
1174
"lazy-cache": {
@@ -1246,7 +1182,7 @@
1182
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz",
1183
"integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=",
1184
"requires": {
1249
- "readable-stream": "^2.0.5"
1185
+ "readable-stream": "2.3.6"
1186
}
1187
},
1188
"lie": {
@@ -1254,7 +1190,7 @@
1190
"resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz",
1191
"integrity": "sha1-mkNrLMd0bKWd56QfpGmz77dr2H4=",
1192
"requires": {
1257
- "immediate": "~3.0.5"
1193
+ "immediate": "3.0.6"
1194
}
1195
},
1196
"localforage": {
@@ -1313,8 +1249,7 @@
1249
"longest": {
1250
"version": "1.0.1",
1251
"resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
1316
- "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
1317
- "optional": true
1252
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
1253
},
1254
"media-typer": {
1255
"version": "0.3.0",
@@ -1346,7 +1281,7 @@
1281
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
1282
"integrity": "sha1-KJlaoey3cHQv5q5+WPkYHHRLP5Y=",
1283
"requires": {
1349
- "mime-db": "~1.37.0"
1284
+ "mime-db": "1.37.0"
1285
}
1286
},
1287
"minimalistic-assert": {
@@ -1364,7 +1299,7 @@
1299
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1300
"integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
1301
"requires": {
1367
- "brace-expansion": "^1.1.7"
1302
+ "brace-expansion": "1.1.8"
1303
}
1304
},
1305
"minimist": {
@@ -1407,13 +1342,13 @@
1342
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.7.tgz",
1343
"integrity": "sha1-BwV6y+JGeyIELTb5jFrVBwVOlbE=",
1344
"requires": {
1410
- "buffer-shims": "~1.0.0",
1411
- "core-util-is": "~1.0.0",
1412
- "inherits": "~2.0.1",
1413
- "isarray": "~1.0.0",
1414
- "process-nextick-args": "~1.0.6",
1415
- "string_decoder": "~1.0.0",
1416
- "util-deprecate": "~1.0.1"
1345
+ "buffer-shims": "1.0.0",
1346
+ "core-util-is": "1.0.2",
1347
+ "inherits": "2.0.3",
1348
+ "isarray": "1.0.0",
1349
+ "process-nextick-args": "1.0.7",
1350
+ "string_decoder": "1.0.3",
1351
+ "util-deprecate": "1.0.2"
1352
}
1353
},
1354
"string_decoder": {
@@ -1421,7 +1356,7 @@
1356
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
1357
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
1358
"requires": {
1424
- "safe-buffer": "~5.1.0"
1359
+ "safe-buffer": "5.1.1"
1360
}
1361
}
1362
}
@@ -1431,8 +1366,8 @@
1366
"resolved": "https://registry.npmjs.org/mongodb-core/-/mongodb-core-2.1.20.tgz",
1367
"integrity": "sha512-IN57CX5/Q1bhDq6ShAR6gIv4koFsZP7L8WOK1S0lR0pVDQaScffSMV5jxubLsmZ7J+UdqmykKw4r9hG3XQEGgQ==",
1368
"requires": {
1434
- "bson": "~1.0.4",
1435
- "require_optional": "~1.0.0"
1369
+ "bson": "1.0.9",
1370
+ "require_optional": "1.0.1"
1371
}
1372
},
1373
"mongojs": {
@@ -1440,14 +1375,14 @@
1375
"resolved": "https://registry.npmjs.org/mongojs/-/mongojs-2.6.0.tgz",
1376
"integrity": "sha512-r6tj71DjYcaRTi2jpa+CA6Iq72cTZclB2JKy+Zub+0JPTEq/l2plsAYfF2eHqSYBtZbKNcObvhGYk9E9UKZWJg==",
1377
"requires": {
1443
- "each-series": "^1.0.0",
1444
- "mongodb": "^2.2.31",
1445
- "once": "^1.4.0",
1446
- "parse-mongo-url": "^1.1.1",
1447
- "readable-stream": "^2.3.3",
1448
- "thunky": "^1.0.2",
1449
- "to-mongodb-core": "^2.0.0",
1450
- "xtend": "^4.0.1"
1378
+ "each-series": "1.0.0",
1379
+ "mongodb": "2.2.36",
1380
+ "once": "1.4.0",
1381
+ "parse-mongo-url": "1.1.1",
1382
+ "readable-stream": "2.3.6",
1383
+ "thunky": "1.0.3",
1384
+ "to-mongodb-core": "2.0.0",
1385
+ "xtend": "4.0.1"
1386
}
1387
},
1388
"ms": {
@@ -1461,7 +1396,7 @@
1396
"integrity": "sha1-2bbEbYuN6rHucMc0sK93HdRuCxM=",
1397
"requires": {
1398
"fd-slicer": "1.1.0",
1464
- "http-errors": "~1.7.0",
1399
+ "http-errors": "1.7.1",
1400
"safe-buffer": "5.1.2",
1401
"uid-safe": "2.1.5"
1402
},
@@ -1471,7 +1406,7 @@
1406
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
1407
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
1408
"requires": {
1474
- "pend": "~1.2.0"
1409
+ "pend": "1.2.0"
1410
}
1411
},
1412
"http-errors": {
@@ -1479,10 +1414,10 @@
1414
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.1.tgz",
1415
"integrity": "sha1-ak/+XTUYjhw5+HJTRpBYWFLh8Cc=",
1416
"requires": {
1482
- "depd": "~1.1.2",
1417
+ "depd": "1.1.2",
1418
"inherits": "2.0.3",
1419
"setprototypeof": "1.1.0",
1485
- "statuses": ">= 1.5.0 < 2",
1420
+ "statuses": "1.5.0",
1421
"toidentifier": "1.0.0"
1422
}
1423
},
@@ -1505,9 +1440,9 @@
1440
"requires": {
1441
"async": "0.2.10",
1442
"binary-search-tree": "0.2.5",
1508
- "localforage": "^1.3.0",
1509
- "mkdirp": "~0.5.1",
1510
- "underscore": "~1.4.4"
1443
+ "localforage": "1.5.6",
1444
+ "mkdirp": "0.5.1",
1445
+ "underscore": "1.4.4"
1446
}
1447
},
1448
"negotiator": {
@@ -1518,19 +1453,19 @@
1453
"node-forge": {
1454
"version": "0.7.6",
1455
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz",
1521
- "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw=="
1456
+ "integrity": "sha1-/fO0GK7h+U8O9kLNY0hsd8qXJKw="
1457
},
1458
"node-jose": {
1459
"version": "1.1.3",
1460
"resolved": "https://registry.npmjs.org/node-jose/-/node-jose-1.1.3.tgz",
1461
"integrity": "sha512-kupfi4uGWhRjnOmtie2T64cLge5a1TZyalEa8uWWWBgtKBcu41A4IGKpI9twZAxRnmviamEUQRK7LSyfFb2w8A==",
1462
"requires": {
1528
- "base64url": "^3.0.1",
1529
- "es6-promise": "^4.2.6",
1530
- "lodash": "^4.17.11",
1531
- "long": "^4.0.0",
1532
- "node-forge": "^0.8.1",
1533
- "uuid": "^3.3.2"
1463
+ "base64url": "3.0.1",
1464
+ "es6-promise": "4.2.6",
1465
+ "lodash": "4.17.11",
1466
+ "long": "4.0.0",
1467
+ "node-forge": "0.8.2",
1468
+ "uuid": "3.3.2"
1469
},
1470
"dependencies": {
1471
"es6-promise": {
@@ -1550,7 +1485,7 @@
1485
"resolved": "https://registry.npmjs.org/node-windows/-/node-windows-0.1.14.tgz",
1486
"integrity": "sha1-MbsFA9o7xjfyv6qLJmZAouktiR8=",
1487
"requires": {
1553
- "optimist": "~0.6.0",
1488
+ "optimist": "0.6.1",
1489
"xml": "0.0.12"
1490
}
1491
},
@@ -1567,7 +1502,7 @@
1502
"oauth-sign": {
1503
"version": "0.9.0",
1504
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
1570
- "integrity": "sha1-R6ewFrqmi1+g7PPe4IqFxnmsZFU="
1505
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
1506
},
1507
"object-keys": {
1508
"version": "1.0.11",
@@ -1579,19 +1514,10 @@
1514
"resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
1515
"integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=",
1516
"requires": {
1582
- "define-properties": "^1.1.2",
1583
- "function-bind": "^1.1.1",
1584
- "has-symbols": "^1.0.0",
1585
- "object-keys": "^1.0.11"
1586
- }
1587
- },
1588
- "object.getownpropertydescriptors": {
1589
- "version": "2.0.3",
1590
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
1591
- "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
1592
- "requires": {
1593
- "define-properties": "^1.1.2",
1594
- "es-abstract": "^1.5.1"
1517
+ "define-properties": "1.1.2",
1518
+ "function-bind": "1.1.1",
1519
+ "has-symbols": "1.0.0",
1520
+ "object-keys": "1.0.11"
1521
}
1522
},
1523
"on-finished": {
@@ -1612,7 +1538,7 @@
1538
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1539
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1540
"requires": {
1615
- "wrappy": "1"
1541
+ "wrappy": "1.0.2"
1542
}
1543
},
1544
"optimist": {
@@ -1620,8 +1546,8 @@
1546
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
1547
"integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
1548
"requires": {
1623
- "minimist": "~0.0.1",
1624
- "wordwrap": "~0.0.2"
1549
+ "minimist": "0.0.10",
1550
+ "wordwrap": "0.0.3"
1551
},
1552
"dependencies": {
1553
"minimist": {
@@ -1632,9 +1558,9 @@
1558
}
1559
},
1560
"otplib": {
1635
- "version": "10.0.1",
1636
- "resolved": "https://registry.npmjs.org/otplib/-/otplib-10.0.1.tgz",
1637
- "integrity": "sha1-03/NEyAymMC5STfVXFo1J+2HeHU=",
1561
+ "version": "11.0.0",
1562
+ "resolved": "https://registry.npmjs.org/otplib/-/otplib-11.0.0.tgz",
1563
+ "integrity": "sha512-B9qxrYj0FU22nF39XOcKiK+yHdeg4uoensQQsRRlVnGJ26jugZNmJS2Wc9VinR+SjTfVpjDhzxZzpcXzlRkk5Q==",
1564
"requires": {
1565
"thirty-two": "1.0.2"
1566
}
@@ -1674,9 +1600,9 @@
1600
"resolved": "https://registry.npmjs.org/pkijs/-/pkijs-2.1.58.tgz",
1601
"integrity": "sha512-HEcJ4SbZNdyB7Jb1G7Ot3Y/gd7kZyTDJBMIIZOFselrKrCouhGbQu4rm9Lg8bumBACckq724G9uNsZbNJ6d2gw==",
1602
"requires": {
1677
- "asn1js": "^2.0.22",
1678
- "bytestreamjs": "^1.0.27",
1679
- "pvutils": "^1.0.17"
1603
+ "asn1js": "2.0.22",
1604
+ "bytestreamjs": "1.0.27",
1605
+ "pvutils": "1.0.17"
1606
},
1607
"dependencies": {
1608
"asn1js": {
@@ -1684,7 +1610,7 @@
1610
"resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.0.22.tgz",
1611
"integrity": "sha512-mKox8OHPmLZY0FUbd8JYsAu2lQk61yFH8gTq4N7AT7NzmUKISpy0LEjV/AfLyE/SNCUicdMDZUFbocsf/9qOTg==",
1612
"requires": {
1687
- "pvutils": "^1.0.17"
1613
+ "pvutils": "1.0.17"
1614
}
1615
}
1616
}
@@ -1699,7 +1625,7 @@
1625
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
1626
"integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=",
1627
"requires": {
1702
- "asap": "~2.0.3"
1628
+ "asap": "2.0.6"
1629
}
1630
},
1631
"proxy-addr": {
@@ -1707,7 +1633,7 @@
1633
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz",
1634
"integrity": "sha1-7PxzO/Iv+Mb0B/onUye5q2fki5M=",
1635
"requires": {
1710
- "forwarded": "~0.1.2",
1636
+ "forwarded": "0.1.2",
1637
"ipaddr.js": "1.8.0"
1638
}
1639
},
@@ -1719,15 +1645,15 @@
1645
"punycode": {
1646
"version": "2.1.1",
1647
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
1722
- "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
1648
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
1649
},
1650
"pvtsutils": {
1651
"version": "1.0.4",
1652
"resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.0.4.tgz",
1653
"integrity": "sha512-lBDyLfPIWZjxHr6Nnl83/iaZgVLczDcpEqWdqRnghzBKXifRU/7D5T6JPYWUAm0sJdFeF9+sNTKto6dj/3P/Kg==",
1654
"requires": {
1729
- "@types/node": "^10.12.15",
1730
- "tslib": "^1.9.3"
1655
+ "@types/node": "10.14.3",
1656
+ "tslib": "1.9.3"
1657
}
1658
},
1659
"pvutils": {
@@ -1766,13 +1692,13 @@
1692
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
1693
"integrity": "sha1-sRwn2IuP8fvgcGQ8+UsMea4bCq8=",
1694
"requires": {
1769
- "core-util-is": "~1.0.0",
1770
- "inherits": "~2.0.3",
1771
- "isarray": "~1.0.0",
1772
- "process-nextick-args": "~2.0.0",
1773
- "safe-buffer": "~5.1.1",
1774
- "string_decoder": "~1.1.1",
1775
- "util-deprecate": "~1.0.1"
1695
+ "core-util-is": "1.0.2",
1696
+ "inherits": "2.0.3",
1697
+ "isarray": "1.0.0",
1698
+ "process-nextick-args": "2.0.0",
1699
+ "safe-buffer": "5.1.1",
1700
+ "string_decoder": "1.1.1",
1701
+ "util-deprecate": "1.0.2"
1702
}
1703
},
1704
"redis": {
@@ -1780,9 +1706,9 @@
1706
"resolved": "https://registry.npmjs.org/redis/-/redis-2.8.0.tgz",
1707
"integrity": "sha1-ICKI4/WMSfYHnZevehDhMDrhSwI=",
1708
"requires": {
1783
- "double-ended-queue": "^2.1.0-0",
1784
- "redis-commands": "^1.2.0",
1785
- "redis-parser": "^2.6.0"
1709
+ "double-ended-queue": "2.1.0-0",
1710
+ "redis-commands": "1.4.0",
1711
+ "redis-parser": "2.6.0"
1712
}
1713
},
1714
"redis-commands": {
@@ -1803,40 +1729,39 @@
1729
"repeat-string": {
1730
"version": "1.6.1",
1731
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
1806
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
1807
- "optional": true
1732
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
1733
},
1734
"request": {
1735
"version": "2.88.0",
1736
"resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
1812
- "integrity": "sha1-nC/KT301tZLv5Xx/ClXoEFIST+8=",
1813
- "requires": {
1814
- "aws-sign2": "~0.7.0",
1815
- "aws4": "^1.8.0",
1816
- "caseless": "~0.12.0",
1817
- "combined-stream": "~1.0.6",
1818
- "extend": "~3.0.2",
1819
- "forever-agent": "~0.6.1",
1820
- "form-data": "~2.3.2",
1821
- "har-validator": "~5.1.0",
1822
- "http-signature": "~1.2.0",
1823
- "is-typedarray": "~1.0.0",
1824
- "isstream": "~0.1.2",
1825
- "json-stringify-safe": "~5.0.1",
1826
- "mime-types": "~2.1.19",
1827
- "oauth-sign": "~0.9.0",
1828
- "performance-now": "^2.1.0",
1829
- "qs": "~6.5.2",
1830
- "safe-buffer": "^5.1.2",
1831
- "tough-cookie": "~2.4.3",
1832
- "tunnel-agent": "^0.6.0",
1833
- "uuid": "^3.3.2"
1737
+ "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==",
1738
+ "requires": {
1739
+ "aws-sign2": "0.7.0",
1740
+ "aws4": "1.8.0",
1741
+ "caseless": "0.12.0",
1742
+ "combined-stream": "1.0.7",
1743
+ "extend": "3.0.2",
1744
+ "forever-agent": "0.6.1",
1745
+ "form-data": "2.3.3",
1746
+ "har-validator": "5.1.3",
1747
+ "http-signature": "1.2.0",
1748
+ "is-typedarray": "1.0.0",
1749
+ "isstream": "0.1.2",
1750
+ "json-stringify-safe": "5.0.1",
1751
+ "mime-types": "2.1.21",
1752
+ "oauth-sign": "0.9.0",
1753
+ "performance-now": "2.1.0",
1754
+ "qs": "6.5.2",
1755
+ "safe-buffer": "5.1.2",
1756
+ "tough-cookie": "2.4.3",
1757
+ "tunnel-agent": "0.6.0",
1758
+ "uuid": "3.3.2"
1759
},
1760
"dependencies": {
1761
"safe-buffer": {
1762
"version": "5.1.2",
1763
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1839
- "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
1764
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1765
}
1766
}
1767
},
@@ -1845,8 +1770,8 @@
1770
"resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
1771
"integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
1772
"requires": {
1848
- "resolve-from": "^2.0.0",
1849
- "semver": "^5.1.0"
1773
+ "resolve-from": "2.0.0",
1774
+ "semver": "5.6.0"
1775
}
1776
},
1777
"resolve-from": {
@@ -1860,7 +1785,7 @@
1785
"integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
1786
"optional": true,
1787
"requires": {
1863
- "align-text": "^0.1.1"
1788
+ "align-text": "0.1.4"
1789
}
1790
},
1791
"safe-buffer": {
@@ -1884,18 +1809,18 @@
1809
"integrity": "sha1-bsyh4PjBVtFBWXVZhI32RzCmu8E=",
1810
"requires": {
1811
"debug": "2.6.9",
1887
- "depd": "~1.1.2",
1888
- "destroy": "~1.0.4",
1889
- "encodeurl": "~1.0.2",
1890
- "escape-html": "~1.0.3",
1891
- "etag": "~1.8.1",
1812
+ "depd": "1.1.2",
1813
+ "destroy": "1.0.4",
1814
+ "encodeurl": "1.0.2",
1815
+ "escape-html": "1.0.3",
1816
+ "etag": "1.8.1",
1817
"fresh": "0.5.2",
1893
- "http-errors": "~1.6.2",
1818
+ "http-errors": "1.6.3",
1819
"mime": "1.4.1",
1820
"ms": "2.0.0",
1896
- "on-finished": "~2.3.0",
1897
- "range-parser": "~1.2.0",
1898
- "statuses": "~1.4.0"
1821
+ "on-finished": "2.3.0",
1822
+ "range-parser": "1.2.0",
1823
+ "statuses": "1.4.0"
1824
}
1825
},
1826
"serve-static": {
@@ -1903,9 +1828,9 @@
1828
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
1829
"integrity": "sha1-CV6Ecv1bRiN9tQzkhqQ/S4bGzsE=",
1830
"requires": {
1906
- "encodeurl": "~1.0.2",
1907
- "escape-html": "~1.0.3",
1908
- "parseurl": "~1.3.2",
1831
+ "encodeurl": "1.0.2",
1832
+ "escape-html": "1.0.3",
1833
+ "parseurl": "1.3.2",
1834
"send": "0.16.2"
1835
}
1836
},
@@ -1919,23 +1844,23 @@
1844
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
1845
"integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
1846
"requires": {
1922
- "amdefine": ">=0.0.4"
1847
+ "amdefine": "1.0.1"
1848
}
1849
},
1850
"sshpk": {
1926
- "version": "1.15.2",
1927
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
1928
- "integrity": "sha1-yUbWvZsaOdDoY1dj9SQtbtbctik=",
1851
+ "version": "1.16.1",
1852
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
1853
+ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
1854
"requires": {
1930
- "asn1": "~0.2.3",
1931
- "assert-plus": "^1.0.0",
1932
- "bcrypt-pbkdf": "^1.0.0",
1933
- "dashdash": "^1.12.0",
1934
- "ecc-jsbn": "~0.1.1",
1935
- "getpass": "^0.1.1",
1936
- "jsbn": "~0.1.0",
1937
- "safer-buffer": "^2.0.2",
1938
- "tweetnacl": "~0.14.0"
1855
+ "asn1": "0.2.4",
1856
+ "assert-plus": "1.0.0",
1857
+ "bcrypt-pbkdf": "1.0.2",
1858
+ "dashdash": "1.14.1",
1859
+ "ecc-jsbn": "0.1.2",
1860
+ "getpass": "0.1.7",
1861
+ "jsbn": "0.1.1",
1862
+ "safer-buffer": "2.1.2",
1863
+ "tweetnacl": "0.14.5"
1864
}
1865
},
1866
"statuses": {
@@ -1948,7 +1873,7 @@
1873
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1874
"integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
1875
"requires": {
1951
- "safe-buffer": "~5.1.0"
1876
+ "safe-buffer": "5.1.1"
1877
}
1878
},
1879
"tar-stream": {
@@ -1956,13 +1881,13 @@
1881
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
1882
"integrity": "sha1-jqVdqzeXIlPZqa+Q/c1VmuQ1xVU=",
1883
"requires": {
1959
- "bl": "^1.0.0",
1960
- "buffer-alloc": "^1.2.0",
1961
- "end-of-stream": "^1.0.0",
1962
- "fs-constants": "^1.0.0",
1963
- "readable-stream": "^2.3.0",
1964
- "to-buffer": "^1.1.1",
1965
- "xtend": "^4.0.0"
1884
+ "bl": "1.2.2",
1885
+ "buffer-alloc": "1.2.0",
1886
+ "end-of-stream": "1.4.1",
1887
+ "fs-constants": "1.0.0",
1888
+ "readable-stream": "2.3.6",
1889
+ "to-buffer": "1.1.1",
1890
+ "xtend": "4.0.1"
1891
}
1892
},
1893
"thirty-two": {
@@ -1993,10 +1918,10 @@
1918
"tough-cookie": {
1919
"version": "2.4.3",
1920
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
1996
- "integrity": "sha1-U/Nto/R3g7CSWvoG/587FlKA94E=",
1921
+ "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==",
1922
"requires": {
1998
- "psl": "^1.1.24",
1999
- "punycode": "^1.4.1"
1923
+ "psl": "1.1.29",
1924
+ "punycode": "1.4.1"
1925
},
1926
"dependencies": {
1927
"punycode": {
@@ -2016,7 +1941,7 @@
1941
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
1942
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
1943
"requires": {
2019
- "safe-buffer": "^5.0.1"
1944
+ "safe-buffer": "5.1.1"
1945
}
1946
},
1947
"tweetnacl": {
@@ -2030,7 +1955,7 @@
1955
"integrity": "sha1-+JzjQVQcZysl7nrjxz3uOyvlAZQ=",
1956
"requires": {
1957
"media-typer": "0.3.0",
2033
- "mime-types": "~2.1.18"
1958
+ "mime-types": "2.1.21"
1959
}
1960
},
1961
"uglify-js": {
@@ -2039,9 +1964,9 @@
1964
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
1965
"optional": true,
1966
"requires": {
2042
- "source-map": "~0.5.1",
2043
- "uglify-to-browserify": "~1.0.0",
2044
- "yargs": "~3.10.0"
1967
+ "source-map": "0.5.7",
1968
+ "uglify-to-browserify": "1.0.2",
1969
+ "yargs": "3.10.0"
1970
},
1971
"dependencies": {
1972
"source-map": {
@@ -2063,7 +1988,7 @@
1988
"resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
1989
"integrity": "sha1-Kz1cckDo/C5Y+Komnl7knAhXvTo=",
1990
"requires": {
2066
- "random-bytes": "~1.0.0"
1991
+ "random-bytes": "1.0.0"
1992
}
1993
},
1994
"underscore": {
@@ -2079,9 +2004,9 @@
2004
"uri-js": {
2005
"version": "4.2.2",
2006
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
2082
- "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=",
2007
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
2008
"requires": {
2084
- "punycode": "^2.1.0"
2009
+ "punycode": "2.1.1"
2010
}
2011
},
2012
"util-deprecate": {
@@ -2089,15 +2014,6 @@
2014
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2015
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
2016
},
2092
- "util.promisify": {
2093
- "version": "1.0.0",
2094
- "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
2095
- "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
2096
- "requires": {
2097
- "define-properties": "^1.1.2",
2098
- "object.getownpropertydescriptors": "^2.0.3"
2099
- }
2100
- },
2017
"utils-merge": {
2018
"version": "1.0.1",
2019
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
@@ -2118,9 +2034,9 @@
2034
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
2035
"integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
2036
"requires": {
2121
- "assert-plus": "^1.0.0",
2037
+ "assert-plus": "1.0.0",
2038
"core-util-is": "1.0.2",
2123
- "extsprintf": "^1.2.0"
2039
+ "extsprintf": "1.3.0"
2040
}
2041
},
2042
"webcrypto-core": {
@@ -2128,8 +2044,8 @@
2044
"resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.0.11.tgz",
2045
"integrity": "sha512-cHxOMKNzRkPlCcQyGTuyaZmAVZlbby0lH9ASaFk5w8x/i3Q809sISA28AMVnkebW2ekcQ2+UtdaVBFUf58xjyA==",
2046
"requires": {
2131
- "pvtsutils": "^1.0.3",
2132
- "tslib": "^1.9.3"
2047
+ "pvtsutils": "1.0.4",
2048
+ "tslib": "1.9.3"
2049
}
2050
},
2051
"window-size": {
@@ -2153,7 +2069,7 @@
2069
"resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz",
2070
"integrity": "sha1-PMdGLph5LwrGeUJBSJA97TucOtg=",
2071
"requires": {
2156
- "async-limiter": "~1.0.0"
2072
+ "async-limiter": "1.0.0"
2073
}
2074
},
2075
"xml": {
@@ -2177,9 +2093,9 @@
2093
"integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
2094
"optional": true,
2095
"requires": {
2180
- "camelcase": "^1.0.2",
2181
- "cliui": "^2.1.0",
2182
- "decamelize": "^1.0.0",
2096
+ "camelcase": "1.2.1",
2097
+ "cliui": "2.1.0",
2098
+ "decamelize": "1.2.0",
2099
"window-size": "0.1.0"
2100
}
2101
},
@@ -2188,8 +2104,8 @@
2104
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
2105
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
2106
"requires": {
2191
- "buffer-crc32": "~0.2.3",
2192
- "fd-slicer": "~1.1.0"
2107
+ "buffer-crc32": "0.2.13",
2108
+ "fd-slicer": "1.1.0"
2109
}
2110
},
2111
"yubikeyotp": {
@@ -2197,7 +2113,7 @@
2113
"resolved": "https://registry.npmjs.org/yubikeyotp/-/yubikeyotp-0.2.0.tgz",
2114
"integrity": "sha1-i9xREizQDtjJGbnJyuuoUbJyqn0=",
2115
"requires": {
2200
- "request": "*"
2116
+ "request": "2.88.0"
2117
}
2118
},
2119
"zip-stream": {
@@ -2205,9 +2121,9 @@
2121
"resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.0.1.tgz",
2122
"integrity": "sha1-SKBiSIr+kd2kL4I3APrliXU8zTQ=",
2123
"requires": {
2208
- "archiver-utils": "^2.0.0",
2209
- "compress-commons": "^1.2.0",
2210
- "readable-stream": "^2.0.0"
2124
+ "archiver-utils": "2.0.0",
2125
+ "compress-commons": "1.2.2",
2126
+ "readable-stream": "2.3.6"
2127
}
2128
}
2129
}
package.json
+1
-1
@@ -1,6 +1,6 @@
1
{
2
"name": "meshcentral",
3
- "version": "0.3.1-a",
3
+ "version": "0.3.1-c",
4
"keywords": [
5
"Remote Management",
6
"Intel AMT",
views/default.handlebars
+127
-10
@@ -141,6 +141,7 @@
141
<table id=ServerSubMenu style=width:100%;height:22px cellpadding=0 cellspacing=0 class=style1>
142
<tr>
143
<td id=ServerGeneral style=width:100px;height:24px;cursor:pointer class=style3x onclick=go(6)>General</td>
144
+ <td id=ServerStats style=width:100px;height:24px;cursor:pointer class=style3x onclick=go(40)>Stats</td>
145
<td id=ServerConsole style=width:100px;height:24px;cursor:pointer class=style3x onclick=go(115)>Console</td>
146
<td class=style3 style=height:24px> </td>
147
</tr>
@@ -743,6 +744,29 @@
744
</div>
745
<div id=p31events style="max-height:calc(100vh - 267px);overflow-y:scroll"></div>
746
</div>
747
+ <div id=p40 style="display:none">
748
+ <h1>My Server Stats</h1>
749
+ <div style=width:100%;height:24px;background-color:#d3d9d6;margin-bottom:4px>
750
+ <div style="float:right">
751
+ <select id=p40type onchange=updateServerTimelineStats()>
752
+ <option value=0>Connections</option>
753
+ <option value=1>Memory</option>
754
+ <option value=2>Database</option>
755
+ </select>
756
+ <select id=p40time onchange=updateServerTimelineHours()>
757
+ <option value=1>Last hour</option>
758
+ <option value=4>Last 3 hours</option>
759
+ <option value=24>Last day</option>
760
+ <option value=168>Last week</option>
761
+ <option value=5040>Last 30 days</option>
762
+ </select>
763
+ </div>
764
+ <div>
765
+ <input value="Refresh" type="button" onclick="refreshServerTimelineStats()" />
766
+ </div>
767
+ </div>
768
+ <canvas id=serverMainStats style="height:calc(100vh - 250px);width:100%"></canvas>
769
+ </div>
770
<br id="column_l_bottomgap" />
771
</div>
772
<div id=footer class=noselect>
@@ -1014,8 +1038,9 @@
1038
for (var c = 1; c < 27; c++) x += "<option value='" + c + "'>Ctrl-" + String.fromCharCode(64 + c) + " (" + c + ")</option>";
1039
QH('specialkeylist', x);
1040
1017
- // Setup server stats panel
1018
- setupServerStats();
1041
+ // Setup server stats panels
1042
+ setupGeneralServerStats();
1043
+ setupServerTimelineStats();
1044
}
1045
1046
// Toggle the web page to full screen
@@ -1209,7 +1234,11 @@
1234
function onMessage(server, message) {
1235
switch (message.action) {
1236
case 'serverstats': {
1212
- updateServerStats(message);
1237
+ updateGeneralServerStats(message);
1238
+ break;
1239
+ }
1240
+ case 'servertimelinestats': {
1241
+ setServerTimelineStats(message.events);
1242
break;
1243
}
1244
case 'authcookie': {
@@ -7169,10 +7198,10 @@
7198
}
7199
7200
//
7172
- // Server Statistics
7201
+ // MyServer General
7202
//
7203
7175
- function setupServerStats() {
7204
+ function setupGeneralServerStats() {
7205
window.serverStatCpu = new Chart(document.getElementById('serverCpuChart').getContext('2d'), {
7206
type: 'doughnut',
7207
data: { datasets: [{ data: [0, 0], backgroundColor: ['#AAAAAA', '#00AA00'] }], labels: ['Used', 'Free'] },
@@ -7186,7 +7215,7 @@
7215
}
7216
7217
var lastServerStats = null;
7189
- function updateServerStats(message) {
7218
+ function updateGeneralServerStats(message) {
7219
if (message != null) { lastServerStats = message; } else { message = lastServerStats; }
7220
if (message == null) return;
7221
@@ -7220,6 +7249,91 @@
7249
QH('serverStatsTable', x);
7250
}
7251
7252
+ //
7253
+ // MyServer Stats
7254
+ //
7255
+
7256
+ var serverTimelineStats = null;
7257
+ var serverTimelineConfig = {
7258
+ type: 'line',
7259
+ data: { labels: [], datasets: [{ label: '', backgroundColor: 'rgba(255, 99, 132, .5)', borderColor: 'rgb(255, 99, 132)', data: [], fill: true }] },
7260
+ options: {
7261
+ responsive: true,
7262
+ scales: {
7263
+ xAxes: [{ type: 'time', time: { tooltipFormat: 'll HH:mm' }, display: true, scaleLabel: { display: false, labelString: '' } }],
7264
+ yAxes: [{ display: true, scaleLabel: { display: true, labelString: '' } }]
7265
+ }
7266
+ }
7267
+ };
7268
+
7269
+ function refreshServerTimelineStats(stats) { meshserver.send({ action: 'servertimelinestats', hours: 24 }); }
7270
+ function pastDate(hours) { var t = new Date(); t.setTime(t.getTime() - (60 * 60 * 1000 * hours)); return t; }
7271
+ function setServerTimelineStats(stats) { serverTimelineStats = stats; updateServerTimelineStats(); }
7272
+ function updateServerTimelineHours() { serverTimelineConfig.data.labels = [pastDate(0), pastDate(Q('p40time').value)]; window.serverMainStats.update(); }
7273
+ function setupServerTimelineStats() { window.serverMainStats = new Chart(document.getElementById('serverMainStats').getContext('2d'), serverTimelineConfig); }
7274
+
7275
+ function updateServerTimelineStats() {
7276
+ var data, chartType = Q('p40type').value;
7277
+ if (chartType == 0) { // Connections
7278
+ serverTimelineConfig.options.scales.yAxes[0].scaleLabel.labelString = 'Connection Count';
7279
+ data = {
7280
+ labels: [pastDate(0), pastDate(Q('p40time').value)],
7281
+ datasets: [
7282
+ { label: 'Agents', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
7283
+ { label: 'Users', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
7284
+ { label: 'User Sessions', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
7285
+ { label: 'Relay Sessions', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true },
7286
+ { label: 'Intel AMT', data: [], backgroundColor: 'rgba(134, 16, 158, .1)', borderColor: 'rgb(134, 16, 158)', fill: true }
7287
+ ]
7288
+ };
7289
+ for (var i = 0; i < serverTimelineStats.length; i++) {
7290
+ if (serverTimelineStats[i].conn) {
7291
+ data.datasets[0].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].conn.ca });
7292
+ data.datasets[1].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].conn.cu });
7293
+ data.datasets[2].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].conn.us });
7294
+ data.datasets[3].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].conn.rs });
7295
+ if (serverTimelineStats[i].conn.am != null) { data.datasets[4].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].conn.am }); }
7296
+ }
7297
+ }
7298
+ } else if (chartType == 1) { // Memory
7299
+ serverTimelineConfig.options.scales.yAxes[0].scaleLabel.labelString = 'Megabytes';
7300
+ data = {
7301
+ labels: [pastDate(0), pastDate(Q('p40time').value)],
7302
+ datasets: [
7303
+ { label: 'External', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
7304
+ { label: 'Heap Used', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
7305
+ { label: 'Heap Total', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
7306
+ { label: 'RSS', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
7307
+ ]
7308
+ };
7309
+ for (var i = 0; i < serverTimelineStats.length; i++) {
7310
+ data.datasets[0].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].mem.external / (1024 * 1024) });
7311
+ data.datasets[1].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].mem.heapUsed / (1024 * 1024) });
7312
+ data.datasets[2].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].mem.heapTotal / (1024 * 1024) });
7313
+ data.datasets[3].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].mem.rss / (1024 * 1024) });
7314
+ }
7315
+ } else if (chartType == 2) { // Database
7316
+ serverTimelineConfig.options.scales.yAxes[0].scaleLabel.labelString = 'Records';
7317
+ data = {
7318
+ labels: [pastDate(0), pastDate(Q('p40time').value)],
7319
+ datasets: [
7320
+ { label: 'Groups', data: [], backgroundColor: 'rgba(158, 151, 16, .1)', borderColor: 'rgb(158, 151, 16)', fill: true },
7321
+ { label: 'Devices', data: [], backgroundColor: 'rgba(16, 84, 158, .1)', borderColor: 'rgb(16, 84, 158)', fill: true },
7322
+ { label: 'Users', data: [], backgroundColor: 'rgba(255, 99, 132, .1)', borderColor: 'rgb(255, 99, 132)', fill: true },
7323
+ { label: 'Records', data: [], backgroundColor: 'rgba(39, 158, 16, .1)', borderColor: 'rgb(39, 158, 16)', fill: true }
7324
+ ]
7325
+ };
7326
+ for (var i = 0; i < serverTimelineStats.length; i++) {
7327
+ data.datasets[0].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].db.meshes });
7328
+ data.datasets[1].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].db.nodes });
7329
+ data.datasets[2].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].db.users });
7330
+ data.datasets[3].data.push({ x: serverTimelineStats[i].time, y: serverTimelineStats[i].db.total });
7331
+ }
7332
+ }
7333
+ serverTimelineConfig.data = data;
7334
+ window.serverMainStats.update();
7335
+ }
7336
+
7337
//
7338
// POPUP DIALOG
7339
//
@@ -7274,7 +7388,7 @@
7388
function go(x) {
7389
if (xxdialogMode || xxcurrentView == x) return;
7390
// Edit this line when adding a new screen
7277
- for (var i = 0; i < 32; i++) { QV('p' + i, i == x); }
7391
+ for (var i = 0; i < 41; i++) { QV('p' + i, i == x); }
7392
xxcurrentView = x;
7393
7394
// Remove left bar selection
@@ -7307,7 +7421,7 @@
7421
7422
// My Server
7423
QS('MainMenuMyServer').backgroundColor = (((x == 6) || (x == 115)) ? "#003366" : "#808080");
7310
- if (((x == 6) || (x == 115))) { Q('LeftMenuMyServer').classList.add('lbbuttonsel', 'lbbuttonsel2'); }
7424
+ if (((x == 6) || (x == 115) || (x == 40))) { Q('LeftMenuMyServer').classList.add('lbbuttonsel', 'lbbuttonsel2'); }
7425
7426
// column_l max-height
7427
if (webPageFullScreen) {
@@ -7326,8 +7440,8 @@
7440
QV('UserDummyMenuSpan', (x < 10) && (x != 6) && webPageFullScreen);
7441
QV('MeshSubMenuSpan', x >= 20 && x < 30);
7442
QV('UserSubMenuSpan', x >= 30 && x < 40);
7329
- QV('ServerSubMenuSpan', x == 6 || x == 115);
7330
- var panels = { 10: 'MainDev', 11: 'MainDevDesktop', 12: 'MainDevTerminal', 13: 'MainDevFiles', 14: 'MainDevAmt', 15: 'MainDevConsole', 20: 'MeshGeneral', 30: 'UserGeneral', 31: 'UserEvents', 6: 'ServerGeneral', 115: 'ServerConsole' };
7443
+ QV('ServerSubMenuSpan', x == 6 || x == 115 || x == 40);
7444
+ var panels = { 10: 'MainDev', 11: 'MainDevDesktop', 12: 'MainDevTerminal', 13: 'MainDevFiles', 14: 'MainDevAmt', 15: 'MainDevConsole', 20: 'MeshGeneral', 30: 'UserGeneral', 31: 'UserEvents', 6: 'ServerGeneral', 40: 'ServerStats', 115: 'ServerConsole' };
7445
for (var i in panels) {
7446
Q(panels[i]).classList.remove('style3x');
7447
Q(panels[i]).classList.remove('style3sel');
@@ -7342,6 +7456,9 @@
7456
7457
if (x == 1) masterUpdate(4);
7458
7459
+ // Fetch the server timeline stats if needed
7460
+ if ((x == 40) && (serverTimelineStats == null)) { refreshServerTimelineStats(); }
7461
+
7462
// Update the web page title
7463
if ((currentNode) && (x >= 10) && (x < 20)) { document.title = 'MeshCentral - ' + currentNode.name; } else { document.title = 'MeshCentral'; }
7464
}