hub-stats.lua Verlihub Бот для отображения количества пользователей

Созданный: 2026/07/02 19:41:27 America/Chicago
К: admin
Изменено: 2026/07/03 13:19:11 America/Chicago
К: admin

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

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"

При изменении только префикса, постфикса, интервала или включенной статистики никаких изменений логики не требуется.

Предлагаемые будущие улучшения

Возможные более поздние версии могут добавить:

  • Отображение пикового количества пользователей.
  • Отображение количества зарегистрированных пользователей.
  • Отображение времени работы хаба.
  • Отображение общей доли по единицам.
  • Отдельные записи отображения для пользователей и общего доступа.
  • Команда статистики только для оператора.
  • Ежедневное отслеживание максимальной отметки.
  • Ведение журнала моментальных снимков статистики на основе файлов.

Добавляйте только ту статистику, которую будут читать пользователи или операторы. Слишком большой объем информации затрудняет сканирование записи в списке пользователей.

Родительская Страница