diff --git a/CHANGELOG.md b/CHANGELOG.md index 06e1c09..2569ac8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ - `audio()` detailed audio information - `bluetoothDevices()` detailed information detected bluetooth devices +- `dockerImages()` detailed information docker images +- `dockerVolumes()` detailed information docker volumes - `printers()` detailed printer information - `usb()` detailed USB information - `wifiInterfaces()` detected Wi-Fi interfaces @@ -44,6 +46,8 @@ We had to make **several interface changes** to keep systeminformation as consis - `cpu()`: extended socket list (win) - `cpu()`: added virtualization if cpu supports virtualization - `cpu()`: now flags are part of this function +- `cpuTemperature()` added added socket and chipset temp (linux) +- `diskLayout()`: added USB drives (mac OS) - `fsSize()`: added available - `fsSize()`: improved calculation of used - `getData()`: support for passing parameters and filters (see section General / getData) @@ -53,6 +57,7 @@ We had to make **several interface changes** to keep systeminformation as consis - `memoryLayout()`: added ECC flag - `osInfo()`: better fqdn (win) - `osinfo()`: added hypervizor if hyper-v is enabled (win only) +- `osInfo()`: added remoteSession (win only) - `system()`: better Raspberry PI detection - `system()`: added virtual and virtualHost (if system is virtual instance) - `uuid()`: better value support @@ -72,45 +77,58 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | -| 5.3.3 | 2020-02-15 | `dockerContainerStats()` fixed ID splitting | -| 5.3.2 | 2020-02-15 | `inetLatency()` `ineChecksite()` fixed possible security issue (file://) | -| 5.3.1 | 2020-02-14 | `inetLatency()` `ineChecksite()` `servcices()` `processes()` fixed possible security issue (arrays) | -| 5.3.0 | 2020-02-12 | `osInfo()` added remoteSession (windows) | -| 5.2.7 | 2020-02-12 | `fsStats()`, `blockDevices()` improved linux | -| 5.2.6 | 2020-02-12 | `inetLatency()` fixed possible DOS intrusion | -| 5.2.5 | 2020-02-11 | `processes()` fixed truncated params (linux) | -| 5.2.4 | 2020-02-11 | `currentLoad()` fixed issue | -| 5.2.3 | 2020-02-11 | `diskLayout()` added USB drives (mac OS) | -| 5.2.2 | 2020-02-11 | code cleanup, updated docs | -| 5.2.1 | 2020-02-10 | `system()` fixed issue virtual detect (linux) | -| 5.2.0 | 2020-02-10 | `wifiInterfces()` and `wifiConnections()` added | -| 5.1.2 | 2020-02-08 | fixed node 4 compatibility issue | -| 5.1.1 | 2020-02-08 | `baseboard()` added memMax, memSlots, smaller improvements Raspberry | -| 5.1.0 | 2020-02-08 | `memLayout()` added ECC flag, `bios()` added language, features (linux) | -| 5.0.11 | 2020-02-07 | `fsSize()` fixed windows WSL issue | -| 5.0.10 | 2020-02-06 | `getDynamicData()` fixed windows WSL issue | -| 5.0.9 | 2020-02-02 | `fsSize()` fixed parsing edge case issue mac OS | -| 5.0.8 | 2020-01-30 | typescript typings fix cpuCurrentSpeed | -| 5.0.7 | 2020-01-29 | `fsSize()` available fixed windows and typescript typings | -| 5.0.6 | 2020-01-28 | `osinfo()` added hypervisor (win only) | -| 5.0.5 | 2020-01-27 | `networkInterfaces()` type detection improved (win) | -| 5.0.4 | 2020-01-27 | `cpu()` improved manufacturer decoding (linux) | -| 5.0.3 | 2020-01-27 | `cpu()` fix virtualization, `wifi()` fix raspberry | -| 5.0.2 | 2020-01-26 | updated typescript typings | -| 5.0.1 | 2020-01-26 | code cleanup | -| 5.0.0 | 2020-01-26 | new major version 5 release | -| 4.34.9 | 2020-01-25 | `graphics()` virtual controller vram value fix (win) | -| 4.34.8 | 2020-01-25 | `graphics()` controller subDeviceId fix (win) | -| 4.34.7 | 2020-01-13 | `services()` improved service discovery (linux) | -| 4.34.6 | 2020-01-12 | `networkInterfaces()` catch errors | -| 4.34.5 | 2020-01-07 | `networkInterfaceDefault()` fixed CMD popup (windows) | -| 4.34.4 | 2020-01-06 | `system()` fixed vitrual catch error | -| 4.34.3 | 2020-01-06 | `graphics()` fixed non nvidia-smi controllers (win) | -| 4.34.2 | 2020-01-05 | `system()` uuid lowercase as in uuid() | -| 4.34.1 | 2020-01-05 | `graphics()` nvidia-smi detection improved | -| 4.34.0 | 2020-01-05 | `system()` added flag virtual | -| 4.33.8 | 2020-01-04 | `virtualBox()` fix issue windows host | -| 4.33.7 | 2020-01-04 | `graphics()` nvidia-smi detection improved | +| 5.6.8 | 2021-03-22 | typescript definitions fix `wifiInterfces()`, `wifiConnections()` | +| 5.6.7 | 2021-03-16 | `inetLatency()` `ineChecksite()` schema validation | +| 5.6.6 | 2021-03-16 | code refactoring | +| 5.6.5 | 2021-03-15 | `cpuTemperature()` fix (linux) | +| 5.6.4 | 2021-03-15 | `sanitizeShellString()` and other security improvements | +| 5.6.3 | 2021-03-14 | `sanitizeShellString()` improvement | +| 5.6.2 | 2021-03-10 | `networkInterfaces()` `cpu()` improvement (win) | +| 5.6.1 | 2021-03-03 | `get()` fixed issue boolean parameters | +| 5.6.0 | 2021-03-03 | `cpuTemperature()` added socket and chipset temp (linux) | +| 5.5.0 | 2021-02-25 | `dockerVolumes()` added | +| 5.4.0 | 2021-02-24 | `dockerImages()` added | +| 5.3.5 | 2021-02-23 | `dockerContainerStats()` fixed parameter * | +| 5.3.4 | 2021-02-20 | `sanitizeShellString()` optimized strict sanitation | +| 5.3.3 | 2021-02-15 | `dockerContainerStats()` fixed ID splitting | +| 5.3.2 | 2021-02-15 | `inetLatency()` `ineChecksite()` fixed possible security issue (file://) | +| 5.3.1 | 2021-02-14 | `inetLatency()` `ineChecksite()` `servcices()` `processes()` fixed possible security issue (arrays) | +| 5.3.0 | 2021-02-12 | `osInfo()` added remoteSession (windows) | +| 5.2.7 | 2021-02-12 | `fsStats()`, `blockDevices()` improved linux | +| 5.2.6 | 2021-02-12 | `inetLatency()` fixed possible DOS intrusion | +| 5.2.5 | 2021-02-11 | `processes()` fixed truncated params (linux) | +| 5.2.4 | 2021-02-11 | `currentLoad()` fixed issue | +| 5.2.3 | 2021-02-11 | `diskLayout()` added USB drives (mac OS) | +| 5.2.2 | 2021-02-11 | code cleanup, updated docs | +| 5.2.1 | 2021-02-10 | `system()` fixed issue virtual detect (linux) | +| 5.2.0 | 2021-02-10 | `wifiInterfces()` and `wifiConnections()` added | +| 5.1.2 | 2021-02-08 | fixed node 4 compatibility issue | +| 5.1.1 | 2021-02-08 | `baseboard()` added memMax, memSlots, smaller improvements Raspberry | +| 5.1.0 | 2021-02-08 | `memLayout()` added ECC flag, `bios()` added language, features (linux) | +| 5.0.11 | 2021-02-07 | `fsSize()` fixed windows WSL issue | +| 5.0.10 | 2021-02-06 | `getDynamicData()` fixed windows WSL issue | +| 5.0.9 | 2021-02-02 | `fsSize()` fixed parsing edge case issue mac OS | +| 5.0.8 | 2021-01-30 | typescript typings fix cpuCurrentSpeed | +| 5.0.7 | 2021-01-29 | `fsSize()` available fixed windows and typescript typings | +| 5.0.6 | 2021-01-28 | `osinfo()` added hypervisor (win only) | +| 5.0.5 | 2021-01-27 | `networkInterfaces()` type detection improved (win) | +| 5.0.4 | 2021-01-27 | `cpu()` improved manufacturer decoding (linux) | +| 5.0.3 | 2021-01-27 | `cpu()` fix virtualization, `wifi()` fix raspberry | +| 5.0.2 | 2021-01-26 | updated typescript typings | +| 5.0.1 | 2021-01-26 | code cleanup | +| 5.0.0 | 2021-01-26 | new major version 5 release | +| 4.34.9 | 2021-01-25 | `graphics()` virtual controller vram value fix (win) | +| 4.34.8 | 2021-01-25 | `graphics()` controller subDeviceId fix (win) | +| 4.34.7 | 2021-01-13 | `services()` improved service discovery (linux) | +| 4.34.6 | 2021-01-12 | `networkInterfaces()` catch errors | +| 4.34.5 | 2021-01-07 | `networkInterfaceDefault()` fixed CMD popup (windows) | +| 4.34.4 | 2021-01-06 | `system()` fixed vitrual catch error | +| 4.34.3 | 2021-01-06 | `graphics()` fixed non nvidia-smi controllers (win) | +| 4.34.2 | 2021-01-05 | `system()` uuid lowercase as in uuid() | +| 4.34.1 | 2021-01-05 | `graphics()` nvidia-smi detection improved | +| 4.34.0 | 2021-01-05 | `system()` added flag virtual | +| 4.33.8 | 2021-01-04 | `virtualBox()` fix issue windows host | +| 4.33.7 | 2021-01-04 | `graphics()` nvidia-smi detection improved | | 4.33.6 | 2021-01-02 | `dockerContainerStats()` fix `tx` changed to `wx` as documented | | 4.33.5 | 2020-12-30 | `graphics()` vram (nvidia-smi) | | 4.33.4 | 2020-12-28 | `typescript` typings fix | diff --git a/README.md b/README.md index f1f5956..8fad89e 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ [![Sponsoring][sponsor-badge]][sponsor-url] [![MIT license][license-img]][license-url] -This is amazing. Started as a small project just for myself, it now has > 10,000 lines of code, > 400 versions published, > 3 mio downloads per month, > 30 mio downloads overall. Thank you to all who contributed to this project! +This is amazing. Started as a small project just for myself, it now has > 10,000 lines of code, > 400 versions published, up to 3 mio downloads per month, > 30 mio downloads overall. Thank you to all who contributed to this project! ## New Version 5.0 @@ -40,6 +40,7 @@ This next major version release 5.0 comes with new functionality and several imp - added audio: get detailed audio device information - added bluetooth: get detailed bluetooth device information +- added dockerImages, dockerVolumes: get detailed information about docker images and volumes - added printer: get information from detected printers - added usb: get detailed usb controller and device information - added wifi interfaces ans connections: extended wifi information @@ -102,14 +103,13 @@ si.cpu() (last 7 major and minor version releases) +- Version 5.6.0: `cpuTemperature()` added added socket and chipset temp (linux) +- Version 5.5.0: `dockerVolumes()` added +- Version 5.4.0: `dockerImages()` added - Version 5.3.0: `osInfo()` added remoteSession (win only) - Version 5.2.0: `wifiInterfaces()` and `wifiConnections()` added - Version 5.1.0: `memLayout()` added ECC flag, `bios()` added language, features (linux) - Version 5.0.0: new version 5 - attention there are some breaking changes. See [detailed version 5 changes here][changes5-url]. -- Version 4.34.0: `system()` added flag virtual (linux, windows) -- Version 4.33.0: `graphics()` added nvidia-smi support (linux, windows) -- Version 4.32.0: `graphics()` added clinfo support (linux) -- Version 4.31.0: `osInfo()` added FQDN - ... You can find all changes here: [detailed changelog][changelog-url] @@ -223,6 +223,8 @@ Full function reference with examples can be found at [https://systeminformation | | main | X | X | X | X | | main temperature (avg) | | | cores | X | X | X | X | | array of temperatures | | | max | X | X | X | X | | max temperature | +| | socket | X | | | | | array socket temperatures | +| | chipset | X | | | | | chipset temperature | #### 4. Memory @@ -668,6 +670,25 @@ Full function reference with examples can be found at [https://systeminformation | | isolation | X | X | X | X | X | isolation | | | initBinary | X | X | X | X | X | init binary | | | productLicense | X | X | X | X | X | product license | +| si.dockerImages(all, cb) | [{...}] | X | X | X | X | X | returns array of top level/all docker images | +| | [0].id | X | X | X | X | X | image ID | +| | [0].container | X | X | X | X | X | container ID | +| | [0].comment | X | X | X | X | X | comment | +| | [0].os | X | X | X | X | X | OS | +| | [0].architecture | X | X | X | X | X | architecture | +| | [0].parent | X | X | X | X | X | parent ID | +| | [0].dockerVersion | X | X | X | X | X | docker version | +| | [0].size | X | X | X | X | X | image size | +| | [0].sharedSize | X | X | X | X | X | shared size | +| | [0].virtualSize | X | X | X | X | X | virtual size | +| | [0].author | X | X | X | X | X | author | +| | [0].created | X | X | X | X | X | created date / time | +| | [0].containerConfig | X | X | X | X | X | container config object | +| | [0].graphDriver | X | X | X | X | X | graph driver object | +| | [0].repoDigests | X | X | X | X | X | repo digests array | +| | [0].repoTags | X | X | X | X | X | repo tags array | +| | [0].config | X | X | X | X | X | config object | +| | [0].rootFS | X | X | X | X | X | root fs object | | si.dockerContainers(all, cb) | [{...}] | X | X | X | X | X | returns array of active/all docker containers | | | [0].id | X | X | X | X | X | ID of container | | | [0].name | X | X | X | X | X | name of container | @@ -713,6 +734,14 @@ Full function reference with examples can be found at [https://systeminformation | | [0].rss | X | X | X | X | X | resident set size | | | [0].vsz | X | X | X | X | X | virtual size in Kbytes | | | [0].command | X | X | X | X | X | command and arguments | +| si.dockerVolumes(cb) | [{...}] | returns array of all docker volumes | +| | [0].name | X | X | X | X | X | volume name | +| | [0].driver | X | X | X | X | X | driver | +| | [0].labels | X | X | X | X | X | labels object | +| | [0].mountpoint | X | X | X | X | X | mountpoint | +| | [0].options | X | X | X | X | X | options | +| | [0].scope | X | X | X | X | X | scope | +| | [0].created | X | X | X | X | X | created at | | si.dockerAll(cb) | {...} | X | X | X | X | X | list of all containers including their stats
and processes in one single array | #### 17. Virtual Box diff --git a/docs/changes.html b/docs/changes.html index 2d21469..d913931 100644 --- a/docs/changes.html +++ b/docs/changes.html @@ -173,6 +173,7 @@
  • cpu(): extended socket list (win)
  • cpu(): added virtualization if cpu supports virtualization
  • cpu(): now flags are part of this function
  • +
  • cpuTemperature(): added socket and chipset temperature (linux)
  • fsSize(): added available
  • fsSize(): improved calculation of used
  • getData(): support for passing parameters and filters (see section General / getData)
  • diff --git a/docs/cpu.html b/docs/cpu.html index 5e9bad1..334e669 100644 --- a/docs/cpu.html +++ b/docs/cpu.html @@ -545,6 +545,26 @@ si.cpuCurrentSpeed().then(data => console.log(data)); @@ -552,7 +572,16 @@ si.cpuCurrentSpeed().then(data => console.log(data));const si = require('systeminformation'); si.cpuTemperature().then(data => console.log(data));
    -{ main: 42, cores: [], max: 42 }
    +{
    +  main: 42,
    +  cores: [
    +    34, 35, 33, 32,
    +    37, 32, 35, 33
    +  ],
    +  max: 42,
    +  socket: [ 16.8, 27.8 ],
    +  chipset: 49
    +}
     
    diff --git a/docs/docker.html b/docs/docker.html index f46834c..fb7f11c 100644 --- a/docs/docker.html +++ b/docs/docker.html @@ -47,7 +47,7 @@
    Docker
    -

    In this section you will learn how to get information about docker containers, stats and processes inside a docker container:

    +

    In this section you will learn how to get information about docker, images, containers, container stats and processes inside a docker container:

    For function reference and examples we assume, that we imported systeminformation as follows:

    const si = require('systeminformation');

    Container, Stats, Processes

    @@ -536,6 +536,196 @@ X product license + + si.dockerImages(all, cb) + [{...}] + X + X + X + X + X + returns array of top level/all docker images + + + + [0].id + X + X + X + X + X + image ID + + + + [0].container + X + X + X + X + X + container ID + + + + [0].comment + X + X + X + X + X + comment + + + + [0].os + X + X + X + X + X + OS + + + + [0].architecture + X + X + X + X + X + architecture + + + + [0].parent + X + X + X + X + X + parent ID + + + + [0].dockerVersion + X + X + X + X + X + docker version + + + + [0].size + X + X + X + X + X + image size + + + + [0].sharedSize + X + X + X + X + X + shared size + + + + [0].virtualSize + X + X + X + X + X + virtual size + + + + [0].author + X + X + X + X + X + author + + + + [0].created + X + X + X + X + X + created date / time + + + + [0].containerConfig + X + X + X + X + X + container config object + + + + [0].graphDriver + X + X + X + X + X + graph driver object + + + + [0].repoDigests + X + X + X + X + X + repo digests array + + + + [0].repoTags + X + X + X + X + X + repo tags array + + + + [0].config + X + X + X + X + X + config object + + + + [0].rootFS + X + X + X + X + X + root fs object + si.dockerContainers(all, cb) [{...}] @@ -728,7 +918,7 @@ - id + [0].id X X X @@ -738,7 +928,7 @@ - memUsage + [0].memUsage X X X @@ -748,7 +938,7 @@ - memLimit + [0].memLimit X X X @@ -758,7 +948,7 @@ - memPercent + [0].memPercent X X X @@ -768,7 +958,7 @@ - cpuPercent + [0].cpuPercent X X X @@ -778,7 +968,7 @@ - pids + [0].pids X X X @@ -788,7 +978,7 @@ - netIO.rx + [0].netIO.rx X X X @@ -798,7 +988,7 @@ - netIO.wx + [0].netIO.wx X X X @@ -808,7 +998,7 @@ - blockIO.r + [0].blockIO.r X X X @@ -818,7 +1008,7 @@ - blockIO.w + [0].blockIO.w X X X @@ -828,7 +1018,7 @@ - restartCount + [0].restartCount X X X @@ -838,7 +1028,7 @@ - cpuStats + [0].cpuStats X X X @@ -848,7 +1038,7 @@ - precpuStats + [0].precpuStats X X X @@ -858,7 +1048,7 @@ - memoryStats + [0].memoryStats X X X @@ -868,7 +1058,7 @@ - networks + [0].networks X X X @@ -1026,6 +1216,87 @@ X command and arguments + + si.dockerVolumes(cb) + [{...}] + X + X + X + X + X + returns array of docker volumes + + + + + [0].name + X + X + X + X + X + volume name + + + + [0].driver + X + X + X + X + X + driver + + + + [0].labels + X + X + X + X + X + labels object + + + + [0].mountpoint + X + X + X + X + X + mountpoint + + + + [0].options + X + X + X + X + X + options + + + + [0].scope + X + X + X + X + X + scope + + + + [0].created + X + X + X + X + X + created at + si.dockerAll(cb) {...} diff --git a/docs/history.html b/docs/history.html index 84aafea..626b88c 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,199 +56,264 @@ + + 5.6.8 + 2021-03-23 + typescript definitions fix wifiInterfces, wifiConnections + + + 5.6.7 + 2021-03-16 + inetLatency() inetChecksite() schema avlidation + + + 5.6.6 + 2021-03-16 + code refactoring + + + 5.6.5 + 2021-03-15 + cpuTemperature() fix linux + + + 5.6.4 + 2021-03-15 + sanitizeShellString() and other security improvements + + + 5.6.3 + 2021-03-14 + sanitizeShellString() improvements + + + 5.6.2 + 2021-03-10 + networkInterfaces(), cpu() improvements (win) + + + 5.6.1 + 2021-03-03 + get() fixed issue boolean parameters + + + 5.6.0 + 2021-03-03 + cpuTemperature() added socket and chipset temp (linux) + + + 5.5.0 + 2021-02-25 + dockerVolumes() added + + + 5.4.0 + 2021-02-24 + dockerImages() added + + + 5.3.5 + 2021-02-23 + dockerContainerStats() fixed issue parameter * + + + 5.3.4 + 2021-02-20 + sanitizeShellString() optimized strict sanitation + 5.3.3 - 2020-02-15 + 2021-02-15 dockerContainerStats() fix correct ID splitting 5.3.2 - 2020-02-15 + 2021-02-15 inetLatency() inetChecksite() fix possible security issue (file://) 5.3.1 - 2020-02-14 + 2021-02-14 inetLatency() inetChecksite() services() processLoad() fix possible security issue 5.3.0 - 2020-02-12 + 2021-02-12 osInfo() added remoteSession (windows) 5.2.7 - 2020-02-12 + 2021-02-12 fsStats() and blockdevices() improvements (linux) 5.2.6 - 2020-02-12 + 2021-02-12 inetLatency() fix DOS vulnerability 5.2.5 - 2020-02-11 + 2021-02-11 processes() fix truncated params (linux) 5.2.4 - 2020-02-11 + 2021-02-11 currentLoad() fix issue 5.2.3 - 2020-02-11 + 2021-02-11 diskLayout() added USB drives (mac OS) 5.2.2 - 2020-02-11 + 2021-02-11 code cleanup, updated docs 5.2.1 - 2020-02-10 + 2021-02-10 system() fixed issue virtual detect (linux) 5.2.0 - 2020-02-10 + 2021-02-10 wifiInterfces() and wifiConnections() added 5.1.2 - 2020-02-08 + 2021-02-08 fixed node 4 compatibility issue 5.1.1 - 2020-02-08 + 2021-02-08 baseboard() added memMax, memSlots 5.1.0 - 2020-02-08 + 2021-02-08 memLayout() added ECC flag, bios() added language, features (linux) 5.0.11 - 2020-02-07 + 2021-02-07 fsSize() windows WSL fix 5.0.10 - 2020-02-06 + 2021-02-06 getDynamicData() windows WSL fix 5.0.9 - 2020-02-02 + 2021-02-02 fsSize() fixed parsing edge case issue mac OS 5.0.8 - 2020-01-30 + 2021-01-30 typescript typings fix cpuCurrentSpeed 5.0.7 - 2020-01-29 + 2021-01-29 fsSize() available fixed windows and typescript typings 5.0.6 - 2020-01-28 + 2021-01-28 osInfo() added hypervisor (win only) 5.0.5 - 2020-01-27 + 2021-01-27 networkInterfaces() type detection improved (win) 5.0.4 - 2020-01-27 + 2021-01-27 memoryLayout() improved manufacturer decoding (linux) 5.0.3 - 2020-01-27 + 2021-01-27 cpu() fix virtualization, wifi() fix raspberry 5.0.2 - 2020-01-26 + 2021-01-26 updated typescript typings 5.0.1 - 2020-01-26 + 2021-01-26 code cleanup 5.0.0 - 2020-01-26 + 2021-01-26 new major version 5 release 4.34.9 - 2020-01-25 + 2021-01-25 graphics() virtual controller vram value fix (win) 4.34.8 - 2020-01-25 + 2021-01-25 graphics() controller subDeviceId fix (win) 4.34.7 - 2020-01-13 + 2021-01-13 services() improved service discovery linux 4.34.6 - 2020-01-12 + 2021-01-12 networkInterfaces() catch errors 4.34.5 - 2020-01-07 + 2021-01-07 networkInterfaceDefault() fixed CMD popup (windows) 4.34.4 - 2020-01-06 + 2021-01-06 system() fixed vitrual catch error 4.34.3 - 2020-01-06 + 2021-01-06 graphics() issue non nvidia-smi controllers fixed (win) 4.34.2 - 2020-01-05 + 2021-01-05 system() uuid now lowercase - as in uuid() 4.34.1 - 2020-01-05 + 2021-01-05 graphics() nvidia-smi detection improved 4.34.0 - 2020-01-05 + 2021-01-05 system() added flag virtual 4.33.8 - 2020-01-04 + 2021-01-04 virtualBox() fix issue windows host 4.33.7 - 2020-01-04 + 2021-01-04 graphics() nvidia-smi detection improved diff --git a/docs/index.html b/docs/index.html index 5471d4f..d35e503 100644 --- a/docs/index.html +++ b/docs/index.html @@ -166,11 +166,11 @@
    - Security advisory:
    Update to v5.3.2
    + Security advisory:
    Update to v5.6.4
    systeminformation
     
    -
    New Version: 5.3.3
    +
    New Version: 5.6.8
    @@ -192,6 +192,8 @@ Total alerts MIT license
    +
    Security issues: Please have a look at our security advisories.
    +
    @@ -201,7 +203,7 @@
    -
    13,833
    +
    14,225
    Lines of code
    @@ -209,7 +211,7 @@
    Downloads last month
    -
    387
    +
    402
    Dependents
    @@ -345,7 +347,7 @@
    Issues
    -
    Security issues: Please have a look at our security advisories
    +
    Security issues: We highly recomment to have a look at our security advisories
    Having an issue: If you run into problems, please check out known issues page first.
    If you still have problems, please feel free to open an issue on our github page
    diff --git a/docs/issues.html b/docs/issues.html index 107206c..81eea92 100644 --- a/docs/issues.html +++ b/docs/issues.html @@ -65,6 +65,11 @@

    In some cases you need to install the linux sensors package to be able to measure temperature e.g. on DEBIAN based systems by running

    $ sudo apt-get install lm-sensors
    +

    Windows, macOS - CPU Speed

    + +

    node.js and wmic are not able to determine correct CPU current speed on windows and macOS. + This means, you will have constant values here on both platforms for all processor cores in cpuCurrentSpeed().

    +

    Linux S.M.A.R.T. Status

    To be able to detect S.M.A.R.T. status on Linux you need to install smartmontools. On DEBIAN based linux distributions you can install it by running:

    diff --git a/docs/security.html b/docs/security.html index 0f23f85..96877e2 100644 --- a/docs/security.html +++ b/docs/security.html @@ -43,6 +43,28 @@
    Security Advisories
    +

    Passing User Paramters to Systeminformation

    +

    For most of the applications that are using systeminformation, there is no reason to worry. But be aware! If you are using inetLatency(), inetChecksite(), services(), processLoad() with arbitrary untrusted user input, you should pay extra attention! We are doing a lot of input sanitation for those functions inside this package but we cannot handle all cases!

    +

    This can lead to serious impact on your servers!

    +

    We highly recommend to always upgrade to the latest version of our package. We maintain security updates for version 5 AND also version 4. For version 4 you can install latest version by placing "systeminformation": "^4" in your package.json (dependencies) and run npm install

    + +

    Command Injection Vulnerability

    +

    Affected versions: + < 5.6.4 and < 4.34.17
    + Date: 2021-03-15
    + CVE indentifier - +

    + +

    Impact

    +

    We had an issue that there was a possibility to perform a potential command injection possibility by passing a manipulated string prototype as a parameter to the following functions. Affected commands: inetLatency(), inetChecksite(), services(), processLoad().

    + +

    Patch

    +

    Problem was fixed with additional parameter checking. Please upgrade to version >= 5.6.4 (or >= 4.34.17 if you are using version 4).

    + +

    Workarround

    +

    If you cannot upgrade, be sure to check or sanitize parameter strings that are passed to inetLatency(), inetChecksite(), services(), processLoad() (string only)

    +
    +

    Insufficient File Scheme Validation

    Affected versions: < 5.3.2 and < 4.34.12
    @@ -64,7 +86,7 @@

    Affected versions: < 5.3.1 and < 4.34.11
    Date: 2021-02-14
    - CVE indentifier - + CVE indentifier CVE-2021-21315

    Impact

    diff --git a/docs/styles.css b/docs/styles.css index af748b0..cf001bb 100644 --- a/docs/styles.css +++ b/docs/styles.css @@ -1,11 +1,11 @@ body { - font-family: 'Roboto', 'HelveticaNeue-Light','Helvetica Neue Light','Helvetica Neue',Helvetica,Arial,sans-serif; + font-family: "Roboto", "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 300; min-height: 100%; } h1, h2, h3, h4 { - font-family: 'Roboto', 'HelveticaNeue-Light','Helvetica Neue Light','Helvetica Neue',Helvetica,Arial,sans-serif; + font-family: "Roboto", "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, sans-serif; font-weight: 500; color: #3d5cb3; } @@ -18,6 +18,16 @@ h1, h2, h3, h4 { font-weight: 500; } +.warning { + font-weight: 500; + color: #9c0101; +} + +.larger { + margin-top: 10px; + font-size: 1.5rem !important; +} + .medium { font-weight: 500; } @@ -40,45 +50,24 @@ h1, h2, h3, h4 { height: 100vh; height: calc(var(--vh, 1vh) * 100); opacity: 0.95; - display: -webkit-box; - display: -ms-flexbox; display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; + justify-content: center; text-align: center; width: 100% !important; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; + flex-direction: column; } - .bg-image-full .top-container { text-align: center; - -ms-flex-item-align: center; - align-self: center; - display: -webkit-box; - display: -ms-flexbox; + align-self: center; display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; + justify-content: center; + flex-direction: column; + align-items: center; + flex-grow: 1; overflow: hidden; position: relative; width: 100% !important; } - .bg-image-full .recommendation { position: absolute; top: 30px; @@ -88,20 +77,17 @@ h1, h2, h3, h4 { display: inline-block; width: 280px; text-align: center; - padding: .25em 0; + padding: 0.25em 0; color: white; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); + transform: rotate(45deg); background: #971d1d; font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .bg-image-full .recommendation { - font-size: 1.0rem; + font-size: 1rem; } } - @media only screen and (min-width: 767px) { .bg-image-full .recommendation { font-size: 1.1rem; @@ -110,7 +96,6 @@ h1, h2, h3, h4 { width: 330px; } } - @media only screen and (min-width: 1024px) { .bg-image-full .recommendation { width: 330px; @@ -120,11 +105,9 @@ h1, h2, h3, h4 { font-size: 1.2rem; } } - .bg-image-full .recommendation:hover { text-decoration: none; } - .bg-image-full .title { color: #fff; padding-top: 10px; @@ -132,197 +115,164 @@ h1, h2, h3, h4 { margin-bottom: 10px; font-weight: 500; } - @media only screen and (min-width: 374px) { .bg-image-full .title { font-size: 2.1rem; } } - @media only screen and (min-width: 420px) { .bg-image-full .title { font-size: 2.4rem; } } - @media only screen and (min-width: 767px) { .bg-image-full .title { font-size: 3.5rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .title { font-size: 4rem; } } - @media only screen and (min-width: 1200px) { .bg-image-full .title { font-size: 5rem; } } - @media only screen and (min-width: 1900px) { .bg-image-full .title { font-size: 6rem; } } - .bg-image-full .logo { width: 100px; } - @media only screen and (min-width: 420px) { .bg-image-full .logo { width: 120px; } } - @media only screen and (min-width: 767px) { .bg-image-full .logo { width: 160px; } } - @media only screen and (min-width: 1024px) { .bg-image-full .logo { width: 200px; } } - @media only screen and (min-width: 1900px) { .bg-image-full .logo { width: 250px; } } - .bg-image-full .subtitle { text-align: center; color: #bbb; font-size: 0.78rem; } - @media only screen and (min-width: 375px) { .bg-image-full .subtitle { font-size: 0.9rem; } } - @media only screen and (min-width: 420px) { .bg-image-full .subtitle { font-size: 1rem; } } - @media only screen and (min-width: 767px) { .bg-image-full .subtitle { font-size: 1.1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .subtitle { font-size: 1.3rem; } } - @media only screen and (min-width: 1200px) { .bg-image-full .subtitle { font-size: 1.4rem; } } - @media only screen and (min-width: 1900px) { .bg-image-full .subtitle { font-size: 1.6rem; } } - .bg-image-full .text > a { text-align: center; color: #fff; font-size: 0.9rem; } - .bg-image-full .text > a:hover { color: #aaa; text-decoration: none; } - @media only screen and (min-width: 375px) { .bg-image-full .text > a { font-size: 0.9rem; } } - @media only screen and (min-width: 420px) { .bg-image-full .text > a { font-size: 1rem; } } - @media only screen and (min-width: 767px) { .bg-image-full .text > a { font-size: 1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .text > a { font-size: 1.1rem; } } - @media only screen and (min-width: 1200px) { .bg-image-full .text > a { font-size: 1.2rem; } } - @media only screen and (min-width: 1900px) { .bg-image-full .text > a { font-size: 1.5rem; } } - .bg-image-full .version { text-align: center; margin-bottom: 10px; color: #fff; - font-size: .9rem; + font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .bg-image-full .version { - font-size: .9rem; + font-size: 0.9rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .version { font-size: 1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .version { font-size: 1.1rem; } } - @media only screen and (min-width: 1200px) { .bg-image-full .version { font-size: 1.2rem; } } - @media only screen and (min-width: 1900px) { .bg-image-full .version { font-size: 1.5rem; } } - .bg-image-full .down { text-align: center; color: #fff; @@ -331,7 +281,6 @@ h1, h2, h3, h4 { margin-bottom: 15px; cursor: pointer; } - .bg-image-full .down .caret { font-size: 3rem; } @@ -347,12 +296,10 @@ h1, h2, h3, h4 { height: 65px; position: relative; } - .nav .logo { width: 60px; margin-top: 12px; } - .nav .title { display: none; color: #fff; @@ -361,55 +308,45 @@ h1, h2, h3, h4 { margin-top: 15px; font-weight: 500; } - @media only screen and (min-width: 767px) { .nav .title { display: inline-block; } } - @media only screen and (min-width: 1024px) { .nav .title { font-size: 1.5rem; } } - .nav .text { margin-top: 18px; } - .nav .text a { color: #fff; margin-top: 12px; - font-size: 1.0rem; + font-size: 1rem; } - @media only screen and (min-width: 1023px) { .nav .text a { margin-top: 10px; font-size: 1.2rem; } } - .nav .text a:hover { color: #aaa; text-decoration: none; } - .nav .github { display: none; } - @media only screen and (min-width: 768px) { .nav .github { display: inline-block; } } - .nav .todocs { display: inline-block; } - @media only screen and (min-width: 768px) { .nav .todocs { display: none; @@ -420,51 +357,42 @@ h1, h2, h3, h4 { text-align: center; color: #333; } - .features .inner { padding: 10px 0px; } - @media only screen and (min-width: 768px) { .features .inner { padding: 15px 20px; } } - .features .inner .icons { display: block; font-size: 3rem; line-height: 1.3; color: #bbb; } - @media only screen and (min-width: 420px) { .features .inner .icons { font-size: 3.5rem; } } - @media only screen and (min-width: 768px) { .features .inner .icons { font-size: 4rem; } } - @media only screen and (min-width: 1024px) { .features .inner .icons { font-size: 5rem; } } - .features .inner .icontitle { font-size: 1.2rem; } - .features .inner:hover { background: #f4f4f4; color: #567adf; } - .features .inner:hover .icons { color: #567adf; } @@ -476,13 +404,11 @@ h1, h2, h3, h4 { font-weight: 500; color: #3d5cb3; } - @media only screen and (min-width: 420px) { .sectionheader .title { font-size: 2.3rem; } } - @media only screen and (min-width: 768px) { .sectionheader .title { text-align: left; @@ -490,27 +416,23 @@ h1, h2, h3, h4 { font-size: 2.6rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .title { padding-top: 40px; font-size: 3rem; } } - .sectionheader .title-small { text-align: center; font-size: 1.4rem; font-weight: 500; color: #3d5cb3; } - @media only screen and (min-width: 420px) { .sectionheader .title-small { font-size: 1.6rem; } } - @media only screen and (min-width: 768px) { .sectionheader .title-small { text-align: left; @@ -518,53 +440,44 @@ h1, h2, h3, h4 { font-size: 1.8rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .title-small { padding-top: 30px; font-size: 2rem; } } - .sectionheader .subtitle { text-align: center; - font-size: .9rem; + font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .sectionheader .subtitle { font-size: 1rem; } } - @media only screen and (min-width: 768px) { .sectionheader .subtitle { text-align: left; font-size: 1.1rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .subtitle { font-size: 1.3rem; } } - .sectionheader .npmicons { text-align: center; } - .sectionheader .text { text-align: center; padding-top: 10px; } - @media only screen and (min-width: 768px) { .sectionheader .text { text-align: left; } } - .sectionheader hr { margin-top: 40px; margin-bottom: 0px; @@ -574,19 +487,15 @@ h1, h2, h3, h4 { .index { margin: 0 0 10px 0; } - .index .text, .index .subtitle, .index .title, .index .title-small, .index .npmicons { text-align: center; } - .index .larger { font-size: 1.2rem; } - .index a { text-decoration: none; } - .index a:hover { text-decoration: none; color: #567adf; @@ -608,34 +517,28 @@ ul { margin-top: 40px; text-align: center; } - .number-section .numbers { font-size: 2rem; } - @media only screen and (min-width: 420px) { .number-section .numbers { font-size: 2.4rem; } } - @media only screen and (min-width: 768px) { .number-section .numbers { font-size: 2.8rem; } } - .number-section .title { color: #999; font-size: 1rem; } - @media only screen and (min-width: 420px) { .number-section .title { font-size: 1.1rem; } } - @media only screen and (min-width: 768px) { .number-section .title { font-size: 1.2rem; @@ -645,60 +548,49 @@ ul { .menu { display: none; } - @media only screen and (min-width: 768px) { .menu { margin-top: 30px; display: inline-block; } } - .menu .title { margin: 25px 0 5px 0; color: #000; } - .menu .title a { width: 100%; color: #000; text-decoration: none; } - .menu .title a:hover { color: #567adf; } - .menu .title .navtitle { font-size: 1.3rem; margin-bottom: 5px; display: inline-block; color: #3d5cb3; } - .menu hr { margin: 5px 0; } - .menu ul { list-style-type: none; margin: 0; padding: 0; } - .menu ul li { padding: 2px 0 1px 0; } - .menu ul li a { width: 100%; color: #666; text-decoration: none; } - .menu ul li a:hover { color: #567adf; } - .menu ul li.active > a { color: #567adf; font-weight: 500; @@ -734,20 +626,16 @@ pre { .example td:first-child { background-color: #fff !important; } - .example td:last-child { background-color: #f8faff !important; } - .example h5 { padding-top: 5px; padding-left: 10px; } - .example pre { background-color: unset; } - .example pre .js { background-color: #f0f0f4; } @@ -759,22 +647,17 @@ footer { padding-bottom: 30px; position: relative; } - footer .home { color: #3d5cb3; font-size: 1.1rem; } - footer a { color: #000; } - footer a:hover { text-decoration: none; } - footer .badge { color: #fff; font-size: 0.9rem; -} -/*# sourceMappingURL=styles.css.map */ \ No newline at end of file +}/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/docs/styles.css.map b/docs/styles.css.map index 0c62735..e9e1349 100644 --- a/docs/styles.css.map +++ b/docs/styles.css.map @@ -1,9 +1 @@ -{ - "version": 3, - "mappings": "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", - "sources": [ - "styles.scss" - ], - "names": [], - "file": "styles.css" -} \ No newline at end of file +{"version":3,"sources":["styles.scss"],"names":[],"mappings":"AAAA;EACI,oHAAA;EACA,gBAAA;EACA,gBAAA;AACJ;;AACA;EACI,oHAAA;EACA,gBAAA;EACA,cAAA;AAEJ;;AAAA;EACI,kBAAA;AAGJ;;AADA;EACI,gBAAA;AAIJ;;AAFA;EACI,gBAAA;EACA,cAAA;AAKJ;;AAHA;EACE,gBAAA;EACA,4BAAA;AAMF;;AAJA;EACI,gBAAA;AAOJ;;AALA;EACE,cAAA;AAQF;;AALA;EAEI,yBAAA;EAA2B,+CAAA;EAC3B,2DAAA;EAA6D,mCAAA;EAE7D,2BAAA;EACA,4BAAA;EACA,sBAAA;EACA,uCAAA;EAIA,sBAAA;EACA,yBAAA;EACA,aAAA;EACA,kCAAA;EACA,aAAA;EACA,aAAA;EACA,uBAAA;EACA,kBAAA;EACA,sBAAA;EAEA,sBAAA;AAMJ;AALI;EACE,kBAAA;EACA,kBAAA;EACA,aAAA;EACA,uBAAA;EACA,sBAAA;EACA,mBAAA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,sBAAA;AAON;AALI;EACE,kBAAA;EACA,SAAA;EACA,UAAA;EACA,mBAAA;EACA,WAAA;EACA,qBAAA;EACA,YAAA;EACA,kBAAA;EACA,iBAAA;EACA,YAAA;EACA,wBAAA;EACA,mBAAA;EACA,iBAAA;AAON;AANM;EAdF;IAeI,eAAA;EASN;AACF;AARM;EAjBF;IAkBI,iBAAA;IACA,SAAA;IACA,mBAAA;IACA,YAAA;EAWN;AACF;AAVM;EAvBF;IAwBI,YAAA;IACA,SAAA;IACA,UAAA;IACA,mBAAA;IACA,iBAAA;EAaN;AACF;AAZM;EACE,qBAAA;AAcR;AAXI;EACI,WAAA;EACA,iBAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;AAaR;AAZQ;EANJ;IAOQ,iBAAA;EAeV;AACF;AAdQ;EATJ;IAUQ,iBAAA;EAiBV;AACF;AAhBQ;EAZJ;IAaQ,iBAAA;EAmBV;AACF;AAlBQ;EAfJ;IAgBQ,eAAA;EAqBV;AACF;AApBQ;EAlBJ;IAmBQ,eAAA;EAuBV;AACF;AAtBQ;EArBJ;IAsBQ,eAAA;EAyBV;AACF;AAvBI;EACI,YAAA;AAyBR;AAxBQ;EAFJ;IAGQ,YAAA;EA2BV;AACF;AA1BQ;EALJ;IAMQ,YAAA;EA6BV;AACF;AA5BQ;EARJ;IASQ,YAAA;EA+BV;AACF;AA9BQ;EAXJ;IAYQ,YAAA;EAiCV;AACF;AA/BI;EACI,kBAAA;EACA,WAAA;EACA,kBAAA;AAiCR;AAhCQ;EAJJ;IAKQ,iBAAA;EAmCV;AACF;AAlCQ;EAPJ;IAQQ,eAAA;EAqCV;AACF;AApCQ;EAVJ;IAWQ,iBAAA;EAuCV;AACF;AAtCQ;EAbJ;IAcQ,iBAAA;EAyCV;AACF;AAxCQ;EAhBJ;IAiBQ,iBAAA;EA2CV;AACF;AA1CQ;EAnBJ;IAoBQ,iBAAA;EA6CV;AACF;AA3CI;EACI,kBAAA;EACA,WAAA;EACA,iBAAA;AA6CR;AA5CQ;EACI,WAAA;EACA,qBAAA;AA8CZ;AA5CQ;EARJ;IASQ,iBAAA;EA+CV;AACF;AA9CQ;EAXJ;IAYQ,eAAA;EAiDV;AACF;AAhDQ;EAdJ;IAeQ,eAAA;EAmDV;AACF;AAlDQ;EAjBJ;IAkBQ,iBAAA;EAqDV;AACF;AApDQ;EApBJ;IAqBQ,iBAAA;EAuDV;AACF;AAtDQ;EAvBJ;IAwBQ,iBAAA;EAyDV;AACF;AAvDI;EACI,kBAAA;EACA,mBAAA;EACA,WAAA;EACA,iBAAA;AAyDR;AAxDQ;EALJ;IAMQ,iBAAA;EA2DV;AACF;AA1DQ;EARJ;IASQ,eAAA;EA6DV;AACF;AA5DQ;EAXJ;IAYQ,iBAAA;EA+DV;AACF;AA9DQ;EAdJ;IAeQ,iBAAA;EAiEV;AACF;AAhEQ;EAjBJ;IAkBQ,iBAAA;EAmEV;AACF;AAjEI;EACE,kBAAA;EACA,WAAA;EACA,iBAAA;EACA,cAAA;EACA,mBAAA;EACA,eAAA;AAmEN;AAlEM;EACE,eAAA;AAoER;;AAxDA;EACI,0CAAA;EACA,yBAAA;EAA2B,+CAAA;EAC3B,2DAAA;EAA6D,mCAAA;EAG7D,sBAAA;EACA,yBAAA;EACA,YAAA;EACA,kBAAA;AA6DJ;AA5DI;EACI,WAAA;EACA,gBAAA;AA8DR;AA5DI;EACI,aAAA;EACA,WAAA;EACA,iBAAA;EACA,iBAAA;EACA,gBAAA;EACA,gBAAA;AA8DR;AA7DQ;EAPJ;IAQQ,qBAAA;EAgEV;AACF;AA/DQ;EAVJ;IAWQ,iBAAA;EAkEV;AACF;AA/DI;EACI,gBAAA;AAiER;AA/DQ;EACI,WAAA;EACA,gBAAA;EACA,eAAA;AAiEZ;AAhEY;EAJJ;IAKQ,gBAAA;IACA,iBAAA;EAmEd;AACF;AAlEY;EACI,WAAA;EACA,qBAAA;AAoEhB;AAhEI;EACE,aAAA;AAkEN;AAjEM;EAFF;IAGI,qBAAA;EAoEN;AACF;AAlEI;EACE,qBAAA;AAoEN;AAnEM;EAFF;IAGI,aAAA;EAsEN;AACF;;AAnEA;EACI,kBAAA;EACA,WAAA;AAsEJ;AArEI;EACE,iBAAA;AAuEN;AAtEM;EAFF;IAGI,kBAAA;EAyEN;AACF;AAxEM;EACI,cAAA;EACA,eAAA;EACA,gBAAA;EACA,WAAA;AA0EV;AAzEU;EALJ;IAMQ,iBAAA;EA4EZ;AACF;AA3EU;EARJ;IASQ,eAAA;EA8EZ;AACF;AA7EU;EAXJ;IAYQ,eAAA;EAgFZ;AACF;AA9EM;EACI,iBAAA;AAgFV;AA7EM;EACI,mBAAA;EACA,cAAA;AA+EV;AA9EU;EACE,cAAA;AAgFZ;;AA1EI;EACI,kBAAA;EACA,iBAAA;EACA,eAAA;EACA,gBAAA;EACA,cAAA;AA6ER;AA5EQ;EANJ;IAOQ,iBAAA;EA+EV;AACF;AA9EQ;EATJ;IAUQ,gBAAA;IACA,iBAAA;IACA,iBAAA;EAiFV;AACF;AAhFQ;EAdJ;IAeQ,iBAAA;IACA,eAAA;EAmFV;AACF;AAjFI;EACI,kBAAA;EACA,iBAAA;EACA,gBAAA;EACA,cAAA;AAmFR;AAlFQ;EALJ;IAMQ,iBAAA;EAqFV;AACF;AApFQ;EARJ;IASQ,gBAAA;IACA,iBAAA;IACA,iBAAA;EAuFV;AACF;AAtFQ;EAbJ;IAcQ,iBAAA;IACA,eAAA;EAyFV;AACF;AAvFI;EACI,kBAAA;EACA,iBAAA;AAyFR;AAxFQ;EAHJ;IAIQ,eAAA;EA2FV;AACF;AA1FQ;EANJ;IAOQ,gBAAA;IACA,iBAAA;EA6FV;AACF;AA5FQ;EAVJ;IAWQ,iBAAA;EA+FV;AACF;AA7FI;EACI,kBAAA;AA+FR;AA7FI;EACI,kBAAA;EACA,iBAAA;AA+FR;AA9FQ;EAHJ;IAIQ,gBAAA;EAiGV;AACF;AA/FI;EACI,gBAAA;EACA,kBAAA;EACA,sBAAA;AAiGR;;AA9FA;EACE,kBAAA;AAiGF;AAhGE;EACI,kBAAA;AAkGN;AAhGE;EACE,iBAAA;AAkGJ;AA/FE;EACI,qBAAA;AAiGN;AAhGM;EACI,qBAAA;EACA,cAAA;AAkGV;;AA7FI;EACI,gBAAA;AAgGR;;AA7FA;EACI,gBAAA;AAgGJ;;AA9FA;EACI,gBAAA;AAiGJ;;AA/FA;EACI,gBAAA;EACA,kBAAA;AAkGJ;AAjGI;EACI,eAAA;AAmGR;AAlGQ;EAFJ;IAGQ,iBAAA;EAqGV;AACF;AApGQ;EALJ;IAMQ,iBAAA;EAuGV;AACF;AArGI;EACI,WAAA;EACA,eAAA;AAuGR;AAtGQ;EAHJ;IAIQ,iBAAA;EAyGV;AACF;AAxGQ;EANJ;IAOQ,iBAAA;EA2GV;AACF;;AAxGA;EACI,aAAA;AA2GJ;AA1GI;EAFJ;IAGQ,gBAAA;IACA,qBAAA;EA6GN;AACF;AA5GI;EACI,oBAAA;EACA,WAAA;AA8GR;AA7GQ;EACE,WAAA;EACA,WAAA;EACA,qBAAA;AA+GV;AA9GU;EACI,cAAA;AAgHd;AA7GQ;EACE,iBAAA;EACA,kBAAA;EACA,qBAAA;EACA,cAAA;AA+GV;AA5GI;EACI,aAAA;AA8GR;AA5GI;EACI,qBAAA;EACA,SAAA;EACA,UAAA;AA8GR;AA7GQ;EACI,oBAAA;AA+GZ;AA9GY;EACI,WAAA;EACA,WAAA;EACA,qBAAA;AAgHhB;AA/GgB;EACI,cAAA;AAiHpB;AA9GY;EACI,cAAA;EACA,gBAAA;AAgHhB;;AA3GA;EACI,mEAAA;EACA,mCAAA;EACA,eAAA;EACA,kBAAA;EACA,oBAAA;EACA,gBAAA;EACA,qBAAA;EACA,sBAAA;EACA,SAAA;EACA,cAAA;AA8GJ;;AA5GA;EACI,0BAAA;EACA,mEAAA;EACA,mCAAA;EACA,eAAA;EACA,kBAAA;EACA,oBAAA;EACA,gBAAA;EACA,iBAAA;EACA,sBAAA;EACA,WAAA;EACA,gBAAA;AA+GJ;;AA5GI;EACE,iCAAA;AA+GN;AA7GI;EACE,oCAAA;AA+GN;AA7GI;EACE,gBAAA;EACA,kBAAA;AA+GN;AA7GI;EACE,uBAAA;AA+GN;AA9GM;EACE,yBAAA;AAgHR;;AA3GA;EACI,sBAAA;EACA,gBAAA;EACA,iBAAA;EACA,oBAAA;EACA,kBAAA;AA8GJ;AA7GI;EACE,cAAA;EACA,iBAAA;AA+GN;AA7GI;EACI,WAAA;AA+GR;AA9GQ;EACE,qBAAA;AAgHV;AA7GI;EACE,WAAA;EACA,iBAAA;AA+GN","file":"styles.css"} \ No newline at end of file diff --git a/docs/styles.scss b/docs/styles.scss index 9d6b97e..8441407 100644 --- a/docs/styles.scss +++ b/docs/styles.scss @@ -14,6 +14,14 @@ h1, h2, h3, h4 { .bold { font-weight: 500; } +.warning { + font-weight: 500; + color: rgb(156, 1, 1); +} +.larger { + margin-top: 10px; + font-size: 1.5rem !important; +} .medium { font-weight: 500; } diff --git a/docs/tests.html b/docs/tests.html index 117f10d..7851ad7 100644 --- a/docs/tests.html +++ b/docs/tests.html @@ -62,20 +62,21 @@
    SYSTEMINFORMATION - Test Scripts - Version: 5.x.y
     ═══════════════════════════════════════════════════════════
     
    -┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
    -│  a ... Audio              h ... Bluetooth          s ... Services           Y ... Battery                  ? ... Get Object      │
    -│  b ... BIOS               i ... INET Latency       S ... Shell              z ... Users                    , ... All Static      │
    -│  B ... Baseboard          I ... INET Check Site    t ... time               1 ... NET Iface Default        . ... All Dynamic     │
    -│  C ... Chassis            j ... CPU Current Speed  T ... CPU Temperature    2 ... NET Gateway Default      / ... All             │
    -│  c ... CPU                l ... CPU Current Load   u ... USB                3 ... NET Interfaces                                 │
    -│  d ... DiskLayout         L ... Full Load          U ... UUID               4 ... NET Stats                                      │
    -│  D ... DiskIO             m ... Memory             v ... Versions           5 ... NET Connections                                │
    -│  e ... Block Devices      M ... MEM Layout         V ... Virtual Box        6 ... Docker Info                                    │
    -│  E ... Open Files         o ... OS Info            w ... WIFI networks      7 ... Docker Container                               │
    -│  f ... FS Size            p ... Processes          W ... WIFI interfaces    8 ... Docker Cont Stats                              │
    -│  F ... FS Stats           P ... Process Load       x ... WIFI connections   9 ... Docker Cont Proc                               │
    -│  g ... Graphics           r ... Printer            y ... System             0 ... Docker All               q >>> QUIT            │
    -└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
    +┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ +│ a ... Audio i ... INET Latency t ... time 1 ... NET Iface Default ? ... Get Object │ +│ b ... BIOS I ... INET Check Site T ... CPU Temperature 2 ... NET Gateway Default , ... All Static │ +│ B ... Baseboard j ... CPU Current Speed u ... USB 3 ... NET Interfaces . ... All Dynamic │ +│ C ... Chassis l ... CPU Current Load U ... UUID 4 ... NET Stats / ... All │ +│ c ... CPU L ... Full Load v ... Versions 5 ... NET Connections │ +│ d ... DiskLayout m ... Memory V ... Virtual Box │ +│ D ... DiskIO M ... MEM Layout w ... WIFI networks │ +│ e ... Block Devices o ... OS Info W ... WIFI interfaces │ +│ E ... Open Files p ... Processes x ... WIFI connections 6 ... Docker Info │ +│ f ... FS Size P ... Process Load y ... System 7 ... Docker Images │ +│ F ... FS Stats r ... Printer Y ... Battery 8 ... Docker Container │ +│ g ... Graphics s ... Services z ... Users 9 ... Docker Cont Stats │ +│ h ... Bluetooth S ... Shell 0 ... Docker Cont Proc q >>> QUIT │ +└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

    Press q to exit the test suite

    Here a sample output for the e.g. c ... CPU

    ┌────────────────────────────────────────────────┐
    diff --git a/docs/v4/docker.html b/docs/v4/docker.html
    index 30e41d9..be2bb75 100644
    --- a/docs/v4/docker.html
    +++ b/docs/v4/docker.html
    @@ -727,7 +727,7 @@
                       
                       
                         
    -                    id
    +                    [0].id
                         X
                         X
                         X
    @@ -737,7 +737,7 @@
                       
                       
                         
    -                    mem_usage
    +                    [0].mem_usage
                         X
                         X
                         X
    @@ -747,7 +747,7 @@
                       
                       
                         
    -                    mem_limit
    +                    [0].mem_limit
                         X
                         X
                         X
    @@ -757,7 +757,7 @@
                       
                       
                         
    -                    mem_percent
    +                    [0].mem_percent
                         X
                         X
                         X
    @@ -767,7 +767,7 @@
                       
                       
                         
    -                    cpu_percent
    +                    [0].cpu_percent
                         X
                         X
                         X
    @@ -777,7 +777,7 @@
                       
                       
                         
    -                    pids
    +                    [0].pids
                         X
                         X
                         X
    @@ -787,7 +787,7 @@
                       
                       
                         
    -                    netIO.rx
    +                    [0].netIO.rx
                         X
                         X
                         X
    @@ -797,7 +797,7 @@
                       
                       
                         
    -                    netIO.wx
    +                    [0].netIO.wx
                         X
                         X
                         X
    @@ -807,7 +807,7 @@
                       
                       
                         
    -                    blockIO.r
    +                    [0].blockIO.r
                         X
                         X
                         X
    @@ -817,7 +817,7 @@
                       
                       
                         
    -                    blockIO.w
    +                    [0].blockIO.w
                         X
                         X
                         X
    @@ -827,7 +827,7 @@
                       
                       
                         
    -                    restartCount
    +                    [0].restartCount
                         X
                         X
                         X
    @@ -837,7 +837,7 @@
                       
                       
                         
    -                    cpu_stats
    +                    [0].cpu_stats
                         X
                         X
                         X
    @@ -847,7 +847,7 @@
                       
                       
                         
    -                    percpu_stats
    +                    [0].percpu_stats
                         X
                         X
                         X
    @@ -857,7 +857,7 @@
                       
                       
                         
    -                    memory_stats
    +                    [0].memory_stats
                         X
                         X
                         X
    @@ -867,7 +867,7 @@
                       
                       
                         
    -                    networks
    +                    [0].networks
                         X
                         X
                         X
    diff --git a/docs/v4/history.html b/docs/v4/history.html
    index a933e98..2aedaf7 100644
    --- a/docs/v4/history.html
    +++ b/docs/v4/history.html
    @@ -83,6 +83,41 @@
                       
                     
                     
    +                  
    +                    4.34.19
    +                    2021-03-16
    +                    inetLatency() inetChecksite() schema avlidation
    +                  
    +                  
    +                    4.34.18
    +                    2021-03-16
    +                    code refactoring
    +                  
    +                  
    +                    4.34.17
    +                    2021-03-14
    +                    sanitizeShellString() and other security improvements
    +                  
    +                  
    +                    4.34.16
    +                    2021-03-14
    +                    sanitizeShellString() improvements
    +                  
    +                  
    +                    4.34.15
    +                    2020-02-23
    +                    dockerContainerStats() fixed issue parameter *
    +                  
    +                  
    +                    4.34.14
    +                    2020-02-20
    +                    sanitizeShellString() optimized strict sanitation
    +                  
    +                  
    +                    4.34.13
    +                    2020-02-15
    +                    dockerContainerStats() fix correct ID splitting
    +                  
                       
                         4.34.12
                         2020-02-15
    diff --git a/docs/v4/index.html b/docs/v4/index.html
    index 6423484..770659a 100644
    --- a/docs/v4/index.html
    +++ b/docs/v4/index.html
    @@ -165,12 +165,12 @@
     
       
    - Security advisory:
    Update to v4.34.11
    + Security advisory:
    Update to v4.34.17
    systeminformation
     
    Version 4 documentation
    -
    Current Version: 4.34.12
    +
    Current Version: 4.34.19
    @@ -192,6 +192,8 @@ Total alerts MIT license
    +
    Version 4 maintenance: We are still maintaining version 4 and providing especially fixes to security issues and other important fixes. New functionality is only added to the new version 5, so please consider upgrading to version 5 soon. Version 5 is NOT fully backward compatible to version 4! Be aware, there are some breaking changes. Please refer to the Version 5 - Changes page to see a full documentation of all changes you should have a look on.
    +
    Version 5 documentation can be found here.
    @@ -318,11 +320,8 @@
    Issues
    -
    Security issues: Please have a look at our security advisories
    +
    Security issues: Please have a look at our security advisories
    If you run into problems, please check out known issues page first. If you still have problems, please feel free to open an issue on our github page
    -
    Upcoming ...
    -
    MacOS on ARM - new hardware already arrived and we made quite a few changes to support Apple silicon M1 chips. Current status is documented here.
    -
    Verion 5: We are planning a new major version with some minor breaking changes and some additional features. We will try to make this available Q1 of 2021.

    diff --git a/docs/v4/issues.html b/docs/v4/issues.html index 743822f..eee05d0 100644 --- a/docs/v4/issues.html +++ b/docs/v4/issues.html @@ -64,6 +64,11 @@

    In some cases you need to install the linux sensors package to be able to measure temperature e.g. on DEBIAN based systems by running

    $ sudo apt-get install lm-sensors
    +

    Windows, macOS - CPU Speed

    + +

    node.js and wmic are not able to determine correct CPU current speed on windows and macOS. + This means, you will have constant values here on both platforms for all processor cores in cpuCurrentSpeed().

    +

    Linux S.M.A.R.T. Status

    To be able to detect S.M.A.R.T. status on Linux you need to install smartmontools. On DEBIAN based linux distributions you can install it by running:

    diff --git a/docs/v4/security.html b/docs/v4/security.html index 78d966d..343d435 100644 --- a/docs/v4/security.html +++ b/docs/v4/security.html @@ -42,6 +42,28 @@
    Security Advisories
    +

    Passing User Paramters to Systeminformation

    +

    For most of the applications that are using systeminformation, there is no reason to worry. But be aware! If you are using inetLatency(), inetChecksite(), services(), processLoad() with arbitrary untrusted user input, you should pay extra attention! We are doing a lot of input sanitation for those functions inside this package but we cannot handle all cases!

    +

    This can lead to serious impact on your servers!

    +

    We highly recommend to always upgrade to the latest version of our package. We maintain security updates for version 5 AND also version 4. For version 4 you can install latest version by placing "systeminformation": "^4" in your package.json (dependencies) and run npm install

    + +

    Command Injection Vulnerability

    +

    Affected versions: + < 4.34.17
    + Date: 2021-03-15
    + CVE indentifier - +

    + +

    Impact

    +

    We had an issue that there was a possibility to perform a potential command injection possibility by passing a manipulated string prototype as a parameter to the following functions. Affected commands: inetLatency(), inetChecksite(), services(), processLoad().

    + +

    Patch

    +

    Problem was fixed with additional parameter checking. Please upgrade to version >= 4.34.17 if you are using version 4.

    + +

    Workarround

    +

    If you cannot upgrade, be sure to check or sanitize parameter strings that are passed to inetLatency(), inetChecksite(), services(), processLoad() (string only)

    +
    +

    Insufficient File Scheme Validation

    Affected versions: 4.34.12
    @@ -63,7 +85,7 @@

    Affected versions: < 4.34.11
    Date: 2021-02-14
    - CVE indentifier - + CVE indentifier CVE-2021-21315

    Impact

    diff --git a/docs/v4/styles.css b/docs/v4/styles.css index 624a5b5..40c2066 100644 --- a/docs/v4/styles.css +++ b/docs/v4/styles.css @@ -17,6 +17,11 @@ h1, h2, h3, h4 { font-weight: 700; } +.warning { + font-weight: 500; + color: #9c0101; +} + .bg-image-full { background: no-repeat center center scroll; background-color: #4b2313; @@ -28,41 +33,20 @@ h1, h2, h3, h4 { height: 100vh; height: calc(var(--vh, 1vh) * 100); opacity: 0.95; - display: -webkit-box; - display: -ms-flexbox; display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; + justify-content: center; text-align: center; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; + flex-direction: column; } - .bg-image-full .container { text-align: center; - -ms-flex-item-align: center; - align-self: center; - display: -webkit-box; - display: -ms-flexbox; + align-self: center; display: flex; - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-orient: vertical; - -webkit-box-direction: normal; - -ms-flex-direction: column; - flex-direction: column; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - -webkit-box-flex: 1; - -ms-flex-positive: 1; - flex-grow: 1; + justify-content: center; + flex-direction: column; + align-items: center; + flex-grow: 1; } - .bg-image-full .recommendation { position: absolute; top: 40px; @@ -71,26 +55,22 @@ h1, h2, h3, h4 { display: inline-block; width: 330px; text-align: center; - padding: .25em 0; + padding: 0.25em 0; color: white; - -webkit-transform: rotate(45deg); - transform: rotate(45deg); + transform: rotate(45deg); background: #971d1d; font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .bg-image-full .recommendation { - font-size: 1.0rem; + font-size: 1rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .recommendation { font-size: 1.1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .recommendation { top: 50px; @@ -98,148 +78,123 @@ h1, h2, h3, h4 { font-size: 1.2rem; } } - .bg-image-full .recommendation:hover { text-decoration: none; } - .bg-image-full .title { color: #fff; padding-top: 10px; font-size: 1.8rem; margin-bottom: 10px; } - @media only screen and (min-width: 420px) { .bg-image-full .title { font-size: 2.4rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .title { font-size: 3.2rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .title { font-size: 4rem; } } - .bg-image-full .logo { width: 100px; } - @media only screen and (min-width: 420px) { .bg-image-full .logo { width: 120px; } } - @media only screen and (min-width: 768px) { .bg-image-full .logo { width: 160px; } } - @media only screen and (min-width: 1024px) { .bg-image-full .logo { width: 200px; } } - .bg-image-full .subtitle { text-align: center; color: #bbb; font-size: 0.78rem; } - @media only screen and (min-width: 375px) { .bg-image-full .subtitle { font-size: 0.9rem; } } - @media only screen and (min-width: 420px) { .bg-image-full .subtitle { font-size: 1rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .subtitle { font-size: 1.1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .subtitle { font-size: 1.3rem; } } - .bg-image-full .text > a { text-align: center; color: #fff; font-size: 0.9rem; } - .bg-image-full .text > a:hover { color: #aaa; text-decoration: none; } - @media only screen and (min-width: 375px) { .bg-image-full .text > a { font-size: 0.9rem; } } - @media only screen and (min-width: 420px) { .bg-image-full .text > a { font-size: 1rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .text > a { font-size: 1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .text > a { font-size: 1.1rem; } } - .bg-image-full .version { text-align: center; margin-bottom: 10px; color: #fff; - font-size: .9rem; + font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .bg-image-full .version { - font-size: .9rem; + font-size: 0.9rem; } } - @media only screen and (min-width: 768px) { .bg-image-full .version { font-size: 1rem; } } - @media only screen and (min-width: 1024px) { .bg-image-full .version { font-size: 1.1rem; } } - .bg-image-full .down { text-align: center; color: #fff; @@ -248,7 +203,6 @@ h1, h2, h3, h4 { margin-bottom: 15px; cursor: pointer; } - .bg-image-full .down .caret { font-size: 3rem; } @@ -264,12 +218,10 @@ h1, h2, h3, h4 { height: 65px; position: relative; } - .nav .logo { width: 60px; margin-top: 12px; } - .nav .title { display: none; color: #fff; @@ -277,55 +229,45 @@ h1, h2, h3, h4 { margin-left: 15px; margin-top: 18px; } - @media only screen and (min-width: 768px) { .nav .title { display: inline-block; } } - @media only screen and (min-width: 1024px) { .nav .title { font-size: 1.2rem; } } - .nav .text { margin-top: 18px; } - .nav .text a { color: #fff; margin-top: 12px; - font-size: 1.0rem; + font-size: 1rem; } - @media only screen and (min-width: 1023px) { .nav .text a { margin-top: 10px; font-size: 1.2rem; } } - .nav .text a:hover { color: #aaa; text-decoration: none; } - .nav .github { display: none; } - @media only screen and (min-width: 768px) { .nav .github { display: inline-block; } } - .nav .todocs { display: inline-block; } - @media only screen and (min-width: 768px) { .nav .todocs { display: none; @@ -336,50 +278,41 @@ h1, h2, h3, h4 { text-align: center; color: #333; } - .features .inner { padding: 10px 0px; } - @media only screen and (min-width: 768px) { .features .inner { padding: 15px 20px; } } - .features .inner .icons { display: block; font-size: 3rem; color: #bbb; } - @media only screen and (min-width: 420px) { .features .inner .icons { font-size: 3.5rem; } } - @media only screen and (min-width: 768px) { .features .inner .icons { font-size: 4rem; } } - @media only screen and (min-width: 1024px) { .features .inner .icons { font-size: 5rem; } } - .features .inner .icontitle { font-size: 1.2rem; } - .features .inner:hover { background: #f4f4f4; color: #567adf; } - .features .inner:hover .icons { color: #567adf; } @@ -389,13 +322,11 @@ h1, h2, h3, h4 { padding-top: 20px; font-size: 2rem; } - @media only screen and (min-width: 420px) { .sectionheader .title { font-size: 2.3rem; } } - @media only screen and (min-width: 768px) { .sectionheader .title { text-align: left; @@ -403,25 +334,21 @@ h1, h2, h3, h4 { font-size: 2.6rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .title { padding-top: 30px; font-size: 3rem; } } - .sectionheader .title-small { text-align: center; font-size: 1.4rem; } - @media only screen and (min-width: 420px) { .sectionheader .title-small { font-size: 1.6rem; } } - @media only screen and (min-width: 768px) { .sectionheader .title-small { text-align: left; @@ -429,53 +356,44 @@ h1, h2, h3, h4 { font-size: 1.8rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .title-small { padding-top: 30px; font-size: 2rem; } } - .sectionheader .subtitle { text-align: center; - font-size: .9rem; + font-size: 0.9rem; } - @media only screen and (min-width: 420px) { .sectionheader .subtitle { font-size: 1rem; } } - @media only screen and (min-width: 768px) { .sectionheader .subtitle { text-align: left; font-size: 1.1rem; } } - @media only screen and (min-width: 1024px) { .sectionheader .subtitle { font-size: 1.3rem; } } - .sectionheader .npmicons { text-align: center; } - .sectionheader .text { text-align: center; padding-top: 10px; } - @media only screen and (min-width: 768px) { .sectionheader .text { text-align: left; } } - .sectionheader hr { margin-top: 40px; margin-bottom: 0px; @@ -485,15 +403,12 @@ h1, h2, h3, h4 { .index { margin: 0 0 10px 0; } - .index .text, .index .subtitle, .index .title, .index .title-small, .index .npmicons { text-align: center; } - .index a { text-decoration: none; } - .index a:hover { text-decoration: none; color: #567adf; @@ -515,34 +430,28 @@ ul { margin-top: 40px; text-align: center; } - .number-section .numbers { font-size: 2rem; } - @media only screen and (min-width: 420px) { .number-section .numbers { font-size: 2.4rem; } } - @media only screen and (min-width: 768px) { .number-section .numbers { font-size: 2.8rem; } } - .number-section .title { color: #999; font-size: 1rem; } - @media only screen and (min-width: 420px) { .number-section .title { font-size: 1.1rem; } } - @media only screen and (min-width: 768px) { .number-section .title { font-size: 1.2rem; @@ -552,53 +461,43 @@ ul { .menu { display: none; } - @media only screen and (min-width: 768px) { .menu { margin-top: 30px; display: inline-block; } } - .menu .title { margin: 25px 0 5px 0; color: #000; } - .menu .title a { width: 100%; color: #000; text-decoration: none; } - .menu .title a:hover { color: #567adf; } - .menu hr { margin: 5px 0; } - .menu ul { list-style-type: none; margin: 0; padding: 0; } - .menu ul li { padding: 2px 0; } - .menu ul li a { width: 100%; color: #666; text-decoration: none; } - .menu ul li a:hover { color: #567adf; } - .menu ul li.active > a { color: #567adf; } @@ -633,20 +532,16 @@ pre { .example td:first-child { background-color: #fff !important; } - .example td:last-child { background-color: #f8faff !important; } - .example h5 { padding-top: 5px; padding-left: 10px; } - .example pre { background-color: unset; } - .example pre .js { background-color: #f0f0f4; } @@ -658,11 +553,9 @@ footer { padding-bottom: 30px; position: relative; } - footer a { color: #000; } - footer .badge { color: #fff; font-size: 0.9rem; @@ -675,5 +568,4 @@ footer .badge { .v5 { color: #567adf; -} -/*# sourceMappingURL=styles.css.map */ \ No newline at end of file +}/*# sourceMappingURL=styles.css.map */ \ No newline at end of file diff --git a/docs/v4/styles.css.map b/docs/v4/styles.css.map index 33deed5..071e29d 100644 --- a/docs/v4/styles.css.map +++ b/docs/v4/styles.css.map @@ -1,9 +1 @@ -{ - "version": 3, - "mappings": "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", - "sources": [ - "styles.scss" - ], - "names": [], - "file": "styles.css" -} \ No newline at end of file +{"version":3,"sources":["styles.scss"],"names":[],"mappings":"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","file":"styles.css"} \ No newline at end of file diff --git a/docs/v4/styles.scss b/docs/v4/styles.scss index 143a9f5..ff3b0d9 100644 --- a/docs/v4/styles.scss +++ b/docs/v4/styles.scss @@ -13,6 +13,10 @@ h1, h2, h3, h4 { .bold { font-weight: 700; } +.warning { + font-weight: 500; + color: rgb(156, 1, 1); +} .bg-image-full { background: no-repeat center center scroll; background-color: #4b2313; /* For browsers that do not support gradients */ diff --git a/lib/cpu.js b/lib/cpu.js index 1d83971..8ef1f02 100644 --- a/lib/cpu.js +++ b/lib/cpu.js @@ -750,88 +750,88 @@ function getCpu() { } if (_windows) { try { - util.wmic('cpu get /value').then((stdout, error) => { - if (!error) { - let lines = stdout.split('\r\n'); - let name = util.getValue(lines, 'name', '=') || ''; - if (name.indexOf('@') >= 0) { - result.brand = name.split('@')[0].trim(); - result.speed = name.split('@')[1] ? parseFloat(name.split('@')[1].trim()) : 0; - _cpu_speed = result.speed; - } else { - result.brand = name.trim(); - result.speed = 0; - } - result = cpuBrandManufacturer(result); - result.revision = util.getValue(lines, 'revision', '='); - result.cache.l1d = 0; - result.cache.l1i = 0; - result.cache.l2 = util.getValue(lines, 'l2cachesize', '='); - result.cache.l3 = util.getValue(lines, 'l3cachesize', '='); - if (result.cache.l2) { result.cache.l2 = parseInt(result.cache.l2, 10) * 1024; } - if (result.cache.l3) { result.cache.l3 = parseInt(result.cache.l3, 10) * 1024; } - result.vendor = util.getValue(lines, 'manufacturer', '='); - result.speedMax = Math.round(parseFloat(util.getValue(lines, 'maxclockspeed', '=').replace(/,/g, '.')) / 10.0) / 100; - if (result.speed === 0 && (result.brand.indexOf('AMD') > -1 || result.brand.toLowerCase().indexOf('ryzen') > -1)) { - result.speed = getAMDSpeed(result.brand); - } - if (result.speed === 0) { - result.speed = result.speedMax; - } - result.speedMin = result.speed; + const workload = []; + workload.push(util.wmic('cpu get /value')); + workload.push(util.wmic('path Win32_CacheMemory get CacheType,InstalledSize,Purpose')); - let description = util.getValue(lines, 'description', '=').split(' '); - for (let i = 0; i < description.length; i++) { - if (description[i].toLowerCase().startsWith('family') && (i + 1) < description.length && description[i + 1]) { - result.family = description[i + 1]; - } - if (description[i].toLowerCase().startsWith('model') && (i + 1) < description.length && description[i + 1]) { - result.model = description[i + 1]; - } - if (description[i].toLowerCase().startsWith('stepping') && (i + 1) < description.length && description[i + 1]) { - result.stepping = description[i + 1]; - } + Promise.all( + workload + ).then(data => { + let lines = data[0].split('\r\n'); + let name = util.getValue(lines, 'name', '=') || ''; + if (name.indexOf('@') >= 0) { + result.brand = name.split('@')[0].trim(); + result.speed = name.split('@')[1] ? parseFloat(name.split('@')[1].trim()) : 0; + _cpu_speed = result.speed; + } else { + result.brand = name.trim(); + result.speed = 0; + } + result = cpuBrandManufacturer(result); + result.revision = util.getValue(lines, 'revision', '='); + result.cache.l1d = 0; + result.cache.l1i = 0; + result.cache.l2 = util.getValue(lines, 'l2cachesize', '='); + result.cache.l3 = util.getValue(lines, 'l3cachesize', '='); + if (result.cache.l2) { result.cache.l2 = parseInt(result.cache.l2, 10) * 1024; } + if (result.cache.l3) { result.cache.l3 = parseInt(result.cache.l3, 10) * 1024; } + result.vendor = util.getValue(lines, 'manufacturer', '='); + result.speedMax = Math.round(parseFloat(util.getValue(lines, 'maxclockspeed', '=').replace(/,/g, '.')) / 10.0) / 100; + if (result.speed === 0 && (result.brand.indexOf('AMD') > -1 || result.brand.toLowerCase().indexOf('ryzen') > -1)) { + result.speed = getAMDSpeed(result.brand); + } + if (result.speed === 0) { + result.speed = result.speedMax; + } + result.speedMin = result.speed; + + let description = util.getValue(lines, 'description', '=').split(' '); + for (let i = 0; i < description.length; i++) { + if (description[i].toLowerCase().startsWith('family') && (i + 1) < description.length && description[i + 1]) { + result.family = description[i + 1]; } - // socket type - const socketId = util.getValue(lines, 'UpgradeMethod', '='); - if (socketTypes[socketId]) { - result.socket = socketTypes[socketId]; + if (description[i].toLowerCase().startsWith('model') && (i + 1) < description.length && description[i + 1]) { + result.model = description[i + 1]; } - // # threads / # cores - const countProcessors = util.countLines(lines, 'Caption'); - const countThreads = util.getValue(lines, 'NumberOfLogicalProcessors', '='); - const countCores = util.getValue(lines, 'NumberOfCores', '='); - if (countProcessors) { - result.processors = parseInt(countProcessors) || 1; - } - if (countCores && countThreads) { - result.cores = parseInt(countThreads) || util.cores(); - result.physicalCores = parseInt(countCores) || util.cores(); - } - if (countProcessors > 1) { - result.cores = result.cores * countProcessors; - result.physicalCores = result.physicalCores * countProcessors; + if (description[i].toLowerCase().startsWith('stepping') && (i + 1) < description.length && description[i + 1]) { + result.stepping = description[i + 1]; } } - util.wmic('path Win32_CacheMemory get CacheType,InstalledSize,Purpose').then((stdout, error) => { - if (!error) { - let lines = stdout.split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); - lines.forEach(function (line) { - if (line !== '') { - line = line.trim().split(/\s\s+/); - // L1 Instructions - if (line[2] === 'L1 Cache' && line[0] === '3') { - result.cache.l1i = parseInt(line[1], 10); - } - // L1 Data - if (line[2] === 'L1 Cache' && line[0] === '4') { - result.cache.l1d = parseInt(line[1], 10); - } - } - }); + // socket type + const socketId = util.getValue(lines, 'UpgradeMethod', '='); + if (socketTypes[socketId]) { + result.socket = socketTypes[socketId]; + } + // # threads / # cores + const countProcessors = util.countLines(lines, 'Caption'); + const countThreads = util.getValue(lines, 'NumberOfLogicalProcessors', '='); + const countCores = util.getValue(lines, 'NumberOfCores', '='); + if (countProcessors) { + result.processors = parseInt(countProcessors) || 1; + } + if (countCores && countThreads) { + result.cores = parseInt(countThreads) || util.cores(); + result.physicalCores = parseInt(countCores) || util.cores(); + } + if (countProcessors > 1) { + result.cores = result.cores * countProcessors; + result.physicalCores = result.physicalCores * countProcessors; + } + lines = data[1].split('\r\n').filter(line => line.trim() !== '').filter((line, idx) => idx > 0); + lines.forEach(function (line) { + if (line !== '') { + line = line.trim().split(/\s\s+/); + // L1 Instructions + if (line[2] === 'L1 Cache' && line[0] === '3') { + result.cache.l1i = parseInt(line[1], 10); + } + // L1 Data + if (line[2] === 'L1 Cache' && line[0] === '4') { + result.cache.l1d = parseInt(line[1], 10); + } } - resolve(result); }); + resolve(result); }); } catch (e) { resolve(result); @@ -930,9 +930,32 @@ function cpuTemperature(callback) { let result = { main: null, cores: [], - max: null + max: null, + socket: [], + chipset: null }; if (_linux) { + // CPU Chipset, Socket + try { + const cmd = 'cat /sys/class/thermal/thermal_zone*/type 2>/dev/null; echo "-----"; cat /sys/class/thermal/thermal_zone*/temp 2>/dev/null;'; + const parts = execSync(cmd).toString().split('-----\n'); + if (parts.length === 2) { + const lines = parts[0].split('\n'); + const lines2 = parts[1].split('\n'); + for (let i = 0; i < lines.length; i++) { + const line = lines[i].trim(); + if (line.startsWith('acpi') && lines2[i]) { + result.socket.push(Math.round(parseInt(lines2[i], 10) / 100) / 10); + } + if (line.startsWith('pch') && lines2[i]) { + result.chipset = Math.round(parseInt(lines2[i], 10) / 100) / 10; + } + } + } + } catch (e) { + util.noop(); + } + const cmd = 'for mon in /sys/class/hwmon/hwmon*; do for label in "$mon"/temp*_label; do if [ -f $label ]; then value=$(echo $label | rev | cut -c 7- | rev)_input; if [ -f "$value" ]; then echo $(cat "$label")___$(cat "$value"); fi; fi; done; done;'; try { exec(cmd, function (error, stdout) { @@ -963,15 +986,37 @@ function cpuTemperature(callback) { resolve(result); return; } - // } exec('sensors', function (error, stdout) { if (!error) { let lines = stdout.toString().split('\n'); let tdieTemp = null; + let newSectionStarts = true; + let section = ''; lines.forEach(function (line) { + // determine section + if (line.trim() === '') { + newSectionStarts = true; + } else if (newSectionStarts) { + if (line.trim().toLowerCase().startsWith('acpi')) { section = 'acpi'; } + if (line.trim().toLowerCase().startsWith('pch')) { section = 'pch'; } + if (line.trim().toLowerCase().startsWith('core')) { section = 'core'; } + newSectionStarts = false; + } let regex = /[+-]([^°]*)/g; let temps = line.match(regex); let firstPart = line.split(':')[0].toUpperCase(); + if (section === 'acpi') { + // socket temp + if (firstPart.indexOf('TEMP') !== -1) { + result.socket.push(parseFloat(temps)); + } + } else if (section === 'pch') { + // chipset temp + if (firstPart.indexOf('TEMP') !== -1) { + result.chipset = parseFloat(temps); + } + } + // cpu temp if (firstPart.indexOf('PHYSICAL') !== -1 || firstPart.indexOf('PACKAGE') !== -1) { result.main = parseFloat(temps); } diff --git a/lib/docker.js b/lib/docker.js index 1c2854e..89705eb 100644 --- a/lib/docker.js +++ b/lib/docker.js @@ -91,6 +91,118 @@ function dockerInfo(callback) { exports.dockerInfo = dockerInfo; +function dockerImages(all, callback) { + + // fallback - if only callback is given + if (util.isFunction(all) && !callback) { + callback = all; + all = false; + } + if (typeof all === 'string' && all === 'true') { + all = true; + } + if (typeof all !== 'boolean' && all !== undefined) { + all = false; + } + + all = all || false; + let result = []; + return new Promise((resolve) => { + process.nextTick(() => { + if (!_docker_socket) { + _docker_socket = new DockerSocket(); + } + const workload = []; + + _docker_socket.listImages(all, data => { + let dockerImages = {}; + try { + dockerImages = data; + if (dockerImages && Object.prototype.toString.call(dockerImages) === '[object Array]' && dockerImages.length > 0) { + + dockerImages.forEach(function (element) { + + if (element.Names && Object.prototype.toString.call(element.Names) === '[object Array]' && element.Names.length > 0) { + element.Name = element.Names[0].replace(/^\/|\/$/g, ''); + } + workload.push(dockerImagesInspect(element.Id.trim(), element)); + }); + if (workload.length) { + Promise.all( + workload + ).then(data => { + if (callback) { callback(data); } + resolve(data); + }); + } else { + if (callback) { callback(result); } + resolve(result); + } + } else { + if (callback) { callback(result); } + resolve(result); + } + } catch (err) { + if (callback) { callback(result); } + resolve(result); + } + }); + }); + }); +} + +// -------------------------- +// container inspect (for one container) + +function dockerImagesInspect(imageID, payload) { + return new Promise((resolve) => { + process.nextTick(() => { + imageID = imageID || ''; + if (typeof imageID !== 'string') { + resolve(); + } + const imageIDSanitized = (util.isPrototypePolluted() ? '' : util.sanitizeShellString(imageID, true)).trim(); + if (imageIDSanitized) { + + if (!_docker_socket) { + _docker_socket = new DockerSocket(); + } + + _docker_socket.inspectImage(imageIDSanitized.trim(), data => { + try { + resolve({ + id: payload.Id, + container: data.Container, + comment: data.Comment, + os: data.Os, + architecture: data.Architecture, + parent: data.Parent, + dockerVersion: data.DockerVersion, + size: data.Size, + sharedSize: payload.SharedSize, + virtualSize: data.VirtualSize, + author: data.Author, + created: data.Created ? Math.round(new Date(data.Created).getTime() / 1000) : 0, + containerConfig: data.ContainerConfig ? data.ContainerConfig : {}, + graphDriver: data.GraphDriver ? data.GraphDriver : {}, + repoDigests: data.RepoDigests ? data.RepoDigests : {}, + repoTags: data.RepoTags ? data.RepoTags : {}, + config: data.Config ? data.Config : {}, + rootFS: data.RootFS ? data.RootFS : {}, + }); + } catch (err) { + resolve(); + } + }); + } else { + resolve(); + } + }); + }); +} + +exports.dockerImages = dockerImages; + function dockerContainers(all, callback) { function inContainers(containers, id) { @@ -109,6 +221,9 @@ function dockerContainers(all, callback) { callback = all; all = false; } + if (typeof all === 'string' && all === 'true') { + all = true; + } if (typeof all !== 'boolean' && all !== undefined) { all = false; } @@ -350,13 +465,18 @@ function dockerContainerStats(containerIDs, callback) { containerIDsSanitized.__proto__.replace = util.stringReplace; containerIDsSanitized.__proto__.trim = util.stringTrim; - const s = (util.isPrototypePolluted() ? '' : util.sanitizeShellString(containerIDs, true)).trim(); - for (let i = 0; i <= 2000; i++) { - if (!(s[i] === undefined)) { - s[i].__proto__.toLowerCase = util.stringToLower; - const sl = s[i].toLowerCase(); - if (sl && sl[0] && !sl[1]) { - containerIDsSanitized = containerIDsSanitized + sl[0]; + containerIDsSanitized = containerIDs; + containerIDsSanitized = containerIDsSanitized.trim(); + if (containerIDsSanitized !== '*') { + containerIDsSanitized = ''; + const s = (util.isPrototypePolluted() ? '' : util.sanitizeShellString(containerIDs, true)).trim(); + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { + if (!(s[i] === undefined)) { + s[i].__proto__.toLowerCase = util.stringToLower; + const sl = s[i].toLowerCase(); + if (sl && sl[0] && !sl[1]) { + containerIDsSanitized = containerIDsSanitized + sl[0]; + } } } } @@ -374,10 +494,15 @@ function dockerContainerStats(containerIDs, callback) { for (let container of allContainers) { containerArray.push(container.id); } - dockerContainerStats(containerArray.join(',')).then(result => { + if (containerArray.length) { + dockerContainerStats(containerArray.join(',')).then(result => { + if (callback) { callback(result); } + resolve(result); + }); + } else { if (callback) { callback(result); } resolve(result); - }); + } }); } else { for (let containerID of containerArray) { @@ -547,6 +672,48 @@ function dockerContainerProcesses(containerID, callback) { exports.dockerContainerProcesses = dockerContainerProcesses; +function dockerVolumes(callback) { + + let result = []; + return new Promise((resolve) => { + process.nextTick(() => { + if (!_docker_socket) { + _docker_socket = new DockerSocket(); + } + _docker_socket.listVolumes(data => { + let dockerVolumes = {}; + try { + dockerVolumes = data; + if (dockerVolumes && dockerVolumes.Volumes && Object.prototype.toString.call(dockerVolumes.Volumes) === '[object Array]' && dockerVolumes.Volumes.length > 0) { + + dockerVolumes.Volumes.forEach(function (element) { + + result.push({ + name: element.Name, + driver: element.Driver, + labels: element.Labels, + mountpoint: element.Mountpoint, + options: element.Options, + scope: element.Scope, + created: element.CreatedAt ? Math.round(new Date(element.CreatedAt).getTime() / 1000) : 0, + }); + }); + if (callback) { callback(result); } + resolve(result); + } else { + if (callback) { callback(result); } + resolve(result); + } + } catch (err) { + if (callback) { callback(result); } + resolve(result); + } + }); + }); + }); +} + +exports.dockerVolumes = dockerVolumes; function dockerAll(callback) { return new Promise((resolve) => { process.nextTick(() => { diff --git a/lib/dockerSocket.js b/lib/dockerSocket.js index 86c68d4..0b989b7 100644 --- a/lib/dockerSocket.js +++ b/lib/dockerSocket.js @@ -55,6 +55,82 @@ class DockerSocket { } } + listImages(all, callback) { + try { + + let socket = net.createConnection({ path: socketPath }); + let alldata = ''; + let data; + + socket.on('connect', () => { + socket.write('GET http:/images/json' + (all ? '?all=1' : '') + ' HTTP/1.0\r\n\r\n'); + }); + + socket.on('data', data => { + alldata = alldata + data.toString(); + }); + + socket.on('error', () => { + socket = false; + callback({}); + }); + + socket.on('end', () => { + let startbody = alldata.indexOf('\r\n\r\n'); + alldata = alldata.substring(startbody + 4); + socket = false; + try { + data = JSON.parse(alldata); + callback(data); + } catch (err) { + callback({}); + } + }); + } catch (err) { + callback({}); + } + } + + inspectImage(id, callback) { + id = id || ''; + if (id) { + try { + let socket = net.createConnection({ path: socketPath }); + let alldata = ''; + let data; + + socket.on('connect', () => { + socket.write('GET http:/images/' + id + '/json?stream=0 HTTP/1.0\r\n\r\n'); + }); + + socket.on('data', data => { + alldata = alldata + data.toString(); + }); + + socket.on('error', () => { + socket = false; + callback({}); + }); + + socket.on('end', () => { + let startbody = alldata.indexOf('\r\n\r\n'); + alldata = alldata.substring(startbody + 4); + socket = false; + try { + data = JSON.parse(alldata); + callback(data); + } catch (err) { + callback({}); + } + }); + } catch (err) { + callback({}); + } + } else { + callback({}); + } + } + listContainers(all, callback) { try { @@ -210,6 +286,42 @@ class DockerSocket { callback({}); } } + + listVolumes(callback) { + try { + + let socket = net.createConnection({ path: socketPath }); + let alldata = ''; + let data; + + socket.on('connect', () => { + socket.write('GET http:/volumes HTTP/1.0\r\n\r\n'); + }); + + socket.on('data', data => { + alldata = alldata + data.toString(); + }); + + socket.on('error', () => { + socket = false; + callback({}); + }); + + socket.on('end', () => { + let startbody = alldata.indexOf('\r\n\r\n'); + alldata = alldata.substring(startbody + 4); + socket = false; + try { + data = JSON.parse(alldata); + callback(data); + } catch (err) { + callback({}); + } + }); + } catch (err) { + callback({}); + } + } } module.exports = DockerSocket; diff --git a/lib/index.d.ts b/lib/index.d.ts index 2b7d134..30b2530 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -104,6 +104,8 @@ export namespace Systeminformation { main: number; cores: number[]; max: number; + socket?: number[]; + chipset?: number; } interface MemData { @@ -641,6 +643,27 @@ export namespace Systeminformation { productLicense: string; } + interface DockerImageData { + id: string; + container: string; + comment: string; + os: string; + architecture: string; + parent: string; + dockerVersion: string; + size: number; + sharedSize: number; + virtualSize: number; + author: string; + created: number; + containerConfig: any; + graphDriver: any; + repoDigests: any; + repoTags: any; + config: any; + rootFS: any; + } + interface DockerContainerData { id: string; name: string; @@ -691,6 +714,16 @@ export namespace Systeminformation { networks: any; } + interface DockerVolumeData { + name: string; + driver: string; + labels: any; + mountpoint: string; + options: any; + scope: string; + created: number; + } + // 9. Virtual Box interface VboxInfoData { @@ -843,6 +876,8 @@ export function inetChecksite(url: string, cb?: (data: Systeminformation.InetChe export function inetLatency(host?: string, cb?: (data: number) => any): Promise; export function wifiNetworks(cb?: (data: Systeminformation.WifiNetworkData[]) => any): Promise; +export function wifiInterfaces(cb?: (data: Systeminformation.WifiInterfaceData[]) => any): Promise; +export function wifiConnections(cb?: (data: Systeminformation.WifiConnectionData[]) => any): Promise; export function users(cb?: (data: Systeminformation.UserData[]) => any): Promise; @@ -851,9 +886,11 @@ export function processLoad(processName: string, cb?: (data: Systeminformation.P export function services(serviceName: string, cb?: (data: Systeminformation.ServicesData[]) => any): Promise; export function dockerInfo(cb?: (data: Systeminformation.DockerInfoData) => any): Promise; +export function dockerImages(all?: boolean, cb?: (data: Systeminformation.DockerImageData[]) => any): Promise; export function dockerContainers(all?: boolean, cb?: (data: Systeminformation.DockerContainerData[]) => any): Promise; export function dockerContainerStats(id?: string, cb?: (data: Systeminformation.DockerContainerStatsData[]) => any): Promise; export function dockerContainerProcesses(id?: string, cb?: (data: any) => any): Promise; +export function dockerVolumes(cb?: (data: Systeminformation.DockerVolumeData[]) => any): Promise; export function dockerAll(cb?: (data: any) => any): Promise; export function vboxInfo(cb?: (data: Systeminformation.VboxInfoData[]) => any): Promise; diff --git a/lib/index.js b/lib/index.js index dc2a67b..68b46d1 100755 --- a/lib/index.js +++ b/lib/index.js @@ -362,12 +362,17 @@ function get(valueObject, callback) { // result is in an array, go through all elements of array and pick only the right ones const partialArray = []; data[i].forEach(element => { - const partialRes = {}; - keys.forEach(k => { - if ({}.hasOwnProperty.call(element, k)) { - partialRes[k] = element[k]; - } - }); + let partialRes = {}; + if (keys.length === 1 && (keys[0] === '*' || keys[0] === 'all')) { + partialRes = element; + } else { + keys.forEach(k => { + if ({}.hasOwnProperty.call(element, k)) { + partialRes[k] = element[k]; + } + }); + } + // if there is a filter, then just take those elements if (filter && filterParts.length === 2) { if ({}.hasOwnProperty.call(partialRes, filterParts[0].trim())) { const val = partialRes[filterParts[0].trim()]; @@ -482,9 +487,11 @@ exports.inetChecksite = internet.inetChecksite; exports.inetLatency = internet.inetLatency; exports.dockerInfo = docker.dockerInfo; +exports.dockerImages = docker.dockerImages; exports.dockerContainers = docker.dockerContainers; exports.dockerContainerStats = docker.dockerContainerStats; exports.dockerContainerProcesses = docker.dockerContainerProcesses; +exports.dockerVolumes = docker.dockerVolumes; exports.dockerAll = docker.dockerAll; exports.vboxInfo = vbox.vboxInfo; diff --git a/lib/internet.js b/lib/internet.js index 6c4e9af..cc996e1 100644 --- a/lib/internet.js +++ b/lib/internet.js @@ -13,8 +13,7 @@ // 12. Internet // ---------------------------------------------------------------------------------- -const exec = require('child_process').exec; -const execFile = require('child_process').execFile; +// const exec = require('child_process').exec; const util = require('./util'); let _platform = process.platform; @@ -46,11 +45,11 @@ function inetChecksite(url, callback) { } let urlSanitized = ''; const s = util.sanitizeShellString(url, true); - for (let i = 0; i <= 2000; i++) { + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { s[i].__proto__.toLowerCase = util.stringToLower; const sl = s[i].toLowerCase(); - if (sl && sl[0] && !sl[1]) { + if (sl && sl[0] && !sl[1] && sl[0].length === 1) { urlSanitized = urlSanitized + sl[0]; } } @@ -59,18 +58,20 @@ function inetChecksite(url, callback) { try { if (urlSanitized && !util.isPrototypePolluted()) { urlSanitized.__proto__.startsWith = util.stringStartWith; - if (urlSanitized.startsWith('file:')) { + if (urlSanitized.startsWith('file:') || urlSanitized.startsWith('gopher:') || urlSanitized.startsWith('telnet:') || urlSanitized.startsWith('mailto:') || urlSanitized.startsWith('news:') || urlSanitized.startsWith('nntp:')) { if (callback) { callback(result); } return resolve(result); } let t = Date.now(); if (_linux || _freebsd || _openbsd || _netbsd || _darwin || _sunos) { - let args = ' -I --connect-timeout 5 -m 5 ' + urlSanitized + ' 2>/dev/null | head -n 1 | cut -d " " -f2'; + let args = ['-I', '--connect-timeout', '5', '-m', '5']; + args.push(urlSanitized); let cmd = 'curl'; - exec(cmd + args, function (error, stdout) { - let statusCode = parseInt(stdout.toString()); + util.execSafe(cmd, args).then((stdout) => { + const lines = stdout.split('\n'); + let statusCode = lines[0] && lines[0].indexOf(' ') >= 0 ? parseInt(lines[0].split(' ')[1], 10) : 404; result.status = statusCode || 404; - result.ok = !error && (statusCode === 200 || statusCode === 301 || statusCode === 302 || statusCode === 304); + result.ok = (statusCode === 200 || statusCode === 301 || statusCode === 302 || statusCode === 304); result.ms = (result.ok ? Date.now() - t : null); if (callback) { callback(result); } resolve(result); @@ -142,7 +143,7 @@ function inetLatency(host, callback) { } let hostSanitized = ''; const s = (util.isPrototypePolluted() ? '8.8.8.8' : util.sanitizeShellString(host, true)).trim(); - for (let i = 0; i <= 2000; i++) { + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { s[i].__proto__.toLowerCase = util.stringToLower; const sl = s[i].toLowerCase(); @@ -152,7 +153,7 @@ function inetLatency(host, callback) { } } hostSanitized.__proto__.startsWith = util.stringStartWith; - if (hostSanitized.startsWith('file:')) { + if (hostSanitized.startsWith('file:') || hostSanitized.startsWith('gopher:') || hostSanitized.startsWith('telnet:') || hostSanitized.startsWith('mailto:') || hostSanitized.startsWith('news:') || hostSanitized.startsWith('nntp:')) { if (callback) { callback(null); } return resolve(null); } @@ -160,21 +161,21 @@ function inetLatency(host, callback) { let filt; if (_linux || _freebsd || _openbsd || _netbsd || _darwin) { if (_linux) { - params = '-c 2 -w 3 ' + hostSanitized; + params = ['-c', '2', '-w', '3', hostSanitized]; filt = 'rtt'; } if (_freebsd || _openbsd || _netbsd) { - params = '-c 2 -t 3 ' + hostSanitized; + params = ['-c', '2', '-t', '3', hostSanitized]; filt = 'round-trip'; } if (_darwin) { - params = '-c2 -t3 ' + hostSanitized; + params = ['-c2', '-t3', hostSanitized]; filt = 'avg'; } - execFile('ping', params.split(' '), function (error, stdout) { + util.execSafe('ping', params).then((stdout) => { let result = null; - if (!error) { - const lines = stdout.toString().split('\n').filter(line => line.indexOf(filt) >= 0).join('\n'); + if (stdout) { + const lines = stdout.split('\n').filter(line => line.indexOf(filt) >= 0).join('\n'); const line = lines.split('='); if (line.length > 1) { @@ -189,12 +190,12 @@ function inetLatency(host, callback) { }); } if (_sunos) { - const params = '-s -a ' + hostSanitized + ' 56 2'; + const params = ['-s', '-a', hostSanitized, '56', '2']; const filt = 'avg'; - execFile('ping', params.split(' '), { timeout: 3000 }, function (error, stdout) { + util.execSafe('ping', params, { timeout: 3000 }).then((stdout) => { let result = null; - if (!error) { - const lines = stdout.toString().split('\n').filter(line => line.indexOf(filt) >= 0).join('\n'); + if (stdout) { + const lines = stdout.split('\n').filter(line => line.indexOf(filt) >= 0).join('\n'); const line = lines.split('='); if (line.length > 1) { const parts = line[1].split('/'); @@ -210,10 +211,10 @@ function inetLatency(host, callback) { if (_windows) { let result = null; try { - const params = hostSanitized + ' -n 1'; - execFile('ping', params.split(' '), util.execOptsWin, function (error, stdout) { - if (!error) { - let lines = stdout.toString().split('\r\n'); + const params = [hostSanitized, '-n', '1']; + util.execSafe('ping', params, util.execOptsWin).then((stdout) => { + if (stdout) { + let lines = stdout.split('\r\n'); lines.shift(); lines.forEach(function (line) { if ((line.toLowerCase().match(/ms/g) || []).length === 3) { diff --git a/lib/network.js b/lib/network.js index 34cfa0a..0dc8d9e 100644 --- a/lib/network.js +++ b/lib/network.js @@ -221,6 +221,7 @@ function parseLinesWindowsNics(sections, nconfigsections) { let netEnabled = util.getValue(lines, 'NetEnabled', '='); let adapterType = util.getValue(lines, 'AdapterTypeID', '=') === '9' ? 'wireless' : 'wired'; let ifacename = util.getValue(lines, 'Name', '=').replace(/\]/g, ')').replace(/\[/g, '('); + let iface = util.getValue(lines, 'NetConnectionID', '=').replace(/\]/g, ')').replace(/\[/g, '('); if (ifacename.toLowerCase().indexOf('wi-fi') >= 0 || ifacename.toLowerCase().indexOf('wireless') >= 0) { adapterType = 'wireless'; } @@ -230,6 +231,7 @@ function parseLinesWindowsNics(sections, nconfigsections) { mac: util.getValue(lines, 'MACAddress', '=').toLowerCase(), dhcp: util.getValue(linesNicConfig, 'dhcpEnabled', '=').toLowerCase(), name: ifacename, + iface, netEnabled: netEnabled === 'TRUE', speed: isNaN(speed) ? null : speed, operstate: util.getValue(lines, 'NetConnectionStatus', '=') === '2' ? 'up' : 'down', @@ -243,7 +245,7 @@ function parseLinesWindowsNics(sections, nconfigsections) { } function getWindowsNics() { - const cmd = util.getWmic() + ' nic get MACAddress, name, NetEnabled, Speed, NetConnectionStatus, AdapterTypeId /value'; + const cmd = util.getWmic() + ' nic get MACAddress, name, NetConnectionId, NetEnabled, Speed, NetConnectionStatus, AdapterTypeId /value'; const cmdnicconfig = util.getWmic() + ' nicconfig get dhcpEnabled /value'; try { const nsections = execSync(cmd, util.execOptsWin).split(/\n\s*\n/); @@ -774,6 +776,7 @@ function networkInterfaces(callback, rescan = true) { _dhcpNics = getLinuxDHCPNics(); } for (let dev in ifaces) { + let iface = dev; let ip4 = ''; let ip4subnet = ''; let ip6 = ''; @@ -873,6 +876,7 @@ function networkInterfaces(callback, rescan = true) { dnsSuffix = getWindowsIfaceDNSsuffix(dnsSuffixes.ifaces, dev); nics.forEach(detail => { if (detail.mac === mac) { + iface = detail.iface || iface; ifaceName = detail.name; dhcp = detail.dhcp; operstate = detail.operstate; @@ -895,7 +899,7 @@ function networkInterfaces(callback, rescan = true) { } const virtual = internal ? false : testVirtualNic(dev, ifaceName, mac); result.push({ - iface: dev, + iface, ifaceName, ip4, ip4subnet, @@ -1057,7 +1061,7 @@ function networkStatsSingle(iface) { process.nextTick(() => { let ifaceSanitized = ''; const s = util.isPrototypePolluted() ? '---' : util.sanitizeShellString(iface); - for (let i = 0; i <= 2000; i++) { + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { ifaceSanitized = ifaceSanitized + s[i]; } diff --git a/lib/poc.js b/lib/poc.js deleted file mode 100644 index 98e883d..0000000 --- a/lib/poc.js +++ /dev/null @@ -1,22 +0,0 @@ -let si = require('./internet'); -si.inetChecksite([]).then((a) => { - if (a.ok == false) - console.log("inetChecksite is fixed!") - else - console.log("inetChecksite is not fixed!") -}); - - -si.inetLatency([]).then((a) => { - if (a == null) - console.log("inetLatency is fixed!") - else - console.log("inetLatency is not fixed!") -}); -si = require('./processes'); -si.services([]).then((a) => { - if (typeof a == typeof []) - console.log("services is fixed!") - else - console.log("services is not fixed!") -}); diff --git a/lib/processes.js b/lib/processes.js index 83a90cc..c569a22 100644 --- a/lib/processes.js +++ b/lib/processes.js @@ -18,8 +18,6 @@ const fs = require('fs'); const path = require('path'); const exec = require('child_process').exec; const execSync = require('child_process').execSync; -const execFile = require('child_process').execFile; - const util = require('./util'); @@ -111,7 +109,7 @@ function services(srv, callback) { srvString.__proto__.trim = util.stringTrim; const s = util.sanitizeShellString(srv); - for (let i = 0; i <= 2000; i++) { + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { srvString = srvString + s[i]; } @@ -164,11 +162,15 @@ function services(srv, callback) { } } } - let comm = (_darwin) ? 'ps -caxo pcpu,pmem,pid,command' : 'ps -axo pcpu,pmem,pid,command'; + if ((_darwin) && srvString === '*') { // service enumeration not yet suported on mac OS + if (callback) { callback(result); } + resolve(result); + } + let args = (_darwin) ? ['-caxo', 'pcpu,pmem,pid,command'] : ['-axo', 'pcpu,pmem,pid,command']; if (srvString !== '' && srvs.length > 0) { - exec(comm + ' | grep -v grep | grep -iE "' + srvString + '"', { maxBuffer: 1024 * 20000 }, function (error, stdout) { // lgtm [js/shell-command-constructed-from-input] - if (!error) { - let lines = stdout.toString().replace(/ +/g, ' ').replace(/,+/g, '.').split('\n'); + util.execSafe('ps', args).then((stdout) => { + if (stdout) { + let lines = stdout.replace(/ +/g, ' ').replace(/,+/g, '.').split('\n'); srvs.forEach(function (srv) { let ps; if (_darwin) { @@ -263,9 +265,10 @@ function services(srv, callback) { resolve(result); } } else { - exec('ps -o comm | grep -v grep | egrep "' + srvString + '"', { maxBuffer: 1024 * 20000 }, function (error, stdout) { // lgtm [js/shell-command-constructed-from-input] - if (!error) { - let lines = stdout.toString().replace(/ +/g, ' ').replace(/,+/g, '.').split('\n'); + args = ['-o', 'comm']; + util.execSafe('ps', args).then((stdout) => { + if (stdout) { + let lines = stdout.replace(/ +/g, ' ').replace(/,+/g, '.').split('\n'); srvs.forEach(function (srv) { let ps = lines.filter(function (e) { return e.indexOf(srv) !== -1; @@ -905,7 +908,7 @@ function processLoad(proc, callback) { processesString.__proto__.trim = util.stringTrim; const s = util.sanitizeShellString(proc); - for (let i = 0; i <= 2000; i++) { + for (let i = 0; i <= util.mathMin(s.length, 2000); i++) { if (!(s[i] === undefined)) { processesString = processesString + s[i]; } @@ -1053,9 +1056,9 @@ function processLoad(proc, callback) { } if (_darwin || _linux || _freebsd || _openbsd || _netbsd) { - const params = '-axo pid,pcpu,pmem,comm'; - execFile('ps', params.split(' '), { maxBuffer: 1024 * 20000 }, function (error, stdout) { - if (!error) { + const params = ['-axo', 'pid,pcpu,pmem,comm']; + util.execSafe('ps', params).then((stdout) => { + if (stdout) { let procStats = []; let lines = stdout.toString().split('\n').filter(function (line) { if (processesString === '*') { return true; } diff --git a/lib/util.js b/lib/util.js index 24b3e6e..d7cd6bf 100644 --- a/lib/util.js +++ b/lib/util.js @@ -58,6 +58,7 @@ const stringToString = new String().toString; const stringSubstr = new String().substr; const stringTrim = new String().trim; const stringStartWith = new String().startsWith; +const mathMin = Math.min; function isFunction(functionToCheck) { let getType = {}; @@ -389,6 +390,42 @@ function powerShell(cmd) { }); } +function execSafe(cmd, args, options) { + let result = ''; + options = options || {}; + + return new Promise((resolve) => { + process.nextTick(() => { + try { + const child = spawn(cmd, args, options); + + if (child && !child.pid) { + child.on('error', function () { + resolve(result); + }); + } + if (child && child.pid) { + child.stdout.on('data', function (data) { + result += data.toString(); + }); + child.on('close', function () { + child.kill(); + resolve(result); + }); + child.on('error', function () { + child.kill(); + resolve(result); + }); + } else { + resolve(result); + } + } catch (e) { + resolve(result); + } + }); + }); +} + function getCodepage() { if (_windows) { if (!codepage) { @@ -506,7 +543,7 @@ function countLines(lines, startingWith) { function sanitizeShellString(str, strict = false) { const s = str || ''; let result = ''; - for (let i = 0; i <= 2000; i++) { + for (let i = 0; i <= mathMin(s.length, 2000); i++) { if (!(s[i] === undefined || s[i] === '>' || s[i] === '<' || @@ -529,10 +566,11 @@ function sanitizeShellString(str, strict = false) { s[i] === '\'' || s[i] === '`' || s[i] === '"' || - strict && s[i] === '@' || - strict && s[i] === ' ' || - strict && s[i] == '{' || - strict && s[i] == ')')) { + s[i].length > 1 || + (strict && s[i] === '@') || + (strict && s[i] === ' ') || + (strict && s[i] == '{') || + (strict && s[i] == ')'))) { result = result + s[i]; } } @@ -924,6 +962,7 @@ exports.wmic = wmic; exports.darwinXcodeExists = darwinXcodeExists; exports.getVboxmanage = getVboxmanage; exports.powerShell = powerShell; +exports.execSafe = execSafe; exports.nanoSeconds = nanoSeconds; exports.countUniqueLines = countUniqueLines; exports.countLines = countLines; @@ -942,5 +981,6 @@ exports.stringToString = stringToString; exports.stringSubstr = stringSubstr; exports.stringTrim = stringTrim; exports.stringStartWith = stringStartWith; +exports.mathMin = mathMin; exports.WINDIR = WINDIR; exports.getFilesInPath = getFilesInPath; diff --git a/package.json b/package.json index 095088b..cf1228f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "systeminformation", - "version": "5.3.3", + "version": "5.6.8", "description": "Simple system and OS information library", "license": "MIT", "author": "Sebastian Hildebrandt (https://plus-innovations.com)", diff --git a/test/si.js b/test/si.js index c1e85fe..55cb8c5 100644 --- a/test/si.js +++ b/test/si.js @@ -49,10 +49,11 @@ function test(f) { else if (f === '4') { si.networkStats().then(data => { if (data !== null) { resolve({ data, title: 'NET Stats' }); } else { resolve('not_supported'); } }); } else if (f === '5') { si.networkConnections().then(data => { if (data !== null) { resolve({ data, title: 'NET Connections' }); } else { resolve('not_supported'); } }); } else if (f === '6') { si.dockerInfo().then(data => { if (data !== null) { resolve({ data, title: 'Docker Info' }); } else { resolve('not_supported'); } }); } - else if (f === '7') { si.dockerContainers(true).then(data => { if (data !== null) { resolve({ data, title: 'Docker Containers' }); } else { resolve('not_supported'); } }); } - else if (f === '8') { si.dockerContainerStats('1').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Stats' }); } else { resolve('not_supported'); } }); } - else if (f === '9') { si.dockerContainerProcesses('1').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Processes' }); } else { resolve('not_supported'); } }); } - else if (f === '0') { si.dockerAll().then(data => { if (data !== null) { resolve({ data, title: 'Docker All' }); } else { resolve('not_supported'); } }); } + else if (f === '7') { si.dockerImages().then(data => { if (data !== null) { resolve({ data, title: 'Docker Images' }); } else { resolve('not_supported'); } }); } + else if (f === '8') { si.dockerContainers(true).then(data => { if (data !== null) { resolve({ data, title: 'Docker Containers' }); } else { resolve('not_supported'); } }); } + else if (f === '9') { si.dockerContainerStats('*').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Stats' }); } else { resolve('not_supported'); } }); } + else if (f === '0') { si.dockerContainerProcesses('*').then(data => { if (data !== null) { resolve({ data, title: 'Docker Cont Processes' }); } else { resolve('not_supported'); } }); } + else if (f === '+') { si.dockerVolumes().then(data => { if (data !== null) { resolve({ data, title: 'Docker Volumes' }); } else { resolve('not_supported'); } }); } else if (f === ',') { si.getStaticData().then(data => { if (data !== null) { resolve({ data, title: 'All Static Data' }); } else { resolve('not_supported'); } }); } else if (f === '.') { si.getDynamicData('apache2, postgres, wsearch').then(data => { if (data !== null) { resolve({ data, title: 'All Dynamic Data' }); } else { resolve('not_supported'); } }); } else if (f === '/') { si.getAllData('apache2, postgres, wsearch').then(data => { if (data !== null) { resolve({ data, title: 'All Data' }); } else { resolve('not_supported'); } }); } diff --git a/test/test.js b/test/test.js index 98775db..4ed9660 100644 --- a/test/test.js +++ b/test/test.js @@ -15,21 +15,21 @@ function printHeader() { function printMenu() { console.log(''); - console.log('┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐'); - console.log('│ a ... Audio h ... Bluetooth s ... Services Y ... Battery ? ... Get Object │'); - console.log('│ b ... BIOS i ... INET Latency S ... Shell z ... Users , ... All Static │'); - console.log('│ B ... Baseboard I ... INET Check Site t ... time 1 ... NET Iface Default . ... All Dynamic │'); - console.log('│ C ... Chassis j ... CPU Current Speed T ... CPU Temperature 2 ... NET Gateway Default / ... All │'); - console.log('│ c ... CPU l ... CPU Current Load u ... USB 3 ... NET Interfaces │'); - console.log('│ d ... DiskLayout L ... Full Load U ... UUID 4 ... NET Stats │'); - console.log('│ D ... DiskIO m ... Memory v ... Versions 5 ... NET Connections │'); - console.log('│ e ... Block Devices M ... MEM Layout V ... Virtual Box 6 ... Docker Info │'); - console.log('│ E ... Open Files o ... OS Info w ... WIFI networks 7 ... Docker Container │'); - console.log('│ f ... FS Size p ... Processes W ... WIFI interfaces 8 ... Docker Cont Stats │'); - console.log('│ F ... FS Stats P ... Process Load x ... WIFI connections 9 ... Docker Cont Proc │'); - console.log('│ g ... Graphics r ... Printer y ... System 0 ... Docker All q >>> QUIT │'); - console.log('└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘'); - + console.log('┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐'); + console.log('│ a ... Audio i ... INET Latency t ... time 1 ... NET Iface Default ? ... Get Object │'); + console.log('│ b ... BIOS I ... INET Check Site T ... CPU Temperature 2 ... NET Gateway Default , ... All Static │'); + console.log('│ B ... Baseboard j ... CPU Current Speed u ... USB 3 ... NET Interfaces . ... All Dynamic │'); + console.log('│ C ... Chassis l ... CPU Current Load U ... UUID 4 ... NET Stats / ... All │'); + console.log('│ c ... CPU L ... Full Load v ... Versions 5 ... NET Connections │'); + console.log('│ d ... DiskLayout m ... Memory V ... Virtual Box │'); + console.log('│ D ... DiskIO M ... MEM Layout w ... WIFI networks │'); + console.log('│ e ... Block Devices o ... OS Info W ... WIFI interfaces 6 ... Docker Info │'); + console.log('│ E ... Open Files p ... Processes x ... WIFI connections 7 ... Docker Images │'); + console.log('│ f ... FS Size P ... Process Load y ... System 8 ... Docker Container │'); + console.log('│ F ... FS Stats r ... Printer Y ... Battery 9 ... Docker Cont Stats │'); + console.log('│ g ... Graphics s ... Services z ... Users 0 ... Docker Cont Proc │'); + console.log('│ h ... Bluetooth S ... Shell + ... Docker Volumes q >>> QUIT │'); + console.log('└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘'); } function EnableUserInput() {