#javascript #node.js #discord.js #cpu-usage #ram
Вопрос:
Я пытаюсь создать команду botinfo со статистикой использования ресурсов. У меня есть покрытая память (хотя процент использования памяти тоже был бы хорош), но я, похоже, не могу получить загрузку процессора. Я перепробовал несколько пакетов и методов, но ни один не сработал. У меня такая штука с памятью:
const usedMemory = os.totalmem() - os.freemem()
Как бы я использовал процессор и вернул его в discord.js внедрить?
Комментарии:
1. если вы не используете что-то вроде exec для вызова
grep 'cpu ' /proc/stat | awk '{usage=($2 $4)*100/($2 $4 $5)} END {print usage "%"}'
, чтобы получить тикер % вашей потребности, то вы усредняете его затем * 100, вам может быть интересно использовать такую библиотеку, как npmjs.com/package/systeminformation у них есть это в currentLoad , который, если вы посмотрите на код, вы увидите, как он собирает показатели, используя вышеупомянутый тикер2. В консоли написано обещание: <ожидание>, когда я пытаюсь выполнить консоль. запишите это в журнал. И в нем говорится [обещание объекта] в discord.js встраивать
3. большинство вещей возвращают обещания в js, вам просто нужно знать, как с ними обращаться, все показано в документах по ссылкам выше, прочитайте их или вы можете пообещать Google: <в ожидании> вы найдете кучу учебных ресурсов
Ответ №1:
process.cpuUsage()
Метод возвращает использование пользователем и системой процессорного времени текущего процесса в объекте со свойствами пользователь и система, значения которых microsecond values
равны (миллионная доля секунды). Эти значения измеряют время, затраченное в user
коде, и system
код соответственно, и могут оказаться больше, чем фактическое затраченное время, если несколько ядер процессора выполняют работу для этого процесса.
Результат предыдущего вызова process.CPUUsage() может быть передан в качестве аргумента функции, чтобы получить различное значение.
import { cpuUsage } from 'process';
const startUsage = cpuUsage();
// { user: 38579, system: 6986 }
// spin the CPU for 500 milliseconds
const now = Date.now();
while (Date.now() - now < 500);
console.log(cpuUsage(startUsage));
// { user: 514883, system: 11226 }
Для получения более подробной информации ознакомьтесь здесь.
Если вы хотите войти в %, вы можете использовать существующий модуль npm: node-os-utils. Вы можете использовать его вот так:
const osu = require('node-os-utils')
const cpu = osu.cpu
const count = cpu.count() // 8
cpu.usage()
.then(cpuPercentage => {
console.log(cpuPercentage) // 10.38
})
const osCmd = osu.osCmd
osCmd.whoami()
.then(userName => {
console.log(userName) // admin
})
Для получения более подробной информации ознакомьтесь с документацией здесь.
Комментарии:
1. Как мне получить загрузку процессора для всей системы и вернуть ее в discord.js однако встраивать в процентах?
2. Я обновил ответ, это может помочь получить именно то, что вам нужно. % может быть рассчитано с помощью этого модуля. Если вы можете получить память и передать ее в discord, вам нужно сделать то же самое с этим.
3. Он возвращает [обещание объекта], но правильно отображает его в консоли
4. Я также попытался создать переменную и сделать ее равной 100 — cpu.free (), но там написано nan
5. Можете ли вы поделиться кодом там, где вы хотите его использовать? Вам просто нужно понять, как получить значения обещания — есть два метода — затем/поймать или асинхронно/ждать.
Ответ №2:
Я нашел способ сделать это. В node-os-utils есть функция (https://www.npmjs.com/package/node-os-utils) называется loadavgTime, которое необходимо использовать с loadavg-windows (https://www.npmjs.com/package/loadavg-windows) если вы находитесь в Windows. По умолчанию он принимает os.loadavg с последней минуты. Затем я разделил его на 2, а затем умножил на 10, потому что по какой-то причине он выдает странное число (между 1.__ и 2.__). Это дает его в процентах, вам просто нужно добавить % после него, когда консоль.регистрирую его. Вот код:
const osu = require('node-os-utils')
require('loadavg-windows')
const cpu = osu.cpu
const usage = (cpu.loadavgTime() / 2) * 10
console.log(usage)