node-os-utils 1.3.7 → 2.0.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1113 -237
- package/dist/.tsbuildinfo +1 -0
- package/dist/package.json +99 -0
- package/dist/src/adapters/adapter-factory.d.ts +87 -0
- package/dist/src/adapters/adapter-factory.d.ts.map +1 -0
- package/dist/src/adapters/adapter-factory.js +272 -0
- package/dist/src/adapters/adapter-factory.js.map +1 -0
- package/dist/src/adapters/linux-adapter.d.ts +199 -0
- package/dist/src/adapters/linux-adapter.d.ts.map +1 -0
- package/dist/src/adapters/linux-adapter.js +1308 -0
- package/dist/src/adapters/linux-adapter.js.map +1 -0
- package/dist/src/adapters/macos-adapter.d.ts +232 -0
- package/dist/src/adapters/macos-adapter.d.ts.map +1 -0
- package/dist/src/adapters/macos-adapter.js +1144 -0
- package/dist/src/adapters/macos-adapter.js.map +1 -0
- package/dist/src/adapters/windows-adapter.d.ts +124 -0
- package/dist/src/adapters/windows-adapter.d.ts.map +1 -0
- package/dist/src/adapters/windows-adapter.js +601 -0
- package/dist/src/adapters/windows-adapter.js.map +1 -0
- package/dist/src/core/base-monitor.d.ts +107 -0
- package/dist/src/core/base-monitor.d.ts.map +1 -0
- package/dist/src/core/base-monitor.js +312 -0
- package/dist/src/core/base-monitor.js.map +1 -0
- package/dist/src/core/cache-manager.d.ts +157 -0
- package/dist/src/core/cache-manager.d.ts.map +1 -0
- package/dist/src/core/cache-manager.js +315 -0
- package/dist/src/core/cache-manager.js.map +1 -0
- package/dist/src/core/platform-adapter.d.ts +197 -0
- package/dist/src/core/platform-adapter.d.ts.map +1 -0
- package/dist/src/core/platform-adapter.js +244 -0
- package/dist/src/core/platform-adapter.js.map +1 -0
- package/dist/src/index.d.ts +205 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +315 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/monitors/cpu-monitor.d.ts +139 -0
- package/dist/src/monitors/cpu-monitor.d.ts.map +1 -0
- package/dist/src/monitors/cpu-monitor.js +433 -0
- package/dist/src/monitors/cpu-monitor.js.map +1 -0
- package/dist/src/monitors/disk-monitor.d.ts +136 -0
- package/dist/src/monitors/disk-monitor.d.ts.map +1 -0
- package/dist/src/monitors/disk-monitor.js +465 -0
- package/dist/src/monitors/disk-monitor.js.map +1 -0
- package/dist/src/monitors/memory-monitor.d.ts +136 -0
- package/dist/src/monitors/memory-monitor.d.ts.map +1 -0
- package/dist/src/monitors/memory-monitor.js +443 -0
- package/dist/src/monitors/memory-monitor.js.map +1 -0
- package/dist/src/monitors/network-monitor.d.ts +166 -0
- package/dist/src/monitors/network-monitor.d.ts.map +1 -0
- package/dist/src/monitors/network-monitor.js +586 -0
- package/dist/src/monitors/network-monitor.js.map +1 -0
- package/dist/src/monitors/process-monitor.d.ts +142 -0
- package/dist/src/monitors/process-monitor.d.ts.map +1 -0
- package/dist/src/monitors/process-monitor.js +460 -0
- package/dist/src/monitors/process-monitor.js.map +1 -0
- package/dist/src/monitors/system-monitor.d.ts +173 -0
- package/dist/src/monitors/system-monitor.d.ts.map +1 -0
- package/dist/src/monitors/system-monitor.js +592 -0
- package/dist/src/monitors/system-monitor.js.map +1 -0
- package/dist/src/types/common.d.ts +135 -0
- package/dist/src/types/common.d.ts.map +1 -0
- package/dist/src/types/common.js +141 -0
- package/dist/src/types/common.js.map +1 -0
- package/dist/src/types/config.d.ts +288 -0
- package/dist/src/types/config.d.ts.map +1 -0
- package/dist/src/types/config.js +3 -0
- package/dist/src/types/config.js.map +1 -0
- package/dist/src/types/errors.d.ts +40 -0
- package/dist/src/types/errors.d.ts.map +1 -0
- package/dist/src/types/errors.js +67 -0
- package/dist/src/types/errors.js.map +1 -0
- package/dist/src/types/index.d.ts +16 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +36 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/monitors.d.ts +623 -0
- package/dist/src/types/monitors.d.ts.map +1 -0
- package/dist/src/types/monitors.js +3 -0
- package/dist/src/types/monitors.js.map +1 -0
- package/dist/src/types/platform.d.ts +435 -0
- package/dist/src/types/platform.d.ts.map +1 -0
- package/dist/src/types/platform.js +3 -0
- package/dist/src/types/platform.js.map +1 -0
- package/dist/src/utils/command-executor.d.ts +58 -0
- package/dist/src/utils/command-executor.d.ts.map +1 -0
- package/dist/src/utils/command-executor.js +321 -0
- package/dist/src/utils/command-executor.js.map +1 -0
- package/dist/test/config/test-config.d.ts +301 -0
- package/dist/test/config/test-config.d.ts.map +1 -0
- package/dist/test/config/test-config.js +235 -0
- package/dist/test/config/test-config.js.map +1 -0
- package/dist/test/platform/linux.test.d.ts +6 -0
- package/dist/test/platform/linux.test.d.ts.map +1 -0
- package/dist/test/platform/linux.test.js +307 -0
- package/dist/test/platform/linux.test.js.map +1 -0
- package/dist/test/platform/macos.test.d.ts +6 -0
- package/dist/test/platform/macos.test.d.ts.map +1 -0
- package/dist/test/platform/macos.test.js +276 -0
- package/dist/test/platform/macos.test.js.map +1 -0
- package/dist/test/platform/windows.test.d.ts +6 -0
- package/dist/test/platform/windows.test.d.ts.map +1 -0
- package/dist/test/platform/windows.test.js +320 -0
- package/dist/test/platform/windows.test.js.map +1 -0
- package/dist/test/unit/adapters/adapter-factory.test.d.ts +2 -0
- package/dist/test/unit/adapters/adapter-factory.test.d.ts.map +1 -0
- package/dist/test/unit/adapters/adapter-factory.test.js +147 -0
- package/dist/test/unit/adapters/adapter-factory.test.js.map +1 -0
- package/dist/test/unit/adapters/linux-adapter.test.d.ts +2 -0
- package/dist/test/unit/adapters/linux-adapter.test.d.ts.map +1 -0
- package/dist/test/unit/adapters/linux-adapter.test.js +191 -0
- package/dist/test/unit/adapters/linux-adapter.test.js.map +1 -0
- package/dist/test/unit/adapters/macos-adapter.test.d.ts +2 -0
- package/dist/test/unit/adapters/macos-adapter.test.d.ts.map +1 -0
- package/dist/test/unit/adapters/macos-adapter.test.js +224 -0
- package/dist/test/unit/adapters/macos-adapter.test.js.map +1 -0
- package/dist/test/unit/adapters/windows-adapter.test.d.ts +2 -0
- package/dist/test/unit/adapters/windows-adapter.test.d.ts.map +1 -0
- package/dist/test/unit/adapters/windows-adapter.test.js +41 -0
- package/dist/test/unit/adapters/windows-adapter.test.js.map +1 -0
- package/dist/test/unit/core/base-monitor.test.d.ts +2 -0
- package/dist/test/unit/core/base-monitor.test.d.ts.map +1 -0
- package/dist/test/unit/core/base-monitor.test.js +157 -0
- package/dist/test/unit/core/base-monitor.test.js.map +1 -0
- package/dist/test/unit/core/cache-manager.test.d.ts +6 -0
- package/dist/test/unit/core/cache-manager.test.d.ts.map +1 -0
- package/dist/test/unit/core/cache-manager.test.js +127 -0
- package/dist/test/unit/core/cache-manager.test.js.map +1 -0
- package/dist/test/unit/core/platform-adapter.test.d.ts +2 -0
- package/dist/test/unit/core/platform-adapter.test.d.ts.map +1 -0
- package/dist/test/unit/core/platform-adapter.test.js +186 -0
- package/dist/test/unit/core/platform-adapter.test.js.map +1 -0
- package/dist/test/unit/index.test.d.ts +2 -0
- package/dist/test/unit/index.test.d.ts.map +1 -0
- package/dist/test/unit/index.test.js +183 -0
- package/dist/test/unit/index.test.js.map +1 -0
- package/dist/test/unit/monitors/cpu-monitor.test.d.ts +2 -0
- package/dist/test/unit/monitors/cpu-monitor.test.d.ts.map +1 -0
- package/dist/test/unit/monitors/cpu-monitor.test.js +166 -0
- package/dist/test/unit/monitors/cpu-monitor.test.js.map +1 -0
- package/dist/test/unit/monitors/disk-monitor.test.d.ts +2 -0
- package/dist/test/unit/monitors/disk-monitor.test.d.ts.map +1 -0
- package/dist/test/unit/monitors/disk-monitor.test.js +46 -0
- package/dist/test/unit/monitors/disk-monitor.test.js.map +1 -0
- package/dist/test/unit/monitors/memory-monitor.test.d.ts +2 -0
- package/dist/test/unit/monitors/memory-monitor.test.d.ts.map +1 -0
- package/dist/test/unit/monitors/memory-monitor.test.js +142 -0
- package/dist/test/unit/monitors/memory-monitor.test.js.map +1 -0
- package/dist/test/unit/monitors/network-monitor.test.d.ts +2 -0
- package/dist/test/unit/monitors/network-monitor.test.d.ts.map +1 -0
- package/dist/test/unit/monitors/network-monitor.test.js +22 -0
- package/dist/test/unit/monitors/network-monitor.test.js.map +1 -0
- package/dist/test/unit/monitors/process-monitor.test.d.ts +2 -0
- package/dist/test/unit/monitors/process-monitor.test.d.ts.map +1 -0
- package/dist/test/unit/monitors/process-monitor.test.js +165 -0
- package/dist/test/unit/monitors/process-monitor.test.js.map +1 -0
- package/dist/test/unit/monitors/system-monitor-macos.test.d.ts +2 -0
- package/dist/test/unit/monitors/system-monitor-macos.test.d.ts.map +1 -0
- package/dist/test/unit/monitors/system-monitor-macos.test.js +115 -0
- package/dist/test/unit/monitors/system-monitor-macos.test.js.map +1 -0
- package/dist/test/unit/monitors/system-monitor.test.d.ts +2 -0
- package/dist/test/unit/monitors/system-monitor.test.d.ts.map +1 -0
- package/dist/test/unit/monitors/system-monitor.test.js +70 -0
- package/dist/test/unit/monitors/system-monitor.test.js.map +1 -0
- package/dist/test/unit/types/common.test.d.ts +6 -0
- package/dist/test/unit/types/common.test.d.ts.map +1 -0
- package/dist/test/unit/types/common.test.js +139 -0
- package/dist/test/unit/types/common.test.js.map +1 -0
- package/dist/test/unit/types/config.test.d.ts +2 -0
- package/dist/test/unit/types/config.test.d.ts.map +1 -0
- package/dist/test/unit/types/config.test.js +9 -0
- package/dist/test/unit/types/config.test.js.map +1 -0
- package/dist/test/unit/types/errors.test.d.ts +6 -0
- package/dist/test/unit/types/errors.test.d.ts.map +1 -0
- package/dist/test/unit/types/errors.test.js +184 -0
- package/dist/test/unit/types/errors.test.js.map +1 -0
- package/dist/test/unit/types/index.test.d.ts +2 -0
- package/dist/test/unit/types/index.test.d.ts.map +1 -0
- package/dist/test/unit/types/index.test.js +39 -0
- package/dist/test/unit/types/index.test.js.map +1 -0
- package/dist/test/unit/types/monitors.test.d.ts +2 -0
- package/dist/test/unit/types/monitors.test.d.ts.map +1 -0
- package/dist/test/unit/types/monitors.test.js +9 -0
- package/dist/test/unit/types/monitors.test.js.map +1 -0
- package/dist/test/unit/types/platform.test.d.ts +2 -0
- package/dist/test/unit/types/platform.test.d.ts.map +1 -0
- package/dist/test/unit/types/platform.test.js +9 -0
- package/dist/test/unit/types/platform.test.js.map +1 -0
- package/dist/test/unit/utils/command-executor.test.d.ts +6 -0
- package/dist/test/unit/utils/command-executor.test.d.ts.map +1 -0
- package/dist/test/unit/utils/command-executor.test.js +153 -0
- package/dist/test/unit/utils/command-executor.test.js.map +1 -0
- package/dist/test/unit/utils/platform-specific.test.d.ts +2 -0
- package/dist/test/unit/utils/platform-specific.test.d.ts.map +1 -0
- package/dist/test/unit/utils/platform-specific.test.js +32 -0
- package/dist/test/unit/utils/platform-specific.test.js.map +1 -0
- package/dist/test/utils/platform-specific.d.ts +139 -0
- package/dist/test/utils/platform-specific.d.ts.map +1 -0
- package/dist/test/utils/platform-specific.js +306 -0
- package/dist/test/utils/platform-specific.js.map +1 -0
- package/dist/test/utils/test-base.d.ts +157 -0
- package/dist/test/utils/test-base.d.ts.map +1 -0
- package/dist/test/utils/test-base.js +316 -0
- package/dist/test/utils/test-base.js.map +1 -0
- package/package.json +78 -18
- package/.travis.yml +0 -7
- package/index.js +0 -17
- package/lib/bucket.js +0 -14
- package/lib/cpu.js +0 -94
- package/lib/drive.js +0 -113
- package/lib/exec.js +0 -28
- package/lib/mem.js +0 -176
- package/lib/netstat.js +0 -182
- package/lib/openfiles.js +0 -25
- package/lib/os.js +0 -148
- package/lib/osCmd.js +0 -20
- package/lib/proc.js +0 -38
- package/lib/users.js +0 -18
- package/test/test.js +0 -55
- package/util/co.js +0 -237
- package/util/index.js +0 -12
package/lib/exec.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* author : Sunil Wang
|
|
3
|
-
* createTime : 2019/10/25 10:36
|
|
4
|
-
* description :
|
|
5
|
-
*/
|
|
6
|
-
var cp = require('child_process')
|
|
7
|
-
var bucket = require('./bucket')
|
|
8
|
-
|
|
9
|
-
function exec(command){
|
|
10
|
-
return new Promise(function (resolve) {
|
|
11
|
-
var runCommand = 'LC_ALL="en_US.UTF-8";LANG="en_US.UTF-8";LANGUAGE="en_US:en";' + command
|
|
12
|
-
|
|
13
|
-
cp.exec(runCommand, { shell: true }, function (err, stdout, stderr) {
|
|
14
|
-
if (err || !stdout) {
|
|
15
|
-
return resolve(bucket.options.NOT_SUPPORTED_VALUE)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return resolve(stdout)
|
|
19
|
-
})
|
|
20
|
-
})
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
module.exports = exec
|
|
24
|
-
module.exports.wrapExec = function(command){
|
|
25
|
-
return function(){
|
|
26
|
-
return exec(command)
|
|
27
|
-
}
|
|
28
|
-
}
|
package/lib/mem.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @Author: 王澍(SunilWang)
|
|
3
|
-
* @Date: 2017-7-9 21:49:00
|
|
4
|
-
* @Last Modified by: 王澍(SunilWang)
|
|
5
|
-
* @Last Modified time: 2020-09-10 14:59:41
|
|
6
|
-
* @Description:
|
|
7
|
-
*/
|
|
8
|
-
var bucket = require('./bucket')
|
|
9
|
-
var os = require('os')
|
|
10
|
-
var fs = require('fs')
|
|
11
|
-
var co = require('../util/co')
|
|
12
|
-
var util = require('../util')
|
|
13
|
-
var exec = require('./exec')
|
|
14
|
-
|
|
15
|
-
var linuxFreeMemory = function () {
|
|
16
|
-
return new Promise(function (resolve) {
|
|
17
|
-
// https://github.com/SunilWang/node-os-utils/pull/11
|
|
18
|
-
// running this on an embedded linux device. This steps takes around 500ms. With this change we brought it down to a few milliseconds.
|
|
19
|
-
fs.readFile('/proc/meminfo', 'utf8', function (err, out) {
|
|
20
|
-
if (err) {
|
|
21
|
-
return resolve(bucket.options.NOT_SUPPORTED_VALUE)
|
|
22
|
-
}
|
|
23
|
-
var memInfo = {}
|
|
24
|
-
var usage = out.toString().trim().split('\n')
|
|
25
|
-
usage.forEach((line) => {
|
|
26
|
-
var pair = line.split(':')
|
|
27
|
-
memInfo[pair[0]] = parseInt(pair[1], 10)
|
|
28
|
-
})
|
|
29
|
-
|
|
30
|
-
var totalMem = parseInt(memInfo.MemTotal, 10) * 1024
|
|
31
|
-
|
|
32
|
-
// check if MemAvailable exists
|
|
33
|
-
if (!memInfo.MemAvailable) {
|
|
34
|
-
memInfo.MemAvailable = memInfo['MemFree'] + memInfo['Buffers'] + memInfo['Cached'] + memInfo['SReclaimable'] - memInfo['Shmem'];
|
|
35
|
-
}
|
|
36
|
-
var freeMem = memInfo.MemAvailable * 1024
|
|
37
|
-
|
|
38
|
-
// https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=34e431b0ae398fc54ea69ff85ec700722c9da773
|
|
39
|
-
// https://www.cnblogs.com/johnnyzen/p/8011309.html
|
|
40
|
-
if (os.release() < '3.14') {
|
|
41
|
-
freeMem =
|
|
42
|
-
((memInfo.MemFree || 0) +
|
|
43
|
-
(memInfo.Buffers || 0) +
|
|
44
|
-
(memInfo.Cached || 0)) *
|
|
45
|
-
1024
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return resolve({ totalMem, freeMem })
|
|
49
|
-
})
|
|
50
|
-
})
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// learn from: https://github.com/X-Profiler/xtransit/blob/master/orders/system_log.js#L356
|
|
54
|
-
var osxFreeMemory = co.wrap(function* () {
|
|
55
|
-
var totalMem = os.totalmem()
|
|
56
|
-
var mappings = {
|
|
57
|
-
'Pages purgeable': 'purgeable',
|
|
58
|
-
'Pages wired down': 'wired',
|
|
59
|
-
'Pages active': 'active',
|
|
60
|
-
'Pages inactive': 'inactive',
|
|
61
|
-
'Pages occupied by compressor': 'compressed',
|
|
62
|
-
}
|
|
63
|
-
var [vmStat, pagePageable] = yield Promise.all([
|
|
64
|
-
exec('vm_stat'),
|
|
65
|
-
exec('sysctl vm.page_pageable_internal_count'),
|
|
66
|
-
])
|
|
67
|
-
|
|
68
|
-
vmStat = vmStat.toString().trim()
|
|
69
|
-
pagePageable = pagePageable.toString().trim()
|
|
70
|
-
|
|
71
|
-
// get page size
|
|
72
|
-
var pageSize = 4096
|
|
73
|
-
var matchdPageSize = /page size of (\d+) bytes/.exec(vmStat)
|
|
74
|
-
|
|
75
|
-
if (matchdPageSize && util.isNumber(matchdPageSize[1])) {
|
|
76
|
-
pageSize = Number(matchdPageSize[1])
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
// get page pageable
|
|
80
|
-
var [, pageableValue] = pagePageable.split(':')
|
|
81
|
-
|
|
82
|
-
if (!util.isNumber(pageableValue)) {
|
|
83
|
-
return {
|
|
84
|
-
totalMem,
|
|
85
|
-
freeMem: os.freemem(),
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
pageableValue = Number(pageableValue) * pageSize
|
|
90
|
-
|
|
91
|
-
// get vm stats
|
|
92
|
-
var lines = vmStat.split('\n').filter((x) => x !== '')
|
|
93
|
-
var stats = {}
|
|
94
|
-
|
|
95
|
-
lines.forEach((x) => {
|
|
96
|
-
var parts = x.split(':')
|
|
97
|
-
var key = parts[0]
|
|
98
|
-
var val = parts[1].replace('.', '').trim()
|
|
99
|
-
|
|
100
|
-
if (mappings[key]) {
|
|
101
|
-
var ky = mappings[key]
|
|
102
|
-
stats[ky] = val * pageSize
|
|
103
|
-
}
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
// get app memory
|
|
107
|
-
var appMemory = pageableValue - stats.purgeable
|
|
108
|
-
// get wired memory
|
|
109
|
-
var wiredMemory = stats.wired
|
|
110
|
-
// get compressed memory
|
|
111
|
-
var compressedMemory = stats.compressed
|
|
112
|
-
var used = appMemory + wiredMemory + compressedMemory
|
|
113
|
-
|
|
114
|
-
return {
|
|
115
|
-
totalMem,
|
|
116
|
-
freeMem: totalMem - used,
|
|
117
|
-
}
|
|
118
|
-
})
|
|
119
|
-
|
|
120
|
-
bucket.mem = {
|
|
121
|
-
info: co.wrap(function* () {
|
|
122
|
-
var totalMem = null
|
|
123
|
-
var freeMem = null
|
|
124
|
-
var memInfo = yield linuxFreeMemory()
|
|
125
|
-
|
|
126
|
-
if (bucket.isNotSupported(memInfo)) {
|
|
127
|
-
totalMem = os.totalmem()
|
|
128
|
-
freeMem = os.freemem()
|
|
129
|
-
if (os.platform() === 'darwin') {
|
|
130
|
-
var mem = yield osxFreeMemory()
|
|
131
|
-
totalMem = mem.totalMem
|
|
132
|
-
freeMem = mem.freeMem
|
|
133
|
-
}
|
|
134
|
-
} else {
|
|
135
|
-
totalMem = memInfo.totalMem
|
|
136
|
-
freeMem = memInfo.freeMem
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
var totalMemMb = parseFloat((totalMem / 1024 / 1024).toFixed(2))
|
|
140
|
-
var usedMemMb = parseFloat(((totalMem - freeMem) / 1024 / 1024).toFixed(2))
|
|
141
|
-
var freeMemMb = parseFloat((totalMemMb - usedMemMb).toFixed(2))
|
|
142
|
-
var usedMemPercentage = parseFloat((100 * ((totalMem - freeMem) / totalMem)).toFixed(2))
|
|
143
|
-
var freeMemPercentage = parseFloat((100 * (freeMem / totalMem)).toFixed(2))
|
|
144
|
-
|
|
145
|
-
return {
|
|
146
|
-
totalMemMb: totalMemMb,
|
|
147
|
-
usedMemMb: usedMemMb,
|
|
148
|
-
freeMemMb: freeMemMb,
|
|
149
|
-
usedMemPercentage: usedMemPercentage,
|
|
150
|
-
freeMemPercentage: freeMemPercentage,
|
|
151
|
-
}
|
|
152
|
-
}),
|
|
153
|
-
free: function () {
|
|
154
|
-
var self = this
|
|
155
|
-
|
|
156
|
-
return self.info().then(function (res) {
|
|
157
|
-
return Promise.resolve({
|
|
158
|
-
totalMemMb: res.totalMemMb,
|
|
159
|
-
freeMemMb: res.freeMemMb,
|
|
160
|
-
})
|
|
161
|
-
})
|
|
162
|
-
},
|
|
163
|
-
used: function () {
|
|
164
|
-
var self = this
|
|
165
|
-
|
|
166
|
-
return self.info().then(function (res) {
|
|
167
|
-
return Promise.resolve({
|
|
168
|
-
totalMemMb: res.totalMemMb,
|
|
169
|
-
usedMemMb: res.usedMemMb,
|
|
170
|
-
})
|
|
171
|
-
})
|
|
172
|
-
},
|
|
173
|
-
totalMem: function () {
|
|
174
|
-
return os.totalmem()
|
|
175
|
-
},
|
|
176
|
-
}
|
package/lib/netstat.js
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* author : Sunil Wang
|
|
3
|
-
* createTime : 2017/7/9 22:16
|
|
4
|
-
* description :
|
|
5
|
-
*/
|
|
6
|
-
var bucket = require('./bucket')
|
|
7
|
-
var co = require('../util/co')
|
|
8
|
-
var exec = require('./exec')
|
|
9
|
-
|
|
10
|
-
var ifconfig = {
|
|
11
|
-
breakIntoBlocks: function breakIntoBlocks (fullText) {
|
|
12
|
-
var blocks = []
|
|
13
|
-
var lines = fullText.split('\n')
|
|
14
|
-
var currentBlock = []
|
|
15
|
-
lines.forEach(function (line) {
|
|
16
|
-
if (line.length > 0 && ['\t', ' '].indexOf(line[0]) === -1 && currentBlock.length > 0) {
|
|
17
|
-
// start of a new block detected
|
|
18
|
-
blocks.push(currentBlock)
|
|
19
|
-
currentBlock = []
|
|
20
|
-
}
|
|
21
|
-
if (line.trim()) {
|
|
22
|
-
currentBlock.push(line)
|
|
23
|
-
}
|
|
24
|
-
})
|
|
25
|
-
if (currentBlock.length > 0) {
|
|
26
|
-
blocks.push(currentBlock)
|
|
27
|
-
}
|
|
28
|
-
return blocks
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
parseSingleBlock: function parseSingleBlock (block) {
|
|
32
|
-
var data = {}
|
|
33
|
-
block.forEach(function (line, i) {
|
|
34
|
-
var match = line.match(/^(\S+)\s+Link/)
|
|
35
|
-
if (i === 0) {
|
|
36
|
-
var match2 = line.match(/([a-zA-Z0-9]+):\s/)
|
|
37
|
-
if (match === null && match2) {
|
|
38
|
-
match = match2
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
if (match) { // eth0 Link encap:Ethernet HWaddr 04:01:d3:db:fd:01
|
|
42
|
-
data.device = match[1] // eth0
|
|
43
|
-
var link = {}
|
|
44
|
-
match = line.match(/encap:(\S+)/)
|
|
45
|
-
if (match) {
|
|
46
|
-
link.encap = match[1]
|
|
47
|
-
}
|
|
48
|
-
match = line.match(/HWaddr\s+(\S+)/)
|
|
49
|
-
if (match) {
|
|
50
|
-
link.hwaddr = match[1]
|
|
51
|
-
}
|
|
52
|
-
data.link = link
|
|
53
|
-
} else {
|
|
54
|
-
var section = data.other || {}
|
|
55
|
-
if ((match = line.match(/collisions:(\S+)/))) {
|
|
56
|
-
section.collisions = parseInt(match[1])
|
|
57
|
-
}
|
|
58
|
-
if ((match = line.match(/txqueuelen:(\S+)/))) {
|
|
59
|
-
section.txqueuelen = parseInt(match[1])
|
|
60
|
-
}
|
|
61
|
-
if ((match = line.match(/RX bytes:(\S+)/))) {
|
|
62
|
-
section.rxBytes = parseInt(match[1])
|
|
63
|
-
}
|
|
64
|
-
if ((match = line.match(/RX packets (\S+) {2}bytes (\S+)/))) {
|
|
65
|
-
section.rxBytes = parseInt(match[2])
|
|
66
|
-
}
|
|
67
|
-
if ((match = line.match(/TX bytes:(\S+)/))) {
|
|
68
|
-
section.txBytes = parseInt(match[1])
|
|
69
|
-
}
|
|
70
|
-
if ((match = line.match(/TX packets (\S+) {2}bytes (\S+)/))) {
|
|
71
|
-
section.txBytes = parseInt(match[2])
|
|
72
|
-
}
|
|
73
|
-
data.other = section
|
|
74
|
-
}
|
|
75
|
-
})
|
|
76
|
-
return data
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function ifconfigStats () {
|
|
81
|
-
return co(function * () {
|
|
82
|
-
var res = yield exec('ifconfig')
|
|
83
|
-
|
|
84
|
-
if(bucket.isNotSupported(res)) return res
|
|
85
|
-
|
|
86
|
-
var blocks = ifconfig.breakIntoBlocks(res)
|
|
87
|
-
var stats = []
|
|
88
|
-
|
|
89
|
-
blocks.forEach(function (block, index) {
|
|
90
|
-
blocks[index] = ifconfig.parseSingleBlock(block)
|
|
91
|
-
stats[index] = {
|
|
92
|
-
'interface': blocks[index].device,
|
|
93
|
-
'inputBytes': (blocks[index].other && blocks[index].other.rxBytes) || 0,
|
|
94
|
-
'outputBytes': (blocks[index].other && blocks[index].other.txBytes) || 0
|
|
95
|
-
}
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
return stats
|
|
99
|
-
})
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
bucket.netstat = {
|
|
103
|
-
stats: co.wrap(function * () {
|
|
104
|
-
var out = yield exec('ip -s link')
|
|
105
|
-
|
|
106
|
-
if(bucket.isNotSupported(out)) return ifconfigStats()
|
|
107
|
-
|
|
108
|
-
var names = new RegExp(/[0-9]+: ([\S]+): /g)
|
|
109
|
-
var RX = new RegExp(/^\s+RX:\s+bytes\s+packets\s+errors\s+dropped\s+(overrun|missed)\s+mcast\s*\n\s*([0-9]+)\s+/gm)
|
|
110
|
-
var TX = new RegExp(/^\s+TX:\s+bytes\s+packets\s+errors\s+dropped\s+carrier\s+collsns\s*\n\s*([0-9]+)\s+/gm)
|
|
111
|
-
|
|
112
|
-
var stats = []
|
|
113
|
-
var i = 0
|
|
114
|
-
var res = []
|
|
115
|
-
|
|
116
|
-
while ((res = names.exec(out)) !== null) {
|
|
117
|
-
stats[i++] = {
|
|
118
|
-
interface: res[1]
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
i = 0
|
|
123
|
-
while ((res = RX.exec(out)) !== null) {
|
|
124
|
-
stats[i++].inputBytes = res[2]
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
i = 0
|
|
128
|
-
while ((res = TX.exec(out)) !== null) {
|
|
129
|
-
stats[i++].outputBytes = res[1]
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
return stats
|
|
133
|
-
}),
|
|
134
|
-
inOut: function (interval) {
|
|
135
|
-
var self = this
|
|
136
|
-
|
|
137
|
-
if (!interval) {
|
|
138
|
-
interval = bucket.options.INTERVAL
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
return Promise.all([
|
|
142
|
-
self.stats(),
|
|
143
|
-
(function () {
|
|
144
|
-
return new Promise(function (resolve) {
|
|
145
|
-
setTimeout(function () {
|
|
146
|
-
self.stats().then(resolve)
|
|
147
|
-
}, interval)
|
|
148
|
-
})
|
|
149
|
-
})()
|
|
150
|
-
]).then(function (stats) {
|
|
151
|
-
var oldStats = stats[0]
|
|
152
|
-
var newStats = stats[1]
|
|
153
|
-
|
|
154
|
-
var metrics = {
|
|
155
|
-
total: {
|
|
156
|
-
inputMb: 0,
|
|
157
|
-
outputMb: 0
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
var nbProblems = 0
|
|
161
|
-
|
|
162
|
-
for (var i = 0; i < oldStats.length; i++) {
|
|
163
|
-
if (oldStats[i].interface !== 'lo' && oldStats[i].interface !== 'lo0' && oldStats[i].inputBytes > 0 && oldStats[i].outputBytes > 0) {
|
|
164
|
-
metrics[oldStats[i].interface] = {}
|
|
165
|
-
metrics[oldStats[i].interface]['inputMb'] = parseFloat(((newStats[i].inputBytes - oldStats[i].inputBytes) / 1000000).toFixed(2))
|
|
166
|
-
metrics[oldStats[i].interface]['outputMb'] = parseFloat(((newStats[i].outputBytes - oldStats[i].outputBytes) / 1000000).toFixed(2))
|
|
167
|
-
|
|
168
|
-
metrics.total['inputMb'] += parseFloat(metrics[oldStats[i].interface]['inputMb'])
|
|
169
|
-
metrics.total['outputMb'] += parseFloat(metrics[oldStats[i].interface]['outputMb'])
|
|
170
|
-
} else {
|
|
171
|
-
nbProblems++
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
if (nbProblems === oldStats.length) {
|
|
176
|
-
return Promise.resolve(bucket.options.NOT_SUPPORTED_VALUE)
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
return Promise.resolve(metrics)
|
|
180
|
-
})
|
|
181
|
-
}
|
|
182
|
-
}
|
package/lib/openfiles.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* author : Sunil Wang
|
|
3
|
-
* createTime : 2017/7/10 10:26
|
|
4
|
-
* description :
|
|
5
|
-
*/
|
|
6
|
-
var bucket = require('./bucket')
|
|
7
|
-
var fs = require('fs')
|
|
8
|
-
|
|
9
|
-
bucket.openfiles = {
|
|
10
|
-
openFd: function () {
|
|
11
|
-
return new Promise(function (resolve) {
|
|
12
|
-
fs.readFile('/proc/sys/fs/file-nr', function (err, out) {
|
|
13
|
-
if (err) {
|
|
14
|
-
return resolve(bucket.options.NOT_SUPPORTED_VALUE)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
var result = out.toString().replace(/\n/g, '').split(' ')[0]
|
|
18
|
-
|
|
19
|
-
result = parseInt(result, 10)
|
|
20
|
-
|
|
21
|
-
return resolve(result)
|
|
22
|
-
})
|
|
23
|
-
})
|
|
24
|
-
}
|
|
25
|
-
}
|
package/lib/os.js
DELETED
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* author : Sunil Wang
|
|
3
|
-
* createTime : 2017/7/10 10:36
|
|
4
|
-
* description :
|
|
5
|
-
*/
|
|
6
|
-
var bucket = require('./bucket')
|
|
7
|
-
var fs = require('fs')
|
|
8
|
-
var os = require('os')
|
|
9
|
-
var co = require('../util/co')
|
|
10
|
-
var exec = require('./exec')
|
|
11
|
-
|
|
12
|
-
var originalOperatingSystem = {
|
|
13
|
-
checkLastResort: co.wrap(function * (){
|
|
14
|
-
return exec('uname -sr')
|
|
15
|
-
}),
|
|
16
|
-
darwin: function () {
|
|
17
|
-
var self = this
|
|
18
|
-
|
|
19
|
-
return co(function * (){
|
|
20
|
-
var res = yield exec('sw_vers')
|
|
21
|
-
|
|
22
|
-
if(bucket.isNotSupported(res)) return self.checkLastResort()
|
|
23
|
-
|
|
24
|
-
var version = res.match(/[\n\r].*ProductVersion:\s*([^\n\r]*)/)[1]
|
|
25
|
-
var distribution = res.match(/.*ProductName:\s*([^\n\r]*)/)[1]
|
|
26
|
-
|
|
27
|
-
return distribution + ' ' + version
|
|
28
|
-
})
|
|
29
|
-
},
|
|
30
|
-
linux: function () {
|
|
31
|
-
var self = this
|
|
32
|
-
|
|
33
|
-
// Debian, Ubuntu, CentOS
|
|
34
|
-
return new Promise(function (resolve) {
|
|
35
|
-
fs.readFile('/etc/issue', function (err, out) {
|
|
36
|
-
if (err) {
|
|
37
|
-
return self.checkLastResort(resolve)
|
|
38
|
-
}
|
|
39
|
-
out = out.toString()
|
|
40
|
-
var version = out.match(/[\d]+(\.[\d][\d]?)?/)
|
|
41
|
-
|
|
42
|
-
if (version !== null) {
|
|
43
|
-
version = version[0]
|
|
44
|
-
}
|
|
45
|
-
var distribution = out.match(/[\w]*/)[0]
|
|
46
|
-
|
|
47
|
-
if (version !== null && distribution !== null) {
|
|
48
|
-
var resultOs = distribution + ' ' + version
|
|
49
|
-
return resolve(resultOs)
|
|
50
|
-
} else if (distribution !== null && distribution !== '') {
|
|
51
|
-
return resolve(distribution)
|
|
52
|
-
} else if (version === null) {
|
|
53
|
-
fs.readFile('/etc/redhat-release', function (err, out) {
|
|
54
|
-
if (err) {
|
|
55
|
-
return self.checkLastResort(resolve)
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
out = out.toString()
|
|
59
|
-
version = out.match(/[\d]+(\.[\d][\d]?)?/)
|
|
60
|
-
|
|
61
|
-
if (version !== null) {
|
|
62
|
-
version = version[0]
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
var resultOs = 'Red Hat ' + version
|
|
66
|
-
return resolve(resultOs)
|
|
67
|
-
})
|
|
68
|
-
}
|
|
69
|
-
})
|
|
70
|
-
})
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
bucket.os = {
|
|
75
|
-
oos: function () {
|
|
76
|
-
var platform = os.platform()
|
|
77
|
-
|
|
78
|
-
if (platform === 'linux') {
|
|
79
|
-
return originalOperatingSystem.linux()
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
if (platform === 'darwin') {
|
|
83
|
-
return originalOperatingSystem.darwin()
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return originalOperatingSystem.checkLastResort()
|
|
87
|
-
},
|
|
88
|
-
platform: function () {
|
|
89
|
-
return os.platform()
|
|
90
|
-
},
|
|
91
|
-
uptime: function () {
|
|
92
|
-
// seconds
|
|
93
|
-
return os.uptime()
|
|
94
|
-
},
|
|
95
|
-
ip: function () {
|
|
96
|
-
var platform = os.platform()
|
|
97
|
-
var interfaces = os.networkInterfaces()
|
|
98
|
-
var ip = ''
|
|
99
|
-
var i = 0
|
|
100
|
-
try {
|
|
101
|
-
|
|
102
|
-
if (platform === 'linux' && interfaces.eth0) {
|
|
103
|
-
for (i = 0; i < interfaces.eth0.length; i++) {
|
|
104
|
-
if (os.networkInterfaces().eth0[i].family === 'IPv4') {
|
|
105
|
-
ip = os.networkInterfaces().eth0[i].address
|
|
106
|
-
break
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return ip
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
if (platform === 'darwin') {
|
|
114
|
-
for (i = 0; i < interfaces.en0.length; i++) {
|
|
115
|
-
if (os.networkInterfaces().en0[i].family === 'IPv4') {
|
|
116
|
-
ip = os.networkInterfaces().en0[i].address
|
|
117
|
-
break
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return ip
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
for (i in interfaces) {
|
|
125
|
-
var item = interfaces[i]
|
|
126
|
-
for (var j in item) {
|
|
127
|
-
if (item[j]['internal'] === false && item[j]['family'] === 'IPv4') {
|
|
128
|
-
ip = item[j]['address']
|
|
129
|
-
break
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
} catch (error){
|
|
134
|
-
ip = 'LOCALHOST'
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
return ip
|
|
138
|
-
},
|
|
139
|
-
hostname: function () {
|
|
140
|
-
return os.hostname()
|
|
141
|
-
},
|
|
142
|
-
type: function () {
|
|
143
|
-
return os.type()
|
|
144
|
-
},
|
|
145
|
-
arch: function () {
|
|
146
|
-
return os.arch()
|
|
147
|
-
}
|
|
148
|
-
}
|
package/lib/osCmd.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* author : Sunil Wang
|
|
3
|
-
* createTime : 2017/7/9 19:08
|
|
4
|
-
* description :
|
|
5
|
-
*/
|
|
6
|
-
var bucket = require('./bucket')
|
|
7
|
-
var exec = require('./exec')
|
|
8
|
-
var wrapExec = exec.wrapExec
|
|
9
|
-
|
|
10
|
-
bucket.osCmd = {
|
|
11
|
-
topCpu: wrapExec('ps -eo pcpu,user,args --no-headers | sort -k 1 -n | tail -n 10 | sort -k 1 -nr | cut -c 1-70'),
|
|
12
|
-
topMem: wrapExec('ps -eo pmem,pid,cmd | sort -k 1 -n | tail -n 10 | sort -k 1 -nr | cut -c 1-70'),
|
|
13
|
-
vmstats: wrapExec('vmstat -S m'),
|
|
14
|
-
processesUsers: wrapExec('ps hax -o user | sort | uniq -c'),
|
|
15
|
-
diskUsage: wrapExec('df -h'),
|
|
16
|
-
who: wrapExec('who'),
|
|
17
|
-
whoami: wrapExec('whoami'),
|
|
18
|
-
openPorts: wrapExec('lsof -Pni4 | grep ESTABLISHED'),
|
|
19
|
-
ifconfig: wrapExec('ifconfig')
|
|
20
|
-
}
|
package/lib/proc.js
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* author : Sunil Wang
|
|
3
|
-
* createTime : 2017/7/10 14:31
|
|
4
|
-
* description :
|
|
5
|
-
*/
|
|
6
|
-
var bucket = require('./bucket')
|
|
7
|
-
var exec = require('./exec')
|
|
8
|
-
var os = require('os')
|
|
9
|
-
var co = require('../util/co')
|
|
10
|
-
|
|
11
|
-
bucket.proc = {
|
|
12
|
-
totalProcesses: co.wrap(function * () {
|
|
13
|
-
var res = yield exec("top -bn1 | awk 'NR > 7 && $8 ~ /R|S|D|T/ { print $12 }'")
|
|
14
|
-
|
|
15
|
-
if(bucket.isNotSupported(res)){
|
|
16
|
-
if (os.platform() === 'darwin') {
|
|
17
|
-
var nb = yield exec('ps -A')
|
|
18
|
-
|
|
19
|
-
nb = nb.toString().split('\n')
|
|
20
|
-
|
|
21
|
-
return nb.length - 1
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
return res
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
var resultProc = (res.split('\n')).length
|
|
28
|
-
|
|
29
|
-
return resultProc
|
|
30
|
-
}),
|
|
31
|
-
zombieProcesses: co.wrap(function * () {
|
|
32
|
-
var res = yield exec("top -bn1 | awk 'NR > 7 && $8 ~ /Z/ { print $12 }'")
|
|
33
|
-
|
|
34
|
-
if(bucket.isNotSupported(res)) return res
|
|
35
|
-
|
|
36
|
-
return (res.split('\n')).length
|
|
37
|
-
})
|
|
38
|
-
}
|
package/lib/users.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* author : Sunil Wang
|
|
3
|
-
* createTime : 2017/7/10 10:17
|
|
4
|
-
* description :
|
|
5
|
-
*/
|
|
6
|
-
var bucket = require('./bucket')
|
|
7
|
-
var exec = require('./exec')
|
|
8
|
-
var co = require('../util/co')
|
|
9
|
-
|
|
10
|
-
bucket.users = {
|
|
11
|
-
openedCount: co.wrap(function * () {
|
|
12
|
-
var res = yield exec('who | grep -v localhost | wc -l')
|
|
13
|
-
|
|
14
|
-
if(bucket.isNotSupported(res)) return res
|
|
15
|
-
|
|
16
|
-
return parseInt(res, 10)
|
|
17
|
-
})
|
|
18
|
-
}
|
package/test/test.js
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-undef */
|
|
2
|
-
/**
|
|
3
|
-
* author : Sunil Wang
|
|
4
|
-
* createTime : 2017/7/10 14:51
|
|
5
|
-
* description :
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
var osu = require('../')
|
|
9
|
-
var assert = require('assert')
|
|
10
|
-
|
|
11
|
-
describe('cpu', function () {
|
|
12
|
-
it('returns cpu average and count', function (done) {
|
|
13
|
-
this.timeout(5000)
|
|
14
|
-
|
|
15
|
-
var cpu = osu.cpu
|
|
16
|
-
var info = cpu.average()
|
|
17
|
-
var count = cpu.count()
|
|
18
|
-
assert.ok(count > 0)
|
|
19
|
-
assert.ok(Object.keys(info).length > 0)
|
|
20
|
-
done()
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
it.skip('returns cpu usage', function (done) {
|
|
24
|
-
this.timeout(5000)
|
|
25
|
-
|
|
26
|
-
var cpu = osu.cpu
|
|
27
|
-
|
|
28
|
-
cpu.usage().then((num) => {
|
|
29
|
-
assert.ok(num > 0)
|
|
30
|
-
done()
|
|
31
|
-
})
|
|
32
|
-
})
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
describe('drive', function () {
|
|
36
|
-
it('returns drive info', function (done) {
|
|
37
|
-
var drive = osu.drive
|
|
38
|
-
|
|
39
|
-
drive.info().then((info) => {
|
|
40
|
-
assert.ok(Object.keys(info).length > 0)
|
|
41
|
-
done()
|
|
42
|
-
})
|
|
43
|
-
})
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
describe('memory', function () {
|
|
47
|
-
it('returns memory info', function (done) {
|
|
48
|
-
var men = osu.mem
|
|
49
|
-
|
|
50
|
-
men.info().then((info) => {
|
|
51
|
-
assert.ok(Object.keys(info).length > 0)
|
|
52
|
-
done()
|
|
53
|
-
})
|
|
54
|
-
})
|
|
55
|
-
})
|