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.
Zalecana lokalizacja pliku
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 = ""
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 |
|---|---|
30 | Bardziej responsywny. Przydatne w przypadku ruchliwych węzłów komunikacyjnych. |
60 | Zalecane ustawienie domyślne. |
300 | Niż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
Zalecane ustawienia produkcyjne
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.