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