Utworzony: 2026/07/02 19:41:27 America/Chicago
Przez: admin
Zmieniony: 2026/07/03 13:19:11 America/Chicago
Przez: admin

The hub-stats.lua skrypt tworzy wpis na liście użytkowników przypominający bota, który wyświetla aktualne statystyki centrum. Koncentrator może wyświetlać użytkowników online, operatorów, całkowity udział lub kompaktowy znacznik stanu bez uruchamiania oddzielnego zewnętrznego procesu bota.

Ten skrypt skupia się wyłącznie na wyświetlaniu. Odczytuje proste liczniki, buduje krótką nazwę np. !_Stats_128U_4Ops i pozostawia kosztowną pracę poza procesem centrum.

Co robi ten skrypt

Skrypt tworzy nazwę wyświetlaną na podstawie skonfigurowanych statystyk centrum.

Przykładowe nazwy wyświetlane:

!_Users_128
!_Hub_128_Online
!_Stats_128U_4Ops
!_Share_24.5TB

Typowe zastosowania obejmują:

  • Wyświetlanie aktualnych użytkowników online.
  • Wyświetlanie operatorów online.
  • Wyświetlanie całkowitego udziału w centrum, gdy interfejs API Lua udostępnia go tanio.
  • Wyświetlanie największej liczby użytkowników, gdy kompilacja udostępnia ten licznik.
  • Wyświetlanie zarejestrowanych użytkowników, gdy kompilacja udostępnia ten licznik.
  • Tworzenie kompaktowego znacznika stanu koncentratora.
  • Dodanie wpisu statystyk na żywo do listy użytkowników.

Dokładne dostępne liczniki zależą od interfejsu API wtyczki Verlihub Lua dostępnego w wersji Verlihub.

Wymagania

Ten skrypt wymaga:

  • Verlihub zainstalowany i działa.
  • Zainstalowana wtyczka Verlihub Lua.
  • Wtyczka Lua włączona w Verlihub.
  • Zezwolenie na ładowanie i rozładowywanie Lua skryptów.
  • Zapisywalny katalog skryptów dla plików Verlihub Lua.
  • Kompilacja Verlihub Lua, która może udostępniać dane wyświetlania listy użytkowników lub wywoływać funkcję generowania nazw z wpisu wyświetlacza.

Przed załadowaniem skryptu upewnij się, że wtyczka Lua jest aktywna:

!pluglist

Jeśli wtyczki Lua nie ma na liście, załaduj ją lub włącz najpierw z nadrzędnego artykułu instalacyjnego Lua.

Użyj dedykowanego katalogu skryptów:

mkdir -p /PATH/TO/HUB/scripts

Umieść skrypt pod adresem:

/PATH/TO/HUB/scripts/hub-stats.lua

W przypadku systemów produkcyjnych do tego katalogu powinni zapisywać tylko zaufani administratorzy lub użytkownik usługi Verlihub. Nie używaj uprawnień do zapisu na całym świecie.

Polecenia ładowania i rozładowywania

Załaduj skrypt:

!luaload /PATH/TO/HUB/scripts/hub-stats.lua

Wyładuj skrypt:

!luaunload /PATH/TO/HUB/scripts/hub-stats.lua

Jeśli edytujesz skrypt, wyładuj go i załaduj ponownie:

!luaunload /PATH/TO/HUB/scripts/hub-stats.lua
!luaload /PATH/TO/HUB/scripts/hub-stats.lua

Użyj pełnej ścieżki bezwzględnej, chyba że konfiguracja wtyczki Verlihub Lua obsługuje ścieżki względne.

Kod skryptu

-- 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

Opcje konfiguracji

name

name = ""

Podstawowa wartość nazwy wpisu przypominającego bota.

W tym skrypcie widoczna nazwa jest generowana przez GetName(), Więc name zazwyczaj może pozostać pusty.

class

class = 3

Kontroluje wyświetlaną klasę lub poziom profilu wpisu przypominającego bota.

Znaczenie wartości klas zależy od konfiguracji koncentratora. Użyj wartości odpowiadającej temu, jak wpis statystyk powinien wyglądać na liście użytkowników.

description

description = "Hub Stats Bot"

Opis pokazany dla wpisu przypominającego bota.

Przykłady:

description = "Hub Stats Bot"
description = "Users Online"
description = "Hub Status"
description = "Live Hub Stats"

speed

speed = "100"

Wartość szybkości połączenia wyświetlana dla wpisu przypominającego bota. To jest kosmetyka. Nie kontroluje częstotliwości aktualizacji skryptu.

email

email = ""

Pole e-mail wyświetlane dla wpisu przypominającego bota. Pozostaw to pole puste, chyba że chcesz wyświetlić adres kontaktowy.

share

share = "0"

Rozmiar udziału wyświetlany dla wpisu przypominającego bota. W przypadku bota wyświetlającego statystyki: 0 jest odpowiednie, chyba że chcesz, aby wpis pokazywał wartość dekoracyjną.

prefix

prefix = "!_Stats_"

Tekst umieszczony przed wygenerowanymi statystykami.

Przykłady:

prefix = "!_Stats_"
prefix = "!_Hub_"
prefix = "!_Users_"
prefix = "[Stats] "

Wybierz prefiks, który będzie wyraźnie sortowany na liście użytkowników centrum.

postfix

postfix = ""

Tekst umieszczany po wygenerowanych statystykach.

Przykłady:

postfix = ""
postfix = "_Online"
postfix = "_Hub"

interval

interval = 60

Kontroluje częstotliwość aktualizacji wpisu na ekranie.

Zalecane wartości:

WartośćOznaczający
30Bardziej responsywny. Przydatne w przypadku ruchliwych węzłów komunikacyjnych.
60Zalecane ustawienie domyślne.
300Niższa aktywność. Przydatne w przypadku cichych węzłów.

Unikaj niskich wartości. Statystyki Hubu nie muszą być aktualizowane co sekundę.

counter

counter = 0

Licznik wewnętrzny używany przez skrypt. Nie zmieniaj tego, chyba że modyfikujesz logikę skryptu.

show_users

show_users = true

Określa, czy wyświetlana nazwa zawiera aktualną liczbę użytkowników online.

Przykładowe wyjście:

!_Stats_128U

show_ops

show_ops = true

Określa, czy wyświetlana nazwa zawiera liczbę bieżących operatorów.

Przykładowe wyjście:

!_Stats_128U_4Ops

show_share

show_share = false

Kontroluje, czy nazwa wyświetlana obejmuje całkowity udział w centrum.

Przykładowe wyjście:

!_Stats_128U_4Ops_24.5TB

Włącz tę opcję tylko wtedy, gdy interfejs API Verlihub Lua udostępnia wiarygodną całkowitą wartość udziału.

Uwagi dotyczące zgodności API

Przykładowy skrypt wykorzystuje następujące funkcje:

VH:GetUsersCount()
VH:GetOperatorsCount()
VH:GetTotalShare()

Twoja wersja wtyczki Verlihub Lua może ujawniać różne nazwy funkcji. Jeśli skrypt ładuje się, ale zawsze wyświetla zero, dostosuj wywołania API używane przez funkcje licznika.

Główne funkcje do edycji to:

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

Zastąp te wywołania funkcjami obsługiwanymi przez Twoją wersję wtyczki Verlihub Lua.

Przykładowe konfiguracje

Tylko liczba użytkowników

prefix = "!_Users_"
postfix = "_Online"
interval = 60
show_users = true
show_ops = false
show_share = false

Przykładowy wyświetlacz:

!_Users_128U_Online

Użytkownicy i operatorzy

prefix = "!_Stats_"
postfix = ""
interval = 60
show_users = true
show_ops = true
show_share = false

Przykładowy wyświetlacz:

!_Stats_128U_4Ops

Wyświetlanie całkowitego udziału

prefix = "!_Share_"
postfix = ""
interval = 300
show_users = false
show_ops = false
show_share = true

Przykładowy wyświetlacz:

!_Share_24.5TB

Stan koncentratora kompaktowego

prefix = "!_Hub_"
postfix = ""
interval = 60
show_users = true
show_ops = true
show_share = true

Przykładowy wyświetlacz:

!_Hub_128U_4Ops_24.5TB

W przypadku większości centrów zacznij od samych użytkowników i operatorów:

prefix = "!_Stats_"
postfix = ""
interval = 60
show_users = true
show_ops = true
show_share = false

Dzięki temu wyświetlacz jest wystarczająco krótki, aby pomieścić zwykłe listy użytkowników.

Jeśli lista użytkowników koncentratora jest zatłoczona, użyj krótszego wyświetlacza:

prefix = "!_U_"
postfix = ""
interval = 60
show_users = true
show_ops = false
show_share = false

Jeśli obliczanie całkowitego udziału jest kosztowne lub zawodne w Twojej wersji Verlihub, pozostaw tę opcję wyłączoną:

show_share = false

Testowanie skryptu

Po załadowaniu skryptu sprawdź listę użytkowników centrum pod kątem wygenerowanego wpisu statystyk.

Potwierdź, że:

  • Wpis pojawia się tylko raz.
  • Wyświetlana liczba użytkowników jest prawidłowa.
  • Wyświetlana liczba operatorów jest prawidłowa.
  • Całkowity udział jest wyświetlany poprawnie, jeśli jest włączony.
  • Nazwa nie jest zbyt długa jak na listę użytkowników.
  • Częstotliwość aktualizacji jest rozsądna.
  • Wpis znika po wyładowaniu skryptu.
  • Ponowne załadowanie skryptu nie tworzy duplikatów.

Jeśli wyświetlacz zawsze pokazuje zero, przejrzyj sekcję dotyczącą zgodności API.

Rozwiązywanie problemów

Skrypt nie ładuje się

Sprawdź, czy wtyczka Lua jest aktywna:

!pluglist

Sprawdź ścieżkę pliku:

!luaload /PATH/TO/HUB/scripts/hub-stats.lua

Użyj ścieżki bezwzględnej, jeśli ścieżki względne nie działają.

Statystyki zawsze pokazują zero

Zwykle oznacza to, że nazwy funkcji API Lua nie odpowiadają wersji wtyczki Verlihub.

Sprawdź funkcje użyte w:

GetUserCount()
GetOperatorCount()
GetTotalShare()

Następnie zamień przykład VH:* wywołania z funkcjami obsługiwanymi przez Twoją instalację.

Nazwa wpisu jest za długa

Wyłącz niektóre pola lub skróć prefiks.

Przykład:

prefix = "!_S_"
show_share = false

Wyświetlaj aktualizacje zbyt często

Zwiększ interwał.

Zalecony:

interval = 60

W przypadku cichych koncentratorów:

interval = 300

Pojawiają się zduplikowane wpisy

Wyładuj skrypt:

!luaunload /PATH/TO/HUB/scripts/hub-stats.lua

Następnie załaduj go ponownie:

!luaload /PATH/TO/HUB/scripts/hub-stats.lua

Jeśli duplikaty będą się powtarzać, zrestartuj wtyczkę Lua lub usługę Verlihub w oknie konserwacji.

Uwagi dotyczące bezpieczeństwa

Ten skrypt powinien pozostać lekki. Nie dodawaj:

  • Zewnętrzne żądania HTTP.
  • Zapytania do bazy danych przy każdej aktualizacji.
  • Skanowanie plików.
  • Długie pętle.
  • Blokowanie połączeń usypiających.
  • Drogie obliczenia na użytkownika.

Skrypty wyświetlające statystyki powinny odczytywać proste liczniki centrum i aktualizować nazwę wyświetlaną. Jeśli obliczenie wartości jest kosztowne, należy ją umieścić w pamięci podręcznej poza procesem centrum.

Uwagi dotyczące konserwacji

Zachowaj kopię zapasową przed zmianą skryptu:

cp /PATH/TO/HUB/scripts/hub-stats.lua /PATH/TO/HUB/scripts/hub-stats.lua.bak

Jeśli używasz Gita:

cd /PATH/TO/HUB/scripts
git add hub-stats.lua
git commit -m "Update hub-stats.lua settings"

W przypadku zmiany tylko prefiksu, postfiksu, interwału lub włączonych statystyk nie są wymagane żadne zmiany logiczne.

Sugerowane przyszłe ulepszenia

Możliwe późniejsze wersje mogłyby dodać:

  • Wyświetlanie szczytowej liczby użytkowników.
  • Wyświetlanie liczby zarejestrowanych użytkowników.
  • Wyświetlanie czasu pracy koncentratora.
  • Wyświetlanie całkowitego udziału według jednostki.
  • Oddzielne wpisy wyświetlacza dla użytkowników i udostępnij.
  • Polecenie dotyczące statystyk dostępne tylko dla operatora.
  • Codzienne śledzenie śladów wysokiego poziomu.
  • Rejestrowanie migawek statystyk opartych na plikach.

Dodaj tylko statystyki, które będą czytać użytkownicy lub operatorzy. Zbyt dużo informacji utrudnia skanowanie wpisu na liście użytkowników.

Strona Nadrzędna