hub-stats.lua Скрипт создает запись в списке пользователей, похожую на бота, которая отображает текущую статистику хаба. Хаб может отображать онлайн-пользователей, операторов, общую долю или компактный маркер состояния без запуска отдельного внешнего процесса бота.
Этот скрипт фокусируется только на отображении. Он считывает простые счетчики, создает короткое имя, например !_Stats_128U_4Ops и оставляет дорогостоящую работу за пределами центрального процесса.
Что делает этот скрипт
Скрипт создает отображаемое имя на основе настроенной статистики концентратора.
Примеры отображаемых имен:
!_Users_128
!_Hub_128_Online
!_Stats_128U_4Ops
!_Share_24.5TB
Обычное использование включает в себя:
- Показаны текущие пользователи онлайн.
- Показаны операторы онлайн.
- Показывает общую долю концентратора, когда API Lua предоставляет ее дешево.
- Отображение пиковых пользователей, когда ваша сборка предоставляет этот счетчик.
- Отображение зарегистрированных пользователей, когда ваша сборка предоставляет этот счетчик.
- Создание маркера состояния компактного концентратора.
- Добавление записи живой статистики в список пользователей.
Точные доступные счетчики зависят от API плагина Verlihub Lua, предоставляемого вашей версией Verlihub.
Требования
Этот скрипт требует:
- Verlihub установлен и работает.
- Установлен плагин Verlihub Lua.
- Плагин Lua включен в Verlihub.
- Разрешение на загрузку и выгрузку Lua скриптов.
- Доступный для записи каталог сценариев для Verlihub Lua файлов.
- Сборка Verlihub Lua, которая может предоставлять данные отображения списка пользователей или вызывать функцию генерации имени из записи отображения.
Перед загрузкой скрипта убедитесь, что плагин Lua активен:
!pluglist
Если плагин Lua отсутствует в списке, сначала загрузите или включите его из родительской статьи по установке Lua.
Рекомендуемое расположение файла
Используйте выделенный каталог сценариев:
mkdir -p /PATH/TO/HUB/scripts
Разместите скрипт по адресу:
/PATH/TO/HUB/scripts/hub-stats.lua
Для производственных систем только доверенные администраторы или пользователь службы Verlihub должны писать в этот каталог. Не используйте разрешения на запись для всех.
Команды загрузки и выгрузки
Загрузите скрипт:
!luaload /PATH/TO/HUB/scripts/hub-stats.lua
Выгрузите скрипт:
!luaunload /PATH/TO/HUB/scripts/hub-stats.lua
Если вы редактируете скрипт, выгрузите его и загрузите снова:
!luaunload /PATH/TO/HUB/scripts/hub-stats.lua
!luaload /PATH/TO/HUB/scripts/hub-stats.lua
Используйте полный абсолютный путь, если только ваша конфигурация плагина Verlihub Lua не поддерживает относительные пути.
Код сценария
-- Script: hub-stats.lua
-- Purpose: Displays hub statistics as a bot-like user-list entry.
-- Scope: Lightweight display bot only.
-- Notes: Available statistics depend on the Verlihub Lua API exposed by your build.
name = ""
class = 3
description = "Hub Stats Bot"
speed = "100"
email = ""
share = "0"
prefix = "!_Stats_"
postfix = ""
interval = 60
counter = 0
show_users = true
show_ops = true
show_share = false
function SafeCall(callback, fallback)
local ok, result = pcall(callback)
if ok and result ~= nil then
return result
end
return fallback
end
function FormatShare(bytes)
local value = tonumber(bytes)
if value == nil then
return "0B"
end
if value >= 1099511627776 then
return string.format("%.1fTB", value / 1099511627776)
end
if value >= 1073741824 then
return string.format("%.1fGB", value / 1073741824)
end
if value >= 1048576 then
return string.format("%.1fMB", value / 1048576)
end
if value >= 1024 then
return string.format("%.1fKB", value / 1024)
end
return tostring(value) .. "B"
end
function GetUserCount()
-- Replace this function body if your Verlihub Lua API uses a different call.
return SafeCall(function()
return VH:GetUsersCount()
end, 0)
end
function GetOperatorCount()
-- Replace this function body if your Verlihub Lua API uses a different call.
return SafeCall(function()
return VH:GetOperatorsCount()
end, 0)
end
function GetTotalShare()
-- Replace this function body if your Verlihub Lua API uses a different call.
return SafeCall(function()
return VH:GetTotalShare()
end, 0)
end
function GetStatsText()
local parts = {}
if show_users then
table.insert(parts, tostring(GetUserCount()) .. "U")
end
if show_ops then
table.insert(parts, tostring(GetOperatorCount()) .. "Ops")
end
if show_share then
table.insert(parts, FormatShare(GetTotalShare()))
end
if table.getn(parts) == 0 then
return "Online"
end
return table.concat(parts, "_")
end
function GetName()
return prefix .. GetStatsText() .. postfix
end
Опции конфигурации
name
name = ""
Значение базового имени для записи, похожей на бота.
В этом скрипте видимое имя генерируется GetName(), так name обычно может оставаться пустым.
class
class = 3
Управляет отображаемым классом или уровнем профиля записи, похожей на бота.
Значение значений класса зависит от конфигурации концентратора. Используйте значение, соответствующее тому, как запись статистики должна отображаться в списке пользователей.
description
description = "Hub Stats Bot"
Описание, показанное для записи, похожей на бота.
Примеры:
description = "Hub Stats Bot"
description = "Users Online"
description = "Hub Status"
description = "Live Hub Stats"
speed
speed = "100"
Значение скорости соединения, отображаемое для записи, похожей на бота. Это косметика. Он не контролирует частоту обновления сценария.
email = ""
Поле электронной почты, отображаемое для записи, похожей на бот. Оставьте это поле пустым, если вы не хотите отображать контактный адрес.
share
share = "0"
Размер общего ресурса, отображаемый для записи, похожей на бот. Для бота для отображения статистики: 0 подходит, если вы не хотите, чтобы в записи отображалась декоративная стоимость акций.
prefix
prefix = "!_Stats_"
Текст размещается перед сгенерированной статистикой.
Примеры:
prefix = "!_Stats_"
prefix = "!_Hub_"
prefix = "!_Users_"
prefix = "[Stats] "
Выберите префикс, который четко сортируется в списке пользователей хаба.
postfix
postfix = ""
Текст размещается после сгенерированной статистики.
Примеры:
postfix = ""
postfix = "_Online"
postfix = "_Hub"
interval
interval = 60
Управляет частотой обновления отображаемой записи.
Рекомендуемые значения:
| Ценить | Значение |
|---|---|
30 | Более отзывчивый. Полезно для загруженных узлов. |
60 | Рекомендуемое значение по умолчанию. |
300 | Меньшая активность. Полезно для тихих хабов. |
Избегайте низких значений. Статистику хаба не нужно обновлять каждую секунду.
counter
counter = 0
Внутренний счетчик, используемый сценарием. Не меняйте это значение, если вы не изменяете логику сценария.
show_users
show_users = true
Определяет, включает ли отображаемое имя текущее количество онлайн-пользователей.
Пример вывода:
!_Stats_128U
show_ops
show_ops = true
Определяет, включает ли отображаемое имя текущее количество операторов.
Пример вывода:
!_Stats_128U_4Ops
show_share
show_share = false
Определяет, включает ли отображаемое имя общую долю концентратора.
Пример вывода:
!_Stats_128U_4Ops_24.5TB
Включайте это только тогда, когда ваш API Verlihub Lua предоставляет надежную общую стоимость доли.
Примечания о совместимости API
В примере сценария используются следующие функции:
VH:GetUsersCount()
VH:GetOperatorsCount()
VH:GetTotalShare()
Ваша версия плагина Verlihub Lua может предоставлять другие имена функций. Если скрипт загружается, но всегда отображает ноль, настройте вызовы API, используемые функциями счетчика.
Основные функции редактирования:
function GetUserCount()
return SafeCall(function()
return VH:GetUsersCount()
end, 0)
end
function GetOperatorCount()
return SafeCall(function()
return VH:GetOperatorsCount()
end, 0)
end
function GetTotalShare()
return SafeCall(function()
return VH:GetTotalShare()
end, 0)
end
Замените эти вызовы функциями, поддерживаемыми вашей версией плагина Verlihub Lua.
Примеры конфигураций
Только количество пользователей
prefix = "!_Users_"
postfix = "_Online"
interval = 60
show_users = true
show_ops = false
show_share = false
Пример отображения:
!_Users_128U_Online
Пользователи и операторы
prefix = "!_Stats_"
postfix = ""
interval = 60
show_users = true
show_ops = true
show_share = false
Пример отображения:
!_Stats_128U_4Ops
Общая доля показов
prefix = "!_Share_"
postfix = ""
interval = 300
show_users = false
show_ops = false
show_share = true
Пример отображения:
!_Share_24.5TB
Статус компакт-концентратора
prefix = "!_Hub_"
postfix = ""
interval = 60
show_users = true
show_ops = true
show_share = true
Пример отображения:
!_Hub_128U_4Ops_24.5TB
Рекомендуемые производственные настройки
Для большинства хабов начните только с пользователей и операторов:
prefix = "!_Stats_"
postfix = ""
interval = 60
show_users = true
show_ops = true
show_share = false
Это делает отображение достаточно коротким для обычных списков пользователей.
Если список пользователей хаба переполнен, используйте более короткий дисплей:
prefix = "!_U_"
postfix = ""
interval = 60
show_users = true
show_ops = false
show_share = false
Если расчет общей доли в вашей версии Verlihub требует больших затрат или ненадежен, оставьте его отключенным:
show_share = false
Тестирование сценария
После загрузки скрипта проверьте список пользователей хаба на наличие сгенерированной записи статистики.
Подтвердите это:
- Запись появляется только один раз.
- Отображаемое количество пользователей правильное.
- Отображаемое количество операторов правильное.
- Общая доля отображается правильно, если она включена.
- Имя не слишком длинное для списка пользователей.
- Интервал обновления разумный.
- Запись исчезает после выгрузки скрипта.
- Перезагрузка скрипта не создает дубликатов.
Если на дисплее всегда отображается ноль, просмотрите раздел совместимости API.
Поиск неисправностей
Скрипт не загружается
Убедитесь, что плагин Lua активен:
!pluglist
Проверьте путь к файлу:
!luaload /PATH/TO/HUB/scripts/hub-stats.lua
Используйте абсолютный путь, если относительные пути не работают.
Статистика всегда показывает ноль
Обычно это означает, что имена функций API Lua не соответствуют версии вашего плагина Verlihub.
Проверьте функции, используемые в:
GetUserCount()
GetOperatorCount()
GetTotalShare()
Затем замените пример VH:* вызовы с функциями, поддерживаемыми вашей установкой.
Имя записи слишком длинное
Отключите некоторые поля или сократите префикс.
Пример:
prefix = "!_S_"
show_share = false
Отображать обновления слишком часто
Увеличьте интервал.
Рекомендуется:
interval = 60
Для тихих хабов:
interval = 300
Появляются повторяющиеся записи
Выгрузите скрипт:
!luaunload /PATH/TO/HUB/scripts/hub-stats.lua
Затем загрузите его снова:
!luaload /PATH/TO/HUB/scripts/hub-stats.lua
Если дубликаты продолжаются, перезапустите плагин Lua или службу Verlihub во время периода обслуживания.
Примечания по безопасности
Этот сценарий должен оставаться легким. Не добавляйте:
- Внешние HTTP-запросы.
- Запросы к базе данных при каждом обновлении.
- Сканирование файлов.
- Длинные петли.
- Блокировка вызовов сна.
- Дорогостоящие вычисления для каждого пользователя.
Скрипты отображения статистики должны считывать простые счетчики концентратора и обновлять отображаемое имя. Если вычисление значения требует больших затрат, кэшируйте его вне процесса концентратора.
Примечания по техническому обслуживанию
Сохраните резервную копию перед изменением сценария:
cp /PATH/TO/HUB/scripts/hub-stats.lua /PATH/TO/HUB/scripts/hub-stats.lua.bak
Если вы используете Git:
cd /PATH/TO/HUB/scripts
git add hub-stats.lua
git commit -m "Update hub-stats.lua settings"
При изменении только префикса, постфикса, интервала или включенной статистики никаких изменений логики не требуется.
Предлагаемые будущие улучшения
Возможные более поздние версии могут добавить:
- Отображение пикового количества пользователей.
- Отображение количества зарегистрированных пользователей.
- Отображение времени работы хаба.
- Отображение общей доли по единицам.
- Отдельные записи отображения для пользователей и общего доступа.
- Команда статистики только для оператора.
- Ежедневное отслеживание максимальной отметки.
- Ведение журнала моментальных снимков статистики на основе файлов.
Добавляйте только ту статистику, которую будут читать пользователи или операторы. Слишком большой объем информации затрудняет сканирование записи в списке пользователей.