Re: NJS - Неправильное чтение файла
Dmitry Volyntsev
xeioex на nginx.com
Чт Апр 16 12:40:17 UTC 2020
> On 16 Apr 2020, at 00:41, edc <nginx-forum на forum.nginx.org> wrote:
>
> Возникла необходимость читать счётчики с сетевых интерфейсов. Метрика
> доступна в файле /sys/class/net/eth0/statistics/rx_bytes
> NJS возвращает текущее значение и вдобавок к метрике мусор. Похоже весь файл
> читается блоком в 4K. Если тот-же код выполнить в ноде - результат
> корректен. Правильное ли это поведение njs?
>
> Пример кода - test.js
>
> var fs = require('fs')
> var file = fs.readFileSync('/sys/class/net/eth0/statistics/rx_bytes')
> var file = fs.writeFileSync('filecopy.txt', file)
>
> Проверка:
>
> stat /sys/class/net/wlp61s0/statistics/rx_bytes
>
> File: /sys/class/net/wlp61s0/statistics/rx_bytes
> Size: 4096 Blocks: 0 IO Block: 4096 regular file
>
> njs test.js
> stat filecopy.txt
>
> File: filecopy.txt
> Size: 4096 Blocks: 8 IO Block: 4096 regular file
>
> node test.js
> stat filecopy.txt
>
> File: filecopy.txt
> Size: 10 Blocks: 8 IO Block: 4096 regular file
>
> Версии:
> njs -v
> 0.3.9
>
> node -v
> v8.10.0
>
> Проверял на Ubuntu 18.04.4 LTS и так же в Docker nginx:latest
>
> Posted at Nginx Forum: https://forum.nginx.org/read.php?21,287667,287667#msg-287667
Могу подтвердить проблему, исправим в ближайших релизах.
njs сейчас доверяет размеру файла полученного через fstat(), который составляет 4096.
В качество workaround могу предложить следующее
: var fs = require(‘fs’)
: var file = fs.readFileSync('/sys/class/net/eth0/statistics/rx_bytes’)
: var rx_bytes = Number(file.slice(0, file.indexOf(‘\n’)));
>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru
Подробная информация о списке рассылки nginx-ru