352 lines
6.3 KiB
Markdown
352 lines
6.3 KiB
Markdown
## Description
|
|
|
|
monitor vital signs of your server :
|
|
|
|
- CPU average usage
|
|
- Free and used drive space
|
|
- Free and used memory space
|
|
- Operating System
|
|
- All processes running
|
|
- TTY/SSH opened
|
|
- Total opened files
|
|
- Network speed (input and output)
|
|
|
|
# node-os-utils
|
|
|
|
[](https://standardjs.com)
|
|
[](https://travis-ci.org/SunilWang/node-os-utils)
|
|
[![NPM Version][npm-image]][npm-url]
|
|
[![NPM Downloads][downloads-image]][downloads-url]
|
|
|
|
An operating system utility library. Some methods are wrappers of node libraries and others are calculations made by the module.
|
|
|
|
[os-utils](https://github.com/oscmejia/os-utils) extended
|
|
|
|
## Installation
|
|
|
|
One line installation with [npm](http://npmjs.org).
|
|
|
|
```bash
|
|
$ npm install node-os-utils --save
|
|
```
|
|
Then in your code
|
|
|
|
## Example
|
|
|
|
```js
|
|
var osu = require('node-os-utils')
|
|
var cpu = osu.cpu
|
|
|
|
var count = cpu.count() // 8
|
|
|
|
cpu.usage()
|
|
.then(cpuPercentage => {
|
|
console.log(cpuPercentage) // 10.38
|
|
})
|
|
|
|
var osCmd = osu.osCmd
|
|
|
|
osCmd.whoami()
|
|
.then(userName => {
|
|
console.log(userName) // admin
|
|
})
|
|
```
|
|
|
|
## Configuration
|
|
|
|
require('node-os-utils').options
|
|
|
|
Default settings:
|
|
|
|
- `NOT_SUPPORTED_VALUE` is `not supported`. os not supported, return value.
|
|
- `INTERVAL` is `1000` millisecond. Represents the refresh of the cpu and network workers.
|
|
|
|
:warning: If this module uses too much CPU, set the `INTERVAL` value to 10000 or more.
|
|
|
|
## Info
|
|
|
|
If you have `not supported` in some categories, your OS configuration is not supported for this option.
|
|
|
|
You can use `require('node-os-utils').isNotSupported()` to decide `not supported`.
|
|
|
|
```js
|
|
var osu = require('node-os-utils')
|
|
var osCmd = osu.osCmd
|
|
|
|
osCmd
|
|
.topCpu()
|
|
.then(function(res){
|
|
if(osu.isNotSupported(res)){
|
|
// Handle 'not supported'
|
|
}else{
|
|
// Things to do...
|
|
}
|
|
})
|
|
````
|
|
## Usage
|
|
The following methods are available:
|
|
|
|
### require('node-os-utils').cpu
|
|
|
|
#### cpu.average():object
|
|
|
|
CPU average
|
|
|
|
```js
|
|
var osu = require('node-os-utils')
|
|
var cpu = osu.cpu
|
|
|
|
var info = cpu.average()
|
|
|
|
console.log(info)
|
|
```
|
|
```
|
|
{ totalIdle: 33526410,
|
|
totalTick: 37460330,
|
|
avgIdle: 4190801.25,
|
|
avgTotal: 4682541.25 }
|
|
```
|
|
|
|
#### cpu.usage(interval):Promise(number)
|
|
|
|
CPU average usage
|
|
|
|
- [interval]: number - interval millisecond. defaulta: 1000
|
|
|
|
```js
|
|
var osu = require('node-os-utils')
|
|
var cpu = osu.cpu
|
|
|
|
cpu.usage()
|
|
.then(info => {
|
|
console.log(info)
|
|
})
|
|
```
|
|
```
|
|
10.06
|
|
```
|
|
|
|
#### cpu.free(interval):Promise(number)
|
|
|
|
cpu free percentage
|
|
|
|
- [interval]: number - interval millisecond. defaulta: 1000
|
|
|
|
```js
|
|
var osu = require('node-os-utils')
|
|
var cpu = osu.cpu
|
|
|
|
cpu.free()
|
|
.then(info => {
|
|
console.log(info)
|
|
})
|
|
```
|
|
```
|
|
89.26
|
|
```
|
|
#### cpu.count():number
|
|
#### cpu.model():string
|
|
#### cpu.loadavg():Array[number]
|
|
#### cpu.loadavgTime(time):number
|
|
|
|
- time: number - 1, 5 or 15 minutes, defaulta: 1
|
|
|
|
---
|
|
|
|
### require('node-os-utils').drive
|
|
|
|
#### drive.info():Promise(Object)
|
|
|
|
drive info
|
|
|
|
```js
|
|
var osu = require('node-os-utils')
|
|
var drive = osu.drive
|
|
|
|
drive.info()
|
|
.then(info => {
|
|
console.log(info)
|
|
})
|
|
|
|
```
|
|
```
|
|
{ totalGb: '464.8',
|
|
usedGb: '147.7',
|
|
freeGb: '316.9',
|
|
usedPercentage: '31.8',
|
|
freePercentage: '68.2' }
|
|
```
|
|
|
|
#### drive.free():Promise(Object)
|
|
```
|
|
{ totalGb: '464.8', freeGb: '316.9', freePercentage: '68.2' }
|
|
```
|
|
#### drive.used():Promise(Object)
|
|
```
|
|
{ totalGb: '464.8', usedGb: '316.9', usedPercentage: '68.2' }
|
|
```
|
|
|
|
---
|
|
|
|
### require('node-os-utils').mem
|
|
|
|
#### mem.info():Promise(Object)
|
|
|
|
memory info
|
|
|
|
```js
|
|
var osu = require('node-os-utils')
|
|
var mem = osu.mem
|
|
|
|
mem.info()
|
|
.then(info => {
|
|
console.log(info)
|
|
})
|
|
|
|
```
|
|
```
|
|
{ totalMemMb: 16384,
|
|
usedMemMb: 13403.41,
|
|
freeMemMb: 2980.59,
|
|
freeMemPercentage: 18.19 }
|
|
```
|
|
#### mem.free():Promise(Object)
|
|
```
|
|
{ totalMemMb: 16384, freeMemMb: 3033.63 }
|
|
```
|
|
#### mem.used():Promise(Object)
|
|
```
|
|
{ totalMemMb: 16384, usedMemMb: 13421.15 }
|
|
```
|
|
#### mem.totalMem():number
|
|
```
|
|
17179869184
|
|
```
|
|
|
|
---
|
|
|
|
### require('node-os-utils').netstat
|
|
|
|
#### netstat.stats():Promise(Array[Object])
|
|
```js
|
|
var osu = require('node-os-utils')
|
|
var netstat = osu.netstat
|
|
|
|
netstat.stats()
|
|
.then(info => {
|
|
console.log(info)
|
|
})
|
|
|
|
```
|
|
```
|
|
[ { interface: 'lo',
|
|
inputBytes: '731508412',
|
|
outputBytes: '731508412' },
|
|
{ interface: 'eth0',
|
|
inputBytes: '1356471479',
|
|
outputBytes: '26631036763' } ]
|
|
```
|
|
|
|
#### netstat.inOut(interval):Promise(Object)
|
|
|
|
- [interval]: number - interval millisecond. defaulta: 1000
|
|
|
|
```js
|
|
var osu = require('node-os-utils')
|
|
var netstat = osu.netstat
|
|
|
|
netstat.inOut()
|
|
.then(info => {
|
|
console.log(info)
|
|
})
|
|
|
|
```
|
|
```
|
|
{ total: { inputMb: 0.02, outputMb: 1.22 },
|
|
eth0: { inputMb: 0.02, outputMb: 1.22 } }
|
|
```
|
|
|
|
---
|
|
|
|
### require('node-os-utils').openfiles
|
|
|
|
#### openfiles.openFd():Promise(number)
|
|
Total opened files
|
|
|
|
```
|
|
1088
|
|
```
|
|
|
|
---
|
|
|
|
### require('node-os-utils').os
|
|
|
|
#### os.oos():Promise(string)
|
|
|
|
original operating system
|
|
|
|
```
|
|
Mac OS X 10.12.5
|
|
```
|
|
```
|
|
Red Hat 7.3
|
|
```
|
|
|
|
#### os.platform():string
|
|
#### os.uptime():number - (seconds)
|
|
#### os.ip():string
|
|
#### os.hostname():string
|
|
#### os.type():string
|
|
#### os.arch():string
|
|
|
|
---
|
|
|
|
### require('node-os-utils').proc
|
|
|
|
#### proc.totalProcesses():Promise(number)
|
|
#### proc.zombieProcesses():Promise(number)
|
|
|
|
---
|
|
|
|
### require('node-os-utils').users
|
|
|
|
#### users.openedCount():Promise(number)
|
|
TTY/SSH opened
|
|
|
|
---
|
|
|
|
### require('node-os-utils').osCmd
|
|
|
|
#### osCmd.topCpu():Promise(string)
|
|
#### osCmd.topMem():Promise(string)
|
|
#### osCmd.vmstats():Promise(string)
|
|
......
|
|
|
|
```js
|
|
var bucket = require('./bucket')
|
|
var exec = require('./exec')
|
|
var wrapExec = exec.wrapExec
|
|
|
|
bucket.osCmd = {
|
|
topCpu: wrapExec('ps -eo pcpu,user,args --no-headers | sort -k 1 -n | tail -n 10 | sort -k 1 -nr | cut -c 1-70'),
|
|
topMem: wrapExec('ps -eo pmem,pid,cmd | sort -k 1 -n | tail -n 10 | sort -k 1 -nr | cut -c 1-70'),
|
|
vmstats: wrapExec('vmstat -S m'),
|
|
processesUsers: wrapExec('ps hax -o user | sort | uniq -c'),
|
|
diskUsage: wrapExec('df -h'),
|
|
who: wrapExec('who'),
|
|
whoami: wrapExec('whoami'),
|
|
openPorts: wrapExec('lsof -Pni4 | grep ESTABLISHED'),
|
|
ifconfig: wrapExec('ifconfig')
|
|
}
|
|
```
|
|
|
|
|
|
## License
|
|
|
|
[MIT](LICENSE). Copyright (c).
|
|
|
|
[npm-image]: https://img.shields.io/npm/v/node-os-utils.svg
|
|
[npm-url]: https://www.npmjs.com/package/node-os-utils
|
|
[downloads-image]: https://img.shields.io/npm/dt/node-os-utils.svg
|
|
[downloads-url]: https://npmjs.org/package/node-os-utils
|