315 lines
13 KiB
Markdown
315 lines
13 KiB
Markdown
# systeminformation
|
|
|
|
Simple system and OS information library for [node.js][nodejs-url]
|
|
|
|
[![NPM Version][npm-image]][npm-url]
|
|
[![NPM Downloads][downloads-image]][downloads-url]
|
|
[![MIT license][license-img]][license-url]
|
|
|
|
## Quick Start
|
|
|
|
### Installation
|
|
|
|
```bash
|
|
$ npm install systeminformation --save
|
|
```
|
|
|
|
### Usage
|
|
|
|
All functions (except `version` and `time`) are implemented as asynchronous functions. Here a small example how to use them:
|
|
|
|
```
|
|
var si = require('systeminformation');
|
|
|
|
si.cpu(function(data) {
|
|
console.log('CPU-Information:');
|
|
console.log(data);
|
|
})
|
|
```
|
|
|
|
### Major Changes - Version 2
|
|
|
|
There are a lot of changes in version 2 of systeminformation! Here is a quick overview:
|
|
|
|
New Functions
|
|
|
|
- `version`: returns systeminformation version (semver)
|
|
- `system`: hardware info (manufacturer, product/model name, version, serial, uuid)
|
|
- `networkConnections`: number of active connections
|
|
- `inetLatency`: latency in ms to external resource (internet)
|
|
- `getStaticData`: returns on json object with static data at once (OS, CPU, Network Interfaces - they should not change until restarted)
|
|
- `getDynamicData`: returns on json object with all dynamic data at once (e.g. for monitoring agents)
|
|
- `getAllData`: returns on json object with all data (static and dynamic) at once
|
|
|
|
Renamed Functions (now all camelCase)
|
|
|
|
- `osinfo`: renamed to `osInfo`
|
|
- `cpu_currentspeed`: renamed to `cpuCurrentspeed`
|
|
- `cpu_temperature`: renamed to `cpuTemperature`
|
|
- `fs_size`: renamed to `fsSize`
|
|
- `fs_speed`: renamed to `fsStats`
|
|
- `network_interfaces`: renamed to `networkInterfaces`
|
|
- `network_speed`: renamed to `networkStats`
|
|
- `network_connections`: renamed to `networkConnections`
|
|
- `currentload`: renamed to `currentLoad`
|
|
- `fullload`: renamed to `fullLoad`
|
|
- `processload`: renamed to `processLoad`
|
|
- `checksite`: renamed to `inetChecksite`
|
|
|
|
Function Changes
|
|
|
|
- `cpu_temperature`/`cpuTemperature`: -1 is new default (and indicates that non sensors are installed)
|
|
- `cpu_temperature`/`cpuTemperature`: new result `max` which returns max temperature of all cores
|
|
- `cpu_currentspeed`/`cpuCurrentspeed`: now in GHz
|
|
- `cpu`: splitted `manufacturer` (e.g. Intel) and `brand` (e.g. Core 2 Duo)
|
|
- `network_speed`/`networkStats`: now better support for OS X (also support for `operstate`)
|
|
- `network_speed`/`networkStats`: overall received and transferred bytes (rx, tx)
|
|
- `mem`: now better support for OS X (also support for `swaptotal`, `swapused`, `swapfree`)
|
|
- `fs_size`/`fsSize`: use-values now in % (0 - 100% instead of 0 - 1)
|
|
- `fs_speed`/`fsStats`: now also full support for OS X
|
|
- `checksite`/`inetChecksite`: new result structure - see command reference
|
|
- `checksite`/`inetChecksite`: ms (former `response_ms`): -1 if not ok
|
|
|
|
Other changes
|
|
|
|
- no more external dependencies: `request` is not longer needed
|
|
- where possible results are now integer or float values (instead of strings) because it is easier to calculate with numbers ;-)
|
|
|
|
**Be aware**, that the new version 2.x is **NOT backward compatible** to version 1.x ....
|
|
|
|
## Core concept
|
|
|
|
[Node.js][nodejs-url] comes with some basic OS information, but I always wanted a little more. So I came up to write this
|
|
little library. This library is still work in progress. In version 2 I cleaned up a lot of inconsistencies and bugs, but
|
|
there is for sure room for improvement. I was only able to test it on several Debian, Raspbian, Ubuntu distributions as well
|
|
as OS X (Mavericks, Yosemite, El Captain). Version 2 now also supports nearly all functionality on OS X/Darwin platforms.
|
|
But be careful, this library will definitely NOT work on Windows platforms!
|
|
|
|
If you have comments, suggestions & reports, please feel free to contact me!
|
|
|
|
## Reference
|
|
|
|
### Sections
|
|
|
|
This library is splitted in several sections:
|
|
|
|
1. General
|
|
2. System (HW)
|
|
3. Operating System
|
|
4. CPU
|
|
5. Memory
|
|
6. File System
|
|
7. Network
|
|
8. Processes
|
|
9. Users
|
|
10. Internet
|
|
11. GetAll
|
|
|
|
### Function Reference and OS Support
|
|
|
|
| function | Linux | OS X | Comments |
|
|
| -------------- | ------ | ------ | ------- |
|
|
| si.version() | X | X | systeminformation version (no callback!) |
|
|
| si.time() | X | X | time information (no callback!) |
|
|
| - current | X | X | local time |
|
|
| - uptime | X | X | uptime |
|
|
| si.system(cb) | X | X | hardware information |
|
|
| - manufacturer | X | X | e.g. 'MSI' |
|
|
| - model | X | X | model/product e.g. 'MS-7823' |
|
|
| - version | X | X | version e.g. '1.0' |
|
|
| - serial | X | X | serial number |
|
|
| - uuid | X | X | UUID |
|
|
| si.osInfo(cb) | X | X | OS information |
|
|
| - platform | X | X | 'Linux' or 'Darwin' |
|
|
| - distro | X | X | |
|
|
| - release | X | X | |
|
|
| - codename | | X | |
|
|
| - kernel | X | X | kernel release - same as os.release() |
|
|
| - arch | X | X | same as os.arch() |
|
|
| - hostname | X | X | same as os.hostname() |
|
|
| - logofile | X | X | e.g. 'apple', 'debian', 'fedora', ... |
|
|
| si.cpu(cb) | X | X | CPU information|
|
|
| - manufacturer | X | X | e.g. 'Intel(R)' |
|
|
| - brand | X | X | e.g. 'Core(TM)2 Duo' |
|
|
| - speed | X | X | in GHz e.g. '3.40' |
|
|
| - cores | X | X | # cores |
|
|
| si.cpuCurrentspeed(cb) | X | X | current speed (in GHz)|
|
|
| si.cpuTemperature(cb) | X | | CPU temperature (if sensors is installed) |
|
|
| - main | X | | main temperature |
|
|
| - cores | X | | array of temperatures |
|
|
| - max | X | | max temperature |
|
|
| si.mem(cb) | X | X | Memory information|
|
|
| - total | X | X | |
|
|
| - free | X | X | |
|
|
| - used | X | X | |
|
|
| - active | X | X | |
|
|
| - buffcache | X | X | |
|
|
| - swaptotal | X | X | |
|
|
| - swapused | X | X | |
|
|
| - swapfree | X | X | |
|
|
| si.fsSize(cb) | X | X | returns array of mounted file systems |
|
|
| - [0].fs | X | X | name of file system |
|
|
| - [0].size | X | X | sizes in Bytes |
|
|
| - [0].used | X | X | used in Bytes |
|
|
| - [0].use | X | X | used in % |
|
|
| - [0].mount | X | X | mount point |
|
|
| si.fsStats(cb) | X | X | current transfer stats |
|
|
| - rx | X | X | bytes read since startup |
|
|
| - wx | X | X | bytes written since startup |
|
|
| - rx_sec | X | X | bytes read / second (* see notes) |
|
|
| - wx_sec | X | X | bytes written / second (* see notes) |
|
|
| si.networkInterfaces(cb) | X | X | array of network interfaces |
|
|
| - [0].iface | X | X | interface name |
|
|
| - [0].ip4 | X | X | ip4 address |
|
|
| - [0].ip6 | X | X | ip6 address |
|
|
| si.networkStats('eth1',cb) | X | X | current network stats of given interface |
|
|
| - iface | X | X | interface |
|
|
| - operstate | X | X | up / down |
|
|
| - rx | X | X | received bytes overall |
|
|
| - tx | X | X | transferred bytes overall|
|
|
| - rx_sec | X | X | received bytes / second (* see notes) |
|
|
| - tx_sec | X | X | transferred bytes per second (* see notes) |
|
|
| si.currentLoad(cb) | X | X | CPU-Load in % |
|
|
| si.fullLoad(cb) | X | X | CPU-full load since bootup in % |
|
|
| si.services('mysql, apache2', cb) | X | X | pass comma separated string of services |
|
|
| - [0].name | X | X | name of service |
|
|
| - [0].running | X | X | true / false |
|
|
| - [0].pcpu | X | X | process % CPU |
|
|
| - [0].pmem | X | X | process % MEM |
|
|
| si.processes(cb) | X | X | # running processes |
|
|
| si.processLoad('apache2',cb) | X | X | detailed information about given process |
|
|
| - proc | X | X | process name |
|
|
| - pid | X | X | PID |
|
|
| - cpu | X | X | process % CPU |
|
|
| - mem | X | X | process % MEM |
|
|
| si.users(cb) | X | X | array of users online |
|
|
| si.inetChecksite(url, cb) | X | X | response-time (ms) to fetch given URL |
|
|
| - url | X | X | given url |
|
|
| - ok | X | X | status code OK (2xx, 3xx) |
|
|
| - status | X | X | status code |
|
|
| - ms | X | X | response time in ms |
|
|
| si.inetLatency(cb) | X | X | response-time (ms) to external ressource |
|
|
| si.getStaticData(cb) | X | X | all static data at once |
|
|
| si.getDynamicData(cb,srv,iface) | X | X | all dynamic data at once |
|
|
| si.getAllData(cb,srv,iface) | X | X | all data at once |
|
|
|
|
### cb: Asynchronous Function Calls (callback)
|
|
|
|
Remember: all functions (except `version` and `time`) are implemented as asynchronous (callback) functions!
|
|
So another example, how to use a specific function might be:
|
|
|
|
```
|
|
var si = require('systeminformation');
|
|
|
|
si.networkStats('eth1', function(data) {
|
|
console.log('Network Interface Stats (eth1):');
|
|
console.log('- is up: ' + data.operstate);
|
|
console.log('- RX bytes overall: ' + data.rx);
|
|
console.log('- TX bytes overall: ' + data.tx);
|
|
console.log('- RX bytes/sec: ' + data.rx_sec);
|
|
console.log('- TX bytes/sec: ' + data.tx_sec);
|
|
})
|
|
```
|
|
|
|
### *: Additional Notes
|
|
|
|
In `fsStats` and `networkStats` the results per second values (rx_sec, ...) are calculated beginning
|
|
with the second call of the function. It is determined by calculating the difference of transferred bytes
|
|
divided by the time between two calls of the function.
|
|
|
|
## Known Issues
|
|
|
|
There is one major things, that I was still not able to solve:
|
|
|
|
For OS X, I did not find a reliable way to get the CPU temperature. All suggestions I found did not work on current version of OS X on different machines (intel platform). So if anyone has an idea, this would be helpful.
|
|
|
|
I am happy to discuss any comments and suggestions. Please feel free to contact me if you see any possibility of improvement!
|
|
|
|
## Version history
|
|
|
|
| Version | Date | Comment |
|
|
| -------------- | -------------- | -------- |
|
|
| 2.0.5 | 2016-03-02 | changed .gitignore |
|
|
| 2.0.4 | 2016-02-22 | tiny correction - removed double quotes CPU brand, ... |
|
|
| 2.0.3 | 2016-02-22 | optimized cpuCurrentspeed |
|
|
| 2.0.2 | 2016-02-22 | added CoreOS identification |
|
|
| 2.0.1 | 2016-01-07 | minor patch |
|
|
| 2.0.0 | 2016-01-07 | new major version 2.0 |
|
|
| 1.0.7 | 2015-11-27 | fixed: si.network_speed() |
|
|
| 1.0.6 | 2015-09-17 | fixed: si.users() |
|
|
| 1.0.5 | 2015-09-14 | updated dependencies |
|
|
| 1.0.4 | 2015-07-18 | updated docs |
|
|
| 1.0.3 | 2015-07-18 | bugfix cpu cores |
|
|
| 1.0.2 | 2015-07-18 | bugfix cpu_currentspeed, cpu_temperature |
|
|
| 1.0.1 | 2015-07-18 | documentation update |
|
|
| 1.0.0 | 2015-07-18 | bug-fixes, version bump, published as npm component |
|
|
| 0.0.3 | 2014-04-14 | bug-fix (cpu_speed) |
|
|
| 0.0.2 | 2014-03-14 | Optimization FS-Speed & CPU current speed |
|
|
| 0.0.1 | 2014-03-13 | initial release |
|
|
|
|
## Comments
|
|
|
|
If you have ideas or comments, please do not hesitate to contact me.
|
|
|
|
|
|
Happy monitoring!
|
|
|
|
Sincerely,
|
|
|
|
Sebastian Hildebrandt, [+innovations](http://www.plus-innovations.com)
|
|
|
|
## Credits
|
|
|
|
Written by Sebastian Hildebrandt [sebhildebrandt](https://github.com/sebhildebrandt)
|
|
|
|
#### Contributers
|
|
|
|
- Guillaume Legrain [glegrain](https://github.com/glegrain)
|
|
- Riccardo Novaglia [richy24](https://github.com/richy24)
|
|
|
|
## Copyright Information
|
|
|
|
Linux is a registered trademark of Linus Torvalds, OS X is a registered trademark of Apple Inc.,
|
|
Windows is a registered trademark of Microsoft Corporation. Node.js is a trademark of Joyent Inc.,
|
|
Intel is a trademark of Intel Corporation, Raspberry Pi is a trademark of the Raspberry Pi Foundation,
|
|
Debian is a trademark of the Debian Project, Ubuntu is a trademark of Canonical Ltd.
|
|
All other trademarks are the property of their respective owners.
|
|
|
|
## License [![MIT license][license-img]][license-url]
|
|
|
|
>The [`MIT`][license-url] License (MIT)
|
|
>
|
|
>Copyright © 2014-2016 Sebastian Hildebrandt, [+innovations](http://www.plus-innovations.com).
|
|
>
|
|
>Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
>of this software and associated documentation files (the "Software"), to deal
|
|
>in the Software without restriction, including without limitation the rights
|
|
>to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
>copies of the Software, and to permit persons to whom the Software is
|
|
>furnished to do so, subject to the following conditions:
|
|
>
|
|
>The above copyright notice and this permission notice shall be included in
|
|
>all copies or substantial portions of the Software.
|
|
>
|
|
>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
>IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
>FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
>AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
>LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
>OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
>THE SOFTWARE.
|
|
>
|
|
>Further details see [LICENSE](LICENSE) file.
|
|
|
|
|
|
[npm-image]: https://img.shields.io/npm/v/systeminformation.svg?style=flat-square
|
|
[npm-url]: https://npmjs.org/package/systeminformation
|
|
[downloads-image]: https://img.shields.io/npm/dm/systeminformation.svg?style=flat-square
|
|
[downloads-url]: https://npmjs.org/package/systeminformation
|
|
|
|
[license-url]: https://github.com/sebhildebrandt/systeminformation/blob/master/LICENSE
|
|
[license-img]: https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square
|
|
[npmjs-license]: https://img.shields.io/npm/l/systeminformation.svg?style=flat-square
|
|
|
|
[nodejs-url]: https://nodejs.org/en/
|