Monitoramento e Estatísticas
📈 Sistema de Estatísticas Built-in
-- Obter estatísticas completas do cache
local stats = LockSystem.Cache.stats()
-- Estrutura retornada:
{
items = 15, -- Número de itens em cache
memory_bytes = 8192, -- Memória usada em bytes
memory_kb = 8, -- Memória usada em KB
hits = 450, -- Número de acertos (cache hit)
misses = 89, -- Número de falhas (cache miss)
hit_rate = 83.45, -- Taxa de acerto em %
sets = 67, -- Número de itens adicionados
clears = 12, -- Número de limpezas realizadas
expired_items = 3, -- Itens expirados aguardando limpeza
efficiency = 87.5 -- Eficiência geral em %
}
🖥️ Comando Admin para Monitoramento
-- Comando administrativo para visualizar estatísticas
addCommandHandler("cache", function(player)
if not hasObjectPermissionTo(player, "general.administrator") then
outputChatBox("Acesso negado!", player, 255, 0, 0)
return
end
local stats = LockSystem.Cache.stats()
outputChatBox("=== ESTATÍSTICAS DO CACHE ===", player, 255, 215, 0)
outputChatBox("📦 Items em cache: " .. stats.items, player)
outputChatBox("💾 Memória usada: " .. stats.memory_kb .. "KB", player)
outputChatBox("🎯 Taxa de acerto: " .. stats.hit_rate .. "%", player)
outputChatBox("✅ Total de hits: " .. stats.hits, player)
outputChatBox("❌ Total de misses: " .. stats.misses, player)
outputChatBox("📝 Items adicionados: " .. stats.sets, player)
outputChatBox("🧹 Limpezas realizadas: " .. stats.clears, player)
outputChatBox("⏰ Items expirados: " .. stats.expired_items, player)
outputChatBox("⚡ Eficiência: " .. stats.efficiency .. "%", player)
end)
🧹 Sistema de Limpeza Personalizada
-- Limpeza automática de cache de players offline
setTimer(function()
local onlinePlayers = {}
-- Mapear players online
for _, player in ipairs(getElementsByType("player")) do
onlinePlayers[getPlayerSerial(player)] = true
end
-- Contar itens removidos
local playerCacheRemoved = 0
local vehicleCacheRemoved = 0
-- Limpar cache de players offline
playerCacheRemoved = LockSystem.Cache.clear("player_*")
-- Limpar cache de veículos antigos
vehicleCacheRemoved = LockSystem.Cache.clear("vehicle_temp_*")
-- Log da limpeza
if playerCacheRemoved > 0 or vehicleCacheRemoved > 0 then
outputDebugString("[CACHE-CLEANUP] Removidos: " ..
playerCacheRemoved .. " players, " ..
vehicleCacheRemoved .. " veículos", 3)
end
end, 1800000, 0) -- A cada 30 minutos
-- Limpeza de emergência quando cache fica muito grande
setTimer(function()
local stats = LockSystem.Cache.stats()
-- Se usar mais de 10MB de memória, fazer limpeza agressiva
if stats.memory_kb > 10240 then
LockSystem.Cache.clear("temp_*") -- Limpar dados temporários
LockSystem.Cache.clear("rate_*") -- Limpar rate limiting antigo
outputDebugString("[CACHE-EMERGENCY] Limpeza de emergência realizada", 2)
end
end, 300000, 0) -- A cada 5 minutos
📊 Sistema de Alertas de Performance
-- Monitoramento de performance do cache
setTimer(function()
local stats = LockSystem.Cache.stats()
-- Alerta se hit rate estiver baixo
if stats.hit_rate < 60 and stats.hits + stats.misses > 100 then
outputDebugString("[CACHE-WARNING] Taxa de acerto baixa: " ..
stats.hit_rate .. "% - Revisar TTL dos caches", 2)
end
-- Alerta se usar muita memória
if stats.memory_kb > 5120 then
outputDebugString("[CACHE-WARNING] Uso alto de memória: " ..
stats.memory_kb .. "KB - Considerar limpeza", 2)
end
-- Alerta se muitos itens expirados
if stats.expired_items > 50 then
outputDebugString("[CACHE-INFO] " .. stats.expired_items ..
" itens expirados aguardando limpeza", 3)
end
-- Log de eficiência
if stats.efficiency > 90 then
outputDebugString("[CACHE-SUCCESS] Cache operando com alta eficiência: " ..
stats.efficiency .. "%", 4)
end
end, 600000, 0) -- A cada 10 minutos
Atualizado