From 70ef993039372b65f1d71dc24d6ce891f8ce7311 Mon Sep 17 00:00:00 2001 From: Linventif Date: Sun, 11 Aug 2024 01:28:09 +0000 Subject: [PATCH] add: gmInte.http.postLog for Batching logs event --- lua/gmod_integration/server/sv_players.lua | 14 +++++----- lua/gmod_integration/shared/sh_http.lua | 32 ++++++++++++++++++++++ 2 files changed, 39 insertions(+), 7 deletions(-) diff --git a/lua/gmod_integration/server/sv_players.lua b/lua/gmod_integration/server/sv_players.lua index 3c51d90..23dd365 100644 --- a/lua/gmod_integration/server/sv_players.lua +++ b/lua/gmod_integration/server/sv_players.lua @@ -4,7 +4,7 @@ function gmInte.playerReady(ply) ply.gmIntTimeConnect = math.Round(RealTime()) // Send Public Config gmInte.publicGetConfig(ply) - gmInte.http.post("/servers/:serverID/players/" .. ply:SteamID64() .. "/ready", { + gmInte.http.postLog("/servers/:serverID/players/" .. ply:SteamID64() .. "/ready", { ["player"] = gmInte.getPlayerFormat(ply) }) end @@ -23,7 +23,7 @@ end function gmInte.playerSpawn(ply) if !ply:IsValid() || !ply:IsPlayer(ply) then return end - gmInte.http.post("/servers/:serverID/players/" .. ply:SteamID64() .. "/spawn", { + gmInte.http.postLog("/servers/:serverID/players/" .. ply:SteamID64() .. "/spawn", { ["player"] = gmInte.getPlayerFormat(ply) }) end @@ -32,7 +32,7 @@ function gmInte.playerDeath(ply, inflictor, attacker) if !ply:IsValid() || !ply:IsPlayer(ply) then return end if !attacker:IsValid() || !attacker:IsPlayer(attacker) then return end if !inflictor:IsValid() then return end - gmInte.http.post("/servers/:serverID/players/" .. ply:SteamID64() .. "/death", { + gmInte.http.postLog("/servers/:serverID/players/" .. ply:SteamID64() .. "/death", { ["player"] = gmInte.getPlayerFormat(ply), ["inflictor"] = gmInte.getEntityFormat(inflictor), ["attacker"] = gmInte.getPlayerFormat(attacker) @@ -41,7 +41,7 @@ end function gmInte.playerInitialSpawn(ply) if !ply:IsValid() || !ply:IsPlayer(ply) then return end - gmInte.http.post("/servers/:serverID/players/" .. ply:SteamID64() .. "/initial-spawn", { + gmInte.http.postLog("/servers/:serverID/players/" .. ply:SteamID64() .. "/initial-spawn", { ["player"] = gmInte.getPlayerFormat(ply) }) end @@ -60,7 +60,7 @@ function gmInte.postLogPlayerHurt(ply, attacker, healthRemaining, damageTaken) return end - gmInte.http.post("/servers/:serverID/players/" .. ply:SteamID64() .. "/hurt", { + gmInte.http.postLog("/servers/:serverID/players/" .. ply:SteamID64() .. "/hurt", { ["victim"] = gmInte.getPlayerFormat(ply), ["attacker"] = gmInte.getPlayerFormat(attacker), ["healthRemaining"] = math.Round(healthRemaining), @@ -72,7 +72,7 @@ end function gmInte.postLogPlayerSpawnedSomething(object, ply, ent, model) if !ply:IsValid() || !ply:IsPlayer(ply) then return end if !ent:IsValid() then return end - gmInte.http.post("/servers/:serverID/players/" .. ply:SteamID64() .. "/spawn/" .. object, { + gmInte.http.postLog("/servers/:serverID/players/" .. ply:SteamID64() .. "/spawn/" .. object, { ["player"] = gmInte.getPlayerFormat(ply), ["entity"] = gmInte.getEntityFormat(ent), ["model"] = model || "" @@ -81,7 +81,7 @@ end function gmInte.postLogPlayerGive(ply, class, swep) if !ply:IsValid() || !ply:IsPlayer(ply) then return end - gmInte.http.post("/servers/:serverID/players/" .. ply:SteamID64() .. "/give", { + gmInte.http.postLog("/servers/:serverID/players/" .. ply:SteamID64() .. "/give", { ["player"] = gmInte.getPlayerFormat(ply), ["class"] = class, ["swep"] = swep diff --git a/lua/gmod_integration/shared/sh_http.lua b/lua/gmod_integration/shared/sh_http.lua index b44ca3d..bb9b87c 100644 --- a/lua/gmod_integration/shared/sh_http.lua +++ b/lua/gmod_integration/shared/sh_http.lua @@ -12,6 +12,7 @@ local function showableBody(endpoint) return true end +local requestIndicator = {} function gmInte.http.requestAPI(params) local body = params.body && util.TableToJSON(params.body || {}) || "" local bodyLength = string.len(body) @@ -23,6 +24,8 @@ function gmInte.http.requestAPI(params) local version = gmInte.version || "Unknown" local showableBody = showableBody(params.endpoint) local localRequestID = util.CRC(tostring(SysTime())) + requestIndicator[CurTime()] = requestIndicator[CurTime()] + 1 || 1 + timer.Simple(10, function() requestIndicator[CurTime()] = requestIndicator[CurTime()] - 1 end) if token == "" then return failed(401, { ["error"] = "No token provided" @@ -91,6 +94,35 @@ function gmInte.http.post(endpoint, data, onSuccess, onFailed) }) end +local nextLogPacket = {} +function gmInte.http.postLog(endpoint, data) + if requestIndicator[CurTime()] > 20 then + local logPacketIndex = #nextLogPacket + 1 + table.insert(nextLogPacket, { + ["endpoint"] = endpoint, + ["data"] = data + }) + + timer.Simple(3, function() + if #nextLogPacket == logPacketIndex then + gmInte.http.requestAPI({ + ["endpoint"] = "/servers/:serverID/logs", + ["method"] = "POST", + ["body"] = nextLogPacket + }) + + nextLogPacket = {} + end + end) + else + gmInte.http.requestAPI({ + ["endpoint"] = endpoint, + ["method"] = "POST", + ["body"] = data + }) + end +end + function gmInte.http.put(endpoint, data, onSuccess, onFailed) gmInte.http.requestAPI({ ["endpoint"] = endpoint,