1 | 'use strict';
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 | const lib_version = require('../package.json').version;
|
25 | const util = require('./util');
|
26 | const system = require('./system');
|
27 | const osInfo = require('./osinfo');
|
28 | const cpu = require('./cpu');
|
29 | const memory = require('./memory');
|
30 | const battery = require('./battery');
|
31 | const graphics = require('./graphics');
|
32 | const filesystem = require('./filesystem');
|
33 | const network = require('./network');
|
34 | const wifi = require('./wifi');
|
35 | const processes = require('./processes');
|
36 | const users = require('./users');
|
37 | const internet = require('./internet');
|
38 | const docker = require('./docker');
|
39 | const vbox = require('./virtualbox');
|
40 |
|
41 | let _platform = process.platform;
|
42 | const _windows = (_platform === 'win32');
|
43 | const _freebsd = (_platform === 'freebsd');
|
44 | const _openbsd = (_platform === 'openbsd');
|
45 | const _netbsd = (_platform === 'netbsd');
|
46 | const _sunos = (_platform === 'sunos');
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 | if (_windows) {
|
53 | util.getCodepage();
|
54 | }
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 | function version() {
|
61 | return lib_version;
|
62 | }
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 | function getStaticData(callback) {
|
72 |
|
73 | return new Promise((resolve) => {
|
74 | process.nextTick(() => {
|
75 |
|
76 | let data = {};
|
77 |
|
78 | data.version = version();
|
79 |
|
80 | Promise.all([
|
81 | system.system(),
|
82 | system.bios(),
|
83 | system.baseboard(),
|
84 | system.chassis(),
|
85 | osInfo.osInfo(),
|
86 | osInfo.uuid(),
|
87 | osInfo.versions(),
|
88 | cpu.cpu(),
|
89 | cpu.cpuFlags(),
|
90 | graphics.graphics(),
|
91 | network.networkInterfaces(),
|
92 | memory.memLayout(),
|
93 | filesystem.diskLayout()
|
94 | ]).then(res => {
|
95 | data.system = res[0];
|
96 | data.bios = res[1];
|
97 | data.baseboard = res[2];
|
98 | data.chassis = res[3];
|
99 | data.os = res[4];
|
100 | data.uuid = res[5];
|
101 | data.versions = res[6];
|
102 | data.cpu = res[7];
|
103 | data.cpu.flags = res[8];
|
104 | data.graphics = res[9];
|
105 | data.net = res[10];
|
106 | data.memLayout = res[11];
|
107 | data.diskLayout = res[12];
|
108 | if (callback) { callback(data); }
|
109 | resolve(data);
|
110 | });
|
111 | });
|
112 | });
|
113 | }
|
114 |
|
115 |
|
116 |
|
117 |
|
118 |
|
119 |
|
120 |
|
121 |
|
122 |
|
123 |
|
124 | function getDynamicData(srv, iface, callback) {
|
125 |
|
126 | if (util.isFunction(iface)) {
|
127 | callback = iface;
|
128 | iface = '';
|
129 | }
|
130 | if (util.isFunction(srv)) {
|
131 | callback = srv;
|
132 | srv = '';
|
133 | }
|
134 |
|
135 | return new Promise((resolve) => {
|
136 | process.nextTick(() => {
|
137 |
|
138 | iface = iface || network.getDefaultNetworkInterface();
|
139 | srv = srv || '';
|
140 |
|
141 |
|
142 | let functionProcessed = (function () {
|
143 | let totalFunctions = 15;
|
144 | if (_windows) totalFunctions = 11;
|
145 | if (_freebsd || _openbsd || _netbsd) totalFunctions = 11;
|
146 | if (_sunos) totalFunctions = 6;
|
147 |
|
148 | return function () {
|
149 | if (--totalFunctions === 0) {
|
150 | if (callback) {
|
151 | callback(data);
|
152 | }
|
153 | resolve(data);
|
154 | }
|
155 | };
|
156 | })();
|
157 |
|
158 |
|
159 |
|
160 |
|
161 |
|
162 |
|
163 |
|
164 |
|
165 |
|
166 | let data = {};
|
167 |
|
168 |
|
169 | data.time = osInfo.time();
|
170 |
|
171 | |
172 |
|
173 |
|
174 |
|
175 |
|
176 |
|
177 | data.node = process.versions.node;
|
178 | data.v8 = process.versions.v8;
|
179 |
|
180 | cpu.cpuCurrentspeed().then(res => {
|
181 | data.cpuCurrentspeed = res;
|
182 | functionProcessed();
|
183 | });
|
184 |
|
185 | users.users().then(res => {
|
186 | data.users = res;
|
187 | functionProcessed();
|
188 | });
|
189 |
|
190 | if (!_windows) {
|
191 | processes.processes().then(res => {
|
192 | data.processes = res;
|
193 | functionProcessed();
|
194 | });
|
195 | }
|
196 |
|
197 | cpu.currentLoad().then(res => {
|
198 | data.currentLoad = res;
|
199 | functionProcessed();
|
200 | });
|
201 |
|
202 | if (!_sunos) {
|
203 | cpu.cpuTemperature().then(res => {
|
204 | data.temp = res;
|
205 | functionProcessed();
|
206 | });
|
207 | }
|
208 |
|
209 | if (!_openbsd && !_freebsd && !_netbsd && !_sunos) {
|
210 | network.networkStats(iface).then(res => {
|
211 | data.networkStats = res;
|
212 | functionProcessed();
|
213 | });
|
214 | }
|
215 |
|
216 | if (!_sunos) {
|
217 | network.networkConnections().then(res => {
|
218 | data.networkConnections = res;
|
219 | functionProcessed();
|
220 | });
|
221 | }
|
222 |
|
223 | memory.mem().then(res => {
|
224 | data.mem = res;
|
225 | functionProcessed();
|
226 | });
|
227 |
|
228 | if (!_sunos) {
|
229 | battery().then(res => {
|
230 | data.battery = res;
|
231 | functionProcessed();
|
232 | });
|
233 | }
|
234 |
|
235 | if (!_windows && !_sunos) {
|
236 | processes.services(srv).then(res => {
|
237 | data.services = res;
|
238 | functionProcessed();
|
239 | });
|
240 | }
|
241 |
|
242 | if (!_sunos) {
|
243 | filesystem.fsSize().then(res => {
|
244 | data.fsSize = res;
|
245 | functionProcessed();
|
246 | });
|
247 | }
|
248 |
|
249 | if (!_windows && !_openbsd && !_freebsd && !_netbsd && !_sunos) {
|
250 | filesystem.fsStats().then(res => {
|
251 | data.fsStats = res;
|
252 | functionProcessed();
|
253 | });
|
254 | }
|
255 |
|
256 | if (!_windows && !_openbsd && !_freebsd && !_netbsd && !_sunos) {
|
257 | filesystem.disksIO().then(res => {
|
258 | data.disksIO = res;
|
259 | functionProcessed();
|
260 | });
|
261 | }
|
262 |
|
263 | if (!_openbsd && !_freebsd && !_netbsd && !_sunos) {
|
264 | wifi.wifiNetworks().then(res => {
|
265 | data.wifiNetworks = res;
|
266 | functionProcessed();
|
267 | });
|
268 | }
|
269 |
|
270 | internet.inetLatency().then(res => {
|
271 | data.inetLatency = res;
|
272 | functionProcessed();
|
273 | });
|
274 | });
|
275 | });
|
276 | }
|
277 |
|
278 |
|
279 |
|
280 |
|
281 |
|
282 |
|
283 |
|
284 |
|
285 | function getAllData(srv, iface, callback) {
|
286 |
|
287 | return new Promise((resolve) => {
|
288 | process.nextTick(() => {
|
289 | let data = {};
|
290 |
|
291 | if (iface && util.isFunction(iface) && !callback) {
|
292 | callback = iface;
|
293 | iface = '';
|
294 | }
|
295 |
|
296 | if (srv && util.isFunction(srv) && !iface && !callback) {
|
297 | callback = srv;
|
298 | srv = '';
|
299 | iface = '';
|
300 | }
|
301 |
|
302 | getStaticData().then(res => {
|
303 | data = res;
|
304 | getDynamicData(srv, iface).then(res => {
|
305 | for (let key in res) {
|
306 | if ({}.hasOwnProperty.call(res, key)) {
|
307 | data[key] = res[key];
|
308 | }
|
309 | }
|
310 | if (callback) { callback(data); }
|
311 | resolve(data);
|
312 | });
|
313 | });
|
314 | });
|
315 | });
|
316 | }
|
317 |
|
318 | function get(valueObject, callback) {
|
319 | return new Promise((resolve) => {
|
320 | process.nextTick(() => {
|
321 | const allPromises = Object.keys(valueObject)
|
322 | .filter(func => ({}.hasOwnProperty.call(exports, func)))
|
323 | .map(func => exports[func]());
|
324 |
|
325 | Promise.all(allPromises).then(data => {
|
326 | const result = {};
|
327 | let i = 0;
|
328 | for (let key in valueObject) {
|
329 | if ({}.hasOwnProperty.call(valueObject, key) && {}.hasOwnProperty.call(exports, key) && data.length > i) {
|
330 | if (valueObject[key] === '*' || valueObject[key] === 'all') {
|
331 | result[key] = data[i];
|
332 | } else {
|
333 | const keys = valueObject[key].replace(/,/g, ' ').replace(/ +/g, ' ').split(' ');
|
334 | if (Array.isArray(data[i])) {
|
335 |
|
336 | const partialArray = [];
|
337 | data[i].forEach(element => {
|
338 | const partialRes = {};
|
339 | keys.forEach(k => {
|
340 | if ({}.hasOwnProperty.call(element, k)) {
|
341 | partialRes[k] = element[k];
|
342 | }
|
343 | });
|
344 | partialArray.push(partialRes);
|
345 | });
|
346 | result[key] = partialArray;
|
347 | } else {
|
348 | const partialRes = {};
|
349 | keys.forEach(k => {
|
350 | if ({}.hasOwnProperty.call(data[i], k)) {
|
351 | partialRes[k] = data[i][k];
|
352 | }
|
353 | });
|
354 | result[key] = partialRes;
|
355 | }
|
356 | }
|
357 | i++;
|
358 | }
|
359 | }
|
360 | if (callback) { callback(result); }
|
361 | resolve(result);
|
362 | });
|
363 | });
|
364 | });
|
365 | }
|
366 |
|
367 | function observe(valueObject, interval, callback) {
|
368 | let _data = null;
|
369 |
|
370 | const result = setInterval(() => {
|
371 | get(valueObject).then(data => {
|
372 | if (JSON.stringify(_data) !== JSON.stringify(data)) {
|
373 | _data = Object.assign({}, data);
|
374 | callback(data);
|
375 | }
|
376 | });
|
377 | }, interval);
|
378 | return result;
|
379 | }
|
380 |
|
381 |
|
382 |
|
383 |
|
384 |
|
385 | exports.version = version;
|
386 | exports.system = system.system;
|
387 | exports.bios = system.bios;
|
388 | exports.baseboard = system.baseboard;
|
389 | exports.chassis = system.chassis;
|
390 |
|
391 | exports.time = osInfo.time;
|
392 | exports.osInfo = osInfo.osInfo;
|
393 | exports.versions = osInfo.versions;
|
394 | exports.shell = osInfo.shell;
|
395 | exports.uuid = osInfo.uuid;
|
396 |
|
397 | exports.cpu = cpu.cpu;
|
398 | exports.cpuFlags = cpu.cpuFlags;
|
399 | exports.cpuCache = cpu.cpuCache;
|
400 | exports.cpuCurrentspeed = cpu.cpuCurrentspeed;
|
401 | exports.cpuTemperature = cpu.cpuTemperature;
|
402 | exports.currentLoad = cpu.currentLoad;
|
403 | exports.fullLoad = cpu.fullLoad;
|
404 |
|
405 | exports.mem = memory.mem;
|
406 | exports.memLayout = memory.memLayout;
|
407 |
|
408 | exports.battery = battery;
|
409 |
|
410 | exports.graphics = graphics.graphics;
|
411 |
|
412 | exports.fsSize = filesystem.fsSize;
|
413 | exports.fsOpenFiles = filesystem.fsOpenFiles;
|
414 | exports.blockDevices = filesystem.blockDevices;
|
415 | exports.fsStats = filesystem.fsStats;
|
416 | exports.disksIO = filesystem.disksIO;
|
417 | exports.diskLayout = filesystem.diskLayout;
|
418 |
|
419 | exports.networkInterfaceDefault = network.networkInterfaceDefault;
|
420 | exports.networkGatewayDefault = network.networkGatewayDefault;
|
421 | exports.networkInterfaces = network.networkInterfaces;
|
422 | exports.networkStats = network.networkStats;
|
423 | exports.networkConnections = network.networkConnections;
|
424 |
|
425 | exports.wifiNetworks = wifi.wifiNetworks;
|
426 |
|
427 | exports.services = processes.services;
|
428 | exports.processes = processes.processes;
|
429 | exports.processLoad = processes.processLoad;
|
430 |
|
431 | exports.users = users.users;
|
432 |
|
433 | exports.inetChecksite = internet.inetChecksite;
|
434 | exports.inetLatency = internet.inetLatency;
|
435 |
|
436 | exports.dockerInfo = docker.dockerInfo;
|
437 | exports.dockerContainers = docker.dockerContainers;
|
438 | exports.dockerContainerStats = docker.dockerContainerStats;
|
439 | exports.dockerContainerProcesses = docker.dockerContainerProcesses;
|
440 | exports.dockerAll = docker.dockerAll;
|
441 |
|
442 | exports.vboxInfo = vbox.vboxInfo;
|
443 |
|
444 | exports.getStaticData = getStaticData;
|
445 | exports.getDynamicData = getDynamicData;
|
446 | exports.getAllData = getAllData;
|
447 | exports.get = get;
|
448 | exports.observe = observe;
|
449 |
|